From efc68436a72d72fa33c98b7f73512242aac88c68 Mon Sep 17 00:00:00 2001 From: Kum1ta Date: Thu, 22 Aug 2024 19:36:32 +0200 Subject: [PATCH] Game - Updating home page --- site/interface/site/home3D/home3D.js | 93 + site/interface/site/index.html | 1 - site/interface/site/main.js | 19 +- site/interface/site/modeles/tv.glb | Bin 0 -> 47416 bytes .../site/node_modules/.package-lock.json | 58 + .../node_modules/.vite/deps/_metadata.json | 31 +- .../node_modules/.vite/deps/chunk-33KXLYU5.js | 31142 ++++ .../.vite/deps/chunk-33KXLYU5.js.map | 7 + .../node_modules/.vite/deps/chunk-LBH6F3OL.js | 3334 + .../.vite/deps/chunk-LBH6F3OL.js.map | 7 + .../site/node_modules/.vite/deps/three.js | 31111 +--- .../site/node_modules/.vite/deps/three.js.map | 8 +- .../three_addons_loaders_GLTFLoader__js.js | 8 + ...three_addons_loaders_GLTFLoader__js.js.map | 7 + .../deps/three_examples_jsm_Addons__js.js | 117702 +++++++++++++++ .../deps/three_examples_jsm_Addons__js.js.map | 7 + .../.vite/deps_temp_94b4cdeb/package.json | 3 - .../.vite/deps_temp_9dff8dc6/package.json | 3 - .../.vite/deps_temp_c0cfbc28/package.json | 3 - .../.vite/deps_temp_ca209d11/package.json | 3 - .../@esbuild/darwin-arm64/README.md | 3 + .../@esbuild/darwin-arm64/bin/esbuild | Bin 0 -> 9859426 bytes .../@esbuild/darwin-arm64/package.json | 20 + .../@rollup/rollup-darwin-arm64/README.md | 3 + .../@rollup/rollup-darwin-arm64/package.json | 19 + .../rollup.darwin-arm64.node | Bin 0 -> 2194360 bytes .../site/node_modules/fsevents/LICENSE | 22 + .../site/node_modules/fsevents/README.md | 89 + .../site/node_modules/fsevents/fsevents.d.ts | 46 + .../site/node_modules/fsevents/fsevents.js | 83 + .../site/node_modules/fsevents/fsevents.node | Bin 0 -> 163626 bytes .../site/node_modules/fsevents/package.json | 62 + .../@rollup/rollup-darwin-arm64/README.md | 3 + .../@rollup/rollup-darwin-arm64/package.json | 19 + .../rollup.darwin-arm64.node | Bin 0 -> 2260536 bytes site/interface/site/package-lock.json | 23 +- site/interface/site/package.json | 1 + site/real_game/blender/banner.blend | Bin 937236 -> 937452 bytes site/real_game/blender/banner.blend1 | Bin 0 -> 937236 bytes site/real_game/blender/exported/tv.glb | Bin 0 -> 60796 bytes site/real_game/blender/tv.blend | Bin 0 -> 1018840 bytes site/real_game/blender/tv.blend1 | Bin 0 -> 1023420 bytes 42 files changed, 153199 insertions(+), 30741 deletions(-) create mode 100644 site/interface/site/home3D/home3D.js create mode 100644 site/interface/site/modeles/tv.glb create mode 100644 site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js create mode 100644 site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js.map create mode 100644 site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js create mode 100644 site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js.map create mode 100644 site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js create mode 100644 site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map create mode 100644 site/interface/site/node_modules/.vite/deps/three_examples_jsm_Addons__js.js create mode 100644 site/interface/site/node_modules/.vite/deps/three_examples_jsm_Addons__js.js.map delete mode 100644 site/interface/site/node_modules/.vite/deps_temp_94b4cdeb/package.json delete mode 100644 site/interface/site/node_modules/.vite/deps_temp_9dff8dc6/package.json delete mode 100644 site/interface/site/node_modules/.vite/deps_temp_c0cfbc28/package.json delete mode 100644 site/interface/site/node_modules/.vite/deps_temp_ca209d11/package.json create mode 100644 site/interface/site/node_modules/@esbuild/darwin-arm64/README.md create mode 100755 site/interface/site/node_modules/@esbuild/darwin-arm64/bin/esbuild create mode 100644 site/interface/site/node_modules/@esbuild/darwin-arm64/package.json create mode 100644 site/interface/site/node_modules/@rollup/rollup-darwin-arm64/README.md create mode 100644 site/interface/site/node_modules/@rollup/rollup-darwin-arm64/package.json create mode 100644 site/interface/site/node_modules/@rollup/rollup-darwin-arm64/rollup.darwin-arm64.node create mode 100644 site/interface/site/node_modules/fsevents/LICENSE create mode 100644 site/interface/site/node_modules/fsevents/README.md create mode 100644 site/interface/site/node_modules/fsevents/fsevents.d.ts create mode 100644 site/interface/site/node_modules/fsevents/fsevents.js create mode 100755 site/interface/site/node_modules/fsevents/fsevents.node create mode 100644 site/interface/site/node_modules/fsevents/package.json create mode 100644 site/interface/site/node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64/README.md create mode 100644 site/interface/site/node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64/package.json create mode 100644 site/interface/site/node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64/rollup.darwin-arm64.node create mode 100644 site/real_game/blender/banner.blend1 create mode 100644 site/real_game/blender/exported/tv.glb create mode 100644 site/real_game/blender/tv.blend create mode 100644 site/real_game/blender/tv.blend1 diff --git a/site/interface/site/home3D/home3D.js b/site/interface/site/home3D/home3D.js new file mode 100644 index 0000000..5b911f8 --- /dev/null +++ b/site/interface/site/home3D/home3D.js @@ -0,0 +1,93 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* home3D.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar { + const tv = gltf.scene.children[0]; + console.log(tv); + tv.position.set(0, 0.68, 0); + tv.material = new THREE.MeshPhysicalMaterial({color: 0x222222}); + tv.scale.set(0.1, 0.08, 0.12); + tv.castShadow = true; + tv.receiveShadow = true; + scene.add(tv); + }, undefined, function ( error ) { + console.error( error ); + } ); + + renderer.setAnimationLoop(loop) +} + +function createPlane() +{ + const geometry = new THREE.PlaneGeometry(20, 20); + const material = new THREE.MeshPhysicalMaterial({side: THREE.DoubleSide, color: 0xffffff}); + const mesh = new THREE.Mesh(geometry, material); + + mesh.position.set(0, 0, 0); + mesh.rotateX(-(Math.PI / 2)); + mesh.receiveShadow = true; + scene.add(mesh); +} + +function createBox() +{ + const geometry = new THREE.BoxGeometry(1, 1, 1); + const material = new THREE.MeshPhysicalMaterial({color: 0xffffff}); + const mesh = new THREE.Mesh(geometry, material); + + mesh.position.set(-3, 0.5, -3); + mesh.receiveShadow = true; + scene.add(mesh); +} + + +function loop() +{ + controls.update(); + renderer.render(scene, camera); +} + +export { home3D }; \ No newline at end of file diff --git a/site/interface/site/index.html b/site/interface/site/index.html index c5eb426..6ce8e34 100644 --- a/site/interface/site/index.html +++ b/site/interface/site/index.html @@ -40,7 +40,6 @@
-

THREEJS

diff --git a/site/interface/site/main.js b/site/interface/site/main.js index ce180b5..7700c2d 100644 --- a/site/interface/site/main.js +++ b/site/interface/site/main.js @@ -3,33 +3,30 @@ /* ::: :::::::: */ /* main.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: madegryc +#+ +:+ +#+ */ +/* By: edbernar { const scrollPosition = window.scrollY; - const rotationAngle = scrollPosition * 0.1; // Ajustez ce facteur pour contrôler l'angle de rotation + const rotationAngle = scrollPosition * 0.1; const parallaxElement = document.querySelector('#firstBall'); const parallaxElement2 = document.querySelector('#secondBall'); - const parallaxSpeed = scrollPosition * -0.17; // Ajustez ce facteur pour ralentir le défilement + const parallaxSpeed = scrollPosition * -0.17; - // Appliquer la rotation en fonction de la position de défilement parallaxElement.style.transform = `translateX(-50%) translateY(${-parallaxSpeed}px) rotate(${rotationAngle}deg)`; parallaxElement2.style.transform = `translateX(50%) translateY(${-parallaxSpeed}px) rotate(${rotationAngle}deg)`; - - // Ajuster la position de l'arrière-plan pour l'effet de parallaxe - // parallaxElement.style.backgroundPositionY = `${parallaxSpeed}px`; }); document.addEventListener('DOMContentLoaded', () => { liveChat(); login(); + home3D(); }); diff --git a/site/interface/site/modeles/tv.glb b/site/interface/site/modeles/tv.glb new file mode 100644 index 0000000000000000000000000000000000000000..0bf343a3668b5fde61be1fc4d41f3287c0978925 GIT binary patch literal 47416 zcmb5$bwCwM_%ME?R8&F{5EYS7q@?rg&dfnkQ9?vYB%~1m0a5aBP3&$&Ou|A`1U$R5 z3#iywnAZRU3%l#Lc)j;K=Y4;?ukZbb55qIhJTp6I3%s$3e(v&ea&k^Ja&mUca&jIM zyuGpwBGS^L(+ym*4Pv8{qEjQ%lT!^`493Q#CMPAQ>BkCP^u>wMNm0?M`eTNB>u1KD_p9sgc(=^N_>M6xt*mT?u~L)MBhr5jHp$A;(aP4!!N%I! z(aPD`(ZR;t%F@ct(bmD)$-&Cn+Qz}b(aOor+@hn^-p<&!S2_pOp8d5PK}R9{AU59l4ndwjGho56&+>ZlAbyvT3EJ!*3|QNoUlgL z!WyMaN%f3Qk4Q|6kMvER5gV5johD@HSla)k(Jy*d`ixXz%Gm}TYdlL>cj4%z{@cer zBJ$TBu(Gtz?KnsshvwHY`|n^92gj~s;MDkO@#*myzk?#u(^KQ8%t-I}Hrv3*d%_sM zG2ULk4z8ECuO}L3;9_lV;5RbR&D+~|M3|LnJpST14#c8m7#MiHT12kB^>d;9@5vjGq?mmzmPB z5q|{@Pf3au3je*1V>@6LwogD1#9Bggug^lK5ZtG-e?__6ZBWzoHYbSeqdvga%CkNqM zYbRk(I67L{TX(E;yzp6?WMOS%X>0B5Y-3|*=V&8rVdsvm?EKGvc2>5|_O|x+Hs%(# zwwCrb_Ey$5&JMz-z{*ibkp9mM{YSdl3LnR81G0W$#sBa1|DO`r{J$lz`QIuKj_dzk z!LP<&D`@LvE3Dw}3MROrame@AA^D$4kO$@0!Jm?u9z8BPDK=d=b6DHiSUH&+bToO# z#QZv;35P5_A~m+-+-7U%>>zBif0yJ>djC%Nrx~1ugC#q>jgy_VutEMbfun=N|5CrL zqmz@+L?*EPKg_|#PFPHG{&vDfbLiOBzdtblte>#g-QyF56O4h2vv5lLwe9|E5Kc@T z9sXJK-|I~*vYow?RmUf?tx`@-JjP3|Tl6N^LsO_7m|Qyt=dwQJ6g zJ2vfi%zzXFKzeS}KY0fCivc$b4RA-Eju_H^pN;<2eox4A^LNZJVJy<=3Ww-Qq3^!F z{`mH~DIyPQ9-GiO1z%S%0AmGzHykYER}uc8BmP-JB|EY-@>h&sv8nXm_REd?>3{ov zIo}_UPWwGp@d!UqB8=6MKQ3)D@Uq&^cH}G)+6TYX#U1S(eMyIWnt(fEE(-aVtq%DW zGglb*-}dK1J^#jc)J)p*cmBP?99w<$aKOu%c=0;DPCfo(*sqwzg0>pcvqyx3j=pkp z+GRxXAEF03bGL9^myZ0`<-!4JF7luDuP))3^uJ>z2su0RjL?I0 zjp|>lwTTa&qcR?J_`=2m?A+hpeQ_t9{yV0Bg9lLPwS(=5>F}xhV{nIe2r>VpR;_X+X@q!;~ecUbL- zNw?1~r#s^9g?7^Tcm7RZ%V^U7*0VuqC;j4go{n)z)0=i6#cruc&+a+@@JbH4@I3=n z{CLJIZX1Z$ftjfK(lg$dI|?_1r6J$H1=FX1$LLt(-{U!tgEja|XRML5%L_iv<~et- zUoFjTF{j;+O@MNJdeAHClz{1vR_N2J3FH>`0Gqd2p$*wv05_qBkfQ*F-*tfcli$*- z_EezdPYYna_zFEg;U{O{z7>`)Im~tDO$$DAjc;~CdDp{SXD%rG#4S6$74C1^!~KaJ zD&+X#EgaOF_=5ivpWpI@+c~Tbj{EB+|0mAR{mR`~)(8*77yO^ND0mN&w)aB$`3Jeq z{Hd%A$&KxWj$bI{{=~M)Wk~<7I?{1D$aQ9|zspexqleU2J?H<#dtR3!mHmTJM*egD zPrQCu8JeE0hkEku{GWJ-CFD;YP((vU)xtlq!ePk2@$QDqZyto5IVj(am%F8al;2mt z&Wy&0`6U^KsBE@EU1vUi4)NV7eH61pvF=YCt2dJO>puuF%M|K5^Bl^WZ(Fwo#Eh$e ze`5P`J3h{L3usg+ft~r-c`F`@Bp~0r1a{^L=WX~ap02RpU8TA|@!KF9KIfb%d~#K> zt}~x>aNxOh&M>x7v92@g?X5=+?0D2og@u3O^U=qV=lStStNt+T%qcVLkRTSzv^NDp0XuIk(^i@-#t}`nqpFvsuYN2wU zJ+L$9H=RXU?)5P6Mmg-vfktQ0qNO}+QacR)#4z|Y5}*GF_s1yJ{fV7a&LYHof@{4L z>pF8|$!X-j;U%0gS+TA&k9`UGSB^cA+)O`;^vq*!{3YBK$+ekKqyt{N@oFAD(5PNT z9O;=xi2qrohGyQ|%#mj1Bi_P73*B5E#*;qeJAzlQ)IghNgz==;UqXDiS${OEe<@G; zWYGw|`H&W}bSmXZ4^t8IU9ae&z^NB`(o>s9@a>azh529PNx%O(f}h>)jOfOgf-|(cVID5Wg?ErY&_zh3`K&ch4f8!=7N^9mxo6WQ1 zXKnrjjHWd6r2A|f&abFj2tdXjp7h0ZTiz$41dNW{!;@BfW6A4l>45dI(L8DDoDHu( zbONxR5Y3amXf&LcQ)#D{Z7bnOPycGezv^NIZXMgrk?tk6<+)J_KrUx=}-61poK9N5E`AP zNf*}Cp}f!}lo?JdUHNz=>$ZSrb4yc)$Uq zbY}xpZa4->>((AXA@wVvinJ1v?$K=l$}bIozLV=9>2rgQVpY??QdYCBSm=X-Ila`aP(AG!!ga#zWGe=UA9O(G-~G zo`R&^mwG{N<1JdRkb|Vh%f4JGoEQSVWgAZgL)6lBE*qRPxmko2$>$>>hc z5TyR?6eRtw>jqRcHW-;S*F(~`cW*$dtNc;5{#i&m#&{>HtWH6UmSP?0xgU0*^!sVT z=U2Xtbhu_7l0Ke+lD;a`k)Aay7tI)yiPUb%*O3-g4MMA4&q7^W73xS|8mf<)gK|(n zoqQeX9)=j&Jx)c_o+#9jHpo5-m+YQ_9-NY|BkeLt2~LoUM?bzO)RFeKG(YF^3ub~3A$xezMUUTc`A-gmkgd%; z=|@-FIek$h=solbPkOHJK@@wa94g+v%9GY#Z~*Bx?t=+2mwD3TDuZGE%{D4^_92dR z&caDBUscK!=3l|xO?wD(N%WQJn1DfUvuH{>*?nq(LCwG;{7OK`dpY8b%6U5hk8^XYT@;aQC`?oWI#xB@lnEryj3B6!lZwNE(pCyKD(@hiSF$1HxuwOJ}atJ-${ zPpo(O1Lt%7BT!d=%Xj8i-73(+@tdG}Kp9Uu;m$!MKC>43hm`T84?UU+uW!5ys$$;q zq?frQz@}^OK&|C#p7j15@8P%zRaocqmM8tejc+YS@zrbL=-ID$(%a+rp}WyiSTXDs|0hV`TTUaf1n^V7_s#TzYg!^m}99Gr{gzG#YFO4o5Q(ifb#r;50%$|mmi5Fb=n*H;|- zyp*q;?2Tr8)e?L6DB!Dmc%eHYZSl8xUc3|bM9K%W#I#;7e)RldNJUdyoL5)MpGr1C zk&Qayxa$je_TW(T#JHdMk**itP&pJ`$kh=~JKU2`Sl9&TZr2unFD~ULUp)uYPxljZ z`xfvzSI@#Ue_b)nc=Gwf&cT@Ce&V!%p8UnRHZZWfuXs~UDPKLn0*=01Nli~)IsY?v+pD`ceq9;gw&W8h=dB`+t}fvHNw10z^ zcyIVKykw6NvMkdSI~|-2mTogdP8PkzM#r;Z-NHurTBtd2c^lT-*#Ixa_7%5vod8Cs-eT_cELbwi5{^FISA1RZDQ*(kz?>a@#MevafCu9o;l~f^;{0*5V6~Dj9{;qD z*e>T8F4gLTpWoCF-$S#(tBkEIH&RV(zI`SXop0ePvb&2%w|~SR`d#C~eY%P7jZOkN z-OqAzXOzW$I2Eog=*9PVASZTucfM0k%T(cY)Vqk^?6?d&^Gm}Xyy$2bagOE%*qJ9z zb>`0xRS>uDIK_A7_~Fic)Dn5IiSik~Go$6Md`qCb*yi#n{!hGecp8e@&`TVZd=Yl$ zM8y=eN~9{DHUA>)%xw1*^l5o7@omj!*qIy4SDW6)dd=XRR! z%y|yWQH8X(*y4U8-}Tcf)GzQ>W4FYwzs#q>F-lK>A{o}Yzpin z)|%7ElMa06i$f2qi_<@x;z{Sb1>v3H8sf^$jXY_el<%B=|88Qq{xnZo&g~nwsX;i; zIG*B3Z=NLL8y*Vhhp(zUY2z>#{%nK1c->|-p7gF_5nrSvFIGO{!;`+T--VBFlNUc# z8qbrSyj;Z3Gm;m7q89R`nRPCFkdlIU16s(Fo~|h3dx_=6E@tIC>G7|ec`Y3Uu}`mZ zo^;}|6==#g4RP?UGM@D2vCC0iWpD9lk20RL>dh6X_@Rc_zNUaDot3g2y)6+w%XtMn z>6_dNqE417AHBlz~*ZpQlx9OpbgFl$?WsSp-&ecc!+~O*<{YVHZC@!6-QLFIX+EMxT-c(bM5`WbFD$jei^IfaG64-~&Ia^EkvBB^-Us zr@mI>yMDGs=chlE@nUav{{CPa)I8%6pK8+xOovQB>cQ18q4Yd>Xyt`|$lyO2TW1Rw1K5n@gI&XTBpV@55XFD0A5YLPJJS8)J|7#PJ<9v}< z+Gx)2-Z}*7yUSXw*pv^aEs)gk0Z*EFWyvcm4n@0{J>-Y#nep+$`6w#mL8q2fn)A(} zCdlRM1D^EKNv3>T(@^wvO$qbO3sK>lh?G_jE7hUOxq?461?r zR#mj%>|}Juxeji!RYmuL!%>xWExa>Z6)7$ZMMD-dGIsYrgi;klkY-*5G#^`q>^}G- zlLd#NuF_#tToi;h+^LZ95Zxo_Q9}T#4y=Tv#ZQl*`+ZW;cCRLW*2QYn)O#9|pVq|R z%dJ9(_a&q4Ax(VS(xd3y^=XKUm38IqBPhQv4P}gOA1Abge6*8YP z9i?t+?bHVON71SE$*6AN1D>??=V|DNX9UupT@BNnlacfI5cJ8Jhx^wgp|D$_sC;z| z?AJFLd3TwNhCG+bIA5a*{g^J)aIb`K|4@x8bK;TQ_Y&S^XBFD0k%&e=FX4+09Yyje z0bTka>%ChJqaljv2+nxGlYXaKg^J>nQHJO-@ALC88oqBjn)TsmfVBYl6QM6Yz8a+BG>xzNv(esKh^i8E2 z&V8^RRa6F}n<*U3&RvgIJ5EN8{cE6n(|YtZU=k`!lgfDQI743AO&k4)KL9)P!X-ob zjP2@3bI)O@`o)kRI$0C-{BS_VBMXfAe5KxKO3Oh=TA9}8`+m?y4*G{-XMVp{pEsY< z7g<>yft`7{%V1vKyAK*MuNqdQRUxN4Q_!6CYq>>%HR#2Y$>=6r#|=?Fil*g;qdm22 zIiJ4O$Yx(C+WAS=qYhc{zKv=Kx=Em0>@Z&0R11YPWSK4w%C(0mb#t^_~igS(vv&ixZm!+=&9zuS2M>`jY9PX|2U=bRkIZ}1#|#+})~ zP1CgG-~Q~2)=M{VLq?eL7Z3GA6`MA21FxC!!=ts4=UQ3!+f)Tr+-4%D$u0cCOGlx> ziBy!O^N`=`bQDTorK9~fTV&jQ&rxVME)5mmY~@!rRlyzZGm)jx_e{5Hc=S{%N)h_L zOgajE-le0RLSNEO_m9FxZ{hv0(6_KGxoip^^c2vJne zqj1st9-Ns2jidvs;pu{&+E!B#GgRF$7`PS=r#{-bWb&Leoh`}i%#KG7mY&&^PlrOn_aom#-3tx{|tCfdj=<; zqb`1=QpR7=$>45My~WOh3V21g3@-JZs@S5gu~R30O5}8=jz@}(t^5_6nVjn=Rq+YE z)1CTkcp|5-;*C5;J>W^-K9b0t^zcOCV;=IanrCn)gy$58-Cq2ad(*h5JI5itg^&2Q z1;Jd8OX}j%SM7KWpTcPg?@!uYdhtcZ3S8i|p>U|8avkY!_rf@>Q{zxCkzyU`y1R0m zdd)L1#q}*u`oY{OTt8JGl-6INj`X;0_FOYo5jQ=!2uVLLw&QxLsfeG4Hbc?|yLxa1 zz9RHy#xY1bB{Gg%T&W>WFIvx?@RR4@4hb#yw1QsqS%H%a?{QZ3`e`ZlQlUWsWnTt^?8 z5R5`b?*v1`meQpT3qjM<7Pffdd^+*|5l(cdh_>$K1yc%2xdH=u_J*Pld}CP3If-`D z5$EDzOaDqv?)F|+|0&)w_8n2dsk7^-8P7stXI_$8%H^Mvi0-#cfuuKGImnIB+)W!v zA|UB^lB1j)cl+2iZ^&ugE#tUby_iOyNnG!Knh~qxiNDnQZAmfln z2RXkH3t2DZ&2?sZ`Esr;zKr$E^5saMtvJNp6K`cFjRG9$^5U&%{PK7>%ft`HP=)CE zzDRhlC>i#qx1cr8N5PzH6JfWFMMys}4(^{DE90j}iqH?8Kse)Z6zt6Cc_H%J;{*94 zagcO|*H*ObydUfyH4&0_jpIn`^(y05 zY}?GPn+a%x@=ETNpCv2pOUbw`r;2;^U4aV|gqL*5vzzLa?P`t?+a8kvQ+o?MVX${!{?(!Zoe$X`-eeiAs!;2x@wwy-%1 zJZ1du#~e`1_F=yV_;dcZ4s!`g7r~oRW8nP$CEUQ)O91zbhBwbvaNyP@FydH4nGnE@3GhYvk33-Nk3{$`CLee_TL&&&3gUts#HdLD0=dQ=((I@a zXv4|j0IKClrT$!@4;g&rt)bq9Cmdm=Z~HmyJKYrBR?XMPu>Zu({*^VU5~dYStg z^suQfe6`G-I+L*m$?sBwueuCjPFt--8D82jTua1!h+Tt@tq_dx`K@~r>pqzG@h_pl88uX-04bI>C829jAi`Wwy@O#NE z++*z;GbleR!lmj4?=Rg=7M594W{3HF)F)L0P-(Qqv(xD_`TbFpnvO|h;+P>8;Tj6 z3F4z4;n&^>>6@hi;Byl%zlo4jOgiwo+9G4!BdgJL0}~kT*Ol_$Dy)C;F!;(Ro9P<7 z28qTGgK`VXT}iKF)*ufZBY0`s-?*-MweWko!7zB^6MP_R4SE!42yOKq$@sjI2mI_J z+<-rb#jg*hLirJjSgXoV#+#4+1!o`n!G@~zs|`s`g`+1c;<_&efb`CiG4N=pI(|1W z2K@C^AMT$x0FQn-SjHk+9kzqP*ndRRF)ey9j1vvO%XlM9+E_Up*7M!*my;85qW5U1 z=vl}-Wv5`}S1 zE9hx+li`XuIi@yf03ZzxghAZW9XG7>1M2Ta!SpFx7~h=9z_Y{_KD(xc&Aa%4j68i9 z0=_UV{{3YfFe~k2e`Y$LIIbr3a16@h4 z1F0~h3x&Nj^l)cZ{%in4C;4Ia?}4B*7bkf@9*@S&3gLkCw^JUl&z8|R#xWer_{Vhk zwI7A)`+DG8C-%;n3}1!XGM}z{0bfd$5w!d38w0bd6nqaq^US={GZkS}x zobEjqEULDF4eMAYX@LjmbwLw;m?h87U%i87Uu!~-5%O%-wF-7@Pg|I>fnj{3d~k7^ zHq<>9falcgVM!NMd%!@c4<0=dIqiF#3s7Q<m{?lZbJ{ zHcvqMdG*C=v+iC@_k9xl{*WCQqn^qLUu8Uhiv%>y2xo+U_AO`hw;f0-G+-)Q?EvYH zpM7ntm40lOfJ`}i`~ycyg|9MJelNj;pRJX4#KLEG*fXXZ)A5z`tPS+0En6B6KDY)09o8Xdtl{}Kz%f`1EkBY)YBKrzDSE>6G2apfv%=&Hcr8{5N(<^NxSo(b%b?@1;+Kkjh{CD7Ksr~hOwyK{U z{xoAYHQ&}AlfHYVo_*NeoY5GUh=E3vwCbwl*Vh6CI~@B`iIqOF!K9z1_F)zXF&*os zI4TdH8uEf!+4ZxFtx6xN?st2tVlHsI-k&v6{_G;;6#biXbd?RTMEdOJzilw-{Vh$> z2%)d=RW$6AEgn4N0duX%7Le{3uVY+cd@A$0;ju1LJ}^y&d7z`cV_ac;h8Efzfj0Ze zDz{?}|Bfpv;cY-xPEU6FEn7f(PFe%qyVQs(uuR0x?unplye@UZpn*LwD-nDH?i5^6 zN58qyKnH~_pdxFgf+t0FY*fZh>PqWWaQygG9KWiJig;Q_e=41db@r^L2CQsgT_)GD zW>-Tgk7-C6UM1I0TAs{Q}=qdCRvr8`!2p?j9+;=#*F#G(T4j5u%~aw z|LXrczbK_K9^__gvPz%pXreaJfUgPo{;O7|i&8yJS*tSG`p8+pU+tu5 z)$t!HCY_}*8f;W6r0VAC0kQ_6udC3P5&8o4=4R?bh!+mf z=?jJ^+JK1UUU-AoGn(v6#*j6WW05{LRR?E+5xC#T3|7d4g&G*4hK_Z>!aA_RIvgYC zNY3SaW;eWIfH}UJt$@kCWIR~|Io1s`9gJH?V~gjuH0jb2qp-fB65HT9uwxzmtD&=b z4HNQQZyAl(D%sJbJ6pGYx4PoH?GD&@@)MdI>$S&P=2q7LrrXCnu>SB`7Cx~94_+Dp zTs8uiUA{xli+n}v+#ZV`EmLMs7;DSKgo5pCh;J$=3z$Lut>}+G9F+stKZnc2JI(gT ze^2QGz*}FMoR{^wzu1HOM*?S?zS!#F4tBD)kf*mX^)YS&rjB(7Nop4C%~1o7U43Om zZLgDHGM-vR%F%*s+Y3G;;IIX5TxH8FtCC4S_tN5aY*|5S5 zZ( zCDLG;oXf?UUQFaCdpz~JEuQecA1*ZPhp(^hDpNlh6Z&*6Gh|jaKKs;`9W>n>_m;E5 zt&bP6%V(M436+)@{=HUa9mv{FUEe{O|LDpb=q>@eXX>dJD-if8H3m(t`e5W@JrH&9 z4IRCE9I)N8oeE3S0SO`t;I-BcBz_2xX%}+-cYYA9&!7ynB|v$^bc)Qm_^~Guxeva5P#ZklW&tis?yz4+jsk0&6zL11fp|!y>9GsK@!cdGUow6y zh@);sN&x>^pOQQ=0lBrVV8*MVY~MB$@TA%mWEz^t<(AMJ5Vp#eC$`~ZFa zM>2joFr6Cmw?9~Q?*}^?hsn%KeStq%8vlb0c@opHKmVH}xo%|6+pomH@WKPuC*qY% z9z04ydmEVH#o@O2_81Cu+kA~p%~Hml&6jLHn=k=1!%ysp=+zy2^}ia(oNuq~rBTx~ z{A6K&HoMdh>~;IX&Pgp`@5yavsk~G$re-{qq!@(XZtDts7hMvO7IOY~J_+m+gjetG z3RHqFi^%rzr?;^o+fzaE(cu&sL$;GSNt1cWH;2G%#d6tLqOktMBIEPx*>$$tY_)H_;Jq z5bb5I3LYBci0$s}lZm&tKg4u-m5W<89b?K}tZ_GOC%o7!gGqO_#^W@caQN*^nfM|( zDKn)a4_`(Wj9ZEo{t)PlwQL_rebcP)n2FAK`;Im#Sr2d1z`Q(@hx?SoiE3^P#{*Sd zaKYOO*9&)t;$PgWP~r|(Wn!p}d* zv!~t$gRwdac*2iujJDtj8VcBD+YXudl^F-D=6VBKh!C*eM_%{^yJIQ zxP4?G_5QD5kkm&BUmvbcX)}q`q#y~vXH2P)?G|9iK38z;_Gi)UQ5L{xvzC>$Ma9rfUeM)D+ScFbzA{CsUKQ zjG%hW5!ba^Z)_BUac z>=$Zkbf9~WhPb@S01W71Plrr_xJK~(Q9<(k%E_wqjX}BCu17fa1-grl&T+$YU5vpsctL8_4>B#=C7{@A zw`kK$H$2JJ82sE#QMQ2+Tt!{i28Q^CSDuBfC2}0Fn7Saj@n{9GaJSt zE*npI=*mthX%meB4*24BTWoaI@R(tpHKi)_mGe@h&Is}I%5CvD9Z3B&&%vwq3}YRK z*Hc}K>@YrVi^+RbvOOb6neJ7bh0EDNtc#I0t#Z*CZv%ER`5XJ|(sA3Zal%MDd`9X; zzgRyLPw%J4PQM>WPh4by&pFxQlT%EO4HoKA5$bu7KasY>7C6k^4rk0=Nt;lq`1=4o z*7sfpt+~?-R~Osj4?_GbVeY;{Jbax_M{;IZslpa78n>H9FOu+@69ZTsg;?gm;~<7{ zk${iYOWA}|_F#-~f8yAE2|NCiJy`U>81&y$$kInrLG`kO)PgT(q!q$3TCzg|sOetp zOySxyFS-IZhaq6!x>R;@%q%cEYn04>NP5=7RELcMLsa!Z_qVN#3mgU7 zhwFjibGx$|f8~OR#oE+F_xqxm0Vd4l0}`4w9^OD9RSRdmdM7PeC;_=K6De|! zU70FnYQB1cY;!IA&h8GQyI~wS5U7oh`zo=|lXF3xOPEalbU!C{hRbN+Tcv|ZyMK*m z@86sSN*@PN`&VVL;iV%%tC1GwJ{7Sy2Bv{KD~D0!=V;O4Y<5}MNT8&og}(+ppfWzV z?UjMAM@+J<-hA%m&N<(pD9WB zojj@rH#IX#Zq} z*NfbxWQ>l|Dkfr-1fRRZiaLuY-zSjQsYRO_+?TTnRR=#*adVMJRGlw@{GK_ zl<^ntwfd%*GvlC`?taJ=$4H!H=3DN4idi#172C-b%De|4+Y45z;?}joyZ4~^Qu2A9 zTu(Cp$&tHgC)-r~;PDMnXL;@(>5g}93BV6GsLLD|VLktQ@8S8rhLXA_;l9g`$h_;= zlQx(3=VxGfe2cPfa|GL&;n+L+5ktNYA=m2Ei60abKOL8M5&k}dh}ZB-WF}wB#?yOS zvfNb#ym?D7UNm`wOg;5;56}uzlko+3gwbzNz>$T)xXXZbOzjSes7bP*Dct^@xmrY4wOYCdA|^D1$BK7If4I zf4tdR30SW1rY|j-iEDKASTg?ToZ<8lGk?6?MhQ$%Os5BZ8js%@DS>NoE9o$liZlAl z#@oF~rw2b8j}?X}$<%o*bRK=?yEh&-UkSj!j@CX}oQHFs+@Q$!BxKAcTuL{TCSl(b zIxHC<*Q9_qObx)V;m+R2>c{*hcq!ZFPPJr6CRq_e(IHzIR^!(VGDyRM(53g!~9 zXYvN>zVKf8jeagzTDqF5jSFR69Wnvzv6|Y|aGSLVjRE5W=TrQk-t@{FIY8Wd4%6ia zpf$a+L9ACV=6l?Ddi3fnu%nx~=+4No^!-y=VEx;7qJVE@RL!njFt7F|<5~TT+I%q= zT)dIVT$3o$sm;Pz7c@j(6$&)BH}}``_=2R73?<10DLs_g+GX0zBQ*)oY}>*NwUcA^ z-I0JkEhk;|$A6Rd-z8iRA6Zh8af z4J1o%iLAc5(0!L=f?e(kbeiH&dV*OdIO}dqU#^m)k!lv`Rc1|(G-##dUuT2l+FtZv zzY6Mnd=?OIM|AnSNmR937Fg@E&VzrqV47TsNLTUzVH5Ji0Rr zsQ!$nxj{;7y-_wuLw)ESjSB2Y`&mHZF_G4=RABS2XMk_3r_u8RC$N8=oeAux^`>_h zjAZq9%m7-0ed&IG*|JpF4B$F8hQ9dr277Z>G}!6)or*qskzJ?}18g(&X?}SF`$;<< zXj%=Vvp5kxY*s>VjnM|AtH0006Bk)gKSyNIuIB2l=5^MLu5fQWOIZ#N+KK7*wox*k z>Q>7-L?(jS_r6fKl{E1BEKQJoyDuO;rTa0qZA=oVR;8tL{BN)m$C!d$Xdq^i18~%6 z6=1Sja%{~TRc6URExNEzE*`!{8{fG7h`#mJRK|Z$Xh=Q$MbyrORj2d*b@ijf1j4ZMz;_qjriu(#sNnMS6hr z{T{SylJJZ$LRbg0H&!4$`w#Wk6 znn84*u9>c?eV@{OYjwcMn!A@UUKu zneMCs!ngT?IL|bueBUhaC}FBh{QIANqS;|8pe;B6xb^W7naolFlg9>t!xrk4F_i@l zefOi|Us<{83G-DJ=DV+XB=s;v6&#Kg-ji)~rDAJ(0h>F1VD_Xl)Y;Qn;PGl3T6!jl zn)V3+mzW`#bk4Sg$DSH%)61-L@n);Zl%WFvw@Ze}m_PiKvZ~Dm=esXr{I@lW9-guV zBlR3`ZTHW|me=>8Eq#Pzy}DB57iI%=7CYj9mAgJV50Lqit&q zvO*oPpWt|C4c3o$#9M3?*^%1W;N4$+S-0w?(ijVM8ph}1sOfFYCtq7o8fJ%+5*{-X z1+R{_!*xDRY{=Y9u={>j7T)$|iNKo{y`kG*=!tgjmtc(*V;QriP}frzuCZ^llS2v$4mNG}k%l$XMaL z^2(nMv|Qn8mf}VG3IBuIK{{)t8DE^im#4!)o^T!r(Q*at)t12A&Omfdh;ME7rx)n9 zxSFpBr=N0}plFYUsHnRu2tQ#7LbHuU2hTZyU4yK_-k=GhDj=Ls$^z(^ZQVszi~?w1 z$1Jc&#E8b6bOIBHSc9uVOxay;dRxgXa2|iBijSHBU}z82iX-Vk7QSGdaG$k1FPqjD zdC<-Mg_tW^^z3OSplg{Uc#xk!?`ib`5t&M0!~qGN=IjktpX&;W{?4aG>K63HL7Cuh zRejn(coq#lu^alj!JaJx8`Zg@8pub#Duez!Z5cI^uE+ekeVs+h*qRf;F_Ab2^@9>4Ll5vZs$$55vcOs#x|&5=gn8$z1&K zimklS2du3(#iXZvxW!&-4g{^@VpeC~RB&dclpgKaoo)=VrmL4`gM%>zRDB@=O2J0p z)-yS}J?arX&o>er4636@do7#KP+1FTWis^dJ>TSA(0*OC>^K{wWk+ce8d>F-=kj)jRI!^z1UCZ ze1J-`imYQLxKX^A+NUwc^+e`Pw!}RaEOa!Z7Vl2PcFOg%*Q`R(p0(CE(@NMYTf0-F zF9*8dn0j}5L68Z~vz6c;5!==G4TL;46H357=S~X-_g73XS1Do$nXI; zR(=df_qf53rsE}e%qiEPQdS6 zH;VM7F0rBv;l8T$buI`$Y6WJzD5NbKhk_4dcZ*C4r_kb!nPBtXQIz6ZOEBZ23sBG< z0JiTK0Oo#_lX2d45Bf+}5-`v$q)Bg9lZTT01lwj9+q^`i9Mb@r5BE6da*R z|MWgX|457ijc+H>q|XdY1skc|^v_wwB6HfFu0EO#@&;K^iB@BQ>Bj!x=;21uX6hrI z{V5E%p46d8`wcJw7ZiE=ox@NZXFVOb&DleLU2P-scQK?@YI8vI(Tml^ldQnZ!ImHu z<+Ghxy5l%)av%YC;Y$qZ9yfNl?tWK6X{ks+R`(;KtcBUYK$)T==Zq0aY@g9Kp^;z> zyH#{3F#vpXP?52mK`IzIWH-HNrM`&XW=A)$*`QgN*ZFQ^LFl>u;D`E2(W@OFXl=uA zusK|ZBK<>c7-&0LO=qn(!53=A*UZt`NEeMs$Gy&+rM5ZefvbaZnM*4R>2~4X3~x2X zqz|UK)9bq?fi-r;>;er17w4`^=rAe+>%K{+=IzY`0YRlqjc$=Bue~4Oa>ohJg#Tlm zo-}o_G6p;@yUnh!P6bsbchRdohl@ax9bM0518w0x_^|v~Fycyo;1hUSv?bvK?P(JZ zJcM^+q|JqE(vPYG)bO4XFm|K^CB7*`9Glig(; zm@*g-%+aJrTDk$!X)YP~XsI@Bxos+aZp#HWBr^`!D>hSa-nru=nQv%`=@puEaztNz zsmUEY)J>yF=ehVZEmrN+tF~OQ!bBf`pLv1Wq2w-O`?KYY^*29yLT)AqQvbs43s(a5 zwze{sPrShPj0*zpVf*L{!&AY})4S-#2ctwig|*5S){1*$MU5BM>eJ=^pwGFpq9MXs z-M0=0hvjrB($f3a+1KM^!KuGzQ(wpD;G^%KQ%eSZqk4pz;W3XzKzVS5j3+FM!RJ)2 z(LX;vpxOqf0^NSQ=~LC?MQepUHn=hy4Dv&iYr6-y{h~hzDLN-IbN@ikbPWe3Q*|lQ zs?icWv}G}MxW{MLOL8|^{T0}g5z zm_21}(#=U);QuS_z2j?G{{Qiroh8wuMGyojy67ZlXHE!0f*=SXq6SHbXwi~Yu6_wu zuLoCe(L-`}kKT!Tbw}^L_uq5R6}<1~@%`&(9J<(aqi)&Y=*m*x&SMhs1K52qB z#=DuQP&kM9J^mr8NBXWh6S?=Y!TK&=f2G=zBr$J@W<9>Vt?B$~H!*r>GyV6th2&RW zbm%FzEV-_&iov&oaTAq#Ra5-eV9dK<%)|GVQ_hcx)xU1s$6KseVDhb7O^=yWS2SCk zL-{@4Hn>kl&i1R75yg|m`1jehKVJ+L&lXqZp-V?uyJ`2h>zi)E2k&I(ysjW#6;<%f zfTaC#vA<}9?+CpAE@0jJXr*%IbCP&?t)Mpcqn&U2&{fR-K1S<-ecPwYyv4wmv$bqn z28fr{)+(1j*0%FU5#6tpoV#hV!-WWT2?SuA3@NS)@tfeMOr`LA-PPS}j(@W3Ma2 z+TyNN^9qO)w%`HQB0J1l-&Hk5$Lm$}-{ZXxE!N(4N)S^!ZMOQK8e-i!U>u(^ey|>V zWOv5I;`w<(`;q#g)@`+}*=mU^_bdHRyz@6NEyY?;aWV#E`JMiqBww4KTN`1+Oq=lzJ=n~@pP8MD4SyqrETrM|W4>@e%xPRZi=i4d#ys=gl7 z7w;U;&D5k9{X~2BhWyy(!x=Be;hAc8H)Z$n5bM@&_4VpeUgB-79DHH)NImx>vvPHG zKb|=wQQtZ}SULYD)%5qOWW7VX03{+hQO~`pkmlzW$a^elsYMhXptlPhz{m9r(ynxP zYwd`Au7mgYYYp=D)R*K5=aIeR^qwVFX%SWZdECcM+LKk|v<-)Qid_L)wE{~c^f_Z~ z{AHUSy8Y}lO=+6SH=L`h<%yZE^;p|ajOb<3md@*@7g=(FJL|eOw%!3Nag7xrC1dq7 zjUHO9Ijnr@fkZulRMbvwuAo&YUrpOJE>dGp2kA2-gEf1rME&XDeA*FpyQYT(qW(Vm zkkD8?+v`%=KaaL*xnoyonKVuNQZh^nZr*Gr*M$=Ymzxp3hd!` z*&&|2V0Ep|(r6JqFPCUDR_Imd?BVNb^%Jc&cd=fpw2eP_Hjw8Xt!g()#*5~o5A$bd zTk5w8Uf{kiMa18cjrGp=+w;ev!$g7SY1XF819(#J82$p^rul^r())Ri5HqeUP`Gm` zZRxtJ{NaG^dh`Qlt^AbZJZ8xWYh1(L`m@-0AW%7N!>w!A(PSX1ZaW(Qkw}{P32w-m9s^hW!z#HJmzB@7W_nc_&V3o3!3~oKLV4Ft@K>u*fcahkDMm zqwoklUrII2En$*r*fGYFFAdcDd5`1EBc_>3ohq!Q*BmJlLaHj$wye~)o#-#NrN2?m zzl_q4{{4h+v}NZPau3sQm@8|KX1geU0|#mCIw$HeAp?~256^0ECil`)+EU)7K#cyT zyiKd0ewRP)++F9pIw%#CWU(S+w$kbFZj;)(g!t5_iGF2LgmU-eNKwP`!8+b7Dc7r} zm}098(MvxW%PZdYKo4#_`L%uesM0)y()!O(?{l$%W-_yhH7Se_`94Uey^x?Vo z4btN~cxtCV>{YsCKcii%)=Lkp)QP`n-b?>9CQZBWpuKXbO}zGaXrkV#d~e>nOT2#L z>ll9L{Bp%}*mCW4dVeu0qb*A ztpk)RuZD^)aYwXVjfN>j@eT8YfLL8QRYN&)Yahn~$8#@VJbkdz zqf4xw^GZ)qJuQa2G)dR;KTXy{=cSwesP)`Gl@`lL=@qH;S(q%^p2=@=E#+f9e=u23 z+csG2nlgc(-qF(3<96eWvp1rY#&eU!>uS&ak8H1MeTMIZ+sG(;GfD}VpDgaps&1P9 z+{gNTf3jY-Oq3pR>XK%e--q8=xm_vu2K(9{;&?K>Zr#+ktd{CKTwJ;{#`*x?Kfj1> z!`-I`=%w9D>PhoD@f-K+SS|S0KX&_GUg5aV*vj=9_l*@R68!X1-Sg<{)}7)FS%$K! zUN7CP$r`{GqKZ zJXrr;D?^#5kI+wJy|%twXZ?7kyIPcQi1yI^h*I=)e|=GeMJpR1S)1p$qV*Qhx=Al( z^=mu`-+)cmZuY6FUHt2+_UTMl{aspJz2P54^nm+2wHeJvSXX9C(p#lmwelTi-N~!0 zo^ZLG7R?g1!ikeL(XFrketmQO*6<5j*s*ikfOoZcmjT!xygy9r=w;*Q(|hP+^jN-q z_)y^!?X0|X>c)@mY{_T3PSPwl;>Ce)seGh+xbC;_G@r@V@b7Y4&Au{5OtHS=&nE}# z8<+3lUp7RGJ?CAuJ#CM3pHwEUyS340TzUQBI)6H|F(3GMfacR>us&qqFtO%(EmOyJt+hIN@D2UAKKiu_*|aUS*YWwI zWUc(CzIw|Xy+p^bJ^pP1FKWALZ06Z+&euFUbkk?)Z~3HlVR~}I8Cr`zy~Uqhgm%|I zU0c#q7N455*G&a(T8lIuEO1qOgzuHM(alO8_^5$b6SI3?`?P4Q?!psD=8TH^P3)S~^nePS~*=HNFz zOU~8Q3%wm@JrGm#f8st*lJs_S)2;J%v`h~-)zDLJZLk&@Sxf&t9=ZJ>&mD9#!~0x} z{;INz|A5Ux$&r?`-*W8WKJ3U)vo!xUUFZnH5-+W-V|Aq6*(?>YP=(n<4 ztt~qr(9YpoC?Xn}M((Yp{~qt`ZPO}hQ>}X!#p;U|1}bkBC+nrsPG?jb?W^Z+;HUK% zRzv?izSp;?;(aDrci-7^S7%&{$38Y|J+Vg}wc>`7KQYPiyOoe?$zoisW!8@um-}BY zb5z;4Hc1aIn3)lfUQ4*dUa-10tFHeZ?}G1(_Ag1+Ee%eYihiu7Z#m_y)$^+%evgme z+0wu6k$2XTWs<~!2eXuaypr{!_+3%YSd*!g)m2-IcNu%bW-IeOll7g03tC@4JEHVj zm!zL5m}%2AW34?ctsC#p(grFAs7%sI_a4 z-}t0mHtn&->d|;Nd_YUq4|Zssv0jhX^R*7p8eHA0rIwtnY-{oF@1$&B&nYeDB$6+SOwDHD!Dsk?Ay4S%kgRmCe6ooXC@* zmBhYnX8k_;@iwW-lBY>}T=M6PS@?e!mUsVdHBarW-#T(m`HcEmp-@xs^cXSOV~KSN ze%tgHe9NZecUAGtO^2uU(yJV;tsS1Uhwps4NztAq=@ak`WZ1=h+~?$RYouq4sC54& zx4qtIy8HDWx8(Iv&XQN$x3IUezxO>J>YSh$>1kfe6ypAsXBP5SHYi_t>fu2SJs#<2 zI%XFJ&##_ckl_A~@?`O6KO_CcHXr5X)0aH8xTKsL@{yCOn@yp~&vBTv2T zshmr>$9cj&3Lf*kFUm9_j0yOf?49Db3O)lE5T zU*oom^OfpzpK&s+n18c^&cYs9LAm61n}<&6ue5*UB+UEzE3GpRbMveE%6+8U8Vyhs z%TaENoTMyTeVeCDtl%i`TfVIFF6bt=*h(o~Hhtt#wU;VJeHT5KDlQi;a&v;+b&{Jy<~elo z=DVo}Ifg%<;qEA(xp=B$yzJqP9qqV0{ZsK;aF&~+?Ixo>)gGd#>(aQrb!B0T#~&|g zQCX-}9`Kal%EJ8U6HjXjy`U5J04j^90v^H=2D@@|IB8cysFj;@HL1EF=8D`rq`FXR zI&pOr^vR1A^L}t5QONh|!csb?h$_FCudP2&cx+$wlRe7j6t-%q{J(6r6VKY5Z{>uYj^b#-fuHm-y72I4sl|R})K#)84 zlq|M=Udf|sr1Jl=;h*{7W5w{-JZO#LihXT0^fAw3!yj|_2F36rs*{(<(u<9Oo!=uz zKS-wyiqW6n+3?pke2r4O&~Op8yQ26n8-A$WHYopPqur>J6@}3s+wBy^=nv_>5k^jp! z0efd}k;OgB#|!mDMe*svOis4BDt5(3B=+$VY<)jrh96n{0QH%#R}}x{(6|JLeya>8FYAydSlZLRrk3Rk2*DoW5+Hfr|w5*rI4@Z43@Egc}sIPvd zpKRExVabki1~}`DRTXN`DsCy9Br+yPh}2!xesbM`5#obf zP5hUQcG3oobhKmeyBr-wVDV~#G+D)6Fg~{?M2NaRTX_~=I69N7@@{T!w2H5G@)lV< zH+x56>#~hcK|6_!|1T4QzbbkUp`A^P9#B#7x3o5dGLXF+S3GuBEv=hnj0-dLn` z$|klB3KFYBez8%WgyS0^q`Ta76Zc3HvHHX>E?=donEA*{WHBKx>X@-6?=ZWGctX7$ z=Z_1HM#(7p3$2T7N4>q3R8sQuAmEmpA7m#!GnI9wO|aA%es< z=QdnlvN*HeKtVRt6zay=TwRIl`Vw#hoKruzQl)O3q)$-DUEJ64tfxMh!`1L#OxiZ# z>i1-E{B$eWRp4stCfwW|`9GL6@WLEa#Xz4{Ts;n7%wF7v{GY56NBM2XP=49~u9hX7 z80CL3aht5DACtwDQ60G25I$6xteEkx<0relH5qym#ck7lUve^Elv#`9w+NG_|FA~%J?`_g&%gM3yQPlfVtetCuQt{# zSl78AKZ|$Yuy7(*_})?+qyA$ROK}geIvVW+ zR^%ksEb^|L!0mOIAdRpdJSBc{T6WA&vuIv#A~#3m7HWESuAUY@nT%Vcn0uIo>&GeF z+@Y8t1r{l`>nNYaZtqQI8T0=KtDbYYITTawwoEZK2 z!M1v{xw(s3%$(X=WaeAL1FNQRv#~Dyk!~)J<9Jnw{}-$9SN(1lSzL25zNdMV8~r?xWlfPAQA? zZ+t&aP9nVt(oML&82LZgxUZV+O}XlcbmWsd-xV|Rv$%1Ujv}fHu2I3?6=LMipQM=W zzc{EU?yns$DC9NL8zhREX`O}neu_feaw#f@-4EXVPk-SNPzl#H%pdgY|H-W|eoJsa z_`#R&_ZRAniXw|Wmf?Dv_LO_PZ_dryQ*O(sz-|*q^sbD zn|*{C?-G9Uqr5_0euUe8uz8WO=2iu{dc$O_+tn#3H}wcN){o(*mG)V4T3vve$!%->*d+ss`|rG+}Hyr|R%f1B?I6O!Mb?2l8( zp1k-5sW{sHSGNZaa;(b<$>&GvBfo845mltPP`80|!p=O!w@94{-jym&sUjQpM7f3j_VPN81-&Mk9rypeCKn#;I%h%7dq!`0*2g}H?1 zzxn-g3wr?$$B=CePAI>RN8IUB=w}!3WlG%hAiI1Lxsa*q2$& zJ+eRLS!}E)JqkSK=0g>@h2Z|_vYHc*Z~P}CKdRg}ZlCAu$S3(%bK62E@ssiV7`nts z*e)Jd9OWl&;3+0ILH^07M8R+MZGOe_3GM!1Th(&HPO&!r!Njt}&sLIPJ>w%TzKjrL zd^r(*pw%x{ll{!mIDd1O6CO6C+slcJ2~B>nInj@7!Fk@ZoRFs?-M_qe5p4d&E=&B( z1lOBG0{zect3J$I}Vi=pRv6`;mW|@c0d5xj6;bAEMSFrE`K` z`4J^2kLoarn}_21Lgad6|8<3s?|$Tq!Os3<{2Ik}X*jp_#Px-&tVf!yQAo{oCWnr- zv%Lv^BemN{q>7<}Z0lt*>ak&OYzJl=<@ zEwR6K7suxZlMQ8s%b_YlU7J&czV#Fyv1P^F=&Hgtv8-?_T~&~=EjTH)P*G2<=i$%M z-m6ef-pyA?S*)iE&R5i=4ZPPS__H8~NNt7dN;VIXdLH$?&LJ{8mKK(?rG$M@RbhEp zN~Bapy?0E4Y<|L3Ung<6LK5zy3eLAD*n4ym>e-Qkj8uee*As4wh!BT6)Da$iJ;j8; zT6ngO5Wel|2%D>?sB7rh?;y=_{pyZ=JmDn_`%t;MAh0ht8h^(W=cNVf6Z@I6BIp=& zl%M$&f5#N%Q`bO8d1GHf?Gzz0^EANu>WR7oFs>28EoTFvx_JsabemyE8VK_u#NBXS z_H53{>cI-Z?<_1ejrGqDK7(68{u$O6m@Pr>O zpM?7s`ss@E>Jj>G^t-1bEN;-PsNXkPQI~DxY6Q}&W4!k!DYny_czi+VJz8?oVWdJD zZ{jZ1p(o@1dknUh)^lHs3ware_3cJZym5T&NT0BQ+Z)t!j1%dFYqHvc+y2;vwf=fO zVHA!pj;DDGuG9H9^3A8Wex(8s}_7g+P2UC-0@;rx3Gf8JuvZq&!HHXXfzry|{$e;!4)@GK@B zH}XXMe!zAezGMCw^U?BlGq)Mz;DLG5Er+nIOXp;C8on3A{92U8S0^DIe-FvNHJz)o z({Qgvf6zY3jN|Hw^*k!JrK5eaH_p+%dJ^d)Ht?tzq?a)Z`{ELUEYZ2e6UQUTEIc+s zU!n64mvP+oB0s%^uzkXDAG)2}yf80Tqu)O`YHC?=cp<(4|58SznPERRLa3YZoF&Q% zdo=bt&*C}$BF76?bqlvWzIV80EW12;-Y?%c3&4$Kkl* zyi+^4bMwjdJmpdkL0)4XbaCgz3&(W~(noIK53cqQ9s@kZ>dQDUJEQ%Z!-TE4r${+E zRH#^&x)sOXa60C%Zxi6zH(Cz5B}5TmRbGz*%;-xBsTkg`EojJib4|yNmlg5&o(7?{mX1l8E%r|E4?q zdm@B+0M=FS+=Rs)$M2q-crXv+A7mEhwnw=6jhirIK9DKU>mK2xG46d!Gr2AK1b4}f zdMBRXbyuMOi*fy0oXN=_C-D4^bo4uQe=A`}zk{Tfj()owY=t&({h=)#{eGag!d|6G zs2#rI9{!a-z;(fP9(n}&>#8`?&3nFb%Nfk4UL4P)SGajE7i#t^TrK4yd>>$b{os_> zorF0F*C|gIF<~6mhciZS)!4`Q!EfGn687FHm_Nh0IWSR}3olp9f8qY~S3%($S{eHt zD;3)?tWQtOR_wWq`{x`bYHtBSB4#O;@3>#oUCmvlVGa62H%B^&%saRqd|SRv$lsgx&-?`(9;&KA-Sz09v(+%j0-z#HxwG+1S3zVE8 z!$thNWD(vP>E}KuZvV6s=2x?ogrczTn=Cx5Aielk#qB1}Z9FGT?;S2IF0+-IsNYs3 zJD>R!&wxeGDN{bQ6=eG-ECk8dPAjQ!f)oB8A$_`d!^ zL$PsIkWjn6RTefKE>dnb6fasKzuOl6LJAW0fp3&l_@5TjNCd)vHFPts<>1sU+;Xq6 zaJlnbiF}6kcdg>X(GHn2Qt1W%)f=1nxm=0DhW(CwvteImfUYA5&KB;@ z;8&eN%JFY)g&FTXW}rTgk0X`E=#R~gH7)vM%iPQ_9>#Gv{aHDD9K7wF(gW${4QG^w zJ;H@K?^z{i0_tzxkB{G%D54s56aE;tc-~ETVEc``^U_8e5<1d~K6l76^<9#C8 z9>JePW4spkXUwIaKp0fOS-w5Hc zY=LrRUy|^>k|dt}lO!%qz}&103k5=mNjR)?7KKXCuOI5u8 zXyGdSSFPZEihkp>(~*93h4RL<%296YbChr7D(c)`!F%QV#=~!};A)hU2waPCEw@rJ z+AH>264lN?cVDUWLj6X5+A-+Y{#I-&R&bAcPLBF}*pC1FRsQCRC5 z^$&Dq!tmFlvX?OYSG(llAMdZ=YqL2C!yhBv@J|iT!wtXHFfU>BLw%Wt?^w2iU-ofw z^iwUGm&d}7o=#4}@ZXHAYe9XE{*TVXXZYeBdhc(J_Q?=eVVZ|}Q18y# zt9YX#-}uEktGET@W7y?>TN6 z*Qm#ic8&5z{YHKtcP1?AJ#P7uYHGdU9?#6u~zqXVt%wN`;w$^{=_%6jr zH@-7DT0O zRKAsa$B8~o$u;{KH=iEl&@Dk&o=#%ohGlffR^7gG~_w-di`nqqL~(GaCyG}_Co3iA;JcYT!Aix~R&I~8 zn*uy;bG4$MY39O%+_KJHF?9O}qO=IyhxefK9OW|y62<6uYV*d9cFgXLO~G|{@gRKH zV$_#tor>r1JftSJmTHpR2sKGQU_K%dO7fCgz*@uwp%%#x%ug6Xeo`A)n-oB(O$q`F z5}9Nph46wh8>BEo9pVafCD{>NNnK!FQUswcaRa&$C*n+sl6t^;q!>ayQXE*E5dOzazH#0%SFln%RsA28WLk;m6HYp z+qYmJNJHX98iTzcf>a~H;A)V@q%sKrSB3K(C8InquS&lMrACsexE_v|bnzLYmR# zWCm~s`HPmI8AJuDv>ACs=92Zm_2dOPNxIS`dXgm3-NZr|Z4GQqf@v!q;k4tYS{0N+4+fVy7*UqE|Fo|4P-C1f=XC&y`F zU}0LE9;Zubeqes2ETz|I9$+45*XTN$1DFHa8`_B=>0rbHXdG<>>5Z5|`vdz!Q)oRp2sj8@EqaJ-AhqZQG8{cQ zO>D%O+K2~zLZdJ$PatpT1KJVV1IQD4hlWGD19?Di&@gB>Ab03YHk5?{!=O*ak(7WE zT|!o}#ViaMMuKRNqn|?Xa7@Q^-5cutM0&w`VKz-gSjx83 z?X)WyfUw_@o(g?FWB^%9|DioePZB{is!N zfh3U(BPtm~#*@k9Pcog%By-3DvWP4rE65tMmTV%M$qtf6tVARG$N_SM94DFN9N9{D z(sX)&9-=4c8G4Rhq%Y}P`X2RnBXOiXB$5n83yHu)l1w_1!6X5gKsu9=B!=_?_9COn zLNb9&0Zt){$rH3c2RMg3B(um$vJSY8%qB8j29IRAh)~*;&L>MrQ@WId(4zDJd@4%! z5qFwOj*|T(6|#k#AiIbT)X6DQo$f#ns?*J+1|2~+lI>&!-A;zlne;C*jm)Ie$aFfH zTp<6T|NmeFE|9C_67UkVtK>Sl0lWe2I=Mw|18+mSMedRN!28hd!QY3#htSrLXXH8X zImYc7c|~3WUqgFE-jVmf_t4&vPvkT3Gqg|S8~G0W4(%KIN9i~8@H@uWiDsvn_>AZr zV!3Ee>IBJ-SU#E;m={_;T96h17Jyce7NM>{S7=2rD(*mcXjW2^mI9Wd8e(N=Sy~cO z3Ndf$1N4FBO)Jofz>3f+&?>Yluqw1Fv^uQ;tO4yXsZHwu>(D)j`B8sb8&U@`P6bdv zD2&z!18MrLdN?HBDiyX(D26Xgk^x(i*Y$Gy)g_tv&5T zI|DmI>qNWIZoqEP#*v;h8W>F{k|C@QjiEzW3>}DAU)qoMfy5w|KnDN^Kue&5X(BKY z+F%^{VZdR~M$%Dq3~&rhMr<4%4;&9|9Gyfb11Ce9M5oeez-iECu$go^a5|mEX3=?c z0i6YzgV-Xv1h@p+8oGim2QH_p=yke`o&uhtS7;Zqjaq?L+JXGV?DQ7>i`}Bb5xY(A zQ9I-oV)yAI;3H`F>0|l~_zc=(`kKA~zJRujZK9ijo9Pn7W})>>kj?O5A3X*<1~1m5 z%`3nwbOXH6=^o%7c%;(|ng&dRwv3*nhk=LT-9b8t#FK+Go*bb&$w-XGPLfR1Nf&yI zoB^I8-RR$>Ic))KL06IU=-(=O9&(AErF}>ba+dZW7wA~>ihcxsq{GQOw7-GAgM6Sv zNGB3YhCq@?If+OurE-v6h`C9Vfs>&XmL^CwfiwM{X&aMU#Pp}4*UxKN=r$l zfZxF1Xc?&t@H_ZB^^*Q%ix>eC)Vn}xE)4_@l&I7}svvCvZjq`{uiR_S^I4UwMKEw74Vhk2C z#2GOO77XHq7)1#Ql3iLOg~56aq^PtWnt?^7V$v#UIjmPfWW<)hdO3u_dKFT_AfM?H z97BpciX1nL%QWCL%#JWmc&M|^1$*q<|EjjtQ@eMR368*tmF;! z#?dZ|S>pxtf>v7cK&&*x6R}dr@qm=Y@h*W_Nl0nL+>uiP;(_B=46)*nl86;WPBBOc zv{qi)4&07emWuur0~Ui_dCbLKz+K3xB>74;q*_v4$xjke1F4bJSPGU}NOPsyk_l*% zW=Wf+`Vt3nX_FKSiw3|3Qk*mnrD_3dN#mv6QY)!7u(gyXt(MwIZGmm26;f3xTxt(& zFIAW3vyM_HU?*t~Vo_2TsUxHlV%?=4z#h=LOTDDtz~0b$p`AEj9JFAmpOgShfN$~A zAZZA2h%^APVbXBmaA?D%Bq7&tQ-t}F6Ke{2E7fLYS!G~l)RTt3)n>KXHq^5dT5aafs?o~S zpH-&SSPK?PT9Ov5C27dQSbJuyIYXg?p?7D^p?8PYo@Gkcq}d3HbOCrl%9OrH@1)Xr zGHON&vJ$i)%geqv^b*vFU6*c>Yvj6gjr3*(Su?C_3!=8}ESwFM220^=u+)u>l!hWU z64ILWX4l9S*j^z`S#uW1MoFWjky2}LYv_M~1A&2TESthcvQ}gYq!~t z`Fv?HaIsW`bwmCA(L#Tz0IR^NN)@FFtfEvJ2l+9!9q)xz2 zEP>sU0;L$~7Q~%NEL!S@Q@)$@2%($Q8Q58hV~?eQbO?Pc4WW#6mLjBMNIi!1PN=5} zYN{fYXNRO#cm{k-?vm5eW5_@F1HFe3drXX&8!Jz}s2lU5&MZU?YB<*AakR^$y#g4MW*C)bQXZBr)sg;?(jf<>6>JcTr7IxECB}x(q3GFAT7q$@ zp>!K(`)$m-m6(TnfO{lAwhU~bAM<6kn3?JJs0bc`O!}5Ui2IFu5vKJP&rF+18$bTi>$H=^b zyg_(?{99AA(oHj2j*w42>CJdT_FWo zZuUv~j$`;;a)HG+i2^C|^8>#~`5}4PXPmF^amK!vz9PJrJ^(*R1Qs80K2i1#=T&Vc zSODf~0IP=(z#0G>u)3@ctB;Yc1F40XR-RP?R$@`CGpmd-?+odJP?bfpimVLt270q9 z$n#=8Kp*5(1$yG@P#ZOtg?J;>L(Sfha>%QLntdRi@Sq6`1_q=30AMp7}{7wZG;gZyA%EHD;UAuI;xa|om+7DTn92F4X8;M zrAv}7*?>0WUjbTyR#>HDt{(;-hLtWIk&Xh7BHso)1Uv+*w~`af!QM(a*n1qI94sd| zC;K3MlyWg=94BWSrEZuDg>juJ%zCmOm%Sj4UA?T z5u%aX5z-#lw$`jIuq|uJLRlNu4%m*hLTHC8a4Sd)ScId7){wTa=zx-KAng!3qK0;m zFkBg%qlQ38Bi0yov;wwbK?to-LlC4PuAPC%9SfPjCL%uw7{n$a1R-}4WD0Y_HKi!9 zC`KR$uo$oyMj#g}&fI`*7=a=<=c@y&BfluH2CxRKinE%m8n7Cyd~w#AfF|Tu2P!}X zRyA?f`U7znV#f7V2Ff_^N&>S3v*Wxg#j-I5WH|36_DFhyYrqpphQ$-<8Tgr$9Trce z$5J+2i5V>7SU+Gt+fu^7{c#fltAzKRYQMhuv{l zCE$FD0!Fa`2vMvnuq#{07T~Ok1V*wIuwLN66)15+8i3pr(n8d9OiFZBm5hHs9DMvB$#$x0TN)y;&DU$V~gHYoj)D|JlL#q*};h5AA_u`Q_5+hN= zAJQKji?CMR zf#ydAE^sovmY^ zfuC6}`4dZH1W4op@-t>RN+# z*09$IYuJ6@eRcq;x7l;xbEI8iyU_9#$XaO6*=gWuSgl9eTHspvdWU^t1>`%BJn{pU z$((`Ca$flqdf)xZ(>`3Ti6cNu#Ig7Ze|>ThM zy9CcJvJ1cq>@50lnVkooXa8WNHlW34kf-bk{8;-!X`_sVF7=vBt z`&Hmo__CK>L(ld?c4Cz6>?ZIgd&AzcTNv55kk=TUJM1p-F8jbfvU?cakC6B958-HJlV$lJ=G%UZ zrjwil^C5?P21g*L>@1(fJjrBr$E-Y7+gMq#1E`@difC2Em z4C=23tcUV-;Y&?mO|&oIXC+`Im(V)J5AKsI3sBlH6L3lE(wb%bgL%%Uyt7_otc9+{CbeAUrC(1n#Cd$#kXgOSNC-;;m0Vm155GKjJfxYGS2)*UWz{zqSgvoLY zFh=emN64}A6yOv&4q=Mi7uZ+sh|pL56Zogx58+R_Kd`?XDR+|N<*C4_ast9sc%1-g z4a@+H2sjAZ7=i;l2yby z$VtE?Xr18i9N-*zAY!fM(ZJErT4TKD0p~&MjBy_h91g85#&rR30c!1m@f`;o2Q32Q zvD!W{l?x*M|Gy8U ONyFxW8|z1nCjTFx(MQ4n literal 0 HcmV?d00001 diff --git a/site/interface/site/node_modules/.package-lock.json b/site/interface/site/node_modules/.package-lock.json index ad3225c..6de64cb 100644 --- a/site/interface/site/node_modules/.package-lock.json +++ b/site/interface/site/node_modules/.package-lock.json @@ -3,6 +3,23 @@ "lockfileVersion": 3, "requires": true, "packages": { + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", @@ -20,6 +37,18 @@ "node": ">=12" } }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", + "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "os": [ + "darwin" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", @@ -102,6 +131,21 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -193,6 +237,20 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz", + "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", diff --git a/site/interface/site/node_modules/.vite/deps/_metadata.json b/site/interface/site/node_modules/.vite/deps/_metadata.json index ee4ae12..de3b426 100644 --- a/site/interface/site/node_modules/.vite/deps/_metadata.json +++ b/site/interface/site/node_modules/.vite/deps/_metadata.json @@ -1,15 +1,34 @@ { - "hash": "9acb87ed", - "configHash": "2420ea4a", - "lockfileHash": "5f9ad849", - "browserHash": "13d3c601", + "hash": "be749922", + "configHash": "1568657a", + "lockfileHash": "7685a2f8", + "browserHash": "e669c1bb", "optimized": { "three": { "src": "../../three/build/three.module.js", "file": "three.js", - "fileHash": "b6faecb3", + "fileHash": "477065fa", + "needsInterop": false + }, + "three/addons/loaders/GLTFLoader.js": { + "src": "../../three/examples/jsm/loaders/GLTFLoader.js", + "file": "three_addons_loaders_GLTFLoader__js.js", + "fileHash": "c1c83b3d", + "needsInterop": false + }, + "three/examples/jsm/Addons.js": { + "src": "../../three/examples/jsm/Addons.js", + "file": "three_examples_jsm_Addons__js.js", + "fileHash": "fffba256", "needsInterop": false } }, - "chunks": {} + "chunks": { + "chunk-LBH6F3OL": { + "file": "chunk-LBH6F3OL.js" + }, + "chunk-33KXLYU5": { + "file": "chunk-33KXLYU5.js" + } + } } \ No newline at end of file diff --git a/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js b/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js new file mode 100644 index 0000000..14d8d68 --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js @@ -0,0 +1,31142 @@ +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; + +// node_modules/three/build/three.module.js +var REVISION = "167"; +var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; +var TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; +var CullFaceNone = 0; +var CullFaceBack = 1; +var CullFaceFront = 2; +var CullFaceFrontBack = 3; +var BasicShadowMap = 0; +var PCFShadowMap = 1; +var PCFSoftShadowMap = 2; +var VSMShadowMap = 3; +var FrontSide = 0; +var BackSide = 1; +var DoubleSide = 2; +var NoBlending = 0; +var NormalBlending = 1; +var AdditiveBlending = 2; +var SubtractiveBlending = 3; +var MultiplyBlending = 4; +var CustomBlending = 5; +var AddEquation = 100; +var SubtractEquation = 101; +var ReverseSubtractEquation = 102; +var MinEquation = 103; +var MaxEquation = 104; +var ZeroFactor = 200; +var OneFactor = 201; +var SrcColorFactor = 202; +var OneMinusSrcColorFactor = 203; +var SrcAlphaFactor = 204; +var OneMinusSrcAlphaFactor = 205; +var DstAlphaFactor = 206; +var OneMinusDstAlphaFactor = 207; +var DstColorFactor = 208; +var OneMinusDstColorFactor = 209; +var SrcAlphaSaturateFactor = 210; +var ConstantColorFactor = 211; +var OneMinusConstantColorFactor = 212; +var ConstantAlphaFactor = 213; +var OneMinusConstantAlphaFactor = 214; +var NeverDepth = 0; +var AlwaysDepth = 1; +var LessDepth = 2; +var LessEqualDepth = 3; +var EqualDepth = 4; +var GreaterEqualDepth = 5; +var GreaterDepth = 6; +var NotEqualDepth = 7; +var MultiplyOperation = 0; +var MixOperation = 1; +var AddOperation = 2; +var NoToneMapping = 0; +var LinearToneMapping = 1; +var ReinhardToneMapping = 2; +var CineonToneMapping = 3; +var ACESFilmicToneMapping = 4; +var CustomToneMapping = 5; +var AgXToneMapping = 6; +var NeutralToneMapping = 7; +var AttachedBindMode = "attached"; +var DetachedBindMode = "detached"; +var UVMapping = 300; +var CubeReflectionMapping = 301; +var CubeRefractionMapping = 302; +var EquirectangularReflectionMapping = 303; +var EquirectangularRefractionMapping = 304; +var CubeUVReflectionMapping = 306; +var RepeatWrapping = 1e3; +var ClampToEdgeWrapping = 1001; +var MirroredRepeatWrapping = 1002; +var NearestFilter = 1003; +var NearestMipmapNearestFilter = 1004; +var NearestMipMapNearestFilter = 1004; +var NearestMipmapLinearFilter = 1005; +var NearestMipMapLinearFilter = 1005; +var LinearFilter = 1006; +var LinearMipmapNearestFilter = 1007; +var LinearMipMapNearestFilter = 1007; +var LinearMipmapLinearFilter = 1008; +var LinearMipMapLinearFilter = 1008; +var UnsignedByteType = 1009; +var ByteType = 1010; +var ShortType = 1011; +var UnsignedShortType = 1012; +var IntType = 1013; +var UnsignedIntType = 1014; +var FloatType = 1015; +var HalfFloatType = 1016; +var UnsignedShort4444Type = 1017; +var UnsignedShort5551Type = 1018; +var UnsignedInt248Type = 1020; +var UnsignedInt5999Type = 35902; +var AlphaFormat = 1021; +var RGBFormat = 1022; +var RGBAFormat = 1023; +var LuminanceFormat = 1024; +var LuminanceAlphaFormat = 1025; +var DepthFormat = 1026; +var DepthStencilFormat = 1027; +var RedFormat = 1028; +var RedIntegerFormat = 1029; +var RGFormat = 1030; +var RGIntegerFormat = 1031; +var RGBIntegerFormat = 1032; +var RGBAIntegerFormat = 1033; +var RGB_S3TC_DXT1_Format = 33776; +var RGBA_S3TC_DXT1_Format = 33777; +var RGBA_S3TC_DXT3_Format = 33778; +var RGBA_S3TC_DXT5_Format = 33779; +var RGB_PVRTC_4BPPV1_Format = 35840; +var RGB_PVRTC_2BPPV1_Format = 35841; +var RGBA_PVRTC_4BPPV1_Format = 35842; +var RGBA_PVRTC_2BPPV1_Format = 35843; +var RGB_ETC1_Format = 36196; +var RGB_ETC2_Format = 37492; +var RGBA_ETC2_EAC_Format = 37496; +var RGBA_ASTC_4x4_Format = 37808; +var RGBA_ASTC_5x4_Format = 37809; +var RGBA_ASTC_5x5_Format = 37810; +var RGBA_ASTC_6x5_Format = 37811; +var RGBA_ASTC_6x6_Format = 37812; +var RGBA_ASTC_8x5_Format = 37813; +var RGBA_ASTC_8x6_Format = 37814; +var RGBA_ASTC_8x8_Format = 37815; +var RGBA_ASTC_10x5_Format = 37816; +var RGBA_ASTC_10x6_Format = 37817; +var RGBA_ASTC_10x8_Format = 37818; +var RGBA_ASTC_10x10_Format = 37819; +var RGBA_ASTC_12x10_Format = 37820; +var RGBA_ASTC_12x12_Format = 37821; +var RGBA_BPTC_Format = 36492; +var RGB_BPTC_SIGNED_Format = 36494; +var RGB_BPTC_UNSIGNED_Format = 36495; +var RED_RGTC1_Format = 36283; +var SIGNED_RED_RGTC1_Format = 36284; +var RED_GREEN_RGTC2_Format = 36285; +var SIGNED_RED_GREEN_RGTC2_Format = 36286; +var LoopOnce = 2200; +var LoopRepeat = 2201; +var LoopPingPong = 2202; +var InterpolateDiscrete = 2300; +var InterpolateLinear = 2301; +var InterpolateSmooth = 2302; +var ZeroCurvatureEnding = 2400; +var ZeroSlopeEnding = 2401; +var WrapAroundEnding = 2402; +var NormalAnimationBlendMode = 2500; +var AdditiveAnimationBlendMode = 2501; +var TrianglesDrawMode = 0; +var TriangleStripDrawMode = 1; +var TriangleFanDrawMode = 2; +var BasicDepthPacking = 3200; +var RGBADepthPacking = 3201; +var RGBDepthPacking = 3202; +var RGDepthPacking = 3203; +var TangentSpaceNormalMap = 0; +var ObjectSpaceNormalMap = 1; +var NoColorSpace = ""; +var SRGBColorSpace = "srgb"; +var LinearSRGBColorSpace = "srgb-linear"; +var DisplayP3ColorSpace = "display-p3"; +var LinearDisplayP3ColorSpace = "display-p3-linear"; +var LinearTransfer = "linear"; +var SRGBTransfer = "srgb"; +var Rec709Primaries = "rec709"; +var P3Primaries = "p3"; +var ZeroStencilOp = 0; +var KeepStencilOp = 7680; +var ReplaceStencilOp = 7681; +var IncrementStencilOp = 7682; +var DecrementStencilOp = 7683; +var IncrementWrapStencilOp = 34055; +var DecrementWrapStencilOp = 34056; +var InvertStencilOp = 5386; +var NeverStencilFunc = 512; +var LessStencilFunc = 513; +var EqualStencilFunc = 514; +var LessEqualStencilFunc = 515; +var GreaterStencilFunc = 516; +var NotEqualStencilFunc = 517; +var GreaterEqualStencilFunc = 518; +var AlwaysStencilFunc = 519; +var NeverCompare = 512; +var LessCompare = 513; +var EqualCompare = 514; +var LessEqualCompare = 515; +var GreaterCompare = 516; +var NotEqualCompare = 517; +var GreaterEqualCompare = 518; +var AlwaysCompare = 519; +var StaticDrawUsage = 35044; +var DynamicDrawUsage = 35048; +var StreamDrawUsage = 35040; +var StaticReadUsage = 35045; +var DynamicReadUsage = 35049; +var StreamReadUsage = 35041; +var StaticCopyUsage = 35046; +var DynamicCopyUsage = 35050; +var StreamCopyUsage = 35042; +var GLSL1 = "100"; +var GLSL3 = "300 es"; +var WebGLCoordinateSystem = 2e3; +var WebGPUCoordinateSystem = 2001; +var EventDispatcher = class { + addEventListener(type, listener) { + if (this._listeners === void 0) this._listeners = {}; + const listeners = this._listeners; + if (listeners[type] === void 0) { + listeners[type] = []; + } + if (listeners[type].indexOf(listener) === -1) { + listeners[type].push(listener); + } + } + hasEventListener(type, listener) { + if (this._listeners === void 0) return false; + const listeners = this._listeners; + return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1; + } + removeEventListener(type, listener) { + if (this._listeners === void 0) return; + const listeners = this._listeners; + const listenerArray = listeners[type]; + if (listenerArray !== void 0) { + const index = listenerArray.indexOf(listener); + if (index !== -1) { + listenerArray.splice(index, 1); + } + } + } + dispatchEvent(event) { + if (this._listeners === void 0) return; + const listeners = this._listeners; + const listenerArray = listeners[event.type]; + if (listenerArray !== void 0) { + event.target = this; + const array = listenerArray.slice(0); + for (let i = 0, l = array.length; i < l; i++) { + array[i].call(this, event); + } + event.target = null; + } + } +}; +var _lut = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"]; +var _seed = 1234567; +var DEG2RAD = Math.PI / 180; +var RAD2DEG = 180 / Math.PI; +function generateUUID() { + const d0 = Math.random() * 4294967295 | 0; + const d1 = Math.random() * 4294967295 | 0; + const d2 = Math.random() * 4294967295 | 0; + const d3 = Math.random() * 4294967295 | 0; + const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255]; + return uuid.toLowerCase(); +} +function clamp(value, min, max) { + return Math.max(min, Math.min(max, value)); +} +function euclideanModulo(n, m) { + return (n % m + m) % m; +} +function mapLinear(x, a1, a2, b1, b2) { + return b1 + (x - a1) * (b2 - b1) / (a2 - a1); +} +function inverseLerp(x, y, value) { + if (x !== y) { + return (value - x) / (y - x); + } else { + return 0; + } +} +function lerp(x, y, t) { + return (1 - t) * x + t * y; +} +function damp(x, y, lambda, dt) { + return lerp(x, y, 1 - Math.exp(-lambda * dt)); +} +function pingpong(x, length = 1) { + return length - Math.abs(euclideanModulo(x, length * 2) - length); +} +function smoothstep(x, min, max) { + if (x <= min) return 0; + if (x >= max) return 1; + x = (x - min) / (max - min); + return x * x * (3 - 2 * x); +} +function smootherstep(x, min, max) { + if (x <= min) return 0; + if (x >= max) return 1; + x = (x - min) / (max - min); + return x * x * x * (x * (x * 6 - 15) + 10); +} +function randInt(low, high) { + return low + Math.floor(Math.random() * (high - low + 1)); +} +function randFloat(low, high) { + return low + Math.random() * (high - low); +} +function randFloatSpread(range) { + return range * (0.5 - Math.random()); +} +function seededRandom(s) { + if (s !== void 0) _seed = s; + let t = _seed += 1831565813; + t = Math.imul(t ^ t >>> 15, t | 1); + t ^= t + Math.imul(t ^ t >>> 7, t | 61); + return ((t ^ t >>> 14) >>> 0) / 4294967296; +} +function degToRad(degrees) { + return degrees * DEG2RAD; +} +function radToDeg(radians) { + return radians * RAD2DEG; +} +function isPowerOfTwo(value) { + return (value & value - 1) === 0 && value !== 0; +} +function ceilPowerOfTwo(value) { + return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2)); +} +function floorPowerOfTwo(value) { + return Math.pow(2, Math.floor(Math.log(value) / Math.LN2)); +} +function setQuaternionFromProperEuler(q, a, b, c, order) { + const cos = Math.cos; + const sin = Math.sin; + const c2 = cos(b / 2); + const s2 = sin(b / 2); + const c13 = cos((a + c) / 2); + const s13 = sin((a + c) / 2); + const c1_3 = cos((a - c) / 2); + const s1_3 = sin((a - c) / 2); + const c3_1 = cos((c - a) / 2); + const s3_1 = sin((c - a) / 2); + switch (order) { + case "XYX": + q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13); + break; + case "YZY": + q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13); + break; + case "ZXZ": + q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13); + break; + case "XZX": + q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13); + break; + case "YXY": + q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13); + break; + case "ZYZ": + q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13); + break; + default: + console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + order); + } +} +function denormalize(value, array) { + switch (array.constructor) { + case Float32Array: + return value; + case Uint32Array: + return value / 4294967295; + case Uint16Array: + return value / 65535; + case Uint8Array: + return value / 255; + case Int32Array: + return Math.max(value / 2147483647, -1); + case Int16Array: + return Math.max(value / 32767, -1); + case Int8Array: + return Math.max(value / 127, -1); + default: + throw new Error("Invalid component type."); + } +} +function normalize(value, array) { + switch (array.constructor) { + case Float32Array: + return value; + case Uint32Array: + return Math.round(value * 4294967295); + case Uint16Array: + return Math.round(value * 65535); + case Uint8Array: + return Math.round(value * 255); + case Int32Array: + return Math.round(value * 2147483647); + case Int16Array: + return Math.round(value * 32767); + case Int8Array: + return Math.round(value * 127); + default: + throw new Error("Invalid component type."); + } +} +var MathUtils = { + DEG2RAD, + RAD2DEG, + generateUUID, + clamp, + euclideanModulo, + mapLinear, + inverseLerp, + lerp, + damp, + pingpong, + smoothstep, + smootherstep, + randInt, + randFloat, + randFloatSpread, + seededRandom, + degToRad, + radToDeg, + isPowerOfTwo, + ceilPowerOfTwo, + floorPowerOfTwo, + setQuaternionFromProperEuler, + normalize, + denormalize +}; +var Vector2 = class _Vector2 { + constructor(x = 0, y = 0) { + _Vector2.prototype.isVector2 = true; + this.x = x; + this.y = y; + } + get width() { + return this.x; + } + set width(value) { + this.x = value; + } + get height() { + return this.y; + } + set height(value) { + this.y = value; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y); + } + copy(v) { + this.x = v.x; + this.y = v.y; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + return this; + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + applyMatrix3(m) { + const x = this.x, y = this.y; + const e = m.elements; + this.x = e[0] * x + e[3] * y + e[6]; + this.y = e[1] * x + e[4] * y + e[7]; + return this; + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + return this; + } + clamp(min, max) { + this.x = Math.max(min.x, Math.min(max.x, this.x)); + this.y = Math.max(min.y, Math.min(max.y, this.y)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + return this; + } + clampLength(min, max) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y; + } + cross(v) { + return this.x * v.y - this.y * v.x; + } + lengthSq() { + return this.x * this.x + this.y * this.y; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + angle() { + const angle = Math.atan2(-this.y, -this.x) + Math.PI; + return angle; + } + angleTo(v) { + const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); + if (denominator === 0) return Math.PI / 2; + const theta = this.dot(v) / denominator; + return Math.acos(clamp(theta, -1, 1)); + } + distanceTo(v) { + return Math.sqrt(this.distanceToSquared(v)); + } + distanceToSquared(v) { + const dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + } + manhattanDistanceTo(v) { + return Math.abs(this.x - v.x) + Math.abs(this.y - v.y); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + return this; + } + rotateAround(center, angle) { + const c = Math.cos(angle), s = Math.sin(angle); + const x = this.x - center.x; + const y = this.y - center.y; + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + } +}; +var Matrix3 = class _Matrix3 { + constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + _Matrix3.prototype.isMatrix3 = true; + this.elements = [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33); + } + } + set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + const te = this.elements; + te[0] = n11; + te[1] = n21; + te[2] = n31; + te[3] = n12; + te[4] = n22; + te[5] = n32; + te[6] = n13; + te[7] = n23; + te[8] = n33; + return this; + } + identity() { + this.set( + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + return this; + } + copy(m) { + const te = this.elements; + const me = m.elements; + te[0] = me[0]; + te[1] = me[1]; + te[2] = me[2]; + te[3] = me[3]; + te[4] = me[4]; + te[5] = me[5]; + te[6] = me[6]; + te[7] = me[7]; + te[8] = me[8]; + return this; + } + extractBasis(xAxis, yAxis, zAxis) { + xAxis.setFromMatrix3Column(this, 0); + yAxis.setFromMatrix3Column(this, 1); + zAxis.setFromMatrix3Column(this, 2); + return this; + } + setFromMatrix4(m) { + const me = m.elements; + this.set( + me[0], + me[4], + me[8], + me[1], + me[5], + me[9], + me[2], + me[6], + me[10] + ); + return this; + } + multiply(m) { + return this.multiplyMatrices(this, m); + } + premultiply(m) { + return this.multiplyMatrices(m, this); + } + multiplyMatrices(a, b) { + const ae = a.elements; + const be = b.elements; + const te = this.elements; + const a11 = ae[0], a12 = ae[3], a13 = ae[6]; + const a21 = ae[1], a22 = ae[4], a23 = ae[7]; + const a31 = ae[2], a32 = ae[5], a33 = ae[8]; + const b11 = be[0], b12 = be[3], b13 = be[6]; + const b21 = be[1], b22 = be[4], b23 = be[7]; + const b31 = be[2], b32 = be[5], b33 = be[8]; + te[0] = a11 * b11 + a12 * b21 + a13 * b31; + te[3] = a11 * b12 + a12 * b22 + a13 * b32; + te[6] = a11 * b13 + a12 * b23 + a13 * b33; + te[1] = a21 * b11 + a22 * b21 + a23 * b31; + te[4] = a21 * b12 + a22 * b22 + a23 * b32; + te[7] = a21 * b13 + a22 * b23 + a23 * b33; + te[2] = a31 * b11 + a32 * b21 + a33 * b31; + te[5] = a31 * b12 + a32 * b22 + a33 * b32; + te[8] = a31 * b13 + a32 * b23 + a33 * b33; + return this; + } + multiplyScalar(s) { + const te = this.elements; + te[0] *= s; + te[3] *= s; + te[6] *= s; + te[1] *= s; + te[4] *= s; + te[7] *= s; + te[2] *= s; + te[5] *= s; + te[8] *= s; + return this; + } + determinant() { + const te = this.elements; + const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i = te[8]; + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + } + invert() { + const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; + if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const detInv = 1 / det; + te[0] = t11 * detInv; + te[1] = (n31 * n23 - n33 * n21) * detInv; + te[2] = (n32 * n21 - n31 * n22) * detInv; + te[3] = t12 * detInv; + te[4] = (n33 * n11 - n31 * n13) * detInv; + te[5] = (n31 * n12 - n32 * n11) * detInv; + te[6] = t13 * detInv; + te[7] = (n21 * n13 - n23 * n11) * detInv; + te[8] = (n22 * n11 - n21 * n12) * detInv; + return this; + } + transpose() { + let tmp2; + const m = this.elements; + tmp2 = m[1]; + m[1] = m[3]; + m[3] = tmp2; + tmp2 = m[2]; + m[2] = m[6]; + m[6] = tmp2; + tmp2 = m[5]; + m[5] = m[7]; + m[7] = tmp2; + return this; + } + getNormalMatrix(matrix4) { + return this.setFromMatrix4(matrix4).invert().transpose(); + } + transposeIntoArray(r) { + const m = this.elements; + r[0] = m[0]; + r[1] = m[3]; + r[2] = m[6]; + r[3] = m[1]; + r[4] = m[4]; + r[5] = m[7]; + r[6] = m[2]; + r[7] = m[5]; + r[8] = m[8]; + return this; + } + setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { + const c = Math.cos(rotation); + const s = Math.sin(rotation); + this.set( + sx * c, + sx * s, + -sx * (c * cx + s * cy) + cx + tx, + -sy * s, + sy * c, + -sy * (-s * cx + c * cy) + cy + ty, + 0, + 0, + 1 + ); + return this; + } + // + scale(sx, sy) { + this.premultiply(_m3.makeScale(sx, sy)); + return this; + } + rotate(theta) { + this.premultiply(_m3.makeRotation(-theta)); + return this; + } + translate(tx, ty) { + this.premultiply(_m3.makeTranslation(tx, ty)); + return this; + } + // for 2D Transforms + makeTranslation(x, y) { + if (x.isVector2) { + this.set( + 1, + 0, + x.x, + 0, + 1, + x.y, + 0, + 0, + 1 + ); + } else { + this.set( + 1, + 0, + x, + 0, + 1, + y, + 0, + 0, + 1 + ); + } + return this; + } + makeRotation(theta) { + const c = Math.cos(theta); + const s = Math.sin(theta); + this.set( + c, + -s, + 0, + s, + c, + 0, + 0, + 0, + 1 + ); + return this; + } + makeScale(x, y) { + this.set( + x, + 0, + 0, + 0, + y, + 0, + 0, + 0, + 1 + ); + return this; + } + // + equals(matrix) { + const te = this.elements; + const me = matrix.elements; + for (let i = 0; i < 9; i++) { + if (te[i] !== me[i]) return false; + } + return true; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 9; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + toArray(array = [], offset = 0) { + const te = this.elements; + array[offset] = te[0]; + array[offset + 1] = te[1]; + array[offset + 2] = te[2]; + array[offset + 3] = te[3]; + array[offset + 4] = te[4]; + array[offset + 5] = te[5]; + array[offset + 6] = te[6]; + array[offset + 7] = te[7]; + array[offset + 8] = te[8]; + return array; + } + clone() { + return new this.constructor().fromArray(this.elements); + } +}; +var _m3 = new Matrix3(); +function arrayNeedsUint32(array) { + for (let i = array.length - 1; i >= 0; --i) { + if (array[i] >= 65535) return true; + } + return false; +} +var TYPED_ARRAYS = { + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array +}; +function getTypedArray(type, buffer) { + return new TYPED_ARRAYS[type](buffer); +} +function createElementNS(name) { + return document.createElementNS("http://www.w3.org/1999/xhtml", name); +} +function createCanvasElement() { + const canvas = createElementNS("canvas"); + canvas.style.display = "block"; + return canvas; +} +var _cache = {}; +function warnOnce(message) { + if (message in _cache) return; + _cache[message] = true; + console.warn(message); +} +function probeAsync(gl, sync, interval) { + return new Promise(function(resolve, reject) { + function probe() { + switch (gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0)) { + case gl.WAIT_FAILED: + reject(); + break; + case gl.TIMEOUT_EXPIRED: + setTimeout(probe, interval); + break; + default: + resolve(); + } + } + setTimeout(probe, interval); + }); +} +var LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = new Matrix3().set( + 0.8224621, + 0.177538, + 0, + 0.0331941, + 0.9668058, + 0, + 0.0170827, + 0.0723974, + 0.9105199 +); +var LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = new Matrix3().set( + 1.2249401, + -0.2249404, + 0, + -0.0420569, + 1.0420571, + 0, + -0.0196376, + -0.0786361, + 1.0982735 +); +var COLOR_SPACES = { + [LinearSRGBColorSpace]: { + transfer: LinearTransfer, + primaries: Rec709Primaries, + luminanceCoefficients: [0.2126, 0.7152, 0.0722], + toReference: (color) => color, + fromReference: (color) => color + }, + [SRGBColorSpace]: { + transfer: SRGBTransfer, + primaries: Rec709Primaries, + luminanceCoefficients: [0.2126, 0.7152, 0.0722], + toReference: (color) => color.convertSRGBToLinear(), + fromReference: (color) => color.convertLinearToSRGB() + }, + [LinearDisplayP3ColorSpace]: { + transfer: LinearTransfer, + primaries: P3Primaries, + luminanceCoefficients: [0.2289, 0.6917, 0.0793], + toReference: (color) => color.applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), + fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3) + }, + [DisplayP3ColorSpace]: { + transfer: SRGBTransfer, + primaries: P3Primaries, + luminanceCoefficients: [0.2289, 0.6917, 0.0793], + toReference: (color) => color.convertSRGBToLinear().applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), + fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3).convertLinearToSRGB() + } +}; +var SUPPORTED_WORKING_COLOR_SPACES = /* @__PURE__ */ new Set([LinearSRGBColorSpace, LinearDisplayP3ColorSpace]); +var ColorManagement = { + enabled: true, + _workingColorSpace: LinearSRGBColorSpace, + get workingColorSpace() { + return this._workingColorSpace; + }, + set workingColorSpace(colorSpace) { + if (!SUPPORTED_WORKING_COLOR_SPACES.has(colorSpace)) { + throw new Error(`Unsupported working color space, "${colorSpace}".`); + } + this._workingColorSpace = colorSpace; + }, + convert: function(color, sourceColorSpace, targetColorSpace) { + if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) { + return color; + } + const sourceToReference = COLOR_SPACES[sourceColorSpace].toReference; + const targetFromReference = COLOR_SPACES[targetColorSpace].fromReference; + return targetFromReference(sourceToReference(color)); + }, + fromWorkingColorSpace: function(color, targetColorSpace) { + return this.convert(color, this._workingColorSpace, targetColorSpace); + }, + toWorkingColorSpace: function(color, sourceColorSpace) { + return this.convert(color, sourceColorSpace, this._workingColorSpace); + }, + getPrimaries: function(colorSpace) { + return COLOR_SPACES[colorSpace].primaries; + }, + getTransfer: function(colorSpace) { + if (colorSpace === NoColorSpace) return LinearTransfer; + return COLOR_SPACES[colorSpace].transfer; + }, + getLuminanceCoefficients: function(target, colorSpace = this._workingColorSpace) { + return target.fromArray(COLOR_SPACES[colorSpace].luminanceCoefficients); + } +}; +function SRGBToLinear(c) { + return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4); +} +function LinearToSRGB(c) { + return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055; +} +var _canvas; +var ImageUtils = class { + static getDataURL(image) { + if (/^data:/i.test(image.src)) { + return image.src; + } + if (typeof HTMLCanvasElement === "undefined") { + return image.src; + } + let canvas; + if (image instanceof HTMLCanvasElement) { + canvas = image; + } else { + if (_canvas === void 0) _canvas = createElementNS("canvas"); + _canvas.width = image.width; + _canvas.height = image.height; + const context = _canvas.getContext("2d"); + if (image instanceof ImageData) { + context.putImageData(image, 0, 0); + } else { + context.drawImage(image, 0, 0, image.width, image.height); + } + canvas = _canvas; + } + if (canvas.width > 2048 || canvas.height > 2048) { + console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons", image); + return canvas.toDataURL("image/jpeg", 0.6); + } else { + return canvas.toDataURL("image/png"); + } + } + static sRGBToLinear(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + const canvas = createElementNS("canvas"); + canvas.width = image.width; + canvas.height = image.height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, image.width, image.height); + const imageData = context.getImageData(0, 0, image.width, image.height); + const data = imageData.data; + for (let i = 0; i < data.length; i++) { + data[i] = SRGBToLinear(data[i] / 255) * 255; + } + context.putImageData(imageData, 0, 0); + return canvas; + } else if (image.data) { + const data = image.data.slice(0); + for (let i = 0; i < data.length; i++) { + if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) { + data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255); + } else { + data[i] = SRGBToLinear(data[i]); + } + } + return { + data, + width: image.width, + height: image.height + }; + } else { + console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."); + return image; + } + } +}; +var _sourceId = 0; +var Source = class { + constructor(data = null) { + this.isSource = true; + Object.defineProperty(this, "id", { value: _sourceId++ }); + this.uuid = generateUUID(); + this.data = data; + this.dataReady = true; + this.version = 0; + } + set needsUpdate(value) { + if (value === true) this.version++; + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (!isRootObject && meta.images[this.uuid] !== void 0) { + return meta.images[this.uuid]; + } + const output = { + uuid: this.uuid, + url: "" + }; + const data = this.data; + if (data !== null) { + let url; + if (Array.isArray(data)) { + url = []; + for (let i = 0, l = data.length; i < l; i++) { + if (data[i].isDataTexture) { + url.push(serializeImage(data[i].image)); + } else { + url.push(serializeImage(data[i])); + } + } + } else { + url = serializeImage(data); + } + output.url = url; + } + if (!isRootObject) { + meta.images[this.uuid] = output; + } + return output; + } +}; +function serializeImage(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + return ImageUtils.getDataURL(image); + } else { + if (image.data) { + return { + data: Array.from(image.data), + width: image.width, + height: image.height, + type: image.data.constructor.name + }; + } else { + console.warn("THREE.Texture: Unable to serialize Texture."); + return {}; + } + } +} +var _textureId = 0; +var Texture = class _Texture extends EventDispatcher { + constructor(image = _Texture.DEFAULT_IMAGE, mapping = _Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = _Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace) { + super(); + this.isTexture = true; + Object.defineProperty(this, "id", { value: _textureId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.source = new Source(image); + this.mipmaps = []; + this.mapping = mapping; + this.channel = 0; + this.wrapS = wrapS; + this.wrapT = wrapT; + this.magFilter = magFilter; + this.minFilter = minFilter; + this.anisotropy = anisotropy; + this.format = format; + this.internalFormat = null; + this.type = type; + this.offset = new Vector2(0, 0); + this.repeat = new Vector2(1, 1); + this.center = new Vector2(0, 0); + this.rotation = 0; + this.matrixAutoUpdate = true; + this.matrix = new Matrix3(); + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; + this.colorSpace = colorSpace; + this.userData = {}; + this.version = 0; + this.onUpdate = null; + this.isRenderTargetTexture = false; + this.pmremVersion = 0; + } + get image() { + return this.source.data; + } + set image(value = null) { + this.source.data = value; + } + updateMatrix() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y); + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.name = source.name; + this.source = source.source; + this.mipmaps = source.mipmaps.slice(0); + this.mapping = source.mapping; + this.channel = source.channel; + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + this.anisotropy = source.anisotropy; + this.format = source.format; + this.internalFormat = source.internalFormat; + this.type = source.type; + this.offset.copy(source.offset); + this.repeat.copy(source.repeat); + this.center.copy(source.center); + this.rotation = source.rotation; + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrix.copy(source.matrix); + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.colorSpace = source.colorSpace; + this.userData = JSON.parse(JSON.stringify(source.userData)); + this.needsUpdate = true; + return this; + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (!isRootObject && meta.textures[this.uuid] !== void 0) { + return meta.textures[this.uuid]; + } + const output = { + metadata: { + version: 4.6, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + image: this.source.toJSON(meta).uuid, + mapping: this.mapping, + channel: this.channel, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + internalFormat: this.internalFormat, + type: this.type, + colorSpace: this.colorSpace, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + generateMipmaps: this.generateMipmaps, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (Object.keys(this.userData).length > 0) output.userData = this.userData; + if (!isRootObject) { + meta.textures[this.uuid] = output; + } + return output; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } + transformUv(uv) { + if (this.mapping !== UVMapping) return uv; + uv.applyMatrix3(this.matrix); + if (uv.x < 0 || uv.x > 1) { + switch (this.wrapS) { + case RepeatWrapping: + uv.x = uv.x - Math.floor(uv.x); + break; + case ClampToEdgeWrapping: + uv.x = uv.x < 0 ? 0 : 1; + break; + case MirroredRepeatWrapping: + if (Math.abs(Math.floor(uv.x) % 2) === 1) { + uv.x = Math.ceil(uv.x) - uv.x; + } else { + uv.x = uv.x - Math.floor(uv.x); + } + break; + } + } + if (uv.y < 0 || uv.y > 1) { + switch (this.wrapT) { + case RepeatWrapping: + uv.y = uv.y - Math.floor(uv.y); + break; + case ClampToEdgeWrapping: + uv.y = uv.y < 0 ? 0 : 1; + break; + case MirroredRepeatWrapping: + if (Math.abs(Math.floor(uv.y) % 2) === 1) { + uv.y = Math.ceil(uv.y) - uv.y; + } else { + uv.y = uv.y - Math.floor(uv.y); + } + break; + } + } + if (this.flipY) { + uv.y = 1 - uv.y; + } + return uv; + } + set needsUpdate(value) { + if (value === true) { + this.version++; + this.source.needsUpdate = true; + } + } + set needsPMREMUpdate(value) { + if (value === true) { + this.pmremVersion++; + } + } +}; +Texture.DEFAULT_IMAGE = null; +Texture.DEFAULT_MAPPING = UVMapping; +Texture.DEFAULT_ANISOTROPY = 1; +var Vector4 = class _Vector4 { + constructor(x = 0, y = 0, z = 0, w = 1) { + _Vector4.prototype.isVector4 = true; + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + get width() { + return this.z; + } + set width(value) { + this.z = value; + } + get height() { + return this.w; + } + set height(value) { + this.w = value; + } + set(x, y, z, w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setZ(z) { + this.z = z; + return this; + } + setW(w) { + this.w = w; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + case 2: + this.z = value; + break; + case 3: + this.w = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w); + } + copy(v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = v.w !== void 0 ? v.w : 1; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + this.z += s; + this.w += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + this.w *= v.w; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + return this; + } + applyMatrix4(m) { + const x = this.x, y = this.y, z = this.z, w = this.w; + const e = m.elements; + this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w; + this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w; + this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w; + this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + setAxisAngleFromQuaternion(q) { + this.w = 2 * Math.acos(q.w); + const s = Math.sqrt(1 - q.w * q.w); + if (s < 1e-4) { + this.x = 1; + this.y = 0; + this.z = 0; + } else { + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + } + return this; + } + setAxisAngleFromRotationMatrix(m) { + let angle, x, y, z; + const epsilon = 0.01, epsilon2 = 0.1, te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10]; + if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) { + if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) { + this.set(1, 0, 0, 0); + return this; + } + angle = Math.PI; + const xx = (m11 + 1) / 2; + const yy = (m22 + 1) / 2; + const zz = (m33 + 1) / 2; + const xy = (m12 + m21) / 4; + const xz = (m13 + m31) / 4; + const yz = (m23 + m32) / 4; + if (xx > yy && xx > zz) { + if (xx < epsilon) { + x = 0; + y = 0.707106781; + z = 0.707106781; + } else { + x = Math.sqrt(xx); + y = xy / x; + z = xz / x; + } + } else if (yy > zz) { + if (yy < epsilon) { + x = 0.707106781; + y = 0; + z = 0.707106781; + } else { + y = Math.sqrt(yy); + x = xy / y; + z = yz / y; + } + } else { + if (zz < epsilon) { + x = 0.707106781; + y = 0.707106781; + z = 0; + } else { + z = Math.sqrt(zz); + x = xz / z; + y = yz / z; + } + } + this.set(x, y, z, angle); + return this; + } + let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); + if (Math.abs(s) < 1e-3) s = 1; + this.x = (m32 - m23) / s; + this.y = (m13 - m31) / s; + this.z = (m21 - m12) / s; + this.w = Math.acos((m11 + m22 + m33 - 1) / 2); + return this; + } + setFromMatrixPosition(m) { + const e = m.elements; + this.x = e[12]; + this.y = e[13]; + this.z = e[14]; + this.w = e[15]; + return this; + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + this.z = Math.min(this.z, v.z); + this.w = Math.min(this.w, v.w); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + this.z = Math.max(this.z, v.z); + this.w = Math.max(this.w, v.w); + return this; + } + clamp(min, max) { + this.x = Math.max(min.x, Math.min(max.x, this.x)); + this.y = Math.max(min.y, Math.min(max.y, this.y)); + this.z = Math.max(min.z, Math.min(max.z, this.z)); + this.w = Math.max(min.w, Math.min(max.w, this.w)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + this.z = Math.max(minVal, Math.min(maxVal, this.z)); + this.w = Math.max(minVal, Math.min(maxVal, this.w)); + return this; + } + clampLength(min, max) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + this.w = Math.floor(this.w); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + this.w = Math.ceil(this.w); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + this.w = Math.round(this.w); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + this.z = Math.trunc(this.z); + this.w = Math.trunc(this.w); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + this.w = -this.w; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + this.z += (v.z - this.z) * alpha; + this.w += (v.w - this.w) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + this.z = v1.z + (v2.z - v1.z) * alpha; + this.w = v1.w + (v2.w - v1.w) * alpha; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + this.z = array[offset + 2]; + this.w = array[offset + 3]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + array[offset + 2] = this.z; + array[offset + 3] = this.w; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + this.z = attribute.getZ(index); + this.w = attribute.getW(index); + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + this.w = Math.random(); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + yield this.z; + yield this.w; + } +}; +var RenderTarget = class extends EventDispatcher { + constructor(width = 1, height = 1, options = {}) { + super(); + this.isRenderTarget = true; + this.width = width; + this.height = height; + this.depth = 1; + this.scissor = new Vector4(0, 0, width, height); + this.scissorTest = false; + this.viewport = new Vector4(0, 0, width, height); + const image = { width, height, depth: 1 }; + options = Object.assign({ + generateMipmaps: false, + internalFormat: null, + minFilter: LinearFilter, + depthBuffer: true, + stencilBuffer: false, + resolveDepthBuffer: true, + resolveStencilBuffer: true, + depthTexture: null, + samples: 0, + count: 1 + }, options); + const texture = new Texture(image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); + texture.flipY = false; + texture.generateMipmaps = options.generateMipmaps; + texture.internalFormat = options.internalFormat; + this.textures = []; + const count = options.count; + for (let i = 0; i < count; i++) { + this.textures[i] = texture.clone(); + this.textures[i].isRenderTargetTexture = true; + } + this.depthBuffer = options.depthBuffer; + this.stencilBuffer = options.stencilBuffer; + this.resolveDepthBuffer = options.resolveDepthBuffer; + this.resolveStencilBuffer = options.resolveStencilBuffer; + this.depthTexture = options.depthTexture; + this.samples = options.samples; + } + get texture() { + return this.textures[0]; + } + set texture(value) { + this.textures[0] = value; + } + setSize(width, height, depth = 1) { + if (this.width !== width || this.height !== height || this.depth !== depth) { + this.width = width; + this.height = height; + this.depth = depth; + for (let i = 0, il = this.textures.length; i < il; i++) { + this.textures[i].image.width = width; + this.textures[i].image.height = height; + this.textures[i].image.depth = depth; + } + this.dispose(); + } + this.viewport.set(0, 0, width, height); + this.scissor.set(0, 0, width, height); + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.width = source.width; + this.height = source.height; + this.depth = source.depth; + this.scissor.copy(source.scissor); + this.scissorTest = source.scissorTest; + this.viewport.copy(source.viewport); + this.textures.length = 0; + for (let i = 0, il = source.textures.length; i < il; i++) { + this.textures[i] = source.textures[i].clone(); + this.textures[i].isRenderTargetTexture = true; + } + const image = Object.assign({}, source.texture.image); + this.texture.source = new Source(image); + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.resolveDepthBuffer = source.resolveDepthBuffer; + this.resolveStencilBuffer = source.resolveStencilBuffer; + if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); + this.samples = source.samples; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } +}; +var WebGLRenderTarget = class extends RenderTarget { + constructor(width = 1, height = 1, options = {}) { + super(width, height, options); + this.isWebGLRenderTarget = true; + } +}; +var DataArrayTexture = class extends Texture { + constructor(data = null, width = 1, height = 1, depth = 1) { + super(null); + this.isDataArrayTexture = true; + this.image = { data, width, height, depth }; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.wrapR = ClampToEdgeWrapping; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + this.layerUpdates = /* @__PURE__ */ new Set(); + } + addLayerUpdate(layerIndex) { + this.layerUpdates.add(layerIndex); + } + clearLayerUpdates() { + this.layerUpdates.clear(); + } +}; +var WebGLArrayRenderTarget = class extends WebGLRenderTarget { + constructor(width = 1, height = 1, depth = 1, options = {}) { + super(width, height, options); + this.isWebGLArrayRenderTarget = true; + this.depth = depth; + this.texture = new DataArrayTexture(null, width, height, depth); + this.texture.isRenderTargetTexture = true; + } +}; +var Data3DTexture = class extends Texture { + constructor(data = null, width = 1, height = 1, depth = 1) { + super(null); + this.isData3DTexture = true; + this.image = { data, width, height, depth }; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.wrapR = ClampToEdgeWrapping; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + } +}; +var WebGL3DRenderTarget = class extends WebGLRenderTarget { + constructor(width = 1, height = 1, depth = 1, options = {}) { + super(width, height, options); + this.isWebGL3DRenderTarget = true; + this.depth = depth; + this.texture = new Data3DTexture(null, width, height, depth); + this.texture.isRenderTargetTexture = true; + } +}; +var Quaternion = class { + constructor(x = 0, y = 0, z = 0, w = 1) { + this.isQuaternion = true; + this._x = x; + this._y = y; + this._z = z; + this._w = w; + } + static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) { + let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3]; + if (t === 0) { + dst[dstOffset + 0] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + return; + } + if (t === 1) { + dst[dstOffset + 0] = x1; + dst[dstOffset + 1] = y1; + dst[dstOffset + 2] = z1; + dst[dstOffset + 3] = w1; + return; + } + if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { + let s = 1 - t; + const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos; + if (sqrSin > Number.EPSILON) { + const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir); + s = Math.sin(s * len) / sin; + t = Math.sin(t * len) / sin; + } + const tDir = t * dir; + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + if (s === 1 - t) { + const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + } + } + dst[dstOffset] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + } + static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { + const x0 = src0[srcOffset0]; + const y0 = src0[srcOffset0 + 1]; + const z0 = src0[srcOffset0 + 2]; + const w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1]; + const y1 = src1[srcOffset1 + 1]; + const z1 = src1[srcOffset1 + 2]; + const w1 = src1[srcOffset1 + 3]; + dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; + dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; + dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; + dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; + return dst; + } + get x() { + return this._x; + } + set x(value) { + this._x = value; + this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(value) { + this._y = value; + this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(value) { + this._z = value; + this._onChangeCallback(); + } + get w() { + return this._w; + } + set w(value) { + this._w = value; + this._onChangeCallback(); + } + set(x, y, z, w) { + this._x = x; + this._y = y; + this._z = z; + this._w = w; + this._onChangeCallback(); + return this; + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w); + } + copy(quaternion) { + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + this._onChangeCallback(); + return this; + } + setFromEuler(euler, update = true) { + const x = euler._x, y = euler._y, z = euler._z, order = euler._order; + const cos = Math.cos; + const sin = Math.sin; + const c1 = cos(x / 2); + const c2 = cos(y / 2); + const c3 = cos(z / 2); + const s1 = sin(x / 2); + const s2 = sin(y / 2); + const s3 = sin(z / 2); + switch (order) { + case "XYZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "YXZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "ZXY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "ZYX": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "YZX": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "XZY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order); + } + if (update === true) this._onChangeCallback(); + return this; + } + setFromAxisAngle(axis, angle) { + const halfAngle = angle / 2, s = Math.sin(halfAngle); + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos(halfAngle); + this._onChangeCallback(); + return this; + } + setFromRotationMatrix(m) { + const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33; + if (trace > 0) { + const s = 0.5 / Math.sqrt(trace + 1); + this._w = 0.25 / s; + this._x = (m32 - m23) * s; + this._y = (m13 - m31) * s; + this._z = (m21 - m12) * s; + } else if (m11 > m22 && m11 > m33) { + const s = 2 * Math.sqrt(1 + m11 - m22 - m33); + this._w = (m32 - m23) / s; + this._x = 0.25 * s; + this._y = (m12 + m21) / s; + this._z = (m13 + m31) / s; + } else if (m22 > m33) { + const s = 2 * Math.sqrt(1 + m22 - m11 - m33); + this._w = (m13 - m31) / s; + this._x = (m12 + m21) / s; + this._y = 0.25 * s; + this._z = (m23 + m32) / s; + } else { + const s = 2 * Math.sqrt(1 + m33 - m11 - m22); + this._w = (m21 - m12) / s; + this._x = (m13 + m31) / s; + this._y = (m23 + m32) / s; + this._z = 0.25 * s; + } + this._onChangeCallback(); + return this; + } + setFromUnitVectors(vFrom, vTo) { + let r = vFrom.dot(vTo) + 1; + if (r < Number.EPSILON) { + r = 0; + if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { + this._x = -vFrom.y; + this._y = vFrom.x; + this._z = 0; + this._w = r; + } else { + this._x = 0; + this._y = -vFrom.z; + this._z = vFrom.y; + this._w = r; + } + } else { + this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; + this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; + this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._w = r; + } + return this.normalize(); + } + angleTo(q) { + return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1))); + } + rotateTowards(q, step) { + const angle = this.angleTo(q); + if (angle === 0) return this; + const t = Math.min(1, step / angle); + this.slerp(q, t); + return this; + } + identity() { + return this.set(0, 0, 0, 1); + } + invert() { + return this.conjugate(); + } + conjugate() { + this._x *= -1; + this._y *= -1; + this._z *= -1; + this._onChangeCallback(); + return this; + } + dot(v) { + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); + } + normalize() { + let l = this.length(); + if (l === 0) { + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + } else { + l = 1 / l; + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + } + this._onChangeCallback(); + return this; + } + multiply(q) { + return this.multiplyQuaternions(this, q); + } + premultiply(q) { + return this.multiplyQuaternions(q, this); + } + multiplyQuaternions(a, b) { + const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + this._onChangeCallback(); + return this; + } + slerp(qb, t) { + if (t === 0) return this; + if (t === 1) return this.copy(qb); + const x = this._x, y = this._y, z = this._z, w = this._w; + let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + if (cosHalfTheta < 0) { + this._w = -qb._w; + this._x = -qb._x; + this._y = -qb._y; + this._z = -qb._z; + cosHalfTheta = -cosHalfTheta; + } else { + this.copy(qb); + } + if (cosHalfTheta >= 1) { + this._w = w; + this._x = x; + this._y = y; + this._z = z; + return this; + } + const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta; + if (sqrSinHalfTheta <= Number.EPSILON) { + const s = 1 - t; + this._w = s * w + t * this._w; + this._x = s * x + t * this._x; + this._y = s * y + t * this._y; + this._z = s * z + t * this._z; + this.normalize(); + return this; + } + const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); + const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); + const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta; + this._w = w * ratioA + this._w * ratioB; + this._x = x * ratioA + this._x * ratioB; + this._y = y * ratioA + this._y * ratioB; + this._z = z * ratioA + this._z * ratioB; + this._onChangeCallback(); + return this; + } + slerpQuaternions(qa, qb, t) { + return this.copy(qa).slerp(qb, t); + } + random() { + const theta1 = 2 * Math.PI * Math.random(); + const theta2 = 2 * Math.PI * Math.random(); + const x0 = Math.random(); + const r1 = Math.sqrt(1 - x0); + const r2 = Math.sqrt(x0); + return this.set( + r1 * Math.sin(theta1), + r1 * Math.cos(theta1), + r2 * Math.sin(theta2), + r2 * Math.cos(theta2) + ); + } + equals(quaternion) { + return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; + } + fromArray(array, offset = 0) { + this._x = array[offset]; + this._y = array[offset + 1]; + this._z = array[offset + 2]; + this._w = array[offset + 3]; + this._onChangeCallback(); + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this._x; + array[offset + 1] = this._y; + array[offset + 2] = this._z; + array[offset + 3] = this._w; + return array; + } + fromBufferAttribute(attribute, index) { + this._x = attribute.getX(index); + this._y = attribute.getY(index); + this._z = attribute.getZ(index); + this._w = attribute.getW(index); + this._onChangeCallback(); + return this; + } + toJSON() { + return this.toArray(); + } + _onChange(callback) { + this._onChangeCallback = callback; + return this; + } + _onChangeCallback() { + } + *[Symbol.iterator]() { + yield this._x; + yield this._y; + yield this._z; + yield this._w; + } +}; +var Vector3 = class _Vector3 { + constructor(x = 0, y = 0, z = 0) { + _Vector3.prototype.isVector3 = true; + this.x = x; + this.y = y; + this.z = z; + } + set(x, y, z) { + if (z === void 0) z = this.z; + this.x = x; + this.y = y; + this.z = z; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + this.z = scalar; + return this; + } + setX(x) { + this.x = x; + return this; + } + setY(y) { + this.y = y; + return this; + } + setZ(z) { + this.z = z; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + case 2: + this.z = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z); + } + copy(v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + this.z += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + this.z -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + return this; + } + multiplyVectors(a, b) { + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + return this; + } + applyEuler(euler) { + return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); + } + applyAxisAngle(axis, angle) { + return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle)); + } + applyMatrix3(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x + e[3] * y + e[6] * z; + this.y = e[1] * x + e[4] * y + e[7] * z; + this.z = e[2] * x + e[5] * y + e[8] * z; + return this; + } + applyNormalMatrix(m) { + return this.applyMatrix3(m).normalize(); + } + applyMatrix4(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); + this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; + this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; + this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; + return this; + } + applyQuaternion(q) { + const vx = this.x, vy = this.y, vz = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + const tx = 2 * (qy * vz - qz * vy); + const ty = 2 * (qz * vx - qx * vz); + const tz = 2 * (qx * vy - qy * vx); + this.x = vx + qw * tx + qy * tz - qz * ty; + this.y = vy + qw * ty + qz * tx - qx * tz; + this.z = vz + qw * tz + qx * ty - qy * tx; + return this; + } + project(camera) { + return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); + } + unproject(camera) { + return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); + } + transformDirection(m) { + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x + e[4] * y + e[8] * z; + this.y = e[1] * x + e[5] * y + e[9] * z; + this.z = e[2] * x + e[6] * y + e[10] * z; + return this.normalize(); + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + this.z = Math.min(this.z, v.z); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + this.z = Math.max(this.z, v.z); + return this; + } + clamp(min, max) { + this.x = Math.max(min.x, Math.min(max.x, this.x)); + this.y = Math.max(min.y, Math.min(max.y, this.y)); + this.z = Math.max(min.z, Math.min(max.z, this.z)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + this.z = Math.max(minVal, Math.min(maxVal, this.z)); + return this; + } + clampLength(min, max) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + this.z = Math.trunc(this.z); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + } + // TODO lengthSquared? + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + this.z += (v.z - this.z) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + this.z = v1.z + (v2.z - v1.z) * alpha; + return this; + } + cross(v) { + return this.crossVectors(this, v); + } + crossVectors(a, b) { + const ax = a.x, ay = a.y, az = a.z; + const bx = b.x, by = b.y, bz = b.z; + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + return this; + } + projectOnVector(v) { + const denominator = v.lengthSq(); + if (denominator === 0) return this.set(0, 0, 0); + const scalar = v.dot(this) / denominator; + return this.copy(v).multiplyScalar(scalar); + } + projectOnPlane(planeNormal) { + _vector$c.copy(this).projectOnVector(planeNormal); + return this.sub(_vector$c); + } + reflect(normal) { + return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal))); + } + angleTo(v) { + const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); + if (denominator === 0) return Math.PI / 2; + const theta = this.dot(v) / denominator; + return Math.acos(clamp(theta, -1, 1)); + } + distanceTo(v) { + return Math.sqrt(this.distanceToSquared(v)); + } + distanceToSquared(v) { + const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + return dx * dx + dy * dy + dz * dz; + } + manhattanDistanceTo(v) { + return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); + } + setFromSpherical(s) { + return this.setFromSphericalCoords(s.radius, s.phi, s.theta); + } + setFromSphericalCoords(radius, phi, theta) { + const sinPhiRadius = Math.sin(phi) * radius; + this.x = sinPhiRadius * Math.sin(theta); + this.y = Math.cos(phi) * radius; + this.z = sinPhiRadius * Math.cos(theta); + return this; + } + setFromCylindrical(c) { + return this.setFromCylindricalCoords(c.radius, c.theta, c.y); + } + setFromCylindricalCoords(radius, theta, y) { + this.x = radius * Math.sin(theta); + this.y = y; + this.z = radius * Math.cos(theta); + return this; + } + setFromMatrixPosition(m) { + const e = m.elements; + this.x = e[12]; + this.y = e[13]; + this.z = e[14]; + return this; + } + setFromMatrixScale(m) { + const sx = this.setFromMatrixColumn(m, 0).length(); + const sy = this.setFromMatrixColumn(m, 1).length(); + const sz = this.setFromMatrixColumn(m, 2).length(); + this.x = sx; + this.y = sy; + this.z = sz; + return this; + } + setFromMatrixColumn(m, index) { + return this.fromArray(m.elements, index * 4); + } + setFromMatrix3Column(m, index) { + return this.fromArray(m.elements, index * 3); + } + setFromEuler(e) { + this.x = e._x; + this.y = e._y; + this.z = e._z; + return this; + } + setFromColor(c) { + this.x = c.r; + this.y = c.g; + this.z = c.b; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y && v.z === this.z; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + this.z = array[offset + 2]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + array[offset + 2] = this.z; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + this.z = attribute.getZ(index); + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + return this; + } + randomDirection() { + const theta = Math.random() * Math.PI * 2; + const u = Math.random() * 2 - 1; + const c = Math.sqrt(1 - u * u); + this.x = c * Math.cos(theta); + this.y = u; + this.z = c * Math.sin(theta); + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + yield this.z; + } +}; +var _vector$c = new Vector3(); +var _quaternion$4 = new Quaternion(); +var Box3 = class { + constructor(min = new Vector3(Infinity, Infinity, Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) { + this.isBox3 = true; + this.min = min; + this.max = max; + } + set(min, max) { + this.min.copy(min); + this.max.copy(max); + return this; + } + setFromArray(array) { + this.makeEmpty(); + for (let i = 0, il = array.length; i < il; i += 3) { + this.expandByPoint(_vector$b.fromArray(array, i)); + } + return this; + } + setFromBufferAttribute(attribute) { + this.makeEmpty(); + for (let i = 0, il = attribute.count; i < il; i++) { + this.expandByPoint(_vector$b.fromBufferAttribute(attribute, i)); + } + return this; + } + setFromPoints(points) { + this.makeEmpty(); + for (let i = 0, il = points.length; i < il; i++) { + this.expandByPoint(points[i]); + } + return this; + } + setFromCenterAndSize(center, size) { + const halfSize = _vector$b.copy(size).multiplyScalar(0.5); + this.min.copy(center).sub(halfSize); + this.max.copy(center).add(halfSize); + return this; + } + setFromObject(object, precise = false) { + this.makeEmpty(); + return this.expandByObject(object, precise); + } + clone() { + return new this.constructor().copy(this); + } + copy(box) { + this.min.copy(box.min); + this.max.copy(box.max); + return this; + } + makeEmpty() { + this.min.x = this.min.y = this.min.z = Infinity; + this.max.x = this.max.y = this.max.z = -Infinity; + return this; + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z; + } + getCenter(target) { + return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); + } + getSize(target) { + return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min); + } + expandByPoint(point) { + this.min.min(point); + this.max.max(point); + return this; + } + expandByVector(vector) { + this.min.sub(vector); + this.max.add(vector); + return this; + } + expandByScalar(scalar) { + this.min.addScalar(-scalar); + this.max.addScalar(scalar); + return this; + } + expandByObject(object, precise = false) { + object.updateWorldMatrix(false, false); + const geometry = object.geometry; + if (geometry !== void 0) { + const positionAttribute = geometry.getAttribute("position"); + if (precise === true && positionAttribute !== void 0 && object.isInstancedMesh !== true) { + for (let i = 0, l = positionAttribute.count; i < l; i++) { + if (object.isMesh === true) { + object.getVertexPosition(i, _vector$b); + } else { + _vector$b.fromBufferAttribute(positionAttribute, i); + } + _vector$b.applyMatrix4(object.matrixWorld); + this.expandByPoint(_vector$b); + } + } else { + if (object.boundingBox !== void 0) { + if (object.boundingBox === null) { + object.computeBoundingBox(); + } + _box$4.copy(object.boundingBox); + } else { + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + _box$4.copy(geometry.boundingBox); + } + _box$4.applyMatrix4(object.matrixWorld); + this.union(_box$4); + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + this.expandByObject(children[i], precise); + } + return this; + } + containsPoint(point) { + return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y && point.z >= this.min.z && point.z <= this.max.z; + } + containsBox(box) { + return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; + } + getParameter(point, target) { + return target.set( + (point.x - this.min.x) / (this.max.x - this.min.x), + (point.y - this.min.y) / (this.max.y - this.min.y), + (point.z - this.min.z) / (this.max.z - this.min.z) + ); + } + intersectsBox(box) { + return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y && box.max.z >= this.min.z && box.min.z <= this.max.z; + } + intersectsSphere(sphere) { + this.clampPoint(sphere.center, _vector$b); + return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; + } + intersectsPlane(plane) { + let min, max; + if (plane.normal.x > 0) { + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + } else { + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + } + if (plane.normal.y > 0) { + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + } else { + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + } + if (plane.normal.z > 0) { + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + } else { + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + } + return min <= -plane.constant && max >= -plane.constant; + } + intersectsTriangle(triangle) { + if (this.isEmpty()) { + return false; + } + this.getCenter(_center); + _extents.subVectors(this.max, _center); + _v0$3.subVectors(triangle.a, _center); + _v1$7.subVectors(triangle.b, _center); + _v2$4.subVectors(triangle.c, _center); + _f0.subVectors(_v1$7, _v0$3); + _f1.subVectors(_v2$4, _v1$7); + _f2.subVectors(_v0$3, _v2$4); + let axes = [ + 0, + -_f0.z, + _f0.y, + 0, + -_f1.z, + _f1.y, + 0, + -_f2.z, + _f2.y, + _f0.z, + 0, + -_f0.x, + _f1.z, + 0, + -_f1.x, + _f2.z, + 0, + -_f2.x, + -_f0.y, + _f0.x, + 0, + -_f1.y, + _f1.x, + 0, + -_f2.y, + _f2.x, + 0 + ]; + if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { + return false; + } + axes = [1, 0, 0, 0, 1, 0, 0, 0, 1]; + if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { + return false; + } + _triangleNormal.crossVectors(_f0, _f1); + axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z]; + return satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents); + } + clampPoint(point, target) { + return target.copy(point).clamp(this.min, this.max); + } + distanceToPoint(point) { + return this.clampPoint(point, _vector$b).distanceTo(point); + } + getBoundingSphere(target) { + if (this.isEmpty()) { + target.makeEmpty(); + } else { + this.getCenter(target.center); + target.radius = this.getSize(_vector$b).length() * 0.5; + } + return target; + } + intersect(box) { + this.min.max(box.min); + this.max.min(box.max); + if (this.isEmpty()) this.makeEmpty(); + return this; + } + union(box) { + this.min.min(box.min); + this.max.max(box.max); + return this; + } + applyMatrix4(matrix) { + if (this.isEmpty()) return this; + _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); + _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); + _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); + _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); + _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); + _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); + _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); + _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); + this.setFromPoints(_points); + return this; + } + translate(offset) { + this.min.add(offset); + this.max.add(offset); + return this; + } + equals(box) { + return box.min.equals(this.min) && box.max.equals(this.max); + } +}; +var _points = [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() +]; +var _vector$b = new Vector3(); +var _box$4 = new Box3(); +var _v0$3 = new Vector3(); +var _v1$7 = new Vector3(); +var _v2$4 = new Vector3(); +var _f0 = new Vector3(); +var _f1 = new Vector3(); +var _f2 = new Vector3(); +var _center = new Vector3(); +var _extents = new Vector3(); +var _triangleNormal = new Vector3(); +var _testAxis = new Vector3(); +function satForAxes(axes, v0, v1, v2, extents) { + for (let i = 0, j = axes.length - 3; i <= j; i += 3) { + _testAxis.fromArray(axes, i); + const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); + const p0 = v0.dot(_testAxis); + const p1 = v1.dot(_testAxis); + const p2 = v2.dot(_testAxis); + if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) { + return false; + } + } + return true; +} +var _box$3 = new Box3(); +var _v1$6 = new Vector3(); +var _v2$3 = new Vector3(); +var Sphere = class { + constructor(center = new Vector3(), radius = -1) { + this.isSphere = true; + this.center = center; + this.radius = radius; + } + set(center, radius) { + this.center.copy(center); + this.radius = radius; + return this; + } + setFromPoints(points, optionalCenter) { + const center = this.center; + if (optionalCenter !== void 0) { + center.copy(optionalCenter); + } else { + _box$3.setFromPoints(points).getCenter(center); + } + let maxRadiusSq = 0; + for (let i = 0, il = points.length; i < il; i++) { + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i])); + } + this.radius = Math.sqrt(maxRadiusSq); + return this; + } + copy(sphere) { + this.center.copy(sphere.center); + this.radius = sphere.radius; + return this; + } + isEmpty() { + return this.radius < 0; + } + makeEmpty() { + this.center.set(0, 0, 0); + this.radius = -1; + return this; + } + containsPoint(point) { + return point.distanceToSquared(this.center) <= this.radius * this.radius; + } + distanceToPoint(point) { + return point.distanceTo(this.center) - this.radius; + } + intersectsSphere(sphere) { + const radiusSum = this.radius + sphere.radius; + return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum; + } + intersectsBox(box) { + return box.intersectsSphere(this); + } + intersectsPlane(plane) { + return Math.abs(plane.distanceToPoint(this.center)) <= this.radius; + } + clampPoint(point, target) { + const deltaLengthSq = this.center.distanceToSquared(point); + target.copy(point); + if (deltaLengthSq > this.radius * this.radius) { + target.sub(this.center).normalize(); + target.multiplyScalar(this.radius).add(this.center); + } + return target; + } + getBoundingBox(target) { + if (this.isEmpty()) { + target.makeEmpty(); + return target; + } + target.set(this.center, this.center); + target.expandByScalar(this.radius); + return target; + } + applyMatrix4(matrix) { + this.center.applyMatrix4(matrix); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + return this; + } + translate(offset) { + this.center.add(offset); + return this; + } + expandByPoint(point) { + if (this.isEmpty()) { + this.center.copy(point); + this.radius = 0; + return this; + } + _v1$6.subVectors(point, this.center); + const lengthSq = _v1$6.lengthSq(); + if (lengthSq > this.radius * this.radius) { + const length = Math.sqrt(lengthSq); + const delta = (length - this.radius) * 0.5; + this.center.addScaledVector(_v1$6, delta / length); + this.radius += delta; + } + return this; + } + union(sphere) { + if (sphere.isEmpty()) { + return this; + } + if (this.isEmpty()) { + this.copy(sphere); + return this; + } + if (this.center.equals(sphere.center) === true) { + this.radius = Math.max(this.radius, sphere.radius); + } else { + _v2$3.subVectors(sphere.center, this.center).setLength(sphere.radius); + this.expandByPoint(_v1$6.copy(sphere.center).add(_v2$3)); + this.expandByPoint(_v1$6.copy(sphere.center).sub(_v2$3)); + } + return this; + } + equals(sphere) { + return sphere.center.equals(this.center) && sphere.radius === this.radius; + } + clone() { + return new this.constructor().copy(this); + } +}; +var _vector$a = new Vector3(); +var _segCenter = new Vector3(); +var _segDir = new Vector3(); +var _diff = new Vector3(); +var _edge1 = new Vector3(); +var _edge2 = new Vector3(); +var _normal$1 = new Vector3(); +var Ray = class { + constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) { + this.origin = origin; + this.direction = direction; + } + set(origin, direction) { + this.origin.copy(origin); + this.direction.copy(direction); + return this; + } + copy(ray) { + this.origin.copy(ray.origin); + this.direction.copy(ray.direction); + return this; + } + at(t, target) { + return target.copy(this.origin).addScaledVector(this.direction, t); + } + lookAt(v) { + this.direction.copy(v).sub(this.origin).normalize(); + return this; + } + recast(t) { + this.origin.copy(this.at(t, _vector$a)); + return this; + } + closestPointToPoint(point, target) { + target.subVectors(point, this.origin); + const directionDistance = target.dot(this.direction); + if (directionDistance < 0) { + return target.copy(this.origin); + } + return target.copy(this.origin).addScaledVector(this.direction, directionDistance); + } + distanceToPoint(point) { + return Math.sqrt(this.distanceSqToPoint(point)); + } + distanceSqToPoint(point) { + const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); + if (directionDistance < 0) { + return this.origin.distanceToSquared(point); + } + _vector$a.copy(this.origin).addScaledVector(this.direction, directionDistance); + return _vector$a.distanceToSquared(point); + } + distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) { + _segCenter.copy(v0).add(v1).multiplyScalar(0.5); + _segDir.copy(v1).sub(v0).normalize(); + _diff.copy(this.origin).sub(_segCenter); + const segExtent = v0.distanceTo(v1) * 0.5; + const a01 = -this.direction.dot(_segDir); + const b0 = _diff.dot(this.direction); + const b1 = -_diff.dot(_segDir); + const c = _diff.lengthSq(); + const det = Math.abs(1 - a01 * a01); + let s0, s1, sqrDist, extDet; + if (det > 0) { + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + if (s0 >= 0) { + if (s1 >= -extDet) { + if (s1 <= extDet) { + const invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c; + } else { + s1 = segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } else { + s1 = -segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } else { + if (s1 <= -extDet) { + s0 = Math.max(0, -(-a01 * segExtent + b0)); + s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } else if (s1 <= extDet) { + s0 = 0; + s1 = Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = s1 * (s1 + 2 * b1) + c; + } else { + s0 = Math.max(0, -(a01 * segExtent + b0)); + s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + } + } else { + s1 = a01 > 0 ? -segExtent : segExtent; + s0 = Math.max(0, -(a01 * s1 + b0)); + sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; + } + if (optionalPointOnRay) { + optionalPointOnRay.copy(this.origin).addScaledVector(this.direction, s0); + } + if (optionalPointOnSegment) { + optionalPointOnSegment.copy(_segCenter).addScaledVector(_segDir, s1); + } + return sqrDist; + } + intersectSphere(sphere, target) { + _vector$a.subVectors(sphere.center, this.origin); + const tca = _vector$a.dot(this.direction); + const d2 = _vector$a.dot(_vector$a) - tca * tca; + const radius2 = sphere.radius * sphere.radius; + if (d2 > radius2) return null; + const thc = Math.sqrt(radius2 - d2); + const t0 = tca - thc; + const t1 = tca + thc; + if (t1 < 0) return null; + if (t0 < 0) return this.at(t1, target); + return this.at(t0, target); + } + intersectsSphere(sphere) { + return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius; + } + distanceToPlane(plane) { + const denominator = plane.normal.dot(this.direction); + if (denominator === 0) { + if (plane.distanceToPoint(this.origin) === 0) { + return 0; + } + return null; + } + const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; + return t >= 0 ? t : null; + } + intersectPlane(plane, target) { + const t = this.distanceToPlane(plane); + if (t === null) { + return null; + } + return this.at(t, target); + } + intersectsPlane(plane) { + const distToPoint = plane.distanceToPoint(this.origin); + if (distToPoint === 0) { + return true; + } + const denominator = plane.normal.dot(this.direction); + if (denominator * distToPoint < 0) { + return true; + } + return false; + } + intersectBox(box, target) { + let tmin, tmax, tymin, tymax, tzmin, tzmax; + const invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z; + const origin = this.origin; + if (invdirx >= 0) { + tmin = (box.min.x - origin.x) * invdirx; + tmax = (box.max.x - origin.x) * invdirx; + } else { + tmin = (box.max.x - origin.x) * invdirx; + tmax = (box.min.x - origin.x) * invdirx; + } + if (invdiry >= 0) { + tymin = (box.min.y - origin.y) * invdiry; + tymax = (box.max.y - origin.y) * invdiry; + } else { + tymin = (box.max.y - origin.y) * invdiry; + tymax = (box.min.y - origin.y) * invdiry; + } + if (tmin > tymax || tymin > tmax) return null; + if (tymin > tmin || isNaN(tmin)) tmin = tymin; + if (tymax < tmax || isNaN(tmax)) tmax = tymax; + if (invdirz >= 0) { + tzmin = (box.min.z - origin.z) * invdirz; + tzmax = (box.max.z - origin.z) * invdirz; + } else { + tzmin = (box.max.z - origin.z) * invdirz; + tzmax = (box.min.z - origin.z) * invdirz; + } + if (tmin > tzmax || tzmin > tmax) return null; + if (tzmin > tmin || tmin !== tmin) tmin = tzmin; + if (tzmax < tmax || tmax !== tmax) tmax = tzmax; + if (tmax < 0) return null; + return this.at(tmin >= 0 ? tmin : tmax, target); + } + intersectsBox(box) { + return this.intersectBox(box, _vector$a) !== null; + } + intersectTriangle(a, b, c, backfaceCulling, target) { + _edge1.subVectors(b, a); + _edge2.subVectors(c, a); + _normal$1.crossVectors(_edge1, _edge2); + let DdN = this.direction.dot(_normal$1); + let sign2; + if (DdN > 0) { + if (backfaceCulling) return null; + sign2 = 1; + } else if (DdN < 0) { + sign2 = -1; + DdN = -DdN; + } else { + return null; + } + _diff.subVectors(this.origin, a); + const DdQxE2 = sign2 * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); + if (DdQxE2 < 0) { + return null; + } + const DdE1xQ = sign2 * this.direction.dot(_edge1.cross(_diff)); + if (DdE1xQ < 0) { + return null; + } + if (DdQxE2 + DdE1xQ > DdN) { + return null; + } + const QdN = -sign2 * _diff.dot(_normal$1); + if (QdN < 0) { + return null; + } + return this.at(QdN / DdN, target); + } + applyMatrix4(matrix4) { + this.origin.applyMatrix4(matrix4); + this.direction.transformDirection(matrix4); + return this; + } + equals(ray) { + return ray.origin.equals(this.origin) && ray.direction.equals(this.direction); + } + clone() { + return new this.constructor().copy(this); + } +}; +var Matrix4 = class _Matrix4 { + constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { + _Matrix4.prototype.isMatrix4 = true; + this.elements = [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44); + } + } + set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { + const te = this.elements; + te[0] = n11; + te[4] = n12; + te[8] = n13; + te[12] = n14; + te[1] = n21; + te[5] = n22; + te[9] = n23; + te[13] = n24; + te[2] = n31; + te[6] = n32; + te[10] = n33; + te[14] = n34; + te[3] = n41; + te[7] = n42; + te[11] = n43; + te[15] = n44; + return this; + } + identity() { + this.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + clone() { + return new _Matrix4().fromArray(this.elements); + } + copy(m) { + const te = this.elements; + const me = m.elements; + te[0] = me[0]; + te[1] = me[1]; + te[2] = me[2]; + te[3] = me[3]; + te[4] = me[4]; + te[5] = me[5]; + te[6] = me[6]; + te[7] = me[7]; + te[8] = me[8]; + te[9] = me[9]; + te[10] = me[10]; + te[11] = me[11]; + te[12] = me[12]; + te[13] = me[13]; + te[14] = me[14]; + te[15] = me[15]; + return this; + } + copyPosition(m) { + const te = this.elements, me = m.elements; + te[12] = me[12]; + te[13] = me[13]; + te[14] = me[14]; + return this; + } + setFromMatrix3(m) { + const me = m.elements; + this.set( + me[0], + me[3], + me[6], + 0, + me[1], + me[4], + me[7], + 0, + me[2], + me[5], + me[8], + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + extractBasis(xAxis, yAxis, zAxis) { + xAxis.setFromMatrixColumn(this, 0); + yAxis.setFromMatrixColumn(this, 1); + zAxis.setFromMatrixColumn(this, 2); + return this; + } + makeBasis(xAxis, yAxis, zAxis) { + this.set( + xAxis.x, + yAxis.x, + zAxis.x, + 0, + xAxis.y, + yAxis.y, + zAxis.y, + 0, + xAxis.z, + yAxis.z, + zAxis.z, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + extractRotation(m) { + const te = this.elements; + const me = m.elements; + const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length(); + const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length(); + const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length(); + te[0] = me[0] * scaleX; + te[1] = me[1] * scaleX; + te[2] = me[2] * scaleX; + te[3] = 0; + te[4] = me[4] * scaleY; + te[5] = me[5] * scaleY; + te[6] = me[6] * scaleY; + te[7] = 0; + te[8] = me[8] * scaleZ; + te[9] = me[9] * scaleZ; + te[10] = me[10] * scaleZ; + te[11] = 0; + te[12] = 0; + te[13] = 0; + te[14] = 0; + te[15] = 1; + return this; + } + makeRotationFromEuler(euler) { + const te = this.elements; + const x = euler.x, y = euler.y, z = euler.z; + const a = Math.cos(x), b = Math.sin(x); + const c = Math.cos(y), d = Math.sin(y); + const e = Math.cos(z), f = Math.sin(z); + if (euler.order === "XYZ") { + const ae = a * e, af = a * f, be = b * e, bf = b * f; + te[0] = c * e; + te[4] = -c * f; + te[8] = d; + te[1] = af + be * d; + te[5] = ae - bf * d; + te[9] = -b * c; + te[2] = bf - ae * d; + te[6] = be + af * d; + te[10] = a * c; + } else if (euler.order === "YXZ") { + const ce = c * e, cf = c * f, de = d * e, df = d * f; + te[0] = ce + df * b; + te[4] = de * b - cf; + te[8] = a * d; + te[1] = a * f; + te[5] = a * e; + te[9] = -b; + te[2] = cf * b - de; + te[6] = df + ce * b; + te[10] = a * c; + } else if (euler.order === "ZXY") { + const ce = c * e, cf = c * f, de = d * e, df = d * f; + te[0] = ce - df * b; + te[4] = -a * f; + te[8] = de + cf * b; + te[1] = cf + de * b; + te[5] = a * e; + te[9] = df - ce * b; + te[2] = -a * d; + te[6] = b; + te[10] = a * c; + } else if (euler.order === "ZYX") { + const ae = a * e, af = a * f, be = b * e, bf = b * f; + te[0] = c * e; + te[4] = be * d - af; + te[8] = ae * d + bf; + te[1] = c * f; + te[5] = bf * d + ae; + te[9] = af * d - be; + te[2] = -d; + te[6] = b * c; + te[10] = a * c; + } else if (euler.order === "YZX") { + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + te[0] = c * e; + te[4] = bd - ac * f; + te[8] = bc * f + ad; + te[1] = f; + te[5] = a * e; + te[9] = -b * e; + te[2] = -d * e; + te[6] = ad * f + bc; + te[10] = ac - bd * f; + } else if (euler.order === "XZY") { + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + te[0] = c * e; + te[4] = -f; + te[8] = d * e; + te[1] = ac * f + bd; + te[5] = a * e; + te[9] = ad * f - bc; + te[2] = bc * f - ad; + te[6] = b * e; + te[10] = bd * f + ac; + } + te[3] = 0; + te[7] = 0; + te[11] = 0; + te[12] = 0; + te[13] = 0; + te[14] = 0; + te[15] = 1; + return this; + } + makeRotationFromQuaternion(q) { + return this.compose(_zero, q, _one); + } + lookAt(eye, target, up) { + const te = this.elements; + _z.subVectors(eye, target); + if (_z.lengthSq() === 0) { + _z.z = 1; + } + _z.normalize(); + _x.crossVectors(up, _z); + if (_x.lengthSq() === 0) { + if (Math.abs(up.z) === 1) { + _z.x += 1e-4; + } else { + _z.z += 1e-4; + } + _z.normalize(); + _x.crossVectors(up, _z); + } + _x.normalize(); + _y.crossVectors(_z, _x); + te[0] = _x.x; + te[4] = _y.x; + te[8] = _z.x; + te[1] = _x.y; + te[5] = _y.y; + te[9] = _z.y; + te[2] = _x.z; + te[6] = _y.z; + te[10] = _z.z; + return this; + } + multiply(m) { + return this.multiplyMatrices(this, m); + } + premultiply(m) { + return this.multiplyMatrices(m, this); + } + multiplyMatrices(a, b) { + const ae = a.elements; + const be = b.elements; + const te = this.elements; + const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12]; + const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13]; + const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14]; + const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15]; + const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12]; + const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13]; + const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14]; + const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15]; + te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + return this; + } + multiplyScalar(s) { + const te = this.elements; + te[0] *= s; + te[4] *= s; + te[8] *= s; + te[12] *= s; + te[1] *= s; + te[5] *= s; + te[9] *= s; + te[13] *= s; + te[2] *= s; + te[6] *= s; + te[10] *= s; + te[14] *= s; + te[3] *= s; + te[7] *= s; + te[11] *= s; + te[15] *= s; + return this; + } + determinant() { + const te = this.elements; + const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12]; + const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13]; + const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14]; + const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15]; + return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31); + } + transpose() { + const te = this.elements; + let tmp2; + tmp2 = te[1]; + te[1] = te[4]; + te[4] = tmp2; + tmp2 = te[2]; + te[2] = te[8]; + te[8] = tmp2; + tmp2 = te[6]; + te[6] = te[9]; + te[9] = tmp2; + tmp2 = te[3]; + te[3] = te[12]; + te[12] = tmp2; + tmp2 = te[7]; + te[7] = te[13]; + te[13] = tmp2; + tmp2 = te[11]; + te[11] = te[14]; + te[14] = tmp2; + return this; + } + setPosition(x, y, z) { + const te = this.elements; + if (x.isVector3) { + te[12] = x.x; + te[13] = x.y; + te[14] = x.z; + } else { + te[12] = x; + te[13] = y; + te[14] = z; + } + return this; + } + invert() { + const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3], n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7], n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11], n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const detInv = 1 / det; + te[0] = t11 * detInv; + te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv; + te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv; + te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv; + te[4] = t12 * detInv; + te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv; + te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv; + te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv; + te[8] = t13 * detInv; + te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv; + te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv; + te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv; + te[12] = t14 * detInv; + te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv; + te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv; + te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv; + return this; + } + scale(v) { + const te = this.elements; + const x = v.x, y = v.y, z = v.z; + te[0] *= x; + te[4] *= y; + te[8] *= z; + te[1] *= x; + te[5] *= y; + te[9] *= z; + te[2] *= x; + te[6] *= y; + te[10] *= z; + te[3] *= x; + te[7] *= y; + te[11] *= z; + return this; + } + getMaxScaleOnAxis() { + const te = this.elements; + const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]; + const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]; + const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]; + return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq)); + } + makeTranslation(x, y, z) { + if (x.isVector3) { + this.set( + 1, + 0, + 0, + x.x, + 0, + 1, + 0, + x.y, + 0, + 0, + 1, + x.z, + 0, + 0, + 0, + 1 + ); + } else { + this.set( + 1, + 0, + 0, + x, + 0, + 1, + 0, + y, + 0, + 0, + 1, + z, + 0, + 0, + 0, + 1 + ); + } + return this; + } + makeRotationX(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + 1, + 0, + 0, + 0, + 0, + c, + -s, + 0, + 0, + s, + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationY(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + c, + 0, + s, + 0, + 0, + 1, + 0, + 0, + -s, + 0, + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationZ(theta) { + const c = Math.cos(theta), s = Math.sin(theta); + this.set( + c, + -s, + 0, + 0, + s, + c, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeRotationAxis(axis, angle) { + const c = Math.cos(angle); + const s = Math.sin(angle); + const t = 1 - c; + const x = axis.x, y = axis.y, z = axis.z; + const tx = t * x, ty = t * y; + this.set( + tx * x + c, + tx * y - s * z, + tx * z + s * y, + 0, + tx * y + s * z, + ty * y + c, + ty * z - s * x, + 0, + tx * z - s * y, + ty * z + s * x, + t * z * z + c, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeScale(x, y, z) { + this.set( + x, + 0, + 0, + 0, + 0, + y, + 0, + 0, + 0, + 0, + z, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + makeShear(xy, xz, yx, yz, zx, zy) { + this.set( + 1, + yx, + zx, + 0, + xy, + 1, + zy, + 0, + xz, + yz, + 1, + 0, + 0, + 0, + 0, + 1 + ); + return this; + } + compose(position, quaternion, scale) { + const te = this.elements; + const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; + const x2 = x + x, y2 = y + y, z2 = z + z; + const xx = x * x2, xy = x * y2, xz = x * z2; + const yy = y * y2, yz = y * z2, zz = z * z2; + const wx = w * x2, wy = w * y2, wz = w * z2; + const sx = scale.x, sy = scale.y, sz = scale.z; + te[0] = (1 - (yy + zz)) * sx; + te[1] = (xy + wz) * sx; + te[2] = (xz - wy) * sx; + te[3] = 0; + te[4] = (xy - wz) * sy; + te[5] = (1 - (xx + zz)) * sy; + te[6] = (yz + wx) * sy; + te[7] = 0; + te[8] = (xz + wy) * sz; + te[9] = (yz - wx) * sz; + te[10] = (1 - (xx + yy)) * sz; + te[11] = 0; + te[12] = position.x; + te[13] = position.y; + te[14] = position.z; + te[15] = 1; + return this; + } + decompose(position, quaternion, scale) { + const te = this.elements; + let sx = _v1$5.set(te[0], te[1], te[2]).length(); + const sy = _v1$5.set(te[4], te[5], te[6]).length(); + const sz = _v1$5.set(te[8], te[9], te[10]).length(); + const det = this.determinant(); + if (det < 0) sx = -sx; + position.x = te[12]; + position.y = te[13]; + position.z = te[14]; + _m1$4.copy(this); + const invSX = 1 / sx; + const invSY = 1 / sy; + const invSZ = 1 / sz; + _m1$4.elements[0] *= invSX; + _m1$4.elements[1] *= invSX; + _m1$4.elements[2] *= invSX; + _m1$4.elements[4] *= invSY; + _m1$4.elements[5] *= invSY; + _m1$4.elements[6] *= invSY; + _m1$4.elements[8] *= invSZ; + _m1$4.elements[9] *= invSZ; + _m1$4.elements[10] *= invSZ; + quaternion.setFromRotationMatrix(_m1$4); + scale.x = sx; + scale.y = sy; + scale.z = sz; + return this; + } + makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { + const te = this.elements; + const x = 2 * near / (right - left); + const y = 2 * near / (top - bottom); + const a = (right + left) / (right - left); + const b = (top + bottom) / (top - bottom); + let c, d; + if (coordinateSystem === WebGLCoordinateSystem) { + c = -(far + near) / (far - near); + d = -2 * far * near / (far - near); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + c = -far / (far - near); + d = -far * near / (far - near); + } else { + throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: " + coordinateSystem); + } + te[0] = x; + te[4] = 0; + te[8] = a; + te[12] = 0; + te[1] = 0; + te[5] = y; + te[9] = b; + te[13] = 0; + te[2] = 0; + te[6] = 0; + te[10] = c; + te[14] = d; + te[3] = 0; + te[7] = 0; + te[11] = -1; + te[15] = 0; + return this; + } + makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { + const te = this.elements; + const w = 1 / (right - left); + const h = 1 / (top - bottom); + const p = 1 / (far - near); + const x = (right + left) * w; + const y = (top + bottom) * h; + let z, zInv; + if (coordinateSystem === WebGLCoordinateSystem) { + z = (far + near) * p; + zInv = -2 * p; + } else if (coordinateSystem === WebGPUCoordinateSystem) { + z = near * p; + zInv = -1 * p; + } else { + throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + coordinateSystem); + } + te[0] = 2 * w; + te[4] = 0; + te[8] = 0; + te[12] = -x; + te[1] = 0; + te[5] = 2 * h; + te[9] = 0; + te[13] = -y; + te[2] = 0; + te[6] = 0; + te[10] = zInv; + te[14] = -z; + te[3] = 0; + te[7] = 0; + te[11] = 0; + te[15] = 1; + return this; + } + equals(matrix) { + const te = this.elements; + const me = matrix.elements; + for (let i = 0; i < 16; i++) { + if (te[i] !== me[i]) return false; + } + return true; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 16; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + toArray(array = [], offset = 0) { + const te = this.elements; + array[offset] = te[0]; + array[offset + 1] = te[1]; + array[offset + 2] = te[2]; + array[offset + 3] = te[3]; + array[offset + 4] = te[4]; + array[offset + 5] = te[5]; + array[offset + 6] = te[6]; + array[offset + 7] = te[7]; + array[offset + 8] = te[8]; + array[offset + 9] = te[9]; + array[offset + 10] = te[10]; + array[offset + 11] = te[11]; + array[offset + 12] = te[12]; + array[offset + 13] = te[13]; + array[offset + 14] = te[14]; + array[offset + 15] = te[15]; + return array; + } +}; +var _v1$5 = new Vector3(); +var _m1$4 = new Matrix4(); +var _zero = new Vector3(0, 0, 0); +var _one = new Vector3(1, 1, 1); +var _x = new Vector3(); +var _y = new Vector3(); +var _z = new Vector3(); +var _matrix$2 = new Matrix4(); +var _quaternion$3 = new Quaternion(); +var Euler = class _Euler { + constructor(x = 0, y = 0, z = 0, order = _Euler.DEFAULT_ORDER) { + this.isEuler = true; + this._x = x; + this._y = y; + this._z = z; + this._order = order; + } + get x() { + return this._x; + } + set x(value) { + this._x = value; + this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(value) { + this._y = value; + this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(value) { + this._z = value; + this._onChangeCallback(); + } + get order() { + return this._order; + } + set order(value) { + this._order = value; + this._onChangeCallback(); + } + set(x, y, z, order = this._order) { + this._x = x; + this._y = y; + this._z = z; + this._order = order; + this._onChangeCallback(); + return this; + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order); + } + copy(euler) { + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + this._onChangeCallback(); + return this; + } + setFromRotationMatrix(m, order = this._order, update = true) { + const te = m.elements; + const m11 = te[0], m12 = te[4], m13 = te[8]; + const m21 = te[1], m22 = te[5], m23 = te[9]; + const m31 = te[2], m32 = te[6], m33 = te[10]; + switch (order) { + case "XYZ": + this._y = Math.asin(clamp(m13, -1, 1)); + if (Math.abs(m13) < 0.9999999) { + this._x = Math.atan2(-m23, m33); + this._z = Math.atan2(-m12, m11); + } else { + this._x = Math.atan2(m32, m22); + this._z = 0; + } + break; + case "YXZ": + this._x = Math.asin(-clamp(m23, -1, 1)); + if (Math.abs(m23) < 0.9999999) { + this._y = Math.atan2(m13, m33); + this._z = Math.atan2(m21, m22); + } else { + this._y = Math.atan2(-m31, m11); + this._z = 0; + } + break; + case "ZXY": + this._x = Math.asin(clamp(m32, -1, 1)); + if (Math.abs(m32) < 0.9999999) { + this._y = Math.atan2(-m31, m33); + this._z = Math.atan2(-m12, m22); + } else { + this._y = 0; + this._z = Math.atan2(m21, m11); + } + break; + case "ZYX": + this._y = Math.asin(-clamp(m31, -1, 1)); + if (Math.abs(m31) < 0.9999999) { + this._x = Math.atan2(m32, m33); + this._z = Math.atan2(m21, m11); + } else { + this._x = 0; + this._z = Math.atan2(-m12, m22); + } + break; + case "YZX": + this._z = Math.asin(clamp(m21, -1, 1)); + if (Math.abs(m21) < 0.9999999) { + this._x = Math.atan2(-m23, m22); + this._y = Math.atan2(-m31, m11); + } else { + this._x = 0; + this._y = Math.atan2(m13, m33); + } + break; + case "XZY": + this._z = Math.asin(-clamp(m12, -1, 1)); + if (Math.abs(m12) < 0.9999999) { + this._x = Math.atan2(m32, m22); + this._y = Math.atan2(m13, m11); + } else { + this._x = Math.atan2(-m23, m33); + this._y = 0; + } + break; + default: + console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + order); + } + this._order = order; + if (update === true) this._onChangeCallback(); + return this; + } + setFromQuaternion(q, order, update) { + _matrix$2.makeRotationFromQuaternion(q); + return this.setFromRotationMatrix(_matrix$2, order, update); + } + setFromVector3(v, order = this._order) { + return this.set(v.x, v.y, v.z, order); + } + reorder(newOrder) { + _quaternion$3.setFromEuler(this); + return this.setFromQuaternion(_quaternion$3, newOrder); + } + equals(euler) { + return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order; + } + fromArray(array) { + this._x = array[0]; + this._y = array[1]; + this._z = array[2]; + if (array[3] !== void 0) this._order = array[3]; + this._onChangeCallback(); + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this._x; + array[offset + 1] = this._y; + array[offset + 2] = this._z; + array[offset + 3] = this._order; + return array; + } + _onChange(callback) { + this._onChangeCallback = callback; + return this; + } + _onChangeCallback() { + } + *[Symbol.iterator]() { + yield this._x; + yield this._y; + yield this._z; + yield this._order; + } +}; +Euler.DEFAULT_ORDER = "XYZ"; +var Layers = class { + constructor() { + this.mask = 1 | 0; + } + set(channel) { + this.mask = (1 << channel | 0) >>> 0; + } + enable(channel) { + this.mask |= 1 << channel | 0; + } + enableAll() { + this.mask = 4294967295 | 0; + } + toggle(channel) { + this.mask ^= 1 << channel | 0; + } + disable(channel) { + this.mask &= ~(1 << channel | 0); + } + disableAll() { + this.mask = 0; + } + test(layers) { + return (this.mask & layers.mask) !== 0; + } + isEnabled(channel) { + return (this.mask & (1 << channel | 0)) !== 0; + } +}; +var _object3DId = 0; +var _v1$4 = new Vector3(); +var _q1 = new Quaternion(); +var _m1$3 = new Matrix4(); +var _target = new Vector3(); +var _position$3 = new Vector3(); +var _scale$2 = new Vector3(); +var _quaternion$2 = new Quaternion(); +var _xAxis = new Vector3(1, 0, 0); +var _yAxis = new Vector3(0, 1, 0); +var _zAxis = new Vector3(0, 0, 1); +var _addedEvent = { type: "added" }; +var _removedEvent = { type: "removed" }; +var _childaddedEvent = { type: "childadded", child: null }; +var _childremovedEvent = { type: "childremoved", child: null }; +var Object3D = class _Object3D extends EventDispatcher { + constructor() { + super(); + this.isObject3D = true; + Object.defineProperty(this, "id", { value: _object3DId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.type = "Object3D"; + this.parent = null; + this.children = []; + this.up = _Object3D.DEFAULT_UP.clone(); + const position = new Vector3(); + const rotation = new Euler(); + const quaternion = new Quaternion(); + const scale = new Vector3(1, 1, 1); + function onRotationChange() { + quaternion.setFromEuler(rotation, false); + } + function onQuaternionChange() { + rotation.setFromQuaternion(quaternion, void 0, false); + } + rotation._onChange(onRotationChange); + quaternion._onChange(onQuaternionChange); + Object.defineProperties(this, { + position: { + configurable: true, + enumerable: true, + value: position + }, + rotation: { + configurable: true, + enumerable: true, + value: rotation + }, + quaternion: { + configurable: true, + enumerable: true, + value: quaternion + }, + scale: { + configurable: true, + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + }); + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + this.matrixAutoUpdate = _Object3D.DEFAULT_MATRIX_AUTO_UPDATE; + this.matrixWorldAutoUpdate = _Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; + this.matrixWorldNeedsUpdate = false; + this.layers = new Layers(); + this.visible = true; + this.castShadow = false; + this.receiveShadow = false; + this.frustumCulled = true; + this.renderOrder = 0; + this.animations = []; + this.userData = {}; + } + onBeforeShadow() { + } + onAfterShadow() { + } + onBeforeRender() { + } + onAfterRender() { + } + applyMatrix4(matrix) { + if (this.matrixAutoUpdate) this.updateMatrix(); + this.matrix.premultiply(matrix); + this.matrix.decompose(this.position, this.quaternion, this.scale); + } + applyQuaternion(q) { + this.quaternion.premultiply(q); + return this; + } + setRotationFromAxisAngle(axis, angle) { + this.quaternion.setFromAxisAngle(axis, angle); + } + setRotationFromEuler(euler) { + this.quaternion.setFromEuler(euler, true); + } + setRotationFromMatrix(m) { + this.quaternion.setFromRotationMatrix(m); + } + setRotationFromQuaternion(q) { + this.quaternion.copy(q); + } + rotateOnAxis(axis, angle) { + _q1.setFromAxisAngle(axis, angle); + this.quaternion.multiply(_q1); + return this; + } + rotateOnWorldAxis(axis, angle) { + _q1.setFromAxisAngle(axis, angle); + this.quaternion.premultiply(_q1); + return this; + } + rotateX(angle) { + return this.rotateOnAxis(_xAxis, angle); + } + rotateY(angle) { + return this.rotateOnAxis(_yAxis, angle); + } + rotateZ(angle) { + return this.rotateOnAxis(_zAxis, angle); + } + translateOnAxis(axis, distance) { + _v1$4.copy(axis).applyQuaternion(this.quaternion); + this.position.add(_v1$4.multiplyScalar(distance)); + return this; + } + translateX(distance) { + return this.translateOnAxis(_xAxis, distance); + } + translateY(distance) { + return this.translateOnAxis(_yAxis, distance); + } + translateZ(distance) { + return this.translateOnAxis(_zAxis, distance); + } + localToWorld(vector) { + this.updateWorldMatrix(true, false); + return vector.applyMatrix4(this.matrixWorld); + } + worldToLocal(vector) { + this.updateWorldMatrix(true, false); + return vector.applyMatrix4(_m1$3.copy(this.matrixWorld).invert()); + } + lookAt(x, y, z) { + if (x.isVector3) { + _target.copy(x); + } else { + _target.set(x, y, z); + } + const parent = this.parent; + this.updateWorldMatrix(true, false); + _position$3.setFromMatrixPosition(this.matrixWorld); + if (this.isCamera || this.isLight) { + _m1$3.lookAt(_position$3, _target, this.up); + } else { + _m1$3.lookAt(_target, _position$3, this.up); + } + this.quaternion.setFromRotationMatrix(_m1$3); + if (parent) { + _m1$3.extractRotation(parent.matrixWorld); + _q1.setFromRotationMatrix(_m1$3); + this.quaternion.premultiply(_q1.invert()); + } + } + add(object) { + if (arguments.length > 1) { + for (let i = 0; i < arguments.length; i++) { + this.add(arguments[i]); + } + return this; + } + if (object === this) { + console.error("THREE.Object3D.add: object can't be added as a child of itself.", object); + return this; + } + if (object && object.isObject3D) { + object.removeFromParent(); + object.parent = this; + this.children.push(object); + object.dispatchEvent(_addedEvent); + _childaddedEvent.child = object; + this.dispatchEvent(_childaddedEvent); + _childaddedEvent.child = null; + } else { + console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", object); + } + return this; + } + remove(object) { + if (arguments.length > 1) { + for (let i = 0; i < arguments.length; i++) { + this.remove(arguments[i]); + } + return this; + } + const index = this.children.indexOf(object); + if (index !== -1) { + object.parent = null; + this.children.splice(index, 1); + object.dispatchEvent(_removedEvent); + _childremovedEvent.child = object; + this.dispatchEvent(_childremovedEvent); + _childremovedEvent.child = null; + } + return this; + } + removeFromParent() { + const parent = this.parent; + if (parent !== null) { + parent.remove(this); + } + return this; + } + clear() { + return this.remove(...this.children); + } + attach(object) { + this.updateWorldMatrix(true, false); + _m1$3.copy(this.matrixWorld).invert(); + if (object.parent !== null) { + object.parent.updateWorldMatrix(true, false); + _m1$3.multiply(object.parent.matrixWorld); + } + object.applyMatrix4(_m1$3); + object.removeFromParent(); + object.parent = this; + this.children.push(object); + object.updateWorldMatrix(false, true); + object.dispatchEvent(_addedEvent); + _childaddedEvent.child = object; + this.dispatchEvent(_childaddedEvent); + _childaddedEvent.child = null; + return this; + } + getObjectById(id) { + return this.getObjectByProperty("id", id); + } + getObjectByName(name) { + return this.getObjectByProperty("name", name); + } + getObjectByProperty(name, value) { + if (this[name] === value) return this; + for (let i = 0, l = this.children.length; i < l; i++) { + const child = this.children[i]; + const object = child.getObjectByProperty(name, value); + if (object !== void 0) { + return object; + } + } + return void 0; + } + getObjectsByProperty(name, value, result = []) { + if (this[name] === value) result.push(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].getObjectsByProperty(name, value, result); + } + return result; + } + getWorldPosition(target) { + this.updateWorldMatrix(true, false); + return target.setFromMatrixPosition(this.matrixWorld); + } + getWorldQuaternion(target) { + this.updateWorldMatrix(true, false); + this.matrixWorld.decompose(_position$3, target, _scale$2); + return target; + } + getWorldScale(target) { + this.updateWorldMatrix(true, false); + this.matrixWorld.decompose(_position$3, _quaternion$2, target); + return target; + } + getWorldDirection(target) { + this.updateWorldMatrix(true, false); + const e = this.matrixWorld.elements; + return target.set(e[8], e[9], e[10]).normalize(); + } + raycast() { + } + traverse(callback) { + callback(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].traverse(callback); + } + } + traverseVisible(callback) { + if (this.visible === false) return; + callback(this); + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + children[i].traverseVisible(callback); + } + } + traverseAncestors(callback) { + const parent = this.parent; + if (parent !== null) { + callback(parent); + parent.traverseAncestors(callback); + } + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale); + this.matrixWorldNeedsUpdate = true; + } + updateMatrixWorld(force) { + if (this.matrixAutoUpdate) this.updateMatrix(); + if (this.matrixWorldNeedsUpdate || force) { + if (this.matrixWorldAutoUpdate === true) { + if (this.parent === null) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + } + this.matrixWorldNeedsUpdate = false; + force = true; + } + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + const child = children[i]; + child.updateMatrixWorld(force); + } + } + updateWorldMatrix(updateParents, updateChildren) { + const parent = this.parent; + if (updateParents === true && parent !== null) { + parent.updateWorldMatrix(true, false); + } + if (this.matrixAutoUpdate) this.updateMatrix(); + if (this.matrixWorldAutoUpdate === true) { + if (this.parent === null) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + } + if (updateChildren === true) { + const children = this.children; + for (let i = 0, l = children.length; i < l; i++) { + const child = children[i]; + child.updateWorldMatrix(false, true); + } + } + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + const output = {}; + if (isRootObject) { + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + nodes: {} + }; + output.metadata = { + version: 4.6, + type: "Object", + generator: "Object3D.toJSON" + }; + } + const object = {}; + object.uuid = this.uuid; + object.type = this.type; + if (this.name !== "") object.name = this.name; + if (this.castShadow === true) object.castShadow = true; + if (this.receiveShadow === true) object.receiveShadow = true; + if (this.visible === false) object.visible = false; + if (this.frustumCulled === false) object.frustumCulled = false; + if (this.renderOrder !== 0) object.renderOrder = this.renderOrder; + if (Object.keys(this.userData).length > 0) object.userData = this.userData; + object.layers = this.layers.mask; + object.matrix = this.matrix.toArray(); + object.up = this.up.toArray(); + if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; + if (this.isInstancedMesh) { + object.type = "InstancedMesh"; + object.count = this.count; + object.instanceMatrix = this.instanceMatrix.toJSON(); + if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON(); + } + if (this.isBatchedMesh) { + object.type = "BatchedMesh"; + object.perObjectFrustumCulled = this.perObjectFrustumCulled; + object.sortObjects = this.sortObjects; + object.drawRanges = this._drawRanges; + object.reservedRanges = this._reservedRanges; + object.visibility = this._visibility; + object.active = this._active; + object.bounds = this._bounds.map((bound) => ({ + boxInitialized: bound.boxInitialized, + boxMin: bound.box.min.toArray(), + boxMax: bound.box.max.toArray(), + sphereInitialized: bound.sphereInitialized, + sphereRadius: bound.sphere.radius, + sphereCenter: bound.sphere.center.toArray() + })); + object.maxInstanceCount = this._maxInstanceCount; + object.maxVertexCount = this._maxVertexCount; + object.maxIndexCount = this._maxIndexCount; + object.geometryInitialized = this._geometryInitialized; + object.geometryCount = this._geometryCount; + object.matricesTexture = this._matricesTexture.toJSON(meta); + if (this._colorsTexture !== null) object.colorsTexture = this._colorsTexture.toJSON(meta); + if (this.boundingSphere !== null) { + object.boundingSphere = { + center: object.boundingSphere.center.toArray(), + radius: object.boundingSphere.radius + }; + } + if (this.boundingBox !== null) { + object.boundingBox = { + min: object.boundingBox.min.toArray(), + max: object.boundingBox.max.toArray() + }; + } + } + function serialize(library, element) { + if (library[element.uuid] === void 0) { + library[element.uuid] = element.toJSON(meta); + } + return element.uuid; + } + if (this.isScene) { + if (this.background) { + if (this.background.isColor) { + object.background = this.background.toJSON(); + } else if (this.background.isTexture) { + object.background = this.background.toJSON(meta).uuid; + } + } + if (this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true) { + object.environment = this.environment.toJSON(meta).uuid; + } + } else if (this.isMesh || this.isLine || this.isPoints) { + object.geometry = serialize(meta.geometries, this.geometry); + const parameters = this.geometry.parameters; + if (parameters !== void 0 && parameters.shapes !== void 0) { + const shapes = parameters.shapes; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + serialize(meta.shapes, shape); + } + } else { + serialize(meta.shapes, shapes); + } + } + } + if (this.isSkinnedMesh) { + object.bindMode = this.bindMode; + object.bindMatrix = this.bindMatrix.toArray(); + if (this.skeleton !== void 0) { + serialize(meta.skeletons, this.skeleton); + object.skeleton = this.skeleton.uuid; + } + } + if (this.material !== void 0) { + if (Array.isArray(this.material)) { + const uuids = []; + for (let i = 0, l = this.material.length; i < l; i++) { + uuids.push(serialize(meta.materials, this.material[i])); + } + object.material = uuids; + } else { + object.material = serialize(meta.materials, this.material); + } + } + if (this.children.length > 0) { + object.children = []; + for (let i = 0; i < this.children.length; i++) { + object.children.push(this.children[i].toJSON(meta).object); + } + } + if (this.animations.length > 0) { + object.animations = []; + for (let i = 0; i < this.animations.length; i++) { + const animation = this.animations[i]; + object.animations.push(serialize(meta.animations, animation)); + } + } + if (isRootObject) { + const geometries = extractFromCache(meta.geometries); + const materials = extractFromCache(meta.materials); + const textures = extractFromCache(meta.textures); + const images = extractFromCache(meta.images); + const shapes = extractFromCache(meta.shapes); + const skeletons = extractFromCache(meta.skeletons); + const animations = extractFromCache(meta.animations); + const nodes = extractFromCache(meta.nodes); + if (geometries.length > 0) output.geometries = geometries; + if (materials.length > 0) output.materials = materials; + if (textures.length > 0) output.textures = textures; + if (images.length > 0) output.images = images; + if (shapes.length > 0) output.shapes = shapes; + if (skeletons.length > 0) output.skeletons = skeletons; + if (animations.length > 0) output.animations = animations; + if (nodes.length > 0) output.nodes = nodes; + } + output.object = object; + return output; + function extractFromCache(cache) { + const values = []; + for (const key in cache) { + const data = cache[key]; + delete data.metadata; + values.push(data); + } + return values; + } + } + clone(recursive) { + return new this.constructor().copy(this, recursive); + } + copy(source, recursive = true) { + this.name = source.name; + this.up.copy(source.up); + this.position.copy(source.position); + this.rotation.order = source.rotation.order; + this.quaternion.copy(source.quaternion); + this.scale.copy(source.scale); + this.matrix.copy(source.matrix); + this.matrixWorld.copy(source.matrixWorld); + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + this.layers.mask = source.layers.mask; + this.visible = source.visible; + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + this.animations = source.animations.slice(); + this.userData = JSON.parse(JSON.stringify(source.userData)); + if (recursive === true) { + for (let i = 0; i < source.children.length; i++) { + const child = source.children[i]; + this.add(child.clone()); + } + } + return this; + } +}; +Object3D.DEFAULT_UP = new Vector3(0, 1, 0); +Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true; +Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true; +var _v0$2 = new Vector3(); +var _v1$3 = new Vector3(); +var _v2$2 = new Vector3(); +var _v3$2 = new Vector3(); +var _vab = new Vector3(); +var _vac = new Vector3(); +var _vbc = new Vector3(); +var _vap = new Vector3(); +var _vbp = new Vector3(); +var _vcp = new Vector3(); +var Triangle = class _Triangle { + constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) { + this.a = a; + this.b = b; + this.c = c; + } + static getNormal(a, b, c, target) { + target.subVectors(c, b); + _v0$2.subVectors(a, b); + target.cross(_v0$2); + const targetLengthSq = target.lengthSq(); + if (targetLengthSq > 0) { + return target.multiplyScalar(1 / Math.sqrt(targetLengthSq)); + } + return target.set(0, 0, 0); + } + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + static getBarycoord(point, a, b, c, target) { + _v0$2.subVectors(c, a); + _v1$3.subVectors(b, a); + _v2$2.subVectors(point, a); + const dot00 = _v0$2.dot(_v0$2); + const dot01 = _v0$2.dot(_v1$3); + const dot02 = _v0$2.dot(_v2$2); + const dot11 = _v1$3.dot(_v1$3); + const dot12 = _v1$3.dot(_v2$2); + const denom = dot00 * dot11 - dot01 * dot01; + if (denom === 0) { + target.set(0, 0, 0); + return null; + } + const invDenom = 1 / denom; + const u = (dot11 * dot02 - dot01 * dot12) * invDenom; + const v = (dot00 * dot12 - dot01 * dot02) * invDenom; + return target.set(1 - u - v, v, u); + } + static containsPoint(point, a, b, c) { + if (this.getBarycoord(point, a, b, c, _v3$2) === null) { + return false; + } + return _v3$2.x >= 0 && _v3$2.y >= 0 && _v3$2.x + _v3$2.y <= 1; + } + static getInterpolation(point, p1, p2, p3, v1, v2, v3, target) { + if (this.getBarycoord(point, p1, p2, p3, _v3$2) === null) { + target.x = 0; + target.y = 0; + if ("z" in target) target.z = 0; + if ("w" in target) target.w = 0; + return null; + } + target.setScalar(0); + target.addScaledVector(v1, _v3$2.x); + target.addScaledVector(v2, _v3$2.y); + target.addScaledVector(v3, _v3$2.z); + return target; + } + static isFrontFacing(a, b, c, direction) { + _v0$2.subVectors(c, b); + _v1$3.subVectors(a, b); + return _v0$2.cross(_v1$3).dot(direction) < 0 ? true : false; + } + set(a, b, c) { + this.a.copy(a); + this.b.copy(b); + this.c.copy(c); + return this; + } + setFromPointsAndIndices(points, i0, i1, i2) { + this.a.copy(points[i0]); + this.b.copy(points[i1]); + this.c.copy(points[i2]); + return this; + } + setFromAttributeAndIndices(attribute, i0, i1, i2) { + this.a.fromBufferAttribute(attribute, i0); + this.b.fromBufferAttribute(attribute, i1); + this.c.fromBufferAttribute(attribute, i2); + return this; + } + clone() { + return new this.constructor().copy(this); + } + copy(triangle) { + this.a.copy(triangle.a); + this.b.copy(triangle.b); + this.c.copy(triangle.c); + return this; + } + getArea() { + _v0$2.subVectors(this.c, this.b); + _v1$3.subVectors(this.a, this.b); + return _v0$2.cross(_v1$3).length() * 0.5; + } + getMidpoint(target) { + return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3); + } + getNormal(target) { + return _Triangle.getNormal(this.a, this.b, this.c, target); + } + getPlane(target) { + return target.setFromCoplanarPoints(this.a, this.b, this.c); + } + getBarycoord(point, target) { + return _Triangle.getBarycoord(point, this.a, this.b, this.c, target); + } + getInterpolation(point, v1, v2, v3, target) { + return _Triangle.getInterpolation(point, this.a, this.b, this.c, v1, v2, v3, target); + } + containsPoint(point) { + return _Triangle.containsPoint(point, this.a, this.b, this.c); + } + isFrontFacing(direction) { + return _Triangle.isFrontFacing(this.a, this.b, this.c, direction); + } + intersectsBox(box) { + return box.intersectsTriangle(this); + } + closestPointToPoint(p, target) { + const a = this.a, b = this.b, c = this.c; + let v, w; + _vab.subVectors(b, a); + _vac.subVectors(c, a); + _vap.subVectors(p, a); + const d1 = _vab.dot(_vap); + const d2 = _vac.dot(_vap); + if (d1 <= 0 && d2 <= 0) { + return target.copy(a); + } + _vbp.subVectors(p, b); + const d3 = _vab.dot(_vbp); + const d4 = _vac.dot(_vbp); + if (d3 >= 0 && d4 <= d3) { + return target.copy(b); + } + const vc = d1 * d4 - d3 * d2; + if (vc <= 0 && d1 >= 0 && d3 <= 0) { + v = d1 / (d1 - d3); + return target.copy(a).addScaledVector(_vab, v); + } + _vcp.subVectors(p, c); + const d5 = _vab.dot(_vcp); + const d6 = _vac.dot(_vcp); + if (d6 >= 0 && d5 <= d6) { + return target.copy(c); + } + const vb = d5 * d2 - d1 * d6; + if (vb <= 0 && d2 >= 0 && d6 <= 0) { + w = d2 / (d2 - d6); + return target.copy(a).addScaledVector(_vac, w); + } + const va = d3 * d6 - d5 * d4; + if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) { + _vbc.subVectors(c, b); + w = (d4 - d3) / (d4 - d3 + (d5 - d6)); + return target.copy(b).addScaledVector(_vbc, w); + } + const denom = 1 / (va + vb + vc); + v = vb * denom; + w = vc * denom; + return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w); + } + equals(triangle) { + return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c); + } +}; +var _colorKeywords = { + "aliceblue": 15792383, + "antiquewhite": 16444375, + "aqua": 65535, + "aquamarine": 8388564, + "azure": 15794175, + "beige": 16119260, + "bisque": 16770244, + "black": 0, + "blanchedalmond": 16772045, + "blue": 255, + "blueviolet": 9055202, + "brown": 10824234, + "burlywood": 14596231, + "cadetblue": 6266528, + "chartreuse": 8388352, + "chocolate": 13789470, + "coral": 16744272, + "cornflowerblue": 6591981, + "cornsilk": 16775388, + "crimson": 14423100, + "cyan": 65535, + "darkblue": 139, + "darkcyan": 35723, + "darkgoldenrod": 12092939, + "darkgray": 11119017, + "darkgreen": 25600, + "darkgrey": 11119017, + "darkkhaki": 12433259, + "darkmagenta": 9109643, + "darkolivegreen": 5597999, + "darkorange": 16747520, + "darkorchid": 10040012, + "darkred": 9109504, + "darksalmon": 15308410, + "darkseagreen": 9419919, + "darkslateblue": 4734347, + "darkslategray": 3100495, + "darkslategrey": 3100495, + "darkturquoise": 52945, + "darkviolet": 9699539, + "deeppink": 16716947, + "deepskyblue": 49151, + "dimgray": 6908265, + "dimgrey": 6908265, + "dodgerblue": 2003199, + "firebrick": 11674146, + "floralwhite": 16775920, + "forestgreen": 2263842, + "fuchsia": 16711935, + "gainsboro": 14474460, + "ghostwhite": 16316671, + "gold": 16766720, + "goldenrod": 14329120, + "gray": 8421504, + "green": 32768, + "greenyellow": 11403055, + "grey": 8421504, + "honeydew": 15794160, + "hotpink": 16738740, + "indianred": 13458524, + "indigo": 4915330, + "ivory": 16777200, + "khaki": 15787660, + "lavender": 15132410, + "lavenderblush": 16773365, + "lawngreen": 8190976, + "lemonchiffon": 16775885, + "lightblue": 11393254, + "lightcoral": 15761536, + "lightcyan": 14745599, + "lightgoldenrodyellow": 16448210, + "lightgray": 13882323, + "lightgreen": 9498256, + "lightgrey": 13882323, + "lightpink": 16758465, + "lightsalmon": 16752762, + "lightseagreen": 2142890, + "lightskyblue": 8900346, + "lightslategray": 7833753, + "lightslategrey": 7833753, + "lightsteelblue": 11584734, + "lightyellow": 16777184, + "lime": 65280, + "limegreen": 3329330, + "linen": 16445670, + "magenta": 16711935, + "maroon": 8388608, + "mediumaquamarine": 6737322, + "mediumblue": 205, + "mediumorchid": 12211667, + "mediumpurple": 9662683, + "mediumseagreen": 3978097, + "mediumslateblue": 8087790, + "mediumspringgreen": 64154, + "mediumturquoise": 4772300, + "mediumvioletred": 13047173, + "midnightblue": 1644912, + "mintcream": 16121850, + "mistyrose": 16770273, + "moccasin": 16770229, + "navajowhite": 16768685, + "navy": 128, + "oldlace": 16643558, + "olive": 8421376, + "olivedrab": 7048739, + "orange": 16753920, + "orangered": 16729344, + "orchid": 14315734, + "palegoldenrod": 15657130, + "palegreen": 10025880, + "paleturquoise": 11529966, + "palevioletred": 14381203, + "papayawhip": 16773077, + "peachpuff": 16767673, + "peru": 13468991, + "pink": 16761035, + "plum": 14524637, + "powderblue": 11591910, + "purple": 8388736, + "rebeccapurple": 6697881, + "red": 16711680, + "rosybrown": 12357519, + "royalblue": 4286945, + "saddlebrown": 9127187, + "salmon": 16416882, + "sandybrown": 16032864, + "seagreen": 3050327, + "seashell": 16774638, + "sienna": 10506797, + "silver": 12632256, + "skyblue": 8900331, + "slateblue": 6970061, + "slategray": 7372944, + "slategrey": 7372944, + "snow": 16775930, + "springgreen": 65407, + "steelblue": 4620980, + "tan": 13808780, + "teal": 32896, + "thistle": 14204888, + "tomato": 16737095, + "turquoise": 4251856, + "violet": 15631086, + "wheat": 16113331, + "white": 16777215, + "whitesmoke": 16119285, + "yellow": 16776960, + "yellowgreen": 10145074 +}; +var _hslA = { h: 0, s: 0, l: 0 }; +var _hslB = { h: 0, s: 0, l: 0 }; +function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); + return p; +} +var Color = class { + constructor(r, g, b) { + this.isColor = true; + this.r = 1; + this.g = 1; + this.b = 1; + return this.set(r, g, b); + } + set(r, g, b) { + if (g === void 0 && b === void 0) { + const value = r; + if (value && value.isColor) { + this.copy(value); + } else if (typeof value === "number") { + this.setHex(value); + } else if (typeof value === "string") { + this.setStyle(value); + } + } else { + this.setRGB(r, g, b); + } + return this; + } + setScalar(scalar) { + this.r = scalar; + this.g = scalar; + this.b = scalar; + return this; + } + setHex(hex, colorSpace = SRGBColorSpace) { + hex = Math.floor(hex); + this.r = (hex >> 16 & 255) / 255; + this.g = (hex >> 8 & 255) / 255; + this.b = (hex & 255) / 255; + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) { + this.r = r; + this.g = g; + this.b = b; + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) { + h = euclideanModulo(h, 1); + s = clamp(s, 0, 1); + l = clamp(l, 0, 1); + if (s === 0) { + this.r = this.g = this.b = l; + } else { + const p = l <= 0.5 ? l * (1 + s) : l + s - l * s; + const q = 2 * l - p; + this.r = hue2rgb(q, p, h + 1 / 3); + this.g = hue2rgb(q, p, h); + this.b = hue2rgb(q, p, h - 1 / 3); + } + ColorManagement.toWorkingColorSpace(this, colorSpace); + return this; + } + setStyle(style, colorSpace = SRGBColorSpace) { + function handleAlpha(string) { + if (string === void 0) return; + if (parseFloat(string) < 1) { + console.warn("THREE.Color: Alpha component of " + style + " will be ignored."); + } + } + let m; + if (m = /^(\w+)\(([^\)]*)\)/.exec(style)) { + let color; + const name = m[1]; + const components = m[2]; + switch (name) { + case "rgb": + case "rgba": + if (color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setRGB( + Math.min(255, parseInt(color[1], 10)) / 255, + Math.min(255, parseInt(color[2], 10)) / 255, + Math.min(255, parseInt(color[3], 10)) / 255, + colorSpace + ); + } + if (color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setRGB( + Math.min(100, parseInt(color[1], 10)) / 100, + Math.min(100, parseInt(color[2], 10)) / 100, + Math.min(100, parseInt(color[3], 10)) / 100, + colorSpace + ); + } + break; + case "hsl": + case "hsla": + if (color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { + handleAlpha(color[4]); + return this.setHSL( + parseFloat(color[1]) / 360, + parseFloat(color[2]) / 100, + parseFloat(color[3]) / 100, + colorSpace + ); + } + break; + default: + console.warn("THREE.Color: Unknown color model " + style); + } + } else if (m = /^\#([A-Fa-f\d]+)$/.exec(style)) { + const hex = m[1]; + const size = hex.length; + if (size === 3) { + return this.setRGB( + parseInt(hex.charAt(0), 16) / 15, + parseInt(hex.charAt(1), 16) / 15, + parseInt(hex.charAt(2), 16) / 15, + colorSpace + ); + } else if (size === 6) { + return this.setHex(parseInt(hex, 16), colorSpace); + } else { + console.warn("THREE.Color: Invalid hex color " + style); + } + } else if (style && style.length > 0) { + return this.setColorName(style, colorSpace); + } + return this; + } + setColorName(style, colorSpace = SRGBColorSpace) { + const hex = _colorKeywords[style.toLowerCase()]; + if (hex !== void 0) { + this.setHex(hex, colorSpace); + } else { + console.warn("THREE.Color: Unknown color " + style); + } + return this; + } + clone() { + return new this.constructor(this.r, this.g, this.b); + } + copy(color) { + this.r = color.r; + this.g = color.g; + this.b = color.b; + return this; + } + copySRGBToLinear(color) { + this.r = SRGBToLinear(color.r); + this.g = SRGBToLinear(color.g); + this.b = SRGBToLinear(color.b); + return this; + } + copyLinearToSRGB(color) { + this.r = LinearToSRGB(color.r); + this.g = LinearToSRGB(color.g); + this.b = LinearToSRGB(color.b); + return this; + } + convertSRGBToLinear() { + this.copySRGBToLinear(this); + return this; + } + convertLinearToSRGB() { + this.copyLinearToSRGB(this); + return this; + } + getHex(colorSpace = SRGBColorSpace) { + ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); + return Math.round(clamp(_color.r * 255, 0, 255)) * 65536 + Math.round(clamp(_color.g * 255, 0, 255)) * 256 + Math.round(clamp(_color.b * 255, 0, 255)); + } + getHexString(colorSpace = SRGBColorSpace) { + return ("000000" + this.getHex(colorSpace).toString(16)).slice(-6); + } + getHSL(target, colorSpace = ColorManagement.workingColorSpace) { + ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); + const r = _color.r, g = _color.g, b = _color.b; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + let hue, saturation; + const lightness = (min + max) / 2; + if (min === max) { + hue = 0; + saturation = 0; + } else { + const delta = max - min; + saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min); + switch (max) { + case r: + hue = (g - b) / delta + (g < b ? 6 : 0); + break; + case g: + hue = (b - r) / delta + 2; + break; + case b: + hue = (r - g) / delta + 4; + break; + } + hue /= 6; + } + target.h = hue; + target.s = saturation; + target.l = lightness; + return target; + } + getRGB(target, colorSpace = ColorManagement.workingColorSpace) { + ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); + target.r = _color.r; + target.g = _color.g; + target.b = _color.b; + return target; + } + getStyle(colorSpace = SRGBColorSpace) { + ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); + const r = _color.r, g = _color.g, b = _color.b; + if (colorSpace !== SRGBColorSpace) { + return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`; + } + return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`; + } + offsetHSL(h, s, l) { + this.getHSL(_hslA); + return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l); + } + add(color) { + this.r += color.r; + this.g += color.g; + this.b += color.b; + return this; + } + addColors(color1, color2) { + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + return this; + } + addScalar(s) { + this.r += s; + this.g += s; + this.b += s; + return this; + } + sub(color) { + this.r = Math.max(0, this.r - color.r); + this.g = Math.max(0, this.g - color.g); + this.b = Math.max(0, this.b - color.b); + return this; + } + multiply(color) { + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + return this; + } + multiplyScalar(s) { + this.r *= s; + this.g *= s; + this.b *= s; + return this; + } + lerp(color, alpha) { + this.r += (color.r - this.r) * alpha; + this.g += (color.g - this.g) * alpha; + this.b += (color.b - this.b) * alpha; + return this; + } + lerpColors(color1, color2, alpha) { + this.r = color1.r + (color2.r - color1.r) * alpha; + this.g = color1.g + (color2.g - color1.g) * alpha; + this.b = color1.b + (color2.b - color1.b) * alpha; + return this; + } + lerpHSL(color, alpha) { + this.getHSL(_hslA); + color.getHSL(_hslB); + const h = lerp(_hslA.h, _hslB.h, alpha); + const s = lerp(_hslA.s, _hslB.s, alpha); + const l = lerp(_hslA.l, _hslB.l, alpha); + this.setHSL(h, s, l); + return this; + } + setFromVector3(v) { + this.r = v.x; + this.g = v.y; + this.b = v.z; + return this; + } + applyMatrix3(m) { + const r = this.r, g = this.g, b = this.b; + const e = m.elements; + this.r = e[0] * r + e[3] * g + e[6] * b; + this.g = e[1] * r + e[4] * g + e[7] * b; + this.b = e[2] * r + e[5] * g + e[8] * b; + return this; + } + equals(c) { + return c.r === this.r && c.g === this.g && c.b === this.b; + } + fromArray(array, offset = 0) { + this.r = array[offset]; + this.g = array[offset + 1]; + this.b = array[offset + 2]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.r; + array[offset + 1] = this.g; + array[offset + 2] = this.b; + return array; + } + fromBufferAttribute(attribute, index) { + this.r = attribute.getX(index); + this.g = attribute.getY(index); + this.b = attribute.getZ(index); + return this; + } + toJSON() { + return this.getHex(); + } + *[Symbol.iterator]() { + yield this.r; + yield this.g; + yield this.b; + } +}; +var _color = new Color(); +Color.NAMES = _colorKeywords; +var _materialId = 0; +var Material = class extends EventDispatcher { + constructor() { + super(); + this.isMaterial = true; + Object.defineProperty(this, "id", { value: _materialId++ }); + this.uuid = generateUUID(); + this.name = ""; + this.type = "Material"; + this.blending = NormalBlending; + this.side = FrontSide; + this.vertexColors = false; + this.opacity = 1; + this.transparent = false; + this.alphaHash = false; + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + this.blendColor = new Color(0, 0, 0); + this.blendAlpha = 0; + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + this.stencilWriteMask = 255; + this.stencilFunc = AlwaysStencilFunc; + this.stencilRef = 0; + this.stencilFuncMask = 255; + this.stencilFail = KeepStencilOp; + this.stencilZFail = KeepStencilOp; + this.stencilZPass = KeepStencilOp; + this.stencilWrite = false; + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + this.shadowSide = null; + this.colorWrite = true; + this.precision = null; + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + this.dithering = false; + this.alphaToCoverage = false; + this.premultipliedAlpha = false; + this.forceSinglePass = false; + this.visible = true; + this.toneMapped = true; + this.userData = {}; + this.version = 0; + this._alphaTest = 0; + } + get alphaTest() { + return this._alphaTest; + } + set alphaTest(value) { + if (this._alphaTest > 0 !== value > 0) { + this.version++; + } + this._alphaTest = value; + } + onBeforeCompile() { + } + customProgramCacheKey() { + return this.onBeforeCompile.toString(); + } + setValues(values) { + if (values === void 0) return; + for (const key in values) { + const newValue = values[key]; + if (newValue === void 0) { + console.warn(`THREE.Material: parameter '${key}' has value of undefined.`); + continue; + } + const currentValue = this[key]; + if (currentValue === void 0) { + console.warn(`THREE.Material: '${key}' is not a property of THREE.${this.type}.`); + continue; + } + if (currentValue && currentValue.isColor) { + currentValue.set(newValue); + } else if (currentValue && currentValue.isVector3 && (newValue && newValue.isVector3)) { + currentValue.copy(newValue); + } else { + this[key] = newValue; + } + } + } + toJSON(meta) { + const isRootObject = meta === void 0 || typeof meta === "string"; + if (isRootObject) { + meta = { + textures: {}, + images: {} + }; + } + const data = { + metadata: { + version: 4.6, + type: "Material", + generator: "Material.toJSON" + } + }; + data.uuid = this.uuid; + data.type = this.type; + if (this.name !== "") data.name = this.name; + if (this.color && this.color.isColor) data.color = this.color.getHex(); + if (this.roughness !== void 0) data.roughness = this.roughness; + if (this.metalness !== void 0) data.metalness = this.metalness; + if (this.sheen !== void 0) data.sheen = this.sheen; + if (this.sheenColor && this.sheenColor.isColor) data.sheenColor = this.sheenColor.getHex(); + if (this.sheenRoughness !== void 0) data.sheenRoughness = this.sheenRoughness; + if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex(); + if (this.emissiveIntensity !== void 0 && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity; + if (this.specular && this.specular.isColor) data.specular = this.specular.getHex(); + if (this.specularIntensity !== void 0) data.specularIntensity = this.specularIntensity; + if (this.specularColor && this.specularColor.isColor) data.specularColor = this.specularColor.getHex(); + if (this.shininess !== void 0) data.shininess = this.shininess; + if (this.clearcoat !== void 0) data.clearcoat = this.clearcoat; + if (this.clearcoatRoughness !== void 0) data.clearcoatRoughness = this.clearcoatRoughness; + if (this.clearcoatMap && this.clearcoatMap.isTexture) { + data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid; + } + if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) { + data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid; + } + if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) { + data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid; + data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); + } + if (this.dispersion !== void 0) data.dispersion = this.dispersion; + if (this.iridescence !== void 0) data.iridescence = this.iridescence; + if (this.iridescenceIOR !== void 0) data.iridescenceIOR = this.iridescenceIOR; + if (this.iridescenceThicknessRange !== void 0) data.iridescenceThicknessRange = this.iridescenceThicknessRange; + if (this.iridescenceMap && this.iridescenceMap.isTexture) { + data.iridescenceMap = this.iridescenceMap.toJSON(meta).uuid; + } + if (this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture) { + data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(meta).uuid; + } + if (this.anisotropy !== void 0) data.anisotropy = this.anisotropy; + if (this.anisotropyRotation !== void 0) data.anisotropyRotation = this.anisotropyRotation; + if (this.anisotropyMap && this.anisotropyMap.isTexture) { + data.anisotropyMap = this.anisotropyMap.toJSON(meta).uuid; + } + if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid; + if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid; + if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid; + if (this.lightMap && this.lightMap.isTexture) { + data.lightMap = this.lightMap.toJSON(meta).uuid; + data.lightMapIntensity = this.lightMapIntensity; + } + if (this.aoMap && this.aoMap.isTexture) { + data.aoMap = this.aoMap.toJSON(meta).uuid; + data.aoMapIntensity = this.aoMapIntensity; + } + if (this.bumpMap && this.bumpMap.isTexture) { + data.bumpMap = this.bumpMap.toJSON(meta).uuid; + data.bumpScale = this.bumpScale; + } + if (this.normalMap && this.normalMap.isTexture) { + data.normalMap = this.normalMap.toJSON(meta).uuid; + data.normalMapType = this.normalMapType; + data.normalScale = this.normalScale.toArray(); + } + if (this.displacementMap && this.displacementMap.isTexture) { + data.displacementMap = this.displacementMap.toJSON(meta).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + } + if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid; + if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid; + if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid; + if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid; + if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid; + if (this.specularColorMap && this.specularColorMap.isTexture) data.specularColorMap = this.specularColorMap.toJSON(meta).uuid; + if (this.envMap && this.envMap.isTexture) { + data.envMap = this.envMap.toJSON(meta).uuid; + if (this.combine !== void 0) data.combine = this.combine; + } + if (this.envMapRotation !== void 0) data.envMapRotation = this.envMapRotation.toArray(); + if (this.envMapIntensity !== void 0) data.envMapIntensity = this.envMapIntensity; + if (this.reflectivity !== void 0) data.reflectivity = this.reflectivity; + if (this.refractionRatio !== void 0) data.refractionRatio = this.refractionRatio; + if (this.gradientMap && this.gradientMap.isTexture) { + data.gradientMap = this.gradientMap.toJSON(meta).uuid; + } + if (this.transmission !== void 0) data.transmission = this.transmission; + if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid; + if (this.thickness !== void 0) data.thickness = this.thickness; + if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid; + if (this.attenuationDistance !== void 0 && this.attenuationDistance !== Infinity) data.attenuationDistance = this.attenuationDistance; + if (this.attenuationColor !== void 0) data.attenuationColor = this.attenuationColor.getHex(); + if (this.size !== void 0) data.size = this.size; + if (this.shadowSide !== null) data.shadowSide = this.shadowSide; + if (this.sizeAttenuation !== void 0) data.sizeAttenuation = this.sizeAttenuation; + if (this.blending !== NormalBlending) data.blending = this.blending; + if (this.side !== FrontSide) data.side = this.side; + if (this.vertexColors === true) data.vertexColors = true; + if (this.opacity < 1) data.opacity = this.opacity; + if (this.transparent === true) data.transparent = true; + if (this.blendSrc !== SrcAlphaFactor) data.blendSrc = this.blendSrc; + if (this.blendDst !== OneMinusSrcAlphaFactor) data.blendDst = this.blendDst; + if (this.blendEquation !== AddEquation) data.blendEquation = this.blendEquation; + if (this.blendSrcAlpha !== null) data.blendSrcAlpha = this.blendSrcAlpha; + if (this.blendDstAlpha !== null) data.blendDstAlpha = this.blendDstAlpha; + if (this.blendEquationAlpha !== null) data.blendEquationAlpha = this.blendEquationAlpha; + if (this.blendColor && this.blendColor.isColor) data.blendColor = this.blendColor.getHex(); + if (this.blendAlpha !== 0) data.blendAlpha = this.blendAlpha; + if (this.depthFunc !== LessEqualDepth) data.depthFunc = this.depthFunc; + if (this.depthTest === false) data.depthTest = this.depthTest; + if (this.depthWrite === false) data.depthWrite = this.depthWrite; + if (this.colorWrite === false) data.colorWrite = this.colorWrite; + if (this.stencilWriteMask !== 255) data.stencilWriteMask = this.stencilWriteMask; + if (this.stencilFunc !== AlwaysStencilFunc) data.stencilFunc = this.stencilFunc; + if (this.stencilRef !== 0) data.stencilRef = this.stencilRef; + if (this.stencilFuncMask !== 255) data.stencilFuncMask = this.stencilFuncMask; + if (this.stencilFail !== KeepStencilOp) data.stencilFail = this.stencilFail; + if (this.stencilZFail !== KeepStencilOp) data.stencilZFail = this.stencilZFail; + if (this.stencilZPass !== KeepStencilOp) data.stencilZPass = this.stencilZPass; + if (this.stencilWrite === true) data.stencilWrite = this.stencilWrite; + if (this.rotation !== void 0 && this.rotation !== 0) data.rotation = this.rotation; + if (this.polygonOffset === true) data.polygonOffset = true; + if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor; + if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits; + if (this.linewidth !== void 0 && this.linewidth !== 1) data.linewidth = this.linewidth; + if (this.dashSize !== void 0) data.dashSize = this.dashSize; + if (this.gapSize !== void 0) data.gapSize = this.gapSize; + if (this.scale !== void 0) data.scale = this.scale; + if (this.dithering === true) data.dithering = true; + if (this.alphaTest > 0) data.alphaTest = this.alphaTest; + if (this.alphaHash === true) data.alphaHash = true; + if (this.alphaToCoverage === true) data.alphaToCoverage = true; + if (this.premultipliedAlpha === true) data.premultipliedAlpha = true; + if (this.forceSinglePass === true) data.forceSinglePass = true; + if (this.wireframe === true) data.wireframe = true; + if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth; + if (this.wireframeLinecap !== "round") data.wireframeLinecap = this.wireframeLinecap; + if (this.wireframeLinejoin !== "round") data.wireframeLinejoin = this.wireframeLinejoin; + if (this.flatShading === true) data.flatShading = true; + if (this.visible === false) data.visible = false; + if (this.toneMapped === false) data.toneMapped = false; + if (this.fog === false) data.fog = false; + if (Object.keys(this.userData).length > 0) data.userData = this.userData; + function extractFromCache(cache) { + const values = []; + for (const key in cache) { + const data2 = cache[key]; + delete data2.metadata; + values.push(data2); + } + return values; + } + if (isRootObject) { + const textures = extractFromCache(meta.textures); + const images = extractFromCache(meta.images); + if (textures.length > 0) data.textures = textures; + if (images.length > 0) data.images = images; + } + return data; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.name = source.name; + this.blending = source.blending; + this.side = source.side; + this.vertexColors = source.vertexColors; + this.opacity = source.opacity; + this.transparent = source.transparent; + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + this.blendColor.copy(source.blendColor); + this.blendAlpha = source.blendAlpha; + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + this.stencilWriteMask = source.stencilWriteMask; + this.stencilFunc = source.stencilFunc; + this.stencilRef = source.stencilRef; + this.stencilFuncMask = source.stencilFuncMask; + this.stencilFail = source.stencilFail; + this.stencilZFail = source.stencilZFail; + this.stencilZPass = source.stencilZPass; + this.stencilWrite = source.stencilWrite; + const srcPlanes = source.clippingPlanes; + let dstPlanes = null; + if (srcPlanes !== null) { + const n = srcPlanes.length; + dstPlanes = new Array(n); + for (let i = 0; i !== n; ++i) { + dstPlanes[i] = srcPlanes[i].clone(); + } + } + this.clippingPlanes = dstPlanes; + this.clipIntersection = source.clipIntersection; + this.clipShadows = source.clipShadows; + this.shadowSide = source.shadowSide; + this.colorWrite = source.colorWrite; + this.precision = source.precision; + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + this.dithering = source.dithering; + this.alphaTest = source.alphaTest; + this.alphaHash = source.alphaHash; + this.alphaToCoverage = source.alphaToCoverage; + this.premultipliedAlpha = source.premultipliedAlpha; + this.forceSinglePass = source.forceSinglePass; + this.visible = source.visible; + this.toneMapped = source.toneMapped; + this.userData = JSON.parse(JSON.stringify(source.userData)); + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } + set needsUpdate(value) { + if (value === true) this.version++; + } + onBuild() { + console.warn("Material: onBuild() has been removed."); + } + onBeforeRender() { + console.warn("Material: onBeforeRender() has been removed."); + } +}; +var MeshBasicMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshBasicMaterial = true; + this.type = "MeshBasicMaterial"; + this.color = new Color(16777215); + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.fog = source.fog; + return this; + } +}; +var _tables = _generateTables(); +function _generateTables() { + const buffer = new ArrayBuffer(4); + const floatView = new Float32Array(buffer); + const uint32View = new Uint32Array(buffer); + const baseTable = new Uint32Array(512); + const shiftTable = new Uint32Array(512); + for (let i = 0; i < 256; ++i) { + const e = i - 127; + if (e < -27) { + baseTable[i] = 0; + baseTable[i | 256] = 32768; + shiftTable[i] = 24; + shiftTable[i | 256] = 24; + } else if (e < -14) { + baseTable[i] = 1024 >> -e - 14; + baseTable[i | 256] = 1024 >> -e - 14 | 32768; + shiftTable[i] = -e - 1; + shiftTable[i | 256] = -e - 1; + } else if (e <= 15) { + baseTable[i] = e + 15 << 10; + baseTable[i | 256] = e + 15 << 10 | 32768; + shiftTable[i] = 13; + shiftTable[i | 256] = 13; + } else if (e < 128) { + baseTable[i] = 31744; + baseTable[i | 256] = 64512; + shiftTable[i] = 24; + shiftTable[i | 256] = 24; + } else { + baseTable[i] = 31744; + baseTable[i | 256] = 64512; + shiftTable[i] = 13; + shiftTable[i | 256] = 13; + } + } + const mantissaTable = new Uint32Array(2048); + const exponentTable = new Uint32Array(64); + const offsetTable = new Uint32Array(64); + for (let i = 1; i < 1024; ++i) { + let m = i << 13; + let e = 0; + while ((m & 8388608) === 0) { + m <<= 1; + e -= 8388608; + } + m &= ~8388608; + e += 947912704; + mantissaTable[i] = m | e; + } + for (let i = 1024; i < 2048; ++i) { + mantissaTable[i] = 939524096 + (i - 1024 << 13); + } + for (let i = 1; i < 31; ++i) { + exponentTable[i] = i << 23; + } + exponentTable[31] = 1199570944; + exponentTable[32] = 2147483648; + for (let i = 33; i < 63; ++i) { + exponentTable[i] = 2147483648 + (i - 32 << 23); + } + exponentTable[63] = 3347054592; + for (let i = 1; i < 64; ++i) { + if (i !== 32) { + offsetTable[i] = 1024; + } + } + return { + floatView, + uint32View, + baseTable, + shiftTable, + mantissaTable, + exponentTable, + offsetTable + }; +} +function toHalfFloat(val) { + if (Math.abs(val) > 65504) console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."); + val = clamp(val, -65504, 65504); + _tables.floatView[0] = val; + const f = _tables.uint32View[0]; + const e = f >> 23 & 511; + return _tables.baseTable[e] + ((f & 8388607) >> _tables.shiftTable[e]); +} +function fromHalfFloat(val) { + const m = val >> 10; + _tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 1023)] + _tables.exponentTable[m]; + return _tables.floatView[0]; +} +var DataUtils = { + toHalfFloat, + fromHalfFloat +}; +var _vector$9 = new Vector3(); +var _vector2$1 = new Vector2(); +var BufferAttribute = class { + constructor(array, itemSize, normalized = false) { + if (Array.isArray(array)) { + throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + } + this.isBufferAttribute = true; + this.name = ""; + this.array = array; + this.itemSize = itemSize; + this.count = array !== void 0 ? array.length / itemSize : 0; + this.normalized = normalized; + this.usage = StaticDrawUsage; + this._updateRange = { offset: 0, count: -1 }; + this.updateRanges = []; + this.gpuType = FloatType; + this.version = 0; + } + onUploadCallback() { + } + set needsUpdate(value) { + if (value === true) this.version++; + } + get updateRange() { + warnOnce("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."); + return this._updateRange; + } + setUsage(value) { + this.usage = value; + return this; + } + addUpdateRange(start, count) { + this.updateRanges.push({ start, count }); + } + clearUpdateRanges() { + this.updateRanges.length = 0; + } + copy(source) { + this.name = source.name; + this.array = new source.array.constructor(source.array); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + this.usage = source.usage; + this.gpuType = source.gpuType; + return this; + } + copyAt(index1, attribute, index2) { + index1 *= this.itemSize; + index2 *= attribute.itemSize; + for (let i = 0, l = this.itemSize; i < l; i++) { + this.array[index1 + i] = attribute.array[index2 + i]; + } + return this; + } + copyArray(array) { + this.array.set(array); + return this; + } + applyMatrix3(m) { + if (this.itemSize === 2) { + for (let i = 0, l = this.count; i < l; i++) { + _vector2$1.fromBufferAttribute(this, i); + _vector2$1.applyMatrix3(m); + this.setXY(i, _vector2$1.x, _vector2$1.y); + } + } else if (this.itemSize === 3) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyMatrix3(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + } + return this; + } + applyMatrix4(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyMatrix4(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + applyNormalMatrix(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.applyNormalMatrix(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + transformDirection(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$9.fromBufferAttribute(this, i); + _vector$9.transformDirection(m); + this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); + } + return this; + } + set(value, offset = 0) { + this.array.set(value, offset); + return this; + } + getComponent(index, component) { + let value = this.array[index * this.itemSize + component]; + if (this.normalized) value = denormalize(value, this.array); + return value; + } + setComponent(index, component, value) { + if (this.normalized) value = normalize(value, this.array); + this.array[index * this.itemSize + component] = value; + return this; + } + getX(index) { + let x = this.array[index * this.itemSize]; + if (this.normalized) x = denormalize(x, this.array); + return x; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.array[index * this.itemSize] = x; + return this; + } + getY(index) { + let y = this.array[index * this.itemSize + 1]; + if (this.normalized) y = denormalize(y, this.array); + return y; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.array[index * this.itemSize + 1] = y; + return this; + } + getZ(index) { + let z = this.array[index * this.itemSize + 2]; + if (this.normalized) z = denormalize(z, this.array); + return z; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.array[index * this.itemSize + 2] = z; + return this; + } + getW(index) { + let w = this.array[index * this.itemSize + 3]; + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.array[index * this.itemSize + 3] = w; + return this; + } + setXY(index, x, y) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + return this; + } + setXYZ(index, x, y, z) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + this.array[index + 2] = z; + return this; + } + setXYZW(index, x, y, z, w) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.array[index + 0] = x; + this.array[index + 1] = y; + this.array[index + 2] = z; + this.array[index + 3] = w; + return this; + } + onUpload(callback) { + this.onUploadCallback = callback; + return this; + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this); + } + toJSON() { + const data = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.from(this.array), + normalized: this.normalized + }; + if (this.name !== "") data.name = this.name; + if (this.usage !== StaticDrawUsage) data.usage = this.usage; + return data; + } +}; +var Int8BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Int8Array(array), itemSize, normalized); + } +}; +var Uint8BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Uint8Array(array), itemSize, normalized); + } +}; +var Uint8ClampedBufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Uint8ClampedArray(array), itemSize, normalized); + } +}; +var Int16BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Int16Array(array), itemSize, normalized); + } +}; +var Uint16BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Uint16Array(array), itemSize, normalized); + } +}; +var Int32BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Int32Array(array), itemSize, normalized); + } +}; +var Uint32BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Uint32Array(array), itemSize, normalized); + } +}; +var Float16BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Uint16Array(array), itemSize, normalized); + this.isFloat16BufferAttribute = true; + } + getX(index) { + let x = fromHalfFloat(this.array[index * this.itemSize]); + if (this.normalized) x = denormalize(x, this.array); + return x; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.array[index * this.itemSize] = toHalfFloat(x); + return this; + } + getY(index) { + let y = fromHalfFloat(this.array[index * this.itemSize + 1]); + if (this.normalized) y = denormalize(y, this.array); + return y; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.array[index * this.itemSize + 1] = toHalfFloat(y); + return this; + } + getZ(index) { + let z = fromHalfFloat(this.array[index * this.itemSize + 2]); + if (this.normalized) z = denormalize(z, this.array); + return z; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.array[index * this.itemSize + 2] = toHalfFloat(z); + return this; + } + getW(index) { + let w = fromHalfFloat(this.array[index * this.itemSize + 3]); + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.array[index * this.itemSize + 3] = toHalfFloat(w); + return this; + } + setXY(index, x, y) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + return this; + } + setXYZ(index, x, y, z) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + this.array[index + 2] = toHalfFloat(z); + return this; + } + setXYZW(index, x, y, z, w) { + index *= this.itemSize; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.array[index + 0] = toHalfFloat(x); + this.array[index + 1] = toHalfFloat(y); + this.array[index + 2] = toHalfFloat(z); + this.array[index + 3] = toHalfFloat(w); + return this; + } +}; +var Float32BufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized) { + super(new Float32Array(array), itemSize, normalized); + } +}; +var _id$2 = 0; +var _m1$2 = new Matrix4(); +var _obj = new Object3D(); +var _offset = new Vector3(); +var _box$2 = new Box3(); +var _boxMorphTargets = new Box3(); +var _vector$8 = new Vector3(); +var BufferGeometry = class _BufferGeometry extends EventDispatcher { + constructor() { + super(); + this.isBufferGeometry = true; + Object.defineProperty(this, "id", { value: _id$2++ }); + this.uuid = generateUUID(); + this.name = ""; + this.type = "BufferGeometry"; + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.morphTargetsRelative = false; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + this.drawRange = { start: 0, count: Infinity }; + this.userData = {}; + } + getIndex() { + return this.index; + } + setIndex(index) { + if (Array.isArray(index)) { + this.index = new (arrayNeedsUint32(index) ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1); + } else { + this.index = index; + } + return this; + } + getAttribute(name) { + return this.attributes[name]; + } + setAttribute(name, attribute) { + this.attributes[name] = attribute; + return this; + } + deleteAttribute(name) { + delete this.attributes[name]; + return this; + } + hasAttribute(name) { + return this.attributes[name] !== void 0; + } + addGroup(start, count, materialIndex = 0) { + this.groups.push({ + start, + count, + materialIndex + }); + } + clearGroups() { + this.groups = []; + } + setDrawRange(start, count) { + this.drawRange.start = start; + this.drawRange.count = count; + } + applyMatrix4(matrix) { + const position = this.attributes.position; + if (position !== void 0) { + position.applyMatrix4(matrix); + position.needsUpdate = true; + } + const normal = this.attributes.normal; + if (normal !== void 0) { + const normalMatrix = new Matrix3().getNormalMatrix(matrix); + normal.applyNormalMatrix(normalMatrix); + normal.needsUpdate = true; + } + const tangent = this.attributes.tangent; + if (tangent !== void 0) { + tangent.transformDirection(matrix); + tangent.needsUpdate = true; + } + if (this.boundingBox !== null) { + this.computeBoundingBox(); + } + if (this.boundingSphere !== null) { + this.computeBoundingSphere(); + } + return this; + } + applyQuaternion(q) { + _m1$2.makeRotationFromQuaternion(q); + this.applyMatrix4(_m1$2); + return this; + } + rotateX(angle) { + _m1$2.makeRotationX(angle); + this.applyMatrix4(_m1$2); + return this; + } + rotateY(angle) { + _m1$2.makeRotationY(angle); + this.applyMatrix4(_m1$2); + return this; + } + rotateZ(angle) { + _m1$2.makeRotationZ(angle); + this.applyMatrix4(_m1$2); + return this; + } + translate(x, y, z) { + _m1$2.makeTranslation(x, y, z); + this.applyMatrix4(_m1$2); + return this; + } + scale(x, y, z) { + _m1$2.makeScale(x, y, z); + this.applyMatrix4(_m1$2); + return this; + } + lookAt(vector) { + _obj.lookAt(vector); + _obj.updateMatrix(); + this.applyMatrix4(_obj.matrix); + return this; + } + center() { + this.computeBoundingBox(); + this.boundingBox.getCenter(_offset).negate(); + this.translate(_offset.x, _offset.y, _offset.z); + return this; + } + setFromPoints(points) { + const position = []; + for (let i = 0, l = points.length; i < l; i++) { + const point = points[i]; + position.push(point.x, point.y, point.z || 0); + } + this.setAttribute("position", new Float32BufferAttribute(position, 3)); + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + if (position && position.isGLBufferAttribute) { + console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.", this); + this.boundingBox.set( + new Vector3(-Infinity, -Infinity, -Infinity), + new Vector3(Infinity, Infinity, Infinity) + ); + return; + } + if (position !== void 0) { + this.boundingBox.setFromBufferAttribute(position); + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + _box$2.setFromBufferAttribute(morphAttribute); + if (this.morphTargetsRelative) { + _vector$8.addVectors(this.boundingBox.min, _box$2.min); + this.boundingBox.expandByPoint(_vector$8); + _vector$8.addVectors(this.boundingBox.max, _box$2.max); + this.boundingBox.expandByPoint(_vector$8); + } else { + this.boundingBox.expandByPoint(_box$2.min); + this.boundingBox.expandByPoint(_box$2.max); + } + } + } + } else { + this.boundingBox.makeEmpty(); + } + if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) { + console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + if (position && position.isGLBufferAttribute) { + console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.", this); + this.boundingSphere.set(new Vector3(), Infinity); + return; + } + if (position) { + const center = this.boundingSphere.center; + _box$2.setFromBufferAttribute(position); + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + _boxMorphTargets.setFromBufferAttribute(morphAttribute); + if (this.morphTargetsRelative) { + _vector$8.addVectors(_box$2.min, _boxMorphTargets.min); + _box$2.expandByPoint(_vector$8); + _vector$8.addVectors(_box$2.max, _boxMorphTargets.max); + _box$2.expandByPoint(_vector$8); + } else { + _box$2.expandByPoint(_boxMorphTargets.min); + _box$2.expandByPoint(_boxMorphTargets.max); + } + } + } + _box$2.getCenter(center); + let maxRadiusSq = 0; + for (let i = 0, il = position.count; i < il; i++) { + _vector$8.fromBufferAttribute(position, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); + } + if (morphAttributesPosition) { + for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { + const morphAttribute = morphAttributesPosition[i]; + const morphTargetsRelative = this.morphTargetsRelative; + for (let j = 0, jl = morphAttribute.count; j < jl; j++) { + _vector$8.fromBufferAttribute(morphAttribute, j); + if (morphTargetsRelative) { + _offset.fromBufferAttribute(position, j); + _vector$8.add(_offset); + } + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); + } + } + } + this.boundingSphere.radius = Math.sqrt(maxRadiusSq); + if (isNaN(this.boundingSphere.radius)) { + console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this); + } + } + } + computeTangents() { + const index = this.index; + const attributes = this.attributes; + if (index === null || attributes.position === void 0 || attributes.normal === void 0 || attributes.uv === void 0) { + console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); + return; + } + const positionAttribute = attributes.position; + const normalAttribute = attributes.normal; + const uvAttribute = attributes.uv; + if (this.hasAttribute("tangent") === false) { + this.setAttribute("tangent", new BufferAttribute(new Float32Array(4 * positionAttribute.count), 4)); + } + const tangentAttribute = this.getAttribute("tangent"); + const tan1 = [], tan2 = []; + for (let i = 0; i < positionAttribute.count; i++) { + tan1[i] = new Vector3(); + tan2[i] = new Vector3(); + } + const vA = new Vector3(), vB = new Vector3(), vC = new Vector3(), uvA = new Vector2(), uvB = new Vector2(), uvC = new Vector2(), sdir = new Vector3(), tdir = new Vector3(); + function handleTriangle(a, b, c) { + vA.fromBufferAttribute(positionAttribute, a); + vB.fromBufferAttribute(positionAttribute, b); + vC.fromBufferAttribute(positionAttribute, c); + uvA.fromBufferAttribute(uvAttribute, a); + uvB.fromBufferAttribute(uvAttribute, b); + uvC.fromBufferAttribute(uvAttribute, c); + vB.sub(vA); + vC.sub(vA); + uvB.sub(uvA); + uvC.sub(uvA); + const r = 1 / (uvB.x * uvC.y - uvC.x * uvB.y); + if (!isFinite(r)) return; + sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r); + tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r); + tan1[a].add(sdir); + tan1[b].add(sdir); + tan1[c].add(sdir); + tan2[a].add(tdir); + tan2[b].add(tdir); + tan2[c].add(tdir); + } + let groups = this.groups; + if (groups.length === 0) { + groups = [{ + start: 0, + count: index.count + }]; + } + for (let i = 0, il = groups.length; i < il; ++i) { + const group = groups[i]; + const start = group.start; + const count = group.count; + for (let j = start, jl = start + count; j < jl; j += 3) { + handleTriangle( + index.getX(j + 0), + index.getX(j + 1), + index.getX(j + 2) + ); + } + } + const tmp2 = new Vector3(), tmp22 = new Vector3(); + const n = new Vector3(), n2 = new Vector3(); + function handleVertex(v) { + n.fromBufferAttribute(normalAttribute, v); + n2.copy(n); + const t = tan1[v]; + tmp2.copy(t); + tmp2.sub(n.multiplyScalar(n.dot(t))).normalize(); + tmp22.crossVectors(n2, t); + const test = tmp22.dot(tan2[v]); + const w = test < 0 ? -1 : 1; + tangentAttribute.setXYZW(v, tmp2.x, tmp2.y, tmp2.z, w); + } + for (let i = 0, il = groups.length; i < il; ++i) { + const group = groups[i]; + const start = group.start; + const count = group.count; + for (let j = start, jl = start + count; j < jl; j += 3) { + handleVertex(index.getX(j + 0)); + handleVertex(index.getX(j + 1)); + handleVertex(index.getX(j + 2)); + } + } + } + computeVertexNormals() { + const index = this.index; + const positionAttribute = this.getAttribute("position"); + if (positionAttribute !== void 0) { + let normalAttribute = this.getAttribute("normal"); + if (normalAttribute === void 0) { + normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); + this.setAttribute("normal", normalAttribute); + } else { + for (let i = 0, il = normalAttribute.count; i < il; i++) { + normalAttribute.setXYZ(i, 0, 0, 0); + } + } + const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); + const cb = new Vector3(), ab = new Vector3(); + if (index) { + for (let i = 0, il = index.count; i < il; i += 3) { + const vA = index.getX(i + 0); + const vB = index.getX(i + 1); + const vC = index.getX(i + 2); + pA.fromBufferAttribute(positionAttribute, vA); + pB.fromBufferAttribute(positionAttribute, vB); + pC.fromBufferAttribute(positionAttribute, vC); + cb.subVectors(pC, pB); + ab.subVectors(pA, pB); + cb.cross(ab); + nA.fromBufferAttribute(normalAttribute, vA); + nB.fromBufferAttribute(normalAttribute, vB); + nC.fromBufferAttribute(normalAttribute, vC); + nA.add(cb); + nB.add(cb); + nC.add(cb); + normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); + normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); + normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); + } + } else { + for (let i = 0, il = positionAttribute.count; i < il; i += 3) { + pA.fromBufferAttribute(positionAttribute, i + 0); + pB.fromBufferAttribute(positionAttribute, i + 1); + pC.fromBufferAttribute(positionAttribute, i + 2); + cb.subVectors(pC, pB); + ab.subVectors(pA, pB); + cb.cross(ab); + normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); + normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); + normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); + } + } + this.normalizeNormals(); + normalAttribute.needsUpdate = true; + } + } + normalizeNormals() { + const normals = this.attributes.normal; + for (let i = 0, il = normals.count; i < il; i++) { + _vector$8.fromBufferAttribute(normals, i); + _vector$8.normalize(); + normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z); + } + } + toNonIndexed() { + function convertBufferAttribute(attribute, indices2) { + const array = attribute.array; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + const array2 = new array.constructor(indices2.length * itemSize); + let index = 0, index2 = 0; + for (let i = 0, l = indices2.length; i < l; i++) { + if (attribute.isInterleavedBufferAttribute) { + index = indices2[i] * attribute.data.stride + attribute.offset; + } else { + index = indices2[i] * itemSize; + } + for (let j = 0; j < itemSize; j++) { + array2[index2++] = array[index++]; + } + } + return new BufferAttribute(array2, itemSize, normalized); + } + if (this.index === null) { + console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."); + return this; + } + const geometry2 = new _BufferGeometry(); + const indices = this.index.array; + const attributes = this.attributes; + for (const name in attributes) { + const attribute = attributes[name]; + const newAttribute = convertBufferAttribute(attribute, indices); + geometry2.setAttribute(name, newAttribute); + } + const morphAttributes = this.morphAttributes; + for (const name in morphAttributes) { + const morphArray = []; + const morphAttribute = morphAttributes[name]; + for (let i = 0, il = morphAttribute.length; i < il; i++) { + const attribute = morphAttribute[i]; + const newAttribute = convertBufferAttribute(attribute, indices); + morphArray.push(newAttribute); + } + geometry2.morphAttributes[name] = morphArray; + } + geometry2.morphTargetsRelative = this.morphTargetsRelative; + const groups = this.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + geometry2.addGroup(group.start, group.count, group.materialIndex); + } + return geometry2; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + data.uuid = this.uuid; + data.type = this.type; + if (this.name !== "") data.name = this.name; + if (Object.keys(this.userData).length > 0) data.userData = this.userData; + if (this.parameters !== void 0) { + const parameters = this.parameters; + for (const key in parameters) { + if (parameters[key] !== void 0) data[key] = parameters[key]; + } + return data; + } + data.data = { attributes: {} }; + const index = this.index; + if (index !== null) { + data.data.index = { + type: index.array.constructor.name, + array: Array.prototype.slice.call(index.array) + }; + } + const attributes = this.attributes; + for (const key in attributes) { + const attribute = attributes[key]; + data.data.attributes[key] = attribute.toJSON(data.data); + } + const morphAttributes = {}; + let hasMorphAttributes = false; + for (const key in this.morphAttributes) { + const attributeArray = this.morphAttributes[key]; + const array = []; + for (let i = 0, il = attributeArray.length; i < il; i++) { + const attribute = attributeArray[i]; + array.push(attribute.toJSON(data.data)); + } + if (array.length > 0) { + morphAttributes[key] = array; + hasMorphAttributes = true; + } + } + if (hasMorphAttributes) { + data.data.morphAttributes = morphAttributes; + data.data.morphTargetsRelative = this.morphTargetsRelative; + } + const groups = this.groups; + if (groups.length > 0) { + data.data.groups = JSON.parse(JSON.stringify(groups)); + } + const boundingSphere = this.boundingSphere; + if (boundingSphere !== null) { + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + } + return data; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + const data = {}; + this.name = source.name; + const index = source.index; + if (index !== null) { + this.setIndex(index.clone(data)); + } + const attributes = source.attributes; + for (const name in attributes) { + const attribute = attributes[name]; + this.setAttribute(name, attribute.clone(data)); + } + const morphAttributes = source.morphAttributes; + for (const name in morphAttributes) { + const array = []; + const morphAttribute = morphAttributes[name]; + for (let i = 0, l = morphAttribute.length; i < l; i++) { + array.push(morphAttribute[i].clone(data)); + } + this.morphAttributes[name] = array; + } + this.morphTargetsRelative = source.morphTargetsRelative; + const groups = source.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + this.addGroup(group.start, group.count, group.materialIndex); + } + const boundingBox = source.boundingBox; + if (boundingBox !== null) { + this.boundingBox = boundingBox.clone(); + } + const boundingSphere = source.boundingSphere; + if (boundingSphere !== null) { + this.boundingSphere = boundingSphere.clone(); + } + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + this.userData = source.userData; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + } +}; +var _inverseMatrix$3 = new Matrix4(); +var _ray$3 = new Ray(); +var _sphere$6 = new Sphere(); +var _sphereHitAt = new Vector3(); +var _vA$1 = new Vector3(); +var _vB$1 = new Vector3(); +var _vC$1 = new Vector3(); +var _tempA = new Vector3(); +var _morphA = new Vector3(); +var _uvA$1 = new Vector2(); +var _uvB$1 = new Vector2(); +var _uvC$1 = new Vector2(); +var _normalA = new Vector3(); +var _normalB = new Vector3(); +var _normalC = new Vector3(); +var _intersectionPoint = new Vector3(); +var _intersectionPointWorld = new Vector3(); +var Mesh = class extends Object3D { + constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) { + super(); + this.isMesh = true; + this.type = "Mesh"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.morphTargetInfluences !== void 0) { + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + } + if (source.morphTargetDictionary !== void 0) { + this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary); + } + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } + getVertexPosition(index, target) { + const geometry = this.geometry; + const position = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + target.fromBufferAttribute(position, index); + const morphInfluences = this.morphTargetInfluences; + if (morphPosition && morphInfluences) { + _morphA.set(0, 0, 0); + for (let i = 0, il = morphPosition.length; i < il; i++) { + const influence = morphInfluences[i]; + const morphAttribute = morphPosition[i]; + if (influence === 0) continue; + _tempA.fromBufferAttribute(morphAttribute, index); + if (morphTargetsRelative) { + _morphA.addScaledVector(_tempA, influence); + } else { + _morphA.addScaledVector(_tempA.sub(target), influence); + } + } + target.add(_morphA); + } + return target; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const material = this.material; + const matrixWorld = this.matrixWorld; + if (material === void 0) return; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$6.copy(geometry.boundingSphere); + _sphere$6.applyMatrix4(matrixWorld); + _ray$3.copy(raycaster.ray).recast(raycaster.near); + if (_sphere$6.containsPoint(_ray$3.origin) === false) { + if (_ray$3.intersectSphere(_sphere$6, _sphereHitAt) === null) return; + if (_ray$3.origin.distanceToSquared(_sphereHitAt) > (raycaster.far - raycaster.near) ** 2) return; + } + _inverseMatrix$3.copy(matrixWorld).invert(); + _ray$3.copy(raycaster.ray).applyMatrix4(_inverseMatrix$3); + if (geometry.boundingBox !== null) { + if (_ray$3.intersectsBox(geometry.boundingBox) === false) return; + } + this._computeIntersections(raycaster, intersects2, _ray$3); + } + _computeIntersections(raycaster, intersects2, rayLocalSpace) { + let intersection; + const geometry = this.geometry; + const material = this.material; + const index = geometry.index; + const position = geometry.attributes.position; + const uv = geometry.attributes.uv; + const uv1 = geometry.attributes.uv1; + const normal = geometry.attributes.normal; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + if (index !== null) { + if (Array.isArray(material)) { + for (let i = 0, il = groups.length; i < il; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + const start = Math.max(group.start, drawRange.start); + const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); + for (let j = start, jl = end; j < jl; j += 3) { + const a = index.getX(j); + const b = index.getX(j + 1); + const c = index.getX(j + 2); + intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(j / 3); + intersection.face.materialIndex = group.materialIndex; + intersects2.push(intersection); + } + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i += 3) { + const a = index.getX(i); + const b = index.getX(i + 1); + const c = index.getX(i + 2); + intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(i / 3); + intersects2.push(intersection); + } + } + } + } else if (position !== void 0) { + if (Array.isArray(material)) { + for (let i = 0, il = groups.length; i < il; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + const start = Math.max(group.start, drawRange.start); + const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); + for (let j = start, jl = end; j < jl; j += 3) { + const a = j; + const b = j + 1; + const c = j + 2; + intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(j / 3); + intersection.face.materialIndex = group.materialIndex; + intersects2.push(intersection); + } + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(position.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i += 3) { + const a = i; + const b = i + 1; + const c = i + 2; + intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); + if (intersection) { + intersection.faceIndex = Math.floor(i / 3); + intersects2.push(intersection); + } + } + } + } + } +}; +function checkIntersection$1(object, material, raycaster, ray, pA, pB, pC, point) { + let intersect2; + if (material.side === BackSide) { + intersect2 = ray.intersectTriangle(pC, pB, pA, true, point); + } else { + intersect2 = ray.intersectTriangle(pA, pB, pC, material.side === FrontSide, point); + } + if (intersect2 === null) return null; + _intersectionPointWorld.copy(point); + _intersectionPointWorld.applyMatrix4(object.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); + if (distance < raycaster.near || distance > raycaster.far) return null; + return { + distance, + point: _intersectionPointWorld.clone(), + object + }; +} +function checkGeometryIntersection(object, material, raycaster, ray, uv, uv1, normal, a, b, c) { + object.getVertexPosition(a, _vA$1); + object.getVertexPosition(b, _vB$1); + object.getVertexPosition(c, _vC$1); + const intersection = checkIntersection$1(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint); + if (intersection) { + if (uv) { + _uvA$1.fromBufferAttribute(uv, a); + _uvB$1.fromBufferAttribute(uv, b); + _uvC$1.fromBufferAttribute(uv, c); + intersection.uv = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); + } + if (uv1) { + _uvA$1.fromBufferAttribute(uv1, a); + _uvB$1.fromBufferAttribute(uv1, b); + _uvC$1.fromBufferAttribute(uv1, c); + intersection.uv1 = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); + } + if (normal) { + _normalA.fromBufferAttribute(normal, a); + _normalB.fromBufferAttribute(normal, b); + _normalC.fromBufferAttribute(normal, c); + intersection.normal = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3()); + if (intersection.normal.dot(ray.direction) > 0) { + intersection.normal.multiplyScalar(-1); + } + } + const face = { + a, + b, + c, + normal: new Vector3(), + materialIndex: 0 + }; + Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); + intersection.face = face; + } + return intersection; +} +var BoxGeometry = class _BoxGeometry extends BufferGeometry { + constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { + super(); + this.type = "BoxGeometry"; + this.parameters = { + width, + height, + depth, + widthSegments, + heightSegments, + depthSegments + }; + const scope = this; + widthSegments = Math.floor(widthSegments); + heightSegments = Math.floor(heightSegments); + depthSegments = Math.floor(depthSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let numberOfVertices = 0; + let groupStart = 0; + buildPlane("z", "y", "x", -1, -1, depth, height, width, depthSegments, heightSegments, 0); + buildPlane("z", "y", "x", 1, -1, depth, height, -width, depthSegments, heightSegments, 1); + buildPlane("x", "z", "y", 1, 1, width, depth, height, widthSegments, depthSegments, 2); + buildPlane("x", "z", "y", 1, -1, width, depth, -height, widthSegments, depthSegments, 3); + buildPlane("x", "y", "z", 1, -1, width, height, depth, widthSegments, heightSegments, 4); + buildPlane("x", "y", "z", -1, -1, width, height, -depth, widthSegments, heightSegments, 5); + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function buildPlane(u, v, w, udir, vdir, width2, height2, depth2, gridX, gridY, materialIndex) { + const segmentWidth = width2 / gridX; + const segmentHeight = height2 / gridY; + const widthHalf = width2 / 2; + const heightHalf = height2 / 2; + const depthHalf = depth2 / 2; + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + let vertexCounter = 0; + let groupCount = 0; + const vector = new Vector3(); + for (let iy = 0; iy < gridY1; iy++) { + const y = iy * segmentHeight - heightHalf; + for (let ix = 0; ix < gridX1; ix++) { + const x = ix * segmentWidth - widthHalf; + vector[u] = x * udir; + vector[v] = y * vdir; + vector[w] = depthHalf; + vertices.push(vector.x, vector.y, vector.z); + vector[u] = 0; + vector[v] = 0; + vector[w] = depth2 > 0 ? 1 : -1; + normals.push(vector.x, vector.y, vector.z); + uvs.push(ix / gridX); + uvs.push(1 - iy / gridY); + vertexCounter += 1; + } + } + for (let iy = 0; iy < gridY; iy++) { + for (let ix = 0; ix < gridX; ix++) { + const a = numberOfVertices + ix + gridX1 * iy; + const b = numberOfVertices + ix + gridX1 * (iy + 1); + const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1); + const d = numberOfVertices + (ix + 1) + gridX1 * iy; + indices.push(a, b, d); + indices.push(b, c, d); + groupCount += 6; + } + } + scope.addGroup(groupStart, groupCount, materialIndex); + groupStart += groupCount; + numberOfVertices += vertexCounter; + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments); + } +}; +function cloneUniforms(src) { + const dst = {}; + for (const u in src) { + dst[u] = {}; + for (const p in src[u]) { + const property = src[u][p]; + if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) { + if (property.isRenderTargetTexture) { + console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."); + dst[u][p] = null; + } else { + dst[u][p] = property.clone(); + } + } else if (Array.isArray(property)) { + dst[u][p] = property.slice(); + } else { + dst[u][p] = property; + } + } + } + return dst; +} +function mergeUniforms(uniforms) { + const merged = {}; + for (let u = 0; u < uniforms.length; u++) { + const tmp2 = cloneUniforms(uniforms[u]); + for (const p in tmp2) { + merged[p] = tmp2[p]; + } + } + return merged; +} +function cloneUniformsGroups(src) { + const dst = []; + for (let u = 0; u < src.length; u++) { + dst.push(src[u].clone()); + } + return dst; +} +function getUnlitUniformColorSpace(renderer) { + const currentRenderTarget = renderer.getRenderTarget(); + if (currentRenderTarget === null) { + return renderer.outputColorSpace; + } + if (currentRenderTarget.isXRRenderTarget === true) { + return currentRenderTarget.texture.colorSpace; + } + return ColorManagement.workingColorSpace; +} +var UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; +var default_vertex = "void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; +var default_fragment = "void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; +var ShaderMaterial = class extends Material { + constructor(parameters) { + super(); + this.isShaderMaterial = true; + this.type = "ShaderMaterial"; + this.defines = {}; + this.uniforms = {}; + this.uniformsGroups = []; + this.vertexShader = default_vertex; + this.fragmentShader = default_fragment; + this.linewidth = 1; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.fog = false; + this.lights = false; + this.clipping = false; + this.forceSinglePass = true; + this.extensions = { + clipCullDistance: false, + // set to use vertex shader clipping + multiDraw: false + // set to use vertex shader multi_draw / enable gl_DrawID + }; + this.defaultAttributeValues = { + "color": [1, 1, 1], + "uv": [0, 0], + "uv1": [0, 0] + }; + this.index0AttributeName = void 0; + this.uniformsNeedUpdate = false; + this.glslVersion = null; + if (parameters !== void 0) { + this.setValues(parameters); + } + } + copy(source) { + super.copy(source); + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + this.uniforms = cloneUniforms(source.uniforms); + this.uniformsGroups = cloneUniformsGroups(source.uniformsGroups); + this.defines = Object.assign({}, source.defines); + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.fog = source.fog; + this.lights = source.lights; + this.clipping = source.clipping; + this.extensions = Object.assign({}, source.extensions); + this.glslVersion = source.glslVersion; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.glslVersion = this.glslVersion; + data.uniforms = {}; + for (const name in this.uniforms) { + const uniform = this.uniforms[name]; + const value = uniform.value; + if (value && value.isTexture) { + data.uniforms[name] = { + type: "t", + value: value.toJSON(meta).uuid + }; + } else if (value && value.isColor) { + data.uniforms[name] = { + type: "c", + value: value.getHex() + }; + } else if (value && value.isVector2) { + data.uniforms[name] = { + type: "v2", + value: value.toArray() + }; + } else if (value && value.isVector3) { + data.uniforms[name] = { + type: "v3", + value: value.toArray() + }; + } else if (value && value.isVector4) { + data.uniforms[name] = { + type: "v4", + value: value.toArray() + }; + } else if (value && value.isMatrix3) { + data.uniforms[name] = { + type: "m3", + value: value.toArray() + }; + } else if (value && value.isMatrix4) { + data.uniforms[name] = { + type: "m4", + value: value.toArray() + }; + } else { + data.uniforms[name] = { + value + }; + } + } + if (Object.keys(this.defines).length > 0) data.defines = this.defines; + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + data.lights = this.lights; + data.clipping = this.clipping; + const extensions = {}; + for (const key in this.extensions) { + if (this.extensions[key] === true) extensions[key] = true; + } + if (Object.keys(extensions).length > 0) data.extensions = extensions; + return data; + } +}; +var Camera = class extends Object3D { + constructor() { + super(); + this.isCamera = true; + this.type = "Camera"; + this.matrixWorldInverse = new Matrix4(); + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + this.coordinateSystem = WebGLCoordinateSystem; + } + copy(source, recursive) { + super.copy(source, recursive); + this.matrixWorldInverse.copy(source.matrixWorldInverse); + this.projectionMatrix.copy(source.projectionMatrix); + this.projectionMatrixInverse.copy(source.projectionMatrixInverse); + this.coordinateSystem = source.coordinateSystem; + return this; + } + getWorldDirection(target) { + return super.getWorldDirection(target).negate(); + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + updateWorldMatrix(updateParents, updateChildren) { + super.updateWorldMatrix(updateParents, updateChildren); + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + clone() { + return new this.constructor().copy(this); + } +}; +var _v3$1 = new Vector3(); +var _minTarget = new Vector2(); +var _maxTarget = new Vector2(); +var PerspectiveCamera = class extends Camera { + constructor(fov2 = 50, aspect2 = 1, near = 0.1, far = 2e3) { + super(); + this.isPerspectiveCamera = true; + this.type = "PerspectiveCamera"; + this.fov = fov2; + this.zoom = 1; + this.near = near; + this.far = far; + this.focus = 10; + this.aspect = aspect2; + this.view = null; + this.filmGauge = 35; + this.filmOffset = 0; + this.updateProjectionMatrix(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.fov = source.fov; + this.zoom = source.zoom; + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign({}, source.view); + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + return this; + } + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength(focalLength) { + const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope); + this.updateProjectionMatrix(); + } + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength() { + const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov); + return 0.5 * this.getFilmHeight() / vExtentSlope; + } + getEffectiveFOV() { + return RAD2DEG * 2 * Math.atan( + Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom + ); + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1); + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1); + } + /** + * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction. + * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle. + */ + getViewBounds(distance, minTarget, maxTarget) { + _v3$1.set(-1, -1, 0.5).applyMatrix4(this.projectionMatrixInverse); + minTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); + _v3$1.set(1, 1, 0.5).applyMatrix4(this.projectionMatrixInverse); + maxTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); + } + /** + * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction. + * Copies the result into the target Vector2, where x is width and y is height. + */ + getViewSize(distance, target) { + this.getViewBounds(distance, _minTarget, _maxTarget); + return target.subVectors(_maxTarget, _minTarget); + } + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * const w = 1920; + * const h = 1080; + * const fullWidth = w * 3; + * const fullHeight = h * 2; + * + * --A-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset(fullWidth, fullHeight, x, y, width, height) { + this.aspect = fullWidth / fullHeight; + if (this.view === null) { + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + } + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + this.updateProjectionMatrix(); + } + clearViewOffset() { + if (this.view !== null) { + this.view.enabled = false; + } + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const near = this.near; + let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom; + let height = 2 * top; + let width = this.aspect * height; + let left = -0.5 * width; + const view = this.view; + if (this.view !== null && this.view.enabled) { + const fullWidth = view.fullWidth, fullHeight = view.fullHeight; + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + } + const skew = this.filmOffset; + if (skew !== 0) left += near * skew / this.getFilmWidth(); + this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far, this.coordinateSystem); + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.fov = this.fov; + data.object.zoom = this.zoom; + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + data.object.aspect = this.aspect; + if (this.view !== null) data.object.view = Object.assign({}, this.view); + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + return data; + } +}; +var fov = -90; +var aspect = 1; +var CubeCamera = class extends Object3D { + constructor(near, far, renderTarget) { + super(); + this.type = "CubeCamera"; + this.renderTarget = renderTarget; + this.coordinateSystem = null; + this.activeMipmapLevel = 0; + const cameraPX = new PerspectiveCamera(fov, aspect, near, far); + cameraPX.layers = this.layers; + this.add(cameraPX); + const cameraNX = new PerspectiveCamera(fov, aspect, near, far); + cameraNX.layers = this.layers; + this.add(cameraNX); + const cameraPY = new PerspectiveCamera(fov, aspect, near, far); + cameraPY.layers = this.layers; + this.add(cameraPY); + const cameraNY = new PerspectiveCamera(fov, aspect, near, far); + cameraNY.layers = this.layers; + this.add(cameraNY); + const cameraPZ = new PerspectiveCamera(fov, aspect, near, far); + cameraPZ.layers = this.layers; + this.add(cameraPZ); + const cameraNZ = new PerspectiveCamera(fov, aspect, near, far); + cameraNZ.layers = this.layers; + this.add(cameraNZ); + } + updateCoordinateSystem() { + const coordinateSystem = this.coordinateSystem; + const cameras = this.children.concat(); + const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = cameras; + for (const camera of cameras) this.remove(camera); + if (coordinateSystem === WebGLCoordinateSystem) { + cameraPX.up.set(0, 1, 0); + cameraPX.lookAt(1, 0, 0); + cameraNX.up.set(0, 1, 0); + cameraNX.lookAt(-1, 0, 0); + cameraPY.up.set(0, 0, -1); + cameraPY.lookAt(0, 1, 0); + cameraNY.up.set(0, 0, 1); + cameraNY.lookAt(0, -1, 0); + cameraPZ.up.set(0, 1, 0); + cameraPZ.lookAt(0, 0, 1); + cameraNZ.up.set(0, 1, 0); + cameraNZ.lookAt(0, 0, -1); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + cameraPX.up.set(0, -1, 0); + cameraPX.lookAt(-1, 0, 0); + cameraNX.up.set(0, -1, 0); + cameraNX.lookAt(1, 0, 0); + cameraPY.up.set(0, 0, 1); + cameraPY.lookAt(0, 1, 0); + cameraNY.up.set(0, 0, -1); + cameraNY.lookAt(0, -1, 0); + cameraPZ.up.set(0, -1, 0); + cameraPZ.lookAt(0, 0, 1); + cameraNZ.up.set(0, -1, 0); + cameraNZ.lookAt(0, 0, -1); + } else { + throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: " + coordinateSystem); + } + for (const camera of cameras) { + this.add(camera); + camera.updateMatrixWorld(); + } + } + update(renderer, scene) { + if (this.parent === null) this.updateMatrixWorld(); + const { renderTarget, activeMipmapLevel } = this; + if (this.coordinateSystem !== renderer.coordinateSystem) { + this.coordinateSystem = renderer.coordinateSystem; + this.updateCoordinateSystem(); + } + const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children; + const currentRenderTarget = renderer.getRenderTarget(); + const currentActiveCubeFace = renderer.getActiveCubeFace(); + const currentActiveMipmapLevel = renderer.getActiveMipmapLevel(); + const currentXrEnabled = renderer.xr.enabled; + renderer.xr.enabled = false; + const generateMipmaps = renderTarget.texture.generateMipmaps; + renderTarget.texture.generateMipmaps = false; + renderer.setRenderTarget(renderTarget, 0, activeMipmapLevel); + renderer.render(scene, cameraPX); + renderer.setRenderTarget(renderTarget, 1, activeMipmapLevel); + renderer.render(scene, cameraNX); + renderer.setRenderTarget(renderTarget, 2, activeMipmapLevel); + renderer.render(scene, cameraPY); + renderer.setRenderTarget(renderTarget, 3, activeMipmapLevel); + renderer.render(scene, cameraNY); + renderer.setRenderTarget(renderTarget, 4, activeMipmapLevel); + renderer.render(scene, cameraPZ); + renderTarget.texture.generateMipmaps = generateMipmaps; + renderer.setRenderTarget(renderTarget, 5, activeMipmapLevel); + renderer.render(scene, cameraNZ); + renderer.setRenderTarget(currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel); + renderer.xr.enabled = currentXrEnabled; + renderTarget.texture.needsPMREMUpdate = true; + } +}; +var CubeTexture = class extends Texture { + constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace) { + images = images !== void 0 ? images : []; + mapping = mapping !== void 0 ? mapping : CubeReflectionMapping; + super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isCubeTexture = true; + this.flipY = false; + } + get images() { + return this.image; + } + set images(value) { + this.image = value; + } +}; +var WebGLCubeRenderTarget = class extends WebGLRenderTarget { + constructor(size = 1, options = {}) { + super(size, size, options); + this.isWebGLCubeRenderTarget = true; + const image = { width: size, height: size, depth: 1 }; + const images = [image, image, image, image, image, image]; + this.texture = new CubeTexture(images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); + this.texture.isRenderTargetTexture = true; + this.texture.generateMipmaps = options.generateMipmaps !== void 0 ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== void 0 ? options.minFilter : LinearFilter; + } + fromEquirectangularTexture(renderer, texture) { + this.texture.type = texture.type; + this.texture.colorSpace = texture.colorSpace; + this.texture.generateMipmaps = texture.generateMipmaps; + this.texture.minFilter = texture.minFilter; + this.texture.magFilter = texture.magFilter; + const shader = { + uniforms: { + tEquirect: { value: null } + }, + vertexShader: ( + /* glsl */ + ` + + varying vec3 vWorldDirection; + + vec3 transformDirection( in vec3 dir, in mat4 matrix ) { + + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); + + } + + void main() { + + vWorldDirection = transformDirection( position, modelMatrix ); + + #include + #include + + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + + uniform sampler2D tEquirect; + + varying vec3 vWorldDirection; + + #include + + void main() { + + vec3 direction = normalize( vWorldDirection ); + + vec2 sampleUV = equirectUv( direction ); + + gl_FragColor = texture2D( tEquirect, sampleUV ); + + } + ` + ) + }; + const geometry = new BoxGeometry(5, 5, 5); + const material = new ShaderMaterial({ + name: "CubemapFromEquirect", + uniforms: cloneUniforms(shader.uniforms), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader, + side: BackSide, + blending: NoBlending + }); + material.uniforms.tEquirect.value = texture; + const mesh = new Mesh(geometry, material); + const currentMinFilter = texture.minFilter; + if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter; + const camera = new CubeCamera(1, 10, this); + camera.update(renderer, mesh); + texture.minFilter = currentMinFilter; + mesh.geometry.dispose(); + mesh.material.dispose(); + return this; + } + clear(renderer, color, depth, stencil) { + const currentRenderTarget = renderer.getRenderTarget(); + for (let i = 0; i < 6; i++) { + renderer.setRenderTarget(this, i); + renderer.clear(color, depth, stencil); + } + renderer.setRenderTarget(currentRenderTarget); + } +}; +var _vector1 = new Vector3(); +var _vector2 = new Vector3(); +var _normalMatrix = new Matrix3(); +var Plane = class { + constructor(normal = new Vector3(1, 0, 0), constant = 0) { + this.isPlane = true; + this.normal = normal; + this.constant = constant; + } + set(normal, constant) { + this.normal.copy(normal); + this.constant = constant; + return this; + } + setComponents(x, y, z, w) { + this.normal.set(x, y, z); + this.constant = w; + return this; + } + setFromNormalAndCoplanarPoint(normal, point) { + this.normal.copy(normal); + this.constant = -point.dot(this.normal); + return this; + } + setFromCoplanarPoints(a, b, c) { + const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); + this.setFromNormalAndCoplanarPoint(normal, a); + return this; + } + copy(plane) { + this.normal.copy(plane.normal); + this.constant = plane.constant; + return this; + } + normalize() { + const inverseNormalLength = 1 / this.normal.length(); + this.normal.multiplyScalar(inverseNormalLength); + this.constant *= inverseNormalLength; + return this; + } + negate() { + this.constant *= -1; + this.normal.negate(); + return this; + } + distanceToPoint(point) { + return this.normal.dot(point) + this.constant; + } + distanceToSphere(sphere) { + return this.distanceToPoint(sphere.center) - sphere.radius; + } + projectPoint(point, target) { + return target.copy(point).addScaledVector(this.normal, -this.distanceToPoint(point)); + } + intersectLine(line, target) { + const direction = line.delta(_vector1); + const denominator = this.normal.dot(direction); + if (denominator === 0) { + if (this.distanceToPoint(line.start) === 0) { + return target.copy(line.start); + } + return null; + } + const t = -(line.start.dot(this.normal) + this.constant) / denominator; + if (t < 0 || t > 1) { + return null; + } + return target.copy(line.start).addScaledVector(direction, t); + } + intersectsLine(line) { + const startSign = this.distanceToPoint(line.start); + const endSign = this.distanceToPoint(line.end); + return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0; + } + intersectsBox(box) { + return box.intersectsPlane(this); + } + intersectsSphere(sphere) { + return sphere.intersectsPlane(this); + } + coplanarPoint(target) { + return target.copy(this.normal).multiplyScalar(-this.constant); + } + applyMatrix4(matrix, optionalNormalMatrix) { + const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix); + const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix); + const normal = this.normal.applyMatrix3(normalMatrix).normalize(); + this.constant = -referencePoint.dot(normal); + return this; + } + translate(offset) { + this.constant -= offset.dot(this.normal); + return this; + } + equals(plane) { + return plane.normal.equals(this.normal) && plane.constant === this.constant; + } + clone() { + return new this.constructor().copy(this); + } +}; +var _sphere$5 = new Sphere(); +var _vector$7 = new Vector3(); +var Frustum = class { + constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) { + this.planes = [p0, p1, p2, p3, p4, p5]; + } + set(p0, p1, p2, p3, p4, p5) { + const planes = this.planes; + planes[0].copy(p0); + planes[1].copy(p1); + planes[2].copy(p2); + planes[3].copy(p3); + planes[4].copy(p4); + planes[5].copy(p5); + return this; + } + copy(frustum) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + planes[i].copy(frustum.planes[i]); + } + return this; + } + setFromProjectionMatrix(m, coordinateSystem = WebGLCoordinateSystem) { + const planes = this.planes; + const me = m.elements; + const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3]; + const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7]; + const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11]; + const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15]; + planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize(); + planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize(); + planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize(); + planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize(); + planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize(); + if (coordinateSystem === WebGLCoordinateSystem) { + planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize(); + } else if (coordinateSystem === WebGPUCoordinateSystem) { + planes[5].setComponents(me2, me6, me10, me14).normalize(); + } else { + throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: " + coordinateSystem); + } + return this; + } + intersectsObject(object) { + if (object.boundingSphere !== void 0) { + if (object.boundingSphere === null) object.computeBoundingSphere(); + _sphere$5.copy(object.boundingSphere).applyMatrix4(object.matrixWorld); + } else { + const geometry = object.geometry; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$5.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld); + } + return this.intersectsSphere(_sphere$5); + } + intersectsSprite(sprite) { + _sphere$5.center.set(0, 0, 0); + _sphere$5.radius = 0.7071067811865476; + _sphere$5.applyMatrix4(sprite.matrixWorld); + return this.intersectsSphere(_sphere$5); + } + intersectsSphere(sphere) { + const planes = this.planes; + const center = sphere.center; + const negRadius = -sphere.radius; + for (let i = 0; i < 6; i++) { + const distance = planes[i].distanceToPoint(center); + if (distance < negRadius) { + return false; + } + } + return true; + } + intersectsBox(box) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + const plane = planes[i]; + _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x; + _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y; + _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z; + if (plane.distanceToPoint(_vector$7) < 0) { + return false; + } + } + return true; + } + containsPoint(point) { + const planes = this.planes; + for (let i = 0; i < 6; i++) { + if (planes[i].distanceToPoint(point) < 0) { + return false; + } + } + return true; + } + clone() { + return new this.constructor().copy(this); + } +}; +function WebGLAnimation() { + let context = null; + let isAnimating = false; + let animationLoop = null; + let requestId = null; + function onAnimationFrame(time, frame) { + animationLoop(time, frame); + requestId = context.requestAnimationFrame(onAnimationFrame); + } + return { + start: function() { + if (isAnimating === true) return; + if (animationLoop === null) return; + requestId = context.requestAnimationFrame(onAnimationFrame); + isAnimating = true; + }, + stop: function() { + context.cancelAnimationFrame(requestId); + isAnimating = false; + }, + setAnimationLoop: function(callback) { + animationLoop = callback; + }, + setContext: function(value) { + context = value; + } + }; +} +function WebGLAttributes(gl) { + const buffers = /* @__PURE__ */ new WeakMap(); + function createBuffer(attribute, bufferType) { + const array = attribute.array; + const usage = attribute.usage; + const size = array.byteLength; + const buffer = gl.createBuffer(); + gl.bindBuffer(bufferType, buffer); + gl.bufferData(bufferType, array, usage); + attribute.onUploadCallback(); + let type; + if (array instanceof Float32Array) { + type = gl.FLOAT; + } else if (array instanceof Uint16Array) { + if (attribute.isFloat16BufferAttribute) { + type = gl.HALF_FLOAT; + } else { + type = gl.UNSIGNED_SHORT; + } + } else if (array instanceof Int16Array) { + type = gl.SHORT; + } else if (array instanceof Uint32Array) { + type = gl.UNSIGNED_INT; + } else if (array instanceof Int32Array) { + type = gl.INT; + } else if (array instanceof Int8Array) { + type = gl.BYTE; + } else if (array instanceof Uint8Array) { + type = gl.UNSIGNED_BYTE; + } else if (array instanceof Uint8ClampedArray) { + type = gl.UNSIGNED_BYTE; + } else { + throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: " + array); + } + return { + buffer, + type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version, + size + }; + } + function updateBuffer(buffer, attribute, bufferType) { + const array = attribute.array; + const updateRange = attribute._updateRange; + const updateRanges = attribute.updateRanges; + gl.bindBuffer(bufferType, buffer); + if (updateRange.count === -1 && updateRanges.length === 0) { + gl.bufferSubData(bufferType, 0, array); + } + if (updateRanges.length !== 0) { + for (let i = 0, l = updateRanges.length; i < l; i++) { + const range = updateRanges[i]; + gl.bufferSubData( + bufferType, + range.start * array.BYTES_PER_ELEMENT, + array, + range.start, + range.count + ); + } + attribute.clearUpdateRanges(); + } + if (updateRange.count !== -1) { + gl.bufferSubData( + bufferType, + updateRange.offset * array.BYTES_PER_ELEMENT, + array, + updateRange.offset, + updateRange.count + ); + updateRange.count = -1; + } + attribute.onUploadCallback(); + } + function get(attribute) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + return buffers.get(attribute); + } + function remove(attribute) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + const data = buffers.get(attribute); + if (data) { + gl.deleteBuffer(data.buffer); + buffers.delete(attribute); + } + } + function update(attribute, bufferType) { + if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; + if (attribute.isGLBufferAttribute) { + const cached = buffers.get(attribute); + if (!cached || cached.version < attribute.version) { + buffers.set(attribute, { + buffer: attribute.buffer, + type: attribute.type, + bytesPerElement: attribute.elementSize, + version: attribute.version + }); + } + return; + } + const data = buffers.get(attribute); + if (data === void 0) { + buffers.set(attribute, createBuffer(attribute, bufferType)); + } else if (data.version < attribute.version) { + if (data.size !== attribute.array.byteLength) { + throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported."); + } + updateBuffer(data.buffer, attribute, bufferType); + data.version = attribute.version; + } + } + return { + get, + remove, + update + }; +} +var PlaneGeometry = class _PlaneGeometry extends BufferGeometry { + constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) { + super(); + this.type = "PlaneGeometry"; + this.parameters = { + width, + height, + widthSegments, + heightSegments + }; + const width_half = width / 2; + const height_half = height / 2; + const gridX = Math.floor(widthSegments); + const gridY = Math.floor(heightSegments); + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + const segment_width = width / gridX; + const segment_height = height / gridY; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + for (let iy = 0; iy < gridY1; iy++) { + const y = iy * segment_height - height_half; + for (let ix = 0; ix < gridX1; ix++) { + const x = ix * segment_width - width_half; + vertices.push(x, -y, 0); + normals.push(0, 0, 1); + uvs.push(ix / gridX); + uvs.push(1 - iy / gridY); + } + } + for (let iy = 0; iy < gridY; iy++) { + for (let ix = 0; ix < gridX; ix++) { + const a = ix + gridX1 * iy; + const b = ix + gridX1 * (iy + 1); + const c = ix + 1 + gridX1 * (iy + 1); + const d = ix + 1 + gridX1 * iy; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments); + } +}; +var alphahash_fragment = "#ifdef USE_ALPHAHASH\n if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif"; +var alphahash_pars_fragment = "#ifdef USE_ALPHAHASH\n const float ALPHA_HASH_SCALE = 0.05;\n float hash2D( vec2 value ) {\n return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n }\n float hash3D( vec3 value ) {\n return hash2D( vec2( hash2D( value.xy ), value.z ) );\n }\n float getAlphaHashThreshold( vec3 position ) {\n float maxDeriv = max(\n length( dFdx( position.xyz ) ),\n length( dFdy( position.xyz ) )\n );\n float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n vec2 pixScales = vec2(\n exp2( floor( log2( pixScale ) ) ),\n exp2( ceil( log2( pixScale ) ) )\n );\n vec2 alpha = vec2(\n hash3D( floor( pixScales.x * position.xyz ) ),\n hash3D( floor( pixScales.y * position.xyz ) )\n );\n float lerpFactor = fract( log2( pixScale ) );\n float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n float a = min( lerpFactor, 1.0 - lerpFactor );\n vec3 cases = vec3(\n x * x / ( 2.0 * a * ( 1.0 - a ) ),\n ( x - 0.5 * a ) / ( 1.0 - a ),\n 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n );\n float threshold = ( x < ( 1.0 - a ) )\n ? ( ( x < a ) ? cases.x : cases.y )\n : cases.z;\n return clamp( threshold , 1.0e-6, 1.0 );\n }\n#endif"; +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif"; +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; +var alphatest_fragment = "#ifdef USE_ALPHATEST\n #ifdef ALPHA_TO_COVERAGE\n diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n if ( diffuseColor.a < alphaTest ) discard;\n #endif\n#endif"; +var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n uniform float alphaTest;\n#endif"; +var aomap_fragment = "#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_CLEARCOAT ) \n clearcoatSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_SHEEN ) \n sheenSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n #endif\n#endif"; +var aomap_pars_fragment = "#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif"; +var batching_pars_vertex = "#ifdef USE_BATCHING\n #if ! defined( GL_ANGLE_multi_draw )\n #define gl_DrawID _gl_DrawID\n uniform int _gl_DrawID;\n #endif\n uniform highp sampler2D batchingTexture;\n uniform highp usampler2D batchingIdTexture;\n mat4 getBatchingMatrix( const in float i ) {\n int size = textureSize( batchingTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n float getIndirectIndex( const in int i ) {\n int size = textureSize( batchingIdTexture, 0 ).x;\n int x = i % size;\n int y = i / size;\n return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n }\n#endif\n#ifdef USE_BATCHING_COLOR\n uniform sampler2D batchingColorTexture;\n vec3 getBatchingColor( const in float i ) {\n int size = textureSize( batchingColorTexture, 0 ).x;\n int j = int( i );\n int x = j % size;\n int y = j / size;\n return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n }\n#endif"; +var batching_vertex = "#ifdef USE_BATCHING\n mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif"; +var begin_vertex = "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n vPosition = vec3( position );\n#endif"; +var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n vec3 objectTangent = vec3( tangent.xyz );\n#endif"; +var bsdfs = "float G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( specularColor, 1.0, dotVH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n} // validated"; +var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n const mat3 XYZ_TO_REC709 = mat3(\n 3.2404542, -0.9692660, 0.0556434,\n -1.5371385, 1.8760108, -0.2040259,\n -0.4985314, 0.0415560, 1.0572252\n );\n vec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n }\n vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n }\n float IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n }\n vec3 evalSensitivity( float OPD, vec3 shift ) {\n float phase = 2.0 * PI * OPD * 1.0e-9;\n vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n xyz /= 1.0685e-7;\n vec3 rgb = XYZ_TO_REC709 * xyz;\n return rgb;\n }\n vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq < 0.0 ) {\n return vec3( 1.0 );\n }\n float cosTheta2 = sqrt( cosTheta2Sq );\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR < outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n vec3 r123 = sqrt( R123 );\n vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n vec3 C0 = R12 + Rs;\n I = C0;\n vec3 Cm = Rs - T121;\n for ( int m = 1; m <= 2; ++ m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n return max( I, vec3( 0.0 ) );\n }\n#endif"; +var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vBumpMapUv );\n vec2 dSTdy = dFdy( vBumpMapUv );\n float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif"; +var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #ifdef ALPHA_TO_COVERAGE\n float distanceToPlane, distanceGradient;\n float clipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n if ( clipOpacity == 0.0 ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n float unionClipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n }\n #pragma unroll_loop_end\n clipOpacity *= 1.0 - unionClipOpacity;\n #endif\n diffuseColor.a *= clipOpacity;\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n #endif\n#endif"; +var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; +var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif"; +var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif"; +var color_fragment = "#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif"; +var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif"; +var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n varying vec3 vColor;\n#endif"; +var color_vertex = "#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n vColor.xyz *= batchingColor.xyz;\n#endif"; +var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n varying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated"; +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n uv.x += filterInt * 3.0 * cubeUV_minTileSize;\n uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n uv.x *= CUBEUV_TEXEL_WIDTH;\n uv.y *= CUBEUV_TEXEL_HEIGHT;\n #ifdef texture2DGradEXT\n return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n #else\n return texture2D( envMap, uv ).rgb;\n #endif\n }\n #define cubeUV_r0 1.0\n #define cubeUV_m0 - 2.0\n #define cubeUV_r1 0.8\n #define cubeUV_m1 - 1.0\n #define cubeUV_r4 0.4\n #define cubeUV_m4 2.0\n #define cubeUV_r5 0.305\n #define cubeUV_m5 3.0\n #define cubeUV_r6 0.21\n #define cubeUV_m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= cubeUV_r1 ) {\n mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n } else if ( roughness >= cubeUV_r4 ) {\n mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n } else if ( roughness >= cubeUV_r5 ) {\n mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n } else if ( roughness >= cubeUV_r6 ) {\n mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif"; +var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n vec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n mat3 bm = mat3( batchingMatrix );\n transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n transformedNormal = bm * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = bm * transformedTangent;\n #endif\n#endif\n#ifdef USE_INSTANCING\n mat3 im = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n transformedNormal = im * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = im * transformedTangent;\n #endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif"; +var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif"; +var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif"; +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif"; +var colorspace_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; +var colorspace_pars_fragment = "\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n vec3( 0.8224621, 0.177538, 0.0 ),\n vec3( 0.0331941, 0.9668058, 0.0 ),\n vec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n vec3( 1.2249401, - 0.2249404, 0.0 ),\n vec3( - 0.0420569, 1.0420571, 0.0 ),\n vec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n return value;\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}"; +var envmap_fragment = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif"; +var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform mat3 envMapRotation;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif"; +var envmap_pars_fragment = "#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif"; +var envmap_pars_vertex = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif"; +var envmap_vertex = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif"; +var fog_vertex = "#ifdef USE_FOG\n vFogDepth = - mvPosition.z;\n#endif"; +var fog_pars_vertex = "#ifdef USE_FOG\n varying float vFogDepth;\n#endif"; +var fog_fragment = "#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; +var fog_pars_fragment = "#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float vFogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif"; +var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return vec3( texture2D( gradientMap, coord ).r );\n #else\n vec2 fw = fwidth( coord ) * 0.5;\n return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n #endif\n}"; +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif"; +var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;"; +var lights_lambert_pars_fragment = "varying vec3 vViewPosition;\nstruct LambertMaterial {\n vec3 diffuseColor;\n float specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Lambert\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert"; +var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n uniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n return irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n if ( cutoffDistance > 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n light.color = directionalLight.color;\n light.direction = directionalLight.direction;\n light.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = pointLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float lightDistance = length( lVector );\n light.color = pointLight.color;\n light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = spotLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float angleCos = dot( light.direction, spotLight.direction );\n float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n if ( spotAttenuation > 0.0 ) {\n float lightDistance = length( lVector );\n light.color = spotLight.color * spotAttenuation;\n light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n } else {\n light.color = vec3( 0.0 );\n light.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n float dotNL = dot( normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n return irradiance;\n }\n#endif"; +var envmap_physical_pars_fragment = "#ifdef USE_ENVMAP\n vec3 getIBLIrradiance( const in vec3 normal ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n return PI * envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 reflectVec = reflect( - viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n return envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n #ifdef USE_ANISOTROPY\n vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 bentNormal = cross( bitangent, viewDir );\n bentNormal = normalize( cross( bentNormal, bitangent ) );\n bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n return getIBLRadiance( viewDir, bentNormal, roughness );\n #else\n return vec3( 0.0 );\n #endif\n }\n #endif\n#endif"; +var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; +var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon"; +var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; +var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong"; +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n material.ior = ior;\n #ifdef USE_SPECULAR\n float specularIntensityFactor = specularIntensity;\n vec3 specularColorFactor = specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n #endif\n material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n #else\n float specularIntensityFactor = 1.0;\n vec3 specularColorFactor = vec3( 1.0 );\n material.specularF90 = 1.0;\n #endif\n material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n material.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n material.clearcoatF0 = vec3( 0.04 );\n material.clearcoatF90 = 1.0;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n material.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n material.iridescence = iridescence;\n material.iridescenceIOR = iridescenceIOR;\n #ifdef USE_IRIDESCENCEMAP\n material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n #endif\n #ifdef USE_IRIDESCENCE_THICKNESSMAP\n material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n #else\n material.iridescenceThickness = iridescenceThicknessMaximum;\n #endif\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheenColor;\n #ifdef USE_SHEEN_COLORMAP\n material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n #endif\n material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n #ifdef USE_SHEEN_ROUGHNESSMAP\n material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n #ifdef USE_ANISOTROPYMAP\n mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n #else\n vec2 anisotropyV = anisotropyVector;\n #endif\n material.anisotropy = length( anisotropyV );\n if( material.anisotropy == 0.0 ) {\n anisotropyV = vec2( 1.0, 0.0 );\n } else {\n anisotropyV /= material.anisotropy;\n material.anisotropy = saturate( material.anisotropy );\n }\n material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif"; +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n vec3 diffuseColor;\n float roughness;\n vec3 specularColor;\n float specularF90;\n float dispersion;\n #ifdef USE_CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n vec3 clearcoatF0;\n float clearcoatF90;\n #endif\n #ifdef USE_IRIDESCENCE\n float iridescence;\n float iridescenceIOR;\n float iridescenceThickness;\n vec3 iridescenceFresnel;\n vec3 iridescenceF0;\n #endif\n #ifdef USE_SHEEN\n vec3 sheenColor;\n float sheenRoughness;\n #endif\n #ifdef IOR\n float ior;\n #endif\n #ifdef USE_TRANSMISSION\n float transmission;\n float transmissionAlpha;\n float thickness;\n float attenuationDistance;\n vec3 attenuationColor;\n #endif\n #ifdef USE_ANISOTROPY\n float anisotropy;\n float alphaT;\n vec3 anisotropyT;\n vec3 anisotropyB;\n #endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n float v = 0.5 / ( gv + gl );\n return saturate(v);\n }\n float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n float a2 = alphaT * alphaB;\n highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n highp float v2 = dot( v, v );\n float w2 = a2 / v2;\n return RECIPROCAL_PI * a2 * pow2 ( w2 );\n }\n#endif\n#ifdef USE_CLEARCOAT\n vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n vec3 f0 = material.clearcoatF0;\n float f90 = material.clearcoatF90;\n float roughness = material.clearcoatRoughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( V * D );\n }\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n vec3 f0 = material.specularColor;\n float f90 = material.specularF90;\n float roughness = material.roughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n #ifdef USE_IRIDESCENCE\n F = mix( F, material.iridescenceFresnel, material.iridescence );\n #endif\n #ifdef USE_ANISOTROPY\n float dotTL = dot( material.anisotropyT, lightDir );\n float dotTV = dot( material.anisotropyT, viewDir );\n float dotTH = dot( material.anisotropyT, halfDir );\n float dotBL = dot( material.anisotropyB, lightDir );\n float dotBV = dot( material.anisotropyB, viewDir );\n float dotBH = dot( material.anisotropyB, halfDir );\n float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n #else\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n #endif\n return F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n float alpha = pow2( roughness );\n float invAlpha = 1.0 / alpha;\n float cos2h = dotNH * dotNH;\n float sin2h = max( 1.0 - cos2h, 0.0078125 );\n return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float D = D_Charlie( sheenRoughness, dotNH );\n float V = V_Neubelt( dotNV, dotNL );\n return sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n float r2 = roughness * roughness;\n float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n return saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n return fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n return specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n #ifdef USE_IRIDESCENCE\n vec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n #else\n vec3 Fr = specularColor;\n #endif\n vec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n float Ess = fab.x + fab.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometryNormal;\n vec3 viewDir = geometryViewDir;\n vec3 position = geometryPosition;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.roughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifdef USE_CLEARCOAT\n float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = dotNLcc * directLight.color;\n clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef USE_CLEARCOAT\n clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n #endif\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n #ifdef USE_IRIDESCENCE\n computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n #else\n computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n #endif\n vec3 totalScattering = singleScattering + multiScattering;\n vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n reflectedLight.indirectSpecular += radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; +var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n geometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n float dotNVi = saturate( dot( normal, geometryViewDir ) );\n if ( material.iridescenceThickness == 0.0 ) {\n material.iridescence = 0.0;\n } else {\n material.iridescence = saturate( material.iridescence );\n }\n if ( material.iridescence > 0.0 ) {\n material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n }\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointLightInfo( pointLight, geometryPosition, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n vec4 spotColor;\n vec3 spotLightCoord;\n bool inSpotLightMap;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotLightInfo( spotLight, geometryPosition, directLight );\n #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n #else\n #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #endif\n #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n #endif\n #undef SPOT_LIGHT_MAP_INDEX\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; +var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getIBLIrradiance( geometryNormal );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n #ifdef USE_ANISOTROPY\n radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n #else\n radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n #endif\n #ifdef USE_CLEARCOAT\n clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n #endif\n#endif"; +var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif"; +var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF )\n gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; +var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif"; +var map_fragment = "#ifdef USE_MAP\n vec4 sampledDiffuseColor = texture2D( map, vMapUv );\n #ifdef DECODE_VIDEO_TEXTURE\n sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n \n #endif\n diffuseColor *= sampledDiffuseColor;\n#endif"; +var map_pars_fragment = "#ifdef USE_MAP\n uniform sampler2D map;\n#endif"; +var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n #if defined( USE_POINTS_UV )\n vec2 uv = vUv;\n #else\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n #endif\n#endif\n#ifdef USE_MAP\n diffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; +var map_particle_pars_fragment = "#if defined( USE_POINTS_UV )\n varying vec2 vUv;\n#else\n #if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n #endif\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; +var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n metalnessFactor *= texelMetalness.b;\n#endif"; +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif"; +var morphinstance_vertex = "#ifdef USE_INSTANCING_MORPH\n float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n }\n#endif"; +var morphcolor_vertex = "#if defined( USE_MORPHCOLORS )\n vColor *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n #if defined( USE_COLOR_ALPHA )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n #elif defined( USE_COLOR )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n #endif\n }\n#endif"; +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n #ifndef USE_INSTANCING_MORPH\n uniform float morphTargetBaseInfluence;\n uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n #endif\n uniform sampler2DArray morphTargetsTexture;\n uniform ivec2 morphTargetsTextureSize;\n vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n int y = texelIndex / morphTargetsTextureSize.x;\n int x = texelIndex - y * morphTargetsTextureSize.x;\n ivec3 morphUV = ivec3( x, y, morphTargetIndex );\n return texelFetch( morphTargetsTexture, morphUV, 0 );\n }\n#endif"; +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; +var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = dFdx( vViewPosition );\n vec3 fdy = dFdy( vViewPosition );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal *= faceDirection;\n #endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n #ifdef USE_TANGENT\n mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn = getTangentFrame( - vViewPosition, normal,\n #if defined( USE_NORMALMAP )\n vNormalMapUv\n #elif defined( USE_CLEARCOAT_NORMALMAP )\n vClearcoatNormalMapUv\n #else\n vUv\n #endif\n );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn[0] *= faceDirection;\n tbn[1] *= faceDirection;\n #endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n #ifdef USE_TANGENT\n mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn2[0] *= faceDirection;\n tbn2[1] *= faceDirection;\n #endif\n#endif\nvec3 nonPerturbedNormal = normal;"; +var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n normal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; +var normal_pars_fragment = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; +var normal_pars_vertex = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; +var normal_vertex = "#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif"; +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( uv.st );\n vec2 st1 = dFdy( uv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n return mat3( T * scale, B * scale, N );\n }\n#endif"; +var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n vec3 clearcoatNormal = nonPerturbedNormal;\n#endif"; +var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n clearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif"; +var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif"; +var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n uniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform sampler2D iridescenceThicknessMap;\n#endif"; +var opaque_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );"; +var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n if( v <= 0.0 )\n return vec4( 0., 0., 0., 0. );\n if( v >= 1.0 )\n return vec4( 1., 1., 1., 1. );\n float vuf;\n float af = modf( v * PackFactors.a, vuf );\n float bf = modf( vuf * ShiftRight8, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n if( v <= 0.0 )\n return vec3( 0., 0., 0. );\n if( v >= 1.0 )\n return vec3( 1., 1., 1. );\n float vuf;\n float bf = modf( v * PackFactors.b, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n if( v <= 0.0 )\n return vec2( 0., 0. );\n if( v >= 1.0 )\n return vec2( 1., 1. );\n float vuf;\n float gf = modf( v * 256., vuf );\n return vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n return dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * depth - far );\n}"; +var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif"; +var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n mvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; +var dithering_fragment = "#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; +var dithering_pars_fragment = "#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif"; +var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n roughnessFactor *= texelRoughness.g;\n#endif"; +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif"; +var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n float shadow = 1.0;\n vec3 lightToPosition = shadowCoord.xyz;\n \n float lightToPositionLength = length( lightToPosition );\n if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n shadow = (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n#endif"; +var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif"; +var shadowmap_vertex = "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n shadowWorldPosition = worldPosition;\n #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n #endif\n vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n#endif"; +var shadowmask_pars_fragment = "float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}"; +var skinbase_vertex = "#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; +var skinning_pars_vertex = "#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n uniform highp sampler2D boneTexture;\n mat4 getBoneMatrix( const in float i ) {\n int size = textureSize( boneTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n#endif"; +var skinning_vertex = "#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; +var skinnormal_vertex = "#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif"; +var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif"; +var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif"; +var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; +var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n vec3( 1.6605, - 0.1246, - 0.0182 ),\n vec3( - 0.5876, 1.1329, - 0.1006 ),\n vec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n vec3( 0.6274, 0.0691, 0.0164 ),\n vec3( 0.3293, 0.9195, 0.0880 ),\n vec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n vec3 x2 = x * x;\n vec3 x4 = x2 * x2;\n return + 15.5 * x4 * x2\n - 40.14 * x4 * x\n + 31.96 * x4\n - 6.868 * x2 * x\n + 0.4298 * x2\n + 0.1191 * x\n - 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n const mat3 AgXInsetMatrix = mat3(\n vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n );\n const mat3 AgXOutsetMatrix = mat3(\n vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n );\n const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;\n color *= toneMappingExposure;\n color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n color = AgXInsetMatrix * color;\n color = max( color, 1e-10 ); color = log2( color );\n color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n color = clamp( color, 0.0, 1.0 );\n color = agxDefaultContrastApprox( color );\n color = AgXOutsetMatrix * color;\n color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n color = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n color = clamp( color, 0.0, 1.0 );\n return color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n const float StartCompression = 0.8 - 0.04;\n const float Desaturation = 0.15;\n color *= toneMappingExposure;\n float x = min( color.r, min( color.g, color.b ) );\n float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n color -= offset;\n float peak = max( color.r, max( color.g, color.b ) );\n if ( peak < StartCompression ) return color;\n float d = 1. - StartCompression;\n float newPeak = 1. - d * d / ( peak + d - StartCompression );\n color *= newPeak / peak;\n float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n return mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; +var transmission_fragment = "#ifdef USE_TRANSMISSION\n material.transmission = transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n #endif\n vec3 pos = vWorldPosition;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec4 transmitted = getIBLVolumeRefraction(\n n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n material.attenuationColor, material.attenuationDistance );\n material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif"; +var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n uniform float transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n float w0( float a ) {\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n }\n float w1( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n }\n float w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n }\n float w3( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * a );\n }\n float g0( float a ) {\n return w0( a ) + w1( a );\n }\n float g1( float a ) {\n return w2( a ) + w3( a );\n }\n float h0( float a ) {\n return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n }\n float h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n }\n vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n uv = uv * texelSize.zw + 0.5;\n vec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n }\n vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n vec2 fLodSizeInv = 1.0 / fLodSize;\n vec2 cLodSizeInv = 1.0 / cLodSize;\n vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n return mix( fSample, cSample, fract( lod ) );\n }\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n }\n vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n return vec3( 1.0 );\n } else {\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec4 transmittedLight;\n vec3 transmittance;\n #ifdef USE_DISPERSION\n float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n for ( int i = 0; i < 3; i ++ ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n \n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n \n vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n transmittedLight[ i ] = transmissionSample[ i ];\n transmittedLight.a += transmissionSample.a;\n transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n }\n transmittedLight.a /= 3.0;\n \n #else\n \n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n \n #endif\n vec3 attenuatedColor = transmittance * transmittedLight.rgb;\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n }\n#endif"; +var uv_pars_fragment = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; +var uv_pars_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n uniform mat3 mapTransform;\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n uniform mat3 alphaMapTransform;\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n uniform mat3 lightMapTransform;\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n uniform mat3 aoMapTransform;\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n uniform mat3 bumpMapTransform;\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n uniform mat3 normalMapTransform;\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n uniform mat3 displacementMapTransform;\n varying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n uniform mat3 emissiveMapTransform;\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n uniform mat3 metalnessMapTransform;\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n uniform mat3 roughnessMapTransform;\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n uniform mat3 anisotropyMapTransform;\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n uniform mat3 clearcoatMapTransform;\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform mat3 clearcoatNormalMapTransform;\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform mat3 clearcoatRoughnessMapTransform;\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n uniform mat3 sheenColorMapTransform;\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n uniform mat3 sheenRoughnessMapTransform;\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n uniform mat3 iridescenceMapTransform;\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform mat3 iridescenceThicknessMapTransform;\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n uniform mat3 specularMapTransform;\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n uniform mat3 specularColorMapTransform;\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n uniform mat3 specularIntensityMapTransform;\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; +var uv_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n vUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif"; +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_BATCHING\n worldPosition = batchingMatrix * worldPosition;\n #endif\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif"; +var vertex$h = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; +var fragment$h = "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n #ifdef DECODE_VIDEO_TEXTURE\n texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; +var vertex$g = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; +var fragment$g = "#ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n uniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n #ifdef ENVMAP_TYPE_CUBE\n vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n #else\n vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; +var vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; +var fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n gl_FragColor = texColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}"; +var vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}"; +var fragment$e = "#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #elif DEPTH_PACKING == 3202\n gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n #elif DEPTH_PACKING == 3203\n gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n #endif\n}"; +var vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}"; +var fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}"; +var vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}"; +var fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n #include \n}"; +var vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n #include \n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$9 = "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; +var fragment$9 = "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}"; +var fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n #else\n vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n vViewPosition = - mvPosition.xyz;\n#endif\n}"; +var fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n #ifdef OPAQUE\n gl_FragColor.a = 1.0;\n #endif\n}"; +var vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; +var fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n varying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n#ifdef USE_TRANSMISSION\n vWorldPosition = worldPosition.xyz;\n#endif\n}"; +var fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n #define IOR\n #define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n uniform float ior;\n#endif\n#ifdef USE_SPECULAR\n uniform float specularIntensity;\n uniform vec3 specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n uniform sampler2D specularColorMap;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n uniform sampler2D specularIntensityMap;\n #endif\n#endif\n#ifdef USE_CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n uniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n uniform float iridescence;\n uniform float iridescenceIOR;\n uniform float iridescenceThicknessMinimum;\n uniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheenColor;\n uniform float sheenRoughness;\n #ifdef USE_SHEEN_COLORMAP\n uniform sampler2D sheenColorMap;\n #endif\n #ifdef USE_SHEEN_ROUGHNESSMAP\n uniform sampler2D sheenRoughnessMap;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n uniform vec2 anisotropyVector;\n #ifdef USE_ANISOTROPYMAP\n uniform sampler2D anisotropyMap;\n #endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n #include \n vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n #ifdef USE_SHEEN\n float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n #endif\n #ifdef USE_CLEARCOAT\n float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}"; +var fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$3 = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n varying vec2 vUv;\n uniform mat3 uvTransform;\n#endif\nvoid main() {\n #ifdef USE_POINTS_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}"; +var fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; +var vertex$2 = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; +var fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}"; +var vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}"; +var fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n}"; +var ShaderChunk = { + alphahash_fragment, + alphahash_pars_fragment, + alphamap_fragment, + alphamap_pars_fragment, + alphatest_fragment, + alphatest_pars_fragment, + aomap_fragment, + aomap_pars_fragment, + batching_pars_vertex, + batching_vertex, + begin_vertex, + beginnormal_vertex, + bsdfs, + iridescence_fragment, + bumpmap_pars_fragment, + clipping_planes_fragment, + clipping_planes_pars_fragment, + clipping_planes_pars_vertex, + clipping_planes_vertex, + color_fragment, + color_pars_fragment, + color_pars_vertex, + color_vertex, + common, + cube_uv_reflection_fragment, + defaultnormal_vertex, + displacementmap_pars_vertex, + displacementmap_vertex, + emissivemap_fragment, + emissivemap_pars_fragment, + colorspace_fragment, + colorspace_pars_fragment, + envmap_fragment, + envmap_common_pars_fragment, + envmap_pars_fragment, + envmap_pars_vertex, + envmap_physical_pars_fragment, + envmap_vertex, + fog_vertex, + fog_pars_vertex, + fog_fragment, + fog_pars_fragment, + gradientmap_pars_fragment, + lightmap_pars_fragment, + lights_lambert_fragment, + lights_lambert_pars_fragment, + lights_pars_begin, + lights_toon_fragment, + lights_toon_pars_fragment, + lights_phong_fragment, + lights_phong_pars_fragment, + lights_physical_fragment, + lights_physical_pars_fragment, + lights_fragment_begin, + lights_fragment_maps, + lights_fragment_end, + logdepthbuf_fragment, + logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex, + logdepthbuf_vertex, + map_fragment, + map_pars_fragment, + map_particle_fragment, + map_particle_pars_fragment, + metalnessmap_fragment, + metalnessmap_pars_fragment, + morphinstance_vertex, + morphcolor_vertex, + morphnormal_vertex, + morphtarget_pars_vertex, + morphtarget_vertex, + normal_fragment_begin, + normal_fragment_maps, + normal_pars_fragment, + normal_pars_vertex, + normal_vertex, + normalmap_pars_fragment, + clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps, + clearcoat_pars_fragment, + iridescence_pars_fragment, + opaque_fragment, + packing, + premultiplied_alpha_fragment, + project_vertex, + dithering_fragment, + dithering_pars_fragment, + roughnessmap_fragment, + roughnessmap_pars_fragment, + shadowmap_pars_fragment, + shadowmap_pars_vertex, + shadowmap_vertex, + shadowmask_pars_fragment, + skinbase_vertex, + skinning_pars_vertex, + skinning_vertex, + skinnormal_vertex, + specularmap_fragment, + specularmap_pars_fragment, + tonemapping_fragment, + tonemapping_pars_fragment, + transmission_fragment, + transmission_pars_fragment, + uv_pars_fragment, + uv_pars_vertex, + uv_vertex, + worldpos_vertex, + background_vert: vertex$h, + background_frag: fragment$h, + backgroundCube_vert: vertex$g, + backgroundCube_frag: fragment$g, + cube_vert: vertex$f, + cube_frag: fragment$f, + depth_vert: vertex$e, + depth_frag: fragment$e, + distanceRGBA_vert: vertex$d, + distanceRGBA_frag: fragment$d, + equirect_vert: vertex$c, + equirect_frag: fragment$c, + linedashed_vert: vertex$b, + linedashed_frag: fragment$b, + meshbasic_vert: vertex$a, + meshbasic_frag: fragment$a, + meshlambert_vert: vertex$9, + meshlambert_frag: fragment$9, + meshmatcap_vert: vertex$8, + meshmatcap_frag: fragment$8, + meshnormal_vert: vertex$7, + meshnormal_frag: fragment$7, + meshphong_vert: vertex$6, + meshphong_frag: fragment$6, + meshphysical_vert: vertex$5, + meshphysical_frag: fragment$5, + meshtoon_vert: vertex$4, + meshtoon_frag: fragment$4, + points_vert: vertex$3, + points_frag: fragment$3, + shadow_vert: vertex$2, + shadow_frag: fragment$2, + sprite_vert: vertex$1, + sprite_frag: fragment$1 +}; +var UniformsLib = { + common: { + diffuse: { value: new Color(16777215) }, + opacity: { value: 1 }, + map: { value: null }, + mapTransform: { value: new Matrix3() }, + alphaMap: { value: null }, + alphaMapTransform: { value: new Matrix3() }, + alphaTest: { value: 0 } + }, + specularmap: { + specularMap: { value: null }, + specularMapTransform: { value: new Matrix3() } + }, + envmap: { + envMap: { value: null }, + envMapRotation: { value: new Matrix3() }, + flipEnvMap: { value: -1 }, + reflectivity: { value: 1 }, + // basic, lambert, phong + ior: { value: 1.5 }, + // physical + refractionRatio: { value: 0.98 } + // basic, lambert, phong + }, + aomap: { + aoMap: { value: null }, + aoMapIntensity: { value: 1 }, + aoMapTransform: { value: new Matrix3() } + }, + lightmap: { + lightMap: { value: null }, + lightMapIntensity: { value: 1 }, + lightMapTransform: { value: new Matrix3() } + }, + bumpmap: { + bumpMap: { value: null }, + bumpMapTransform: { value: new Matrix3() }, + bumpScale: { value: 1 } + }, + normalmap: { + normalMap: { value: null }, + normalMapTransform: { value: new Matrix3() }, + normalScale: { value: new Vector2(1, 1) } + }, + displacementmap: { + displacementMap: { value: null }, + displacementMapTransform: { value: new Matrix3() }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + }, + emissivemap: { + emissiveMap: { value: null }, + emissiveMapTransform: { value: new Matrix3() } + }, + metalnessmap: { + metalnessMap: { value: null }, + metalnessMapTransform: { value: new Matrix3() } + }, + roughnessmap: { + roughnessMap: { value: null }, + roughnessMapTransform: { value: new Matrix3() } + }, + gradientmap: { + gradientMap: { value: null } + }, + fog: { + fogDensity: { value: 25e-5 }, + fogNear: { value: 1 }, + fogFar: { value: 2e3 }, + fogColor: { value: new Color(16777215) } + }, + lights: { + ambientLightColor: { value: [] }, + lightProbe: { value: [] }, + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + directionalLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + spotLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + spotLightMap: { value: [] }, + spotShadowMap: { value: [] }, + spotLightMatrix: { value: [] }, + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + pointLightShadows: { value: [], properties: { + shadowIntensity: 1, + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + ltc_1: { value: null }, + ltc_2: { value: null } + }, + points: { + diffuse: { value: new Color(16777215) }, + opacity: { value: 1 }, + size: { value: 1 }, + scale: { value: 1 }, + map: { value: null }, + alphaMap: { value: null }, + alphaMapTransform: { value: new Matrix3() }, + alphaTest: { value: 0 }, + uvTransform: { value: new Matrix3() } + }, + sprite: { + diffuse: { value: new Color(16777215) }, + opacity: { value: 1 }, + center: { value: new Vector2(0.5, 0.5) }, + rotation: { value: 0 }, + map: { value: null }, + mapTransform: { value: new Matrix3() }, + alphaMap: { value: null }, + alphaMapTransform: { value: new Matrix3() }, + alphaTest: { value: 0 } + } +}; +var ShaderLib = { + basic: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + }, + lambert: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color(0) } + } + ]), + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + }, + phong: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color(0) }, + specular: { value: new Color(1118481) }, + shininess: { value: 30 } + } + ]), + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + }, + standard: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color(0) }, + roughness: { value: 1 }, + metalness: { value: 0 }, + envMapIntensity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + }, + toon: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color(0) } + } + ]), + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + }, + matcap: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ]), + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + }, + points: { + uniforms: mergeUniforms([ + UniformsLib.points, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + }, + dashed: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ]), + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + }, + depth: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.displacementmap + ]), + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + }, + normal: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.meshnormal_vert, + fragmentShader: ShaderChunk.meshnormal_frag + }, + sprite: { + uniforms: mergeUniforms([ + UniformsLib.sprite, + UniformsLib.fog + ]), + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + }, + background: { + uniforms: { + uvTransform: { value: new Matrix3() }, + t2D: { value: null }, + backgroundIntensity: { value: 1 } + }, + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + }, + backgroundCube: { + uniforms: { + envMap: { value: null }, + flipEnvMap: { value: -1 }, + backgroundBlurriness: { value: 0 }, + backgroundIntensity: { value: 1 }, + backgroundRotation: { value: new Matrix3() } + }, + vertexShader: ShaderChunk.backgroundCube_vert, + fragmentShader: ShaderChunk.backgroundCube_frag + }, + cube: { + uniforms: { + tCube: { value: null }, + tFlip: { value: -1 }, + opacity: { value: 1 } + }, + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { value: null } + }, + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + }, + distanceRGBA: { + uniforms: mergeUniforms([ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1e3 } + } + ]), + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + }, + shadow: { + uniforms: mergeUniforms([ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color(0) }, + opacity: { value: 1 } + } + ]), + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + } +}; +ShaderLib.physical = { + uniforms: mergeUniforms([ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatMapTransform: { value: new Matrix3() }, + clearcoatNormalMap: { value: null }, + clearcoatNormalMapTransform: { value: new Matrix3() }, + clearcoatNormalScale: { value: new Vector2(1, 1) }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatRoughnessMapTransform: { value: new Matrix3() }, + dispersion: { value: 0 }, + iridescence: { value: 0 }, + iridescenceMap: { value: null }, + iridescenceMapTransform: { value: new Matrix3() }, + iridescenceIOR: { value: 1.3 }, + iridescenceThicknessMinimum: { value: 100 }, + iridescenceThicknessMaximum: { value: 400 }, + iridescenceThicknessMap: { value: null }, + iridescenceThicknessMapTransform: { value: new Matrix3() }, + sheen: { value: 0 }, + sheenColor: { value: new Color(0) }, + sheenColorMap: { value: null }, + sheenColorMapTransform: { value: new Matrix3() }, + sheenRoughness: { value: 1 }, + sheenRoughnessMap: { value: null }, + sheenRoughnessMapTransform: { value: new Matrix3() }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + transmissionMapTransform: { value: new Matrix3() }, + transmissionSamplerSize: { value: new Vector2() }, + transmissionSamplerMap: { value: null }, + thickness: { value: 0 }, + thicknessMap: { value: null }, + thicknessMapTransform: { value: new Matrix3() }, + attenuationDistance: { value: 0 }, + attenuationColor: { value: new Color(0) }, + specularColor: { value: new Color(1, 1, 1) }, + specularColorMap: { value: null }, + specularColorMapTransform: { value: new Matrix3() }, + specularIntensity: { value: 1 }, + specularIntensityMap: { value: null }, + specularIntensityMapTransform: { value: new Matrix3() }, + anisotropyVector: { value: new Vector2() }, + anisotropyMap: { value: null }, + anisotropyMapTransform: { value: new Matrix3() } + } + ]), + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag +}; +var _rgb = { r: 0, b: 0, g: 0 }; +var _e1$1 = new Euler(); +var _m1$1 = new Matrix4(); +function WebGLBackground(renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha) { + const clearColor = new Color(0); + let clearAlpha = alpha === true ? 0 : 1; + let planeMesh; + let boxMesh; + let currentBackground = null; + let currentBackgroundVersion = 0; + let currentTonemapping = null; + function getBackground(scene) { + let background = scene.isScene === true ? scene.background : null; + if (background && background.isTexture) { + const usePMREM = scene.backgroundBlurriness > 0; + background = (usePMREM ? cubeuvmaps : cubemaps).get(background); + } + return background; + } + function render(scene) { + let forceClear = false; + const background = getBackground(scene); + if (background === null) { + setClear(clearColor, clearAlpha); + } else if (background && background.isColor) { + setClear(background, 1); + forceClear = true; + } + const environmentBlendMode = renderer.xr.getEnvironmentBlendMode(); + if (environmentBlendMode === "additive") { + state.buffers.color.setClear(0, 0, 0, 1, premultipliedAlpha); + } else if (environmentBlendMode === "alpha-blend") { + state.buffers.color.setClear(0, 0, 0, 0, premultipliedAlpha); + } + if (renderer.autoClear || forceClear) { + state.buffers.depth.setTest(true); + state.buffers.depth.setMask(true); + state.buffers.color.setMask(true); + renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); + } + } + function addToRenderList(renderList, scene) { + const background = getBackground(scene); + if (background && (background.isCubeTexture || background.mapping === CubeUVReflectionMapping)) { + if (boxMesh === void 0) { + boxMesh = new Mesh( + new BoxGeometry(1, 1, 1), + new ShaderMaterial({ + name: "BackgroundCubeMaterial", + uniforms: cloneUniforms(ShaderLib.backgroundCube.uniforms), + vertexShader: ShaderLib.backgroundCube.vertexShader, + fragmentShader: ShaderLib.backgroundCube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + }) + ); + boxMesh.geometry.deleteAttribute("normal"); + boxMesh.geometry.deleteAttribute("uv"); + boxMesh.onBeforeRender = function(renderer2, scene2, camera) { + this.matrixWorld.copyPosition(camera.matrixWorld); + }; + Object.defineProperty(boxMesh.material, "envMap", { + get: function() { + return this.uniforms.envMap.value; + } + }); + objects.update(boxMesh); + } + _e1$1.copy(scene.backgroundRotation); + _e1$1.x *= -1; + _e1$1.y *= -1; + _e1$1.z *= -1; + if (background.isCubeTexture && background.isRenderTargetTexture === false) { + _e1$1.y *= -1; + _e1$1.z *= -1; + } + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture && background.isRenderTargetTexture === false ? -1 : 1; + boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness; + boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; + boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4(_m1$1.makeRotationFromEuler(_e1$1)); + boxMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; + if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { + boxMesh.material.needsUpdate = true; + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + } + boxMesh.layers.enableAll(); + renderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null); + } else if (background && background.isTexture) { + if (planeMesh === void 0) { + planeMesh = new Mesh( + new PlaneGeometry(2, 2), + new ShaderMaterial({ + name: "BackgroundMaterial", + uniforms: cloneUniforms(ShaderLib.background.uniforms), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + }) + ); + planeMesh.geometry.deleteAttribute("normal"); + Object.defineProperty(planeMesh.material, "map", { + get: function() { + return this.uniforms.t2D.value; + } + }); + objects.update(planeMesh); + } + planeMesh.material.uniforms.t2D.value = background; + planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; + planeMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; + if (background.matrixAutoUpdate === true) { + background.updateMatrix(); + } + planeMesh.material.uniforms.uvTransform.value.copy(background.matrix); + if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { + planeMesh.material.needsUpdate = true; + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + } + planeMesh.layers.enableAll(); + renderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null); + } + } + function setClear(color, alpha2) { + color.getRGB(_rgb, getUnlitUniformColorSpace(renderer)); + state.buffers.color.setClear(_rgb.r, _rgb.g, _rgb.b, alpha2, premultipliedAlpha); + } + return { + getClearColor: function() { + return clearColor; + }, + setClearColor: function(color, alpha2 = 1) { + clearColor.set(color); + clearAlpha = alpha2; + setClear(clearColor, clearAlpha); + }, + getClearAlpha: function() { + return clearAlpha; + }, + setClearAlpha: function(alpha2) { + clearAlpha = alpha2; + setClear(clearColor, clearAlpha); + }, + render, + addToRenderList + }; +} +function WebGLBindingStates(gl, attributes) { + const maxVertexAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + const bindingStates = {}; + const defaultState = createBindingState(null); + let currentState = defaultState; + let forceUpdate = false; + function setup(object, material, program, geometry, index) { + let updateBuffers = false; + const state = getBindingState(geometry, program, material); + if (currentState !== state) { + currentState = state; + bindVertexArrayObject(currentState.object); + } + updateBuffers = needsUpdate(object, geometry, program, index); + if (updateBuffers) saveCache(object, geometry, program, index); + if (index !== null) { + attributes.update(index, gl.ELEMENT_ARRAY_BUFFER); + } + if (updateBuffers || forceUpdate) { + forceUpdate = false; + setupVertexAttributes(object, material, program, geometry); + if (index !== null) { + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, attributes.get(index).buffer); + } + } + } + function createVertexArrayObject() { + return gl.createVertexArray(); + } + function bindVertexArrayObject(vao) { + return gl.bindVertexArray(vao); + } + function deleteVertexArrayObject(vao) { + return gl.deleteVertexArray(vao); + } + function getBindingState(geometry, program, material) { + const wireframe = material.wireframe === true; + let programMap = bindingStates[geometry.id]; + if (programMap === void 0) { + programMap = {}; + bindingStates[geometry.id] = programMap; + } + let stateMap = programMap[program.id]; + if (stateMap === void 0) { + stateMap = {}; + programMap[program.id] = stateMap; + } + let state = stateMap[wireframe]; + if (state === void 0) { + state = createBindingState(createVertexArrayObject()); + stateMap[wireframe] = state; + } + return state; + } + function createBindingState(vao) { + const newAttributes = []; + const enabledAttributes = []; + const attributeDivisors = []; + for (let i = 0; i < maxVertexAttributes; i++) { + newAttributes[i] = 0; + enabledAttributes[i] = 0; + attributeDivisors[i] = 0; + } + return { + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + newAttributes, + enabledAttributes, + attributeDivisors, + object: vao, + attributes: {}, + index: null + }; + } + function needsUpdate(object, geometry, program, index) { + const cachedAttributes = currentState.attributes; + const geometryAttributes = geometry.attributes; + let attributesNum = 0; + const programAttributes = program.getAttributes(); + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + const cachedAttribute = cachedAttributes[name]; + let geometryAttribute = geometryAttributes[name]; + if (geometryAttribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; + } + if (cachedAttribute === void 0) return true; + if (cachedAttribute.attribute !== geometryAttribute) return true; + if (geometryAttribute && cachedAttribute.data !== geometryAttribute.data) return true; + attributesNum++; + } + } + if (currentState.attributesNum !== attributesNum) return true; + if (currentState.index !== index) return true; + return false; + } + function saveCache(object, geometry, program, index) { + const cache = {}; + const attributes2 = geometry.attributes; + let attributesNum = 0; + const programAttributes = program.getAttributes(); + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + let attribute = attributes2[name]; + if (attribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) attribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) attribute = object.instanceColor; + } + const data = {}; + data.attribute = attribute; + if (attribute && attribute.data) { + data.data = attribute.data; + } + cache[name] = data; + attributesNum++; + } + } + currentState.attributes = cache; + currentState.attributesNum = attributesNum; + currentState.index = index; + } + function initAttributes() { + const newAttributes = currentState.newAttributes; + for (let i = 0, il = newAttributes.length; i < il; i++) { + newAttributes[i] = 0; + } + } + function enableAttribute(attribute) { + enableAttributeAndDivisor(attribute, 0); + } + function enableAttributeAndDivisor(attribute, meshPerAttribute) { + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + const attributeDivisors = currentState.attributeDivisors; + newAttributes[attribute] = 1; + if (enabledAttributes[attribute] === 0) { + gl.enableVertexAttribArray(attribute); + enabledAttributes[attribute] = 1; + } + if (attributeDivisors[attribute] !== meshPerAttribute) { + gl.vertexAttribDivisor(attribute, meshPerAttribute); + attributeDivisors[attribute] = meshPerAttribute; + } + } + function disableUnusedAttributes() { + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + for (let i = 0, il = enabledAttributes.length; i < il; i++) { + if (enabledAttributes[i] !== newAttributes[i]) { + gl.disableVertexAttribArray(i); + enabledAttributes[i] = 0; + } + } + } + function vertexAttribPointer(index, size, type, normalized, stride, offset, integer) { + if (integer === true) { + gl.vertexAttribIPointer(index, size, type, stride, offset); + } else { + gl.vertexAttribPointer(index, size, type, normalized, stride, offset); + } + } + function setupVertexAttributes(object, material, program, geometry) { + initAttributes(); + const geometryAttributes = geometry.attributes; + const programAttributes = program.getAttributes(); + const materialDefaultAttributeValues = material.defaultAttributeValues; + for (const name in programAttributes) { + const programAttribute = programAttributes[name]; + if (programAttribute.location >= 0) { + let geometryAttribute = geometryAttributes[name]; + if (geometryAttribute === void 0) { + if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; + if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; + } + if (geometryAttribute !== void 0) { + const normalized = geometryAttribute.normalized; + const size = geometryAttribute.itemSize; + const attribute = attributes.get(geometryAttribute); + if (attribute === void 0) continue; + const buffer = attribute.buffer; + const type = attribute.type; + const bytesPerElement = attribute.bytesPerElement; + const integer = type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType; + if (geometryAttribute.isInterleavedBufferAttribute) { + const data = geometryAttribute.data; + const stride = data.stride; + const offset = geometryAttribute.offset; + if (data.isInstancedInterleavedBuffer) { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttributeAndDivisor(programAttribute.location + i, data.meshPerAttribute); + } + if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + } + } else { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttribute(programAttribute.location + i); + } + } + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + for (let i = 0; i < programAttribute.locationSize; i++) { + vertexAttribPointer( + programAttribute.location + i, + size / programAttribute.locationSize, + type, + normalized, + stride * bytesPerElement, + (offset + size / programAttribute.locationSize * i) * bytesPerElement, + integer + ); + } + } else { + if (geometryAttribute.isInstancedBufferAttribute) { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttributeAndDivisor(programAttribute.location + i, geometryAttribute.meshPerAttribute); + } + if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + } + } else { + for (let i = 0; i < programAttribute.locationSize; i++) { + enableAttribute(programAttribute.location + i); + } + } + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + for (let i = 0; i < programAttribute.locationSize; i++) { + vertexAttribPointer( + programAttribute.location + i, + size / programAttribute.locationSize, + type, + normalized, + size * bytesPerElement, + size / programAttribute.locationSize * i * bytesPerElement, + integer + ); + } + } + } else if (materialDefaultAttributeValues !== void 0) { + const value = materialDefaultAttributeValues[name]; + if (value !== void 0) { + switch (value.length) { + case 2: + gl.vertexAttrib2fv(programAttribute.location, value); + break; + case 3: + gl.vertexAttrib3fv(programAttribute.location, value); + break; + case 4: + gl.vertexAttrib4fv(programAttribute.location, value); + break; + default: + gl.vertexAttrib1fv(programAttribute.location, value); + } + } + } + } + } + disableUnusedAttributes(); + } + function dispose() { + reset(); + for (const geometryId in bindingStates) { + const programMap = bindingStates[geometryId]; + for (const programId in programMap) { + const stateMap = programMap[programId]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[programId]; + } + delete bindingStates[geometryId]; + } + } + function releaseStatesOfGeometry(geometry) { + if (bindingStates[geometry.id] === void 0) return; + const programMap = bindingStates[geometry.id]; + for (const programId in programMap) { + const stateMap = programMap[programId]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[programId]; + } + delete bindingStates[geometry.id]; + } + function releaseStatesOfProgram(program) { + for (const geometryId in bindingStates) { + const programMap = bindingStates[geometryId]; + if (programMap[program.id] === void 0) continue; + const stateMap = programMap[program.id]; + for (const wireframe in stateMap) { + deleteVertexArrayObject(stateMap[wireframe].object); + delete stateMap[wireframe]; + } + delete programMap[program.id]; + } + } + function reset() { + resetDefaultState(); + forceUpdate = true; + if (currentState === defaultState) return; + currentState = defaultState; + bindVertexArrayObject(currentState.object); + } + function resetDefaultState() { + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + } + return { + setup, + reset, + resetDefaultState, + dispose, + releaseStatesOfGeometry, + releaseStatesOfProgram, + initAttributes, + enableAttribute, + disableUnusedAttributes + }; +} +function WebGLBufferRenderer(gl, extensions, info) { + let mode; + function setMode(value) { + mode = value; + } + function render(start, count) { + gl.drawArrays(mode, start, count); + info.update(count, mode, 1); + } + function renderInstances(start, count, primcount) { + if (primcount === 0) return; + gl.drawArraysInstanced(mode, start, count, primcount); + info.update(count, mode, primcount); + } + function renderMultiDraw(starts, counts, drawCount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + extension.multiDrawArraysWEBGL(mode, starts, 0, counts, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + info.update(elementCount, mode, 1); + } + function renderMultiDrawInstances(starts, counts, drawCount, primcount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + if (extension === null) { + for (let i = 0; i < starts.length; i++) { + renderInstances(starts[i], counts[i], primcount[i]); + } + } else { + extension.multiDrawArraysInstancedWEBGL(mode, starts, 0, counts, 0, primcount, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + for (let i = 0; i < primcount.length; i++) { + info.update(elementCount, mode, primcount[i]); + } + } + } + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + this.renderMultiDraw = renderMultiDraw; + this.renderMultiDrawInstances = renderMultiDrawInstances; +} +function WebGLCapabilities(gl, extensions, parameters, utils) { + let maxAnisotropy; + function getMaxAnisotropy() { + if (maxAnisotropy !== void 0) return maxAnisotropy; + if (extensions.has("EXT_texture_filter_anisotropic") === true) { + const extension = extensions.get("EXT_texture_filter_anisotropic"); + maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT); + } else { + maxAnisotropy = 0; + } + return maxAnisotropy; + } + function textureFormatReadable(textureFormat) { + if (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT)) { + return false; + } + return true; + } + function textureTypeReadable(textureType) { + const halfFloatSupportedByExt = textureType === HalfFloatType && (extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float")); + if (textureType !== UnsignedByteType && utils.convert(textureType) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE) && // Edge and Chrome Mac < 52 (#9513) + textureType !== FloatType && !halfFloatSupportedByExt) { + return false; + } + return true; + } + function getMaxPrecision(precision2) { + if (precision2 === "highp") { + if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0) { + return "highp"; + } + precision2 = "mediump"; + } + if (precision2 === "mediump") { + if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0) { + return "mediump"; + } + } + return "lowp"; + } + let precision = parameters.precision !== void 0 ? parameters.precision : "highp"; + const maxPrecision = getMaxPrecision(precision); + if (maxPrecision !== precision) { + console.warn("THREE.WebGLRenderer:", precision, "not supported, using", maxPrecision, "instead."); + precision = maxPrecision; + } + const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); + const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); + const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); + const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); + const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); + const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS); + const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS); + const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); + const vertexTextures = maxVertexTextures > 0; + const maxSamples = gl.getParameter(gl.MAX_SAMPLES); + return { + isWebGL2: true, + // keeping this for backwards compatibility + getMaxAnisotropy, + getMaxPrecision, + textureFormatReadable, + textureTypeReadable, + precision, + logarithmicDepthBuffer, + maxTextures, + maxVertexTextures, + maxTextureSize, + maxCubemapSize, + maxAttributes, + maxVertexUniforms, + maxVaryings, + maxFragmentUniforms, + vertexTextures, + maxSamples + }; +} +function WebGLClipping(properties) { + const scope = this; + let globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false; + const plane = new Plane(), viewNormalMatrix = new Matrix3(), uniform = { value: null, needsUpdate: false }; + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + this.init = function(planes, enableLocalClipping) { + const enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || localClippingEnabled; + localClippingEnabled = enableLocalClipping; + numGlobalPlanes = planes.length; + return enabled; + }; + this.beginShadows = function() { + renderingShadows = true; + projectPlanes(null); + }; + this.endShadows = function() { + renderingShadows = false; + }; + this.setGlobalState = function(planes, camera) { + globalState = projectPlanes(planes, camera, 0); + }; + this.setState = function(material, camera, useCache) { + const planes = material.clippingPlanes, clipIntersection = material.clipIntersection, clipShadows = material.clipShadows; + const materialProperties = properties.get(material); + if (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) { + if (renderingShadows) { + projectPlanes(null); + } else { + resetGlobalState(); + } + } else { + const nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4; + let dstArray = materialProperties.clippingState || null; + uniform.value = dstArray; + dstArray = projectPlanes(planes, camera, lGlobal, useCache); + for (let i = 0; i !== lGlobal; ++i) { + dstArray[i] = globalState[i]; + } + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + } + }; + function resetGlobalState() { + if (uniform.value !== globalState) { + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + } + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + } + function projectPlanes(planes, camera, dstOffset, skipTransform) { + const nPlanes = planes !== null ? planes.length : 0; + let dstArray = null; + if (nPlanes !== 0) { + dstArray = uniform.value; + if (skipTransform !== true || dstArray === null) { + const flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse; + viewNormalMatrix.getNormalMatrix(viewMatrix); + if (dstArray === null || dstArray.length < flatSize) { + dstArray = new Float32Array(flatSize); + } + for (let i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) { + plane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix); + plane.normal.toArray(dstArray, i4); + dstArray[i4 + 3] = plane.constant; + } + } + uniform.value = dstArray; + uniform.needsUpdate = true; + } + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + return dstArray; + } +} +function WebGLCubeMaps(renderer) { + let cubemaps = /* @__PURE__ */ new WeakMap(); + function mapTextureMapping(texture, mapping) { + if (mapping === EquirectangularReflectionMapping) { + texture.mapping = CubeReflectionMapping; + } else if (mapping === EquirectangularRefractionMapping) { + texture.mapping = CubeRefractionMapping; + } + return texture; + } + function get(texture) { + if (texture && texture.isTexture) { + const mapping = texture.mapping; + if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) { + if (cubemaps.has(texture)) { + const cubemap = cubemaps.get(texture).texture; + return mapTextureMapping(cubemap, texture.mapping); + } else { + const image = texture.image; + if (image && image.height > 0) { + const renderTarget = new WebGLCubeRenderTarget(image.height); + renderTarget.fromEquirectangularTexture(renderer, texture); + cubemaps.set(texture, renderTarget); + texture.addEventListener("dispose", onTextureDispose); + return mapTextureMapping(renderTarget.texture, texture.mapping); + } else { + return null; + } + } + } + } + return texture; + } + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + const cubemap = cubemaps.get(texture); + if (cubemap !== void 0) { + cubemaps.delete(texture); + cubemap.dispose(); + } + } + function dispose() { + cubemaps = /* @__PURE__ */ new WeakMap(); + } + return { + get, + dispose + }; +} +var OrthographicCamera = class extends Camera { + constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2e3) { + super(); + this.isOrthographicCamera = true; + this.type = "OrthographicCamera"; + this.zoom = 1; + this.view = null; + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + this.near = near; + this.far = far; + this.updateProjectionMatrix(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign({}, source.view); + return this; + } + setViewOffset(fullWidth, fullHeight, x, y, width, height) { + if (this.view === null) { + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + } + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + this.updateProjectionMatrix(); + } + clearViewOffset() { + if (this.view !== null) { + this.view.enabled = false; + } + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const dx = (this.right - this.left) / (2 * this.zoom); + const dy = (this.top - this.bottom) / (2 * this.zoom); + const cx = (this.right + this.left) / 2; + const cy = (this.top + this.bottom) / 2; + let left = cx - dx; + let right = cx + dx; + let top = cy + dy; + let bottom = cy - dy; + if (this.view !== null && this.view.enabled) { + const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom; + const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + } + this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far, this.coordinateSystem); + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + if (this.view !== null) data.object.view = Object.assign({}, this.view); + return data; + } +}; +var LOD_MIN = 4; +var EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582]; +var MAX_SAMPLES = 20; +var _flatCamera = new OrthographicCamera(); +var _clearColor = new Color(); +var _oldTarget = null; +var _oldActiveCubeFace = 0; +var _oldActiveMipmapLevel = 0; +var _oldXrEnabled = false; +var PHI = (1 + Math.sqrt(5)) / 2; +var INV_PHI = 1 / PHI; +var _axisDirections = [ + new Vector3(-PHI, INV_PHI, 0), + new Vector3(PHI, INV_PHI, 0), + new Vector3(-INV_PHI, 0, PHI), + new Vector3(INV_PHI, 0, PHI), + new Vector3(0, PHI, -INV_PHI), + new Vector3(0, PHI, INV_PHI), + new Vector3(-1, 1, -1), + new Vector3(1, 1, -1), + new Vector3(-1, 1, 1), + new Vector3(1, 1, 1) +]; +var PMREMGenerator = class { + constructor(renderer) { + this._renderer = renderer; + this._pingPongRenderTarget = null; + this._lodMax = 0; + this._cubeSize = 0; + this._lodPlanes = []; + this._sizeLods = []; + this._sigmas = []; + this._blurMaterial = null; + this._cubemapMaterial = null; + this._equirectMaterial = null; + this._compileMaterial(this._blurMaterial); + } + /** + * Generates a PMREM from a supplied Scene, which can be faster than using an + * image if networking bandwidth is low. Optional sigma specifies a blur radius + * in radians to be applied to the scene before PMREM generation. Optional near + * and far planes ensure the scene is rendered in its entirety (the cubeCamera + * is placed at the origin). + */ + fromScene(scene, sigma = 0, near = 0.1, far = 100) { + _oldTarget = this._renderer.getRenderTarget(); + _oldActiveCubeFace = this._renderer.getActiveCubeFace(); + _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); + _oldXrEnabled = this._renderer.xr.enabled; + this._renderer.xr.enabled = false; + this._setSize(256); + const cubeUVRenderTarget = this._allocateTargets(); + cubeUVRenderTarget.depthBuffer = true; + this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget); + if (sigma > 0) { + this._blur(cubeUVRenderTarget, 0, 0, sigma); + } + this._applyPMREM(cubeUVRenderTarget); + this._cleanup(cubeUVRenderTarget); + return cubeUVRenderTarget; + } + /** + * Generates a PMREM from an equirectangular texture, which can be either LDR + * or HDR. The ideal input image size is 1k (1024 x 512), + * as this matches best with the 256 x 256 cubemap output. + * The smallest supported equirectangular image size is 64 x 32. + */ + fromEquirectangular(equirectangular, renderTarget = null) { + return this._fromTexture(equirectangular, renderTarget); + } + /** + * Generates a PMREM from an cubemap texture, which can be either LDR + * or HDR. The ideal input cube size is 256 x 256, + * as this matches best with the 256 x 256 cubemap output. + * The smallest supported cube size is 16 x 16. + */ + fromCubemap(cubemap, renderTarget = null) { + return this._fromTexture(cubemap, renderTarget); + } + /** + * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileCubemapShader() { + if (this._cubemapMaterial === null) { + this._cubemapMaterial = _getCubemapMaterial(); + this._compileMaterial(this._cubemapMaterial); + } + } + /** + * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileEquirectangularShader() { + if (this._equirectMaterial === null) { + this._equirectMaterial = _getEquirectMaterial(); + this._compileMaterial(this._equirectMaterial); + } + } + /** + * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, + * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on + * one of them will cause any others to also become unusable. + */ + dispose() { + this._dispose(); + if (this._cubemapMaterial !== null) this._cubemapMaterial.dispose(); + if (this._equirectMaterial !== null) this._equirectMaterial.dispose(); + } + // private interface + _setSize(cubeSize) { + this._lodMax = Math.floor(Math.log2(cubeSize)); + this._cubeSize = Math.pow(2, this._lodMax); + } + _dispose() { + if (this._blurMaterial !== null) this._blurMaterial.dispose(); + if (this._pingPongRenderTarget !== null) this._pingPongRenderTarget.dispose(); + for (let i = 0; i < this._lodPlanes.length; i++) { + this._lodPlanes[i].dispose(); + } + } + _cleanup(outputTarget) { + this._renderer.setRenderTarget(_oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel); + this._renderer.xr.enabled = _oldXrEnabled; + outputTarget.scissorTest = false; + _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height); + } + _fromTexture(texture, renderTarget) { + if (texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping) { + this._setSize(texture.image.length === 0 ? 16 : texture.image[0].width || texture.image[0].image.width); + } else { + this._setSize(texture.image.width / 4); + } + _oldTarget = this._renderer.getRenderTarget(); + _oldActiveCubeFace = this._renderer.getActiveCubeFace(); + _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); + _oldXrEnabled = this._renderer.xr.enabled; + this._renderer.xr.enabled = false; + const cubeUVRenderTarget = renderTarget || this._allocateTargets(); + this._textureToCubeUV(texture, cubeUVRenderTarget); + this._applyPMREM(cubeUVRenderTarget); + this._cleanup(cubeUVRenderTarget); + return cubeUVRenderTarget; + } + _allocateTargets() { + const width = 3 * Math.max(this._cubeSize, 16 * 7); + const height = 4 * this._cubeSize; + const params = { + magFilter: LinearFilter, + minFilter: LinearFilter, + generateMipmaps: false, + type: HalfFloatType, + format: RGBAFormat, + colorSpace: LinearSRGBColorSpace, + depthBuffer: false + }; + const cubeUVRenderTarget = _createRenderTarget(width, height, params); + if (this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height) { + if (this._pingPongRenderTarget !== null) { + this._dispose(); + } + this._pingPongRenderTarget = _createRenderTarget(width, height, params); + const { _lodMax } = this; + ({ sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes(_lodMax)); + this._blurMaterial = _getBlurShader(_lodMax, width, height); + } + return cubeUVRenderTarget; + } + _compileMaterial(material) { + const tmpMesh = new Mesh(this._lodPlanes[0], material); + this._renderer.compile(tmpMesh, _flatCamera); + } + _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) { + const fov2 = 90; + const aspect2 = 1; + const cubeCamera = new PerspectiveCamera(fov2, aspect2, near, far); + const upSign = [1, -1, 1, 1, 1, 1]; + const forwardSign = [1, 1, 1, -1, -1, -1]; + const renderer = this._renderer; + const originalAutoClear = renderer.autoClear; + const toneMapping = renderer.toneMapping; + renderer.getClearColor(_clearColor); + renderer.toneMapping = NoToneMapping; + renderer.autoClear = false; + const backgroundMaterial = new MeshBasicMaterial({ + name: "PMREM.Background", + side: BackSide, + depthWrite: false, + depthTest: false + }); + const backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial); + let useSolidColor = false; + const background = scene.background; + if (background) { + if (background.isColor) { + backgroundMaterial.color.copy(background); + scene.background = null; + useSolidColor = true; + } + } else { + backgroundMaterial.color.copy(_clearColor); + useSolidColor = true; + } + for (let i = 0; i < 6; i++) { + const col = i % 3; + if (col === 0) { + cubeCamera.up.set(0, upSign[i], 0); + cubeCamera.lookAt(forwardSign[i], 0, 0); + } else if (col === 1) { + cubeCamera.up.set(0, 0, upSign[i]); + cubeCamera.lookAt(0, forwardSign[i], 0); + } else { + cubeCamera.up.set(0, upSign[i], 0); + cubeCamera.lookAt(0, 0, forwardSign[i]); + } + const size = this._cubeSize; + _setViewport(cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size); + renderer.setRenderTarget(cubeUVRenderTarget); + if (useSolidColor) { + renderer.render(backgroundBox, cubeCamera); + } + renderer.render(scene, cubeCamera); + } + backgroundBox.geometry.dispose(); + backgroundBox.material.dispose(); + renderer.toneMapping = toneMapping; + renderer.autoClear = originalAutoClear; + scene.background = background; + } + _textureToCubeUV(texture, cubeUVRenderTarget) { + const renderer = this._renderer; + const isCubeTexture = texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping; + if (isCubeTexture) { + if (this._cubemapMaterial === null) { + this._cubemapMaterial = _getCubemapMaterial(); + } + this._cubemapMaterial.uniforms.flipEnvMap.value = texture.isRenderTargetTexture === false ? -1 : 1; + } else { + if (this._equirectMaterial === null) { + this._equirectMaterial = _getEquirectMaterial(); + } + } + const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; + const mesh = new Mesh(this._lodPlanes[0], material); + const uniforms = material.uniforms; + uniforms["envMap"].value = texture; + const size = this._cubeSize; + _setViewport(cubeUVRenderTarget, 0, 0, 3 * size, 2 * size); + renderer.setRenderTarget(cubeUVRenderTarget); + renderer.render(mesh, _flatCamera); + } + _applyPMREM(cubeUVRenderTarget) { + const renderer = this._renderer; + const autoClear = renderer.autoClear; + renderer.autoClear = false; + const n = this._lodPlanes.length; + for (let i = 1; i < n; i++) { + const sigma = Math.sqrt(this._sigmas[i] * this._sigmas[i] - this._sigmas[i - 1] * this._sigmas[i - 1]); + const poleAxis = _axisDirections[(n - i - 1) % _axisDirections.length]; + this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis); + } + renderer.autoClear = autoClear; + } + /** + * This is a two-pass Gaussian blur for a cubemap. Normally this is done + * vertically and horizontally, but this breaks down on a cube. Here we apply + * the blur latitudinally (around the poles), and then longitudinally (towards + * the poles) to approximate the orthogonally-separable blur. It is least + * accurate at the poles, but still does a decent job. + */ + _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) { + const pingPongRenderTarget = this._pingPongRenderTarget; + this._halfBlur( + cubeUVRenderTarget, + pingPongRenderTarget, + lodIn, + lodOut, + sigma, + "latitudinal", + poleAxis + ); + this._halfBlur( + pingPongRenderTarget, + cubeUVRenderTarget, + lodOut, + lodOut, + sigma, + "longitudinal", + poleAxis + ); + } + _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) { + const renderer = this._renderer; + const blurMaterial = this._blurMaterial; + if (direction !== "latitudinal" && direction !== "longitudinal") { + console.error( + "blur direction must be either latitudinal or longitudinal!" + ); + } + const STANDARD_DEVIATIONS = 3; + const blurMesh = new Mesh(this._lodPlanes[lodOut], blurMaterial); + const blurUniforms = blurMaterial.uniforms; + const pixels = this._sizeLods[lodIn] - 1; + const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1); + const sigmaPixels = sigmaRadians / radiansPerPixel; + const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES; + if (samples > MAX_SAMPLES) { + console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`); + } + const weights = []; + let sum = 0; + for (let i = 0; i < MAX_SAMPLES; ++i) { + const x2 = i / sigmaPixels; + const weight = Math.exp(-x2 * x2 / 2); + weights.push(weight); + if (i === 0) { + sum += weight; + } else if (i < samples) { + sum += 2 * weight; + } + } + for (let i = 0; i < weights.length; i++) { + weights[i] = weights[i] / sum; + } + blurUniforms["envMap"].value = targetIn.texture; + blurUniforms["samples"].value = samples; + blurUniforms["weights"].value = weights; + blurUniforms["latitudinal"].value = direction === "latitudinal"; + if (poleAxis) { + blurUniforms["poleAxis"].value = poleAxis; + } + const { _lodMax } = this; + blurUniforms["dTheta"].value = radiansPerPixel; + blurUniforms["mipInt"].value = _lodMax - lodIn; + const outputSize = this._sizeLods[lodOut]; + const x = 3 * outputSize * (lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0); + const y = 4 * (this._cubeSize - outputSize); + _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize); + renderer.setRenderTarget(targetOut); + renderer.render(blurMesh, _flatCamera); + } +}; +function _createPlanes(lodMax) { + const lodPlanes = []; + const sizeLods = []; + const sigmas = []; + let lod = lodMax; + const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; + for (let i = 0; i < totalLods; i++) { + const sizeLod = Math.pow(2, lod); + sizeLods.push(sizeLod); + let sigma = 1 / sizeLod; + if (i > lodMax - LOD_MIN) { + sigma = EXTRA_LOD_SIGMA[i - lodMax + LOD_MIN - 1]; + } else if (i === 0) { + sigma = 0; + } + sigmas.push(sigma); + const texelSize = 1 / (sizeLod - 2); + const min = -texelSize; + const max = 1 + texelSize; + const uv1 = [min, min, max, min, max, max, min, min, max, max, min, max]; + const cubeFaces = 6; + const vertices = 6; + const positionSize = 3; + const uvSize = 2; + const faceIndexSize = 1; + const position = new Float32Array(positionSize * vertices * cubeFaces); + const uv = new Float32Array(uvSize * vertices * cubeFaces); + const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces); + for (let face = 0; face < cubeFaces; face++) { + const x = face % 3 * 2 / 3 - 1; + const y = face > 2 ? 0 : -1; + const coordinates = [ + x, + y, + 0, + x + 2 / 3, + y, + 0, + x + 2 / 3, + y + 1, + 0, + x, + y, + 0, + x + 2 / 3, + y + 1, + 0, + x, + y + 1, + 0 + ]; + position.set(coordinates, positionSize * vertices * face); + uv.set(uv1, uvSize * vertices * face); + const fill2 = [face, face, face, face, face, face]; + faceIndex.set(fill2, faceIndexSize * vertices * face); + } + const planes = new BufferGeometry(); + planes.setAttribute("position", new BufferAttribute(position, positionSize)); + planes.setAttribute("uv", new BufferAttribute(uv, uvSize)); + planes.setAttribute("faceIndex", new BufferAttribute(faceIndex, faceIndexSize)); + lodPlanes.push(planes); + if (lod > LOD_MIN) { + lod--; + } + } + return { lodPlanes, sizeLods, sigmas }; +} +function _createRenderTarget(width, height, params) { + const cubeUVRenderTarget = new WebGLRenderTarget(width, height, params); + cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; + cubeUVRenderTarget.texture.name = "PMREM.cubeUv"; + cubeUVRenderTarget.scissorTest = true; + return cubeUVRenderTarget; +} +function _setViewport(target, x, y, width, height) { + target.viewport.set(x, y, width, height); + target.scissor.set(x, y, width, height); +} +function _getBlurShader(lodMax, width, height) { + const weights = new Float32Array(MAX_SAMPLES); + const poleAxis = new Vector3(0, 1, 0); + const shaderMaterial = new ShaderMaterial({ + name: "SphericalGaussianBlur", + defines: { + "n": MAX_SAMPLES, + "CUBEUV_TEXEL_WIDTH": 1 / width, + "CUBEUV_TEXEL_HEIGHT": 1 / height, + "CUBEUV_MAX_MIP": `${lodMax}.0` + }, + uniforms: { + "envMap": { value: null }, + "samples": { value: 1 }, + "weights": { value: weights }, + "latitudinal": { value: false }, + "dTheta": { value: 0 }, + "mipInt": { value: 0 }, + "poleAxis": { value: poleAxis } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform int samples; + uniform float weights[ n ]; + uniform bool latitudinal; + uniform float dTheta; + uniform float mipInt; + uniform vec3 poleAxis; + + #define ENVMAP_TYPE_CUBE_UV + #include + + vec3 getSample( float theta, vec3 axis ) { + + float cosTheta = cos( theta ); + // Rodrigues' axis-angle rotation + vec3 sampleDirection = vOutputDirection * cosTheta + + cross( axis, vOutputDirection ) * sin( theta ) + + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); + + return bilinearCubeUV( envMap, sampleDirection, mipInt ); + + } + + void main() { + + vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); + + if ( all( equal( axis, vec3( 0.0 ) ) ) ) { + + axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); + + } + + axis = normalize( axis ); + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); + + for ( int i = 1; i < n; i++ ) { + + if ( i >= samples ) { + + break; + + } + + float theta = dTheta * float( i ); + gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); + gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); + + } + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); + return shaderMaterial; +} +function _getEquirectMaterial() { + return new ShaderMaterial({ + name: "EquirectangularToCubeUV", + uniforms: { + "envMap": { value: null } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + + #include + + void main() { + + vec3 outputDirection = normalize( vOutputDirection ); + vec2 uv = equirectUv( outputDirection ); + + gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); +} +function _getCubemapMaterial() { + return new ShaderMaterial({ + name: "CubemapToCubeUV", + uniforms: { + "envMap": { value: null }, + "flipEnvMap": { value: -1 } + }, + vertexShader: _getCommonVertexShader(), + fragmentShader: ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + uniform float flipEnvMap; + + varying vec3 vOutputDirection; + + uniform samplerCube envMap; + + void main() { + + gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); + + } + ` + ), + blending: NoBlending, + depthTest: false, + depthWrite: false + }); +} +function _getCommonVertexShader() { + return ( + /* glsl */ + ` + + precision mediump float; + precision mediump int; + + attribute float faceIndex; + + varying vec3 vOutputDirection; + + // RH coordinate system; PMREM face-indexing convention + vec3 getDirection( vec2 uv, float face ) { + + uv = 2.0 * uv - 1.0; + + vec3 direction = vec3( uv, 1.0 ); + + if ( face == 0.0 ) { + + direction = direction.zyx; // ( 1, v, u ) pos x + + } else if ( face == 1.0 ) { + + direction = direction.xzy; + direction.xz *= -1.0; // ( -u, 1, -v ) pos y + + } else if ( face == 2.0 ) { + + direction.x *= -1.0; // ( -u, v, 1 ) pos z + + } else if ( face == 3.0 ) { + + direction = direction.zyx; + direction.xz *= -1.0; // ( -1, v, -u ) neg x + + } else if ( face == 4.0 ) { + + direction = direction.xzy; + direction.xy *= -1.0; // ( -u, -1, v ) neg y + + } else if ( face == 5.0 ) { + + direction.z *= -1.0; // ( u, v, -1 ) neg z + + } + + return direction; + + } + + void main() { + + vOutputDirection = getDirection( uv, faceIndex ); + gl_Position = vec4( position, 1.0 ); + + } + ` + ); +} +function WebGLCubeUVMaps(renderer) { + let cubeUVmaps = /* @__PURE__ */ new WeakMap(); + let pmremGenerator = null; + function get(texture) { + if (texture && texture.isTexture) { + const mapping = texture.mapping; + const isEquirectMap = mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping; + const isCubeMap = mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; + if (isEquirectMap || isCubeMap) { + let renderTarget = cubeUVmaps.get(texture); + const currentPMREMVersion = renderTarget !== void 0 ? renderTarget.texture.pmremVersion : 0; + if (texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion) { + if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); + renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture, renderTarget) : pmremGenerator.fromCubemap(texture, renderTarget); + renderTarget.texture.pmremVersion = texture.pmremVersion; + cubeUVmaps.set(texture, renderTarget); + return renderTarget.texture; + } else { + if (renderTarget !== void 0) { + return renderTarget.texture; + } else { + const image = texture.image; + if (isEquirectMap && image && image.height > 0 || isCubeMap && image && isCubeTextureComplete(image)) { + if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); + renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture) : pmremGenerator.fromCubemap(texture); + renderTarget.texture.pmremVersion = texture.pmremVersion; + cubeUVmaps.set(texture, renderTarget); + texture.addEventListener("dispose", onTextureDispose); + return renderTarget.texture; + } else { + return null; + } + } + } + } + } + return texture; + } + function isCubeTextureComplete(image) { + let count = 0; + const length = 6; + for (let i = 0; i < length; i++) { + if (image[i] !== void 0) count++; + } + return count === length; + } + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + const cubemapUV = cubeUVmaps.get(texture); + if (cubemapUV !== void 0) { + cubeUVmaps.delete(texture); + cubemapUV.dispose(); + } + } + function dispose() { + cubeUVmaps = /* @__PURE__ */ new WeakMap(); + if (pmremGenerator !== null) { + pmremGenerator.dispose(); + pmremGenerator = null; + } + } + return { + get, + dispose + }; +} +function WebGLExtensions(gl) { + const extensions = {}; + function getExtension(name) { + if (extensions[name] !== void 0) { + return extensions[name]; + } + let extension; + switch (name) { + case "WEBGL_depth_texture": + extension = gl.getExtension("WEBGL_depth_texture") || gl.getExtension("MOZ_WEBGL_depth_texture") || gl.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + extension = gl.getExtension("EXT_texture_filter_anisotropic") || gl.getExtension("MOZ_EXT_texture_filter_anisotropic") || gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + extension = gl.getExtension("WEBGL_compressed_texture_s3tc") || gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + extension = gl.getExtension("WEBGL_compressed_texture_pvrtc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + extension = gl.getExtension(name); + } + extensions[name] = extension; + return extension; + } + return { + has: function(name) { + return getExtension(name) !== null; + }, + init: function() { + getExtension("EXT_color_buffer_float"); + getExtension("WEBGL_clip_cull_distance"); + getExtension("OES_texture_float_linear"); + getExtension("EXT_color_buffer_half_float"); + getExtension("WEBGL_multisampled_render_to_texture"); + getExtension("WEBGL_render_shared_exponent"); + }, + get: function(name) { + const extension = getExtension(name); + if (extension === null) { + warnOnce("THREE.WebGLRenderer: " + name + " extension not supported."); + } + return extension; + } + }; +} +function WebGLGeometries(gl, attributes, info, bindingStates) { + const geometries = {}; + const wireframeAttributes = /* @__PURE__ */ new WeakMap(); + function onGeometryDispose(event) { + const geometry = event.target; + if (geometry.index !== null) { + attributes.remove(geometry.index); + } + for (const name in geometry.attributes) { + attributes.remove(geometry.attributes[name]); + } + for (const name in geometry.morphAttributes) { + const array = geometry.morphAttributes[name]; + for (let i = 0, l = array.length; i < l; i++) { + attributes.remove(array[i]); + } + } + geometry.removeEventListener("dispose", onGeometryDispose); + delete geometries[geometry.id]; + const attribute = wireframeAttributes.get(geometry); + if (attribute) { + attributes.remove(attribute); + wireframeAttributes.delete(geometry); + } + bindingStates.releaseStatesOfGeometry(geometry); + if (geometry.isInstancedBufferGeometry === true) { + delete geometry._maxInstanceCount; + } + info.memory.geometries--; + } + function get(object, geometry) { + if (geometries[geometry.id] === true) return geometry; + geometry.addEventListener("dispose", onGeometryDispose); + geometries[geometry.id] = true; + info.memory.geometries++; + return geometry; + } + function update(geometry) { + const geometryAttributes = geometry.attributes; + for (const name in geometryAttributes) { + attributes.update(geometryAttributes[name], gl.ARRAY_BUFFER); + } + const morphAttributes = geometry.morphAttributes; + for (const name in morphAttributes) { + const array = morphAttributes[name]; + for (let i = 0, l = array.length; i < l; i++) { + attributes.update(array[i], gl.ARRAY_BUFFER); + } + } + } + function updateWireframeAttribute(geometry) { + const indices = []; + const geometryIndex = geometry.index; + const geometryPosition = geometry.attributes.position; + let version = 0; + if (geometryIndex !== null) { + const array = geometryIndex.array; + version = geometryIndex.version; + for (let i = 0, l = array.length; i < l; i += 3) { + const a = array[i + 0]; + const b = array[i + 1]; + const c = array[i + 2]; + indices.push(a, b, b, c, c, a); + } + } else if (geometryPosition !== void 0) { + const array = geometryPosition.array; + version = geometryPosition.version; + for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) { + const a = i + 0; + const b = i + 1; + const c = i + 2; + indices.push(a, b, b, c, c, a); + } + } else { + return; + } + const attribute = new (arrayNeedsUint32(indices) ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1); + attribute.version = version; + const previousAttribute = wireframeAttributes.get(geometry); + if (previousAttribute) attributes.remove(previousAttribute); + wireframeAttributes.set(geometry, attribute); + } + function getWireframeAttribute(geometry) { + const currentAttribute = wireframeAttributes.get(geometry); + if (currentAttribute) { + const geometryIndex = geometry.index; + if (geometryIndex !== null) { + if (currentAttribute.version < geometryIndex.version) { + updateWireframeAttribute(geometry); + } + } + } else { + updateWireframeAttribute(geometry); + } + return wireframeAttributes.get(geometry); + } + return { + get, + update, + getWireframeAttribute + }; +} +function WebGLIndexedBufferRenderer(gl, extensions, info) { + let mode; + function setMode(value) { + mode = value; + } + let type, bytesPerElement; + function setIndex(value) { + type = value.type; + bytesPerElement = value.bytesPerElement; + } + function render(start, count) { + gl.drawElements(mode, count, type, start * bytesPerElement); + info.update(count, mode, 1); + } + function renderInstances(start, count, primcount) { + if (primcount === 0) return; + gl.drawElementsInstanced(mode, count, type, start * bytesPerElement, primcount); + info.update(count, mode, primcount); + } + function renderMultiDraw(starts, counts, drawCount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + extension.multiDrawElementsWEBGL(mode, counts, 0, type, starts, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + info.update(elementCount, mode, 1); + } + function renderMultiDrawInstances(starts, counts, drawCount, primcount) { + if (drawCount === 0) return; + const extension = extensions.get("WEBGL_multi_draw"); + if (extension === null) { + for (let i = 0; i < starts.length; i++) { + renderInstances(starts[i] / bytesPerElement, counts[i], primcount[i]); + } + } else { + extension.multiDrawElementsInstancedWEBGL(mode, counts, 0, type, starts, 0, primcount, 0, drawCount); + let elementCount = 0; + for (let i = 0; i < drawCount; i++) { + elementCount += counts[i]; + } + for (let i = 0; i < primcount.length; i++) { + info.update(elementCount, mode, primcount[i]); + } + } + } + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + this.renderMultiDraw = renderMultiDraw; + this.renderMultiDrawInstances = renderMultiDrawInstances; +} +function WebGLInfo(gl) { + const memory = { + geometries: 0, + textures: 0 + }; + const render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + function update(count, mode, instanceCount) { + render.calls++; + switch (mode) { + case gl.TRIANGLES: + render.triangles += instanceCount * (count / 3); + break; + case gl.LINES: + render.lines += instanceCount * (count / 2); + break; + case gl.LINE_STRIP: + render.lines += instanceCount * (count - 1); + break; + case gl.LINE_LOOP: + render.lines += instanceCount * count; + break; + case gl.POINTS: + render.points += instanceCount * count; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", mode); + break; + } + } + function reset() { + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + } + return { + memory, + render, + programs: null, + autoReset: true, + reset, + update + }; +} +function WebGLMorphtargets(gl, capabilities, textures) { + const morphTextures = /* @__PURE__ */ new WeakMap(); + const morph = new Vector4(); + function update(object, geometry, program) { + const objectInfluences = object.morphTargetInfluences; + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + let entry = morphTextures.get(geometry); + if (entry === void 0 || entry.count !== morphTargetsCount) { + let disposeTexture = function() { + texture.dispose(); + morphTextures.delete(geometry); + geometry.removeEventListener("dispose", disposeTexture); + }; + if (entry !== void 0) entry.texture.dispose(); + const hasMorphPosition = geometry.morphAttributes.position !== void 0; + const hasMorphNormals = geometry.morphAttributes.normal !== void 0; + const hasMorphColors = geometry.morphAttributes.color !== void 0; + const morphTargets = geometry.morphAttributes.position || []; + const morphNormals = geometry.morphAttributes.normal || []; + const morphColors = geometry.morphAttributes.color || []; + let vertexDataCount = 0; + if (hasMorphPosition === true) vertexDataCount = 1; + if (hasMorphNormals === true) vertexDataCount = 2; + if (hasMorphColors === true) vertexDataCount = 3; + let width = geometry.attributes.position.count * vertexDataCount; + let height = 1; + if (width > capabilities.maxTextureSize) { + height = Math.ceil(width / capabilities.maxTextureSize); + width = capabilities.maxTextureSize; + } + const buffer = new Float32Array(width * height * 4 * morphTargetsCount); + const texture = new DataArrayTexture(buffer, width, height, morphTargetsCount); + texture.type = FloatType; + texture.needsUpdate = true; + const vertexDataStride = vertexDataCount * 4; + for (let i = 0; i < morphTargetsCount; i++) { + const morphTarget = morphTargets[i]; + const morphNormal = morphNormals[i]; + const morphColor = morphColors[i]; + const offset = width * height * 4 * i; + for (let j = 0; j < morphTarget.count; j++) { + const stride = j * vertexDataStride; + if (hasMorphPosition === true) { + morph.fromBufferAttribute(morphTarget, j); + buffer[offset + stride + 0] = morph.x; + buffer[offset + stride + 1] = morph.y; + buffer[offset + stride + 2] = morph.z; + buffer[offset + stride + 3] = 0; + } + if (hasMorphNormals === true) { + morph.fromBufferAttribute(morphNormal, j); + buffer[offset + stride + 4] = morph.x; + buffer[offset + stride + 5] = morph.y; + buffer[offset + stride + 6] = morph.z; + buffer[offset + stride + 7] = 0; + } + if (hasMorphColors === true) { + morph.fromBufferAttribute(morphColor, j); + buffer[offset + stride + 8] = morph.x; + buffer[offset + stride + 9] = morph.y; + buffer[offset + stride + 10] = morph.z; + buffer[offset + stride + 11] = morphColor.itemSize === 4 ? morph.w : 1; + } + } + } + entry = { + count: morphTargetsCount, + texture, + size: new Vector2(width, height) + }; + morphTextures.set(geometry, entry); + geometry.addEventListener("dispose", disposeTexture); + } + if (object.isInstancedMesh === true && object.morphTexture !== null) { + program.getUniforms().setValue(gl, "morphTexture", object.morphTexture, textures); + } else { + let morphInfluencesSum = 0; + for (let i = 0; i < objectInfluences.length; i++) { + morphInfluencesSum += objectInfluences[i]; + } + const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + program.getUniforms().setValue(gl, "morphTargetBaseInfluence", morphBaseInfluence); + program.getUniforms().setValue(gl, "morphTargetInfluences", objectInfluences); + } + program.getUniforms().setValue(gl, "morphTargetsTexture", entry.texture, textures); + program.getUniforms().setValue(gl, "morphTargetsTextureSize", entry.size); + } + return { + update + }; +} +function WebGLObjects(gl, geometries, attributes, info) { + let updateMap = /* @__PURE__ */ new WeakMap(); + function update(object) { + const frame = info.render.frame; + const geometry = object.geometry; + const buffergeometry = geometries.get(object, geometry); + if (updateMap.get(buffergeometry) !== frame) { + geometries.update(buffergeometry); + updateMap.set(buffergeometry, frame); + } + if (object.isInstancedMesh) { + if (object.hasEventListener("dispose", onInstancedMeshDispose) === false) { + object.addEventListener("dispose", onInstancedMeshDispose); + } + if (updateMap.get(object) !== frame) { + attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER); + if (object.instanceColor !== null) { + attributes.update(object.instanceColor, gl.ARRAY_BUFFER); + } + updateMap.set(object, frame); + } + } + if (object.isSkinnedMesh) { + const skeleton = object.skeleton; + if (updateMap.get(skeleton) !== frame) { + skeleton.update(); + updateMap.set(skeleton, frame); + } + } + return buffergeometry; + } + function dispose() { + updateMap = /* @__PURE__ */ new WeakMap(); + } + function onInstancedMeshDispose(event) { + const instancedMesh = event.target; + instancedMesh.removeEventListener("dispose", onInstancedMeshDispose); + attributes.remove(instancedMesh.instanceMatrix); + if (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor); + } + return { + update, + dispose + }; +} +var DepthTexture = class extends Texture { + constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat) { + if (format !== DepthFormat && format !== DepthStencilFormat) { + throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + } + if (type === void 0 && format === DepthFormat) type = UnsignedIntType; + if (type === void 0 && format === DepthStencilFormat) type = UnsignedInt248Type; + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isDepthTexture = true; + this.image = { width, height }; + this.magFilter = magFilter !== void 0 ? magFilter : NearestFilter; + this.minFilter = minFilter !== void 0 ? minFilter : NearestFilter; + this.flipY = false; + this.generateMipmaps = false; + this.compareFunction = null; + } + copy(source) { + super.copy(source); + this.compareFunction = source.compareFunction; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.compareFunction !== null) data.compareFunction = this.compareFunction; + return data; + } +}; +var emptyTexture = new Texture(); +var emptyShadowTexture = new DepthTexture(1, 1); +var emptyArrayTexture = new DataArrayTexture(); +var empty3dTexture = new Data3DTexture(); +var emptyCubeTexture = new CubeTexture(); +var arrayCacheF32 = []; +var arrayCacheI32 = []; +var mat4array = new Float32Array(16); +var mat3array = new Float32Array(9); +var mat2array = new Float32Array(4); +function flatten(array, nBlocks, blockSize) { + const firstElem = array[0]; + if (firstElem <= 0 || firstElem > 0) return array; + const n = nBlocks * blockSize; + let r = arrayCacheF32[n]; + if (r === void 0) { + r = new Float32Array(n); + arrayCacheF32[n] = r; + } + if (nBlocks !== 0) { + firstElem.toArray(r, 0); + for (let i = 1, offset = 0; i !== nBlocks; ++i) { + offset += blockSize; + array[i].toArray(r, offset); + } + } + return r; +} +function arraysEqual(a, b) { + if (a.length !== b.length) return false; + for (let i = 0, l = a.length; i < l; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} +function copyArray(a, b) { + for (let i = 0, l = b.length; i < l; i++) { + a[i] = b[i]; + } +} +function allocTexUnits(textures, n) { + let r = arrayCacheI32[n]; + if (r === void 0) { + r = new Int32Array(n); + arrayCacheI32[n] = r; + } + for (let i = 0; i !== n; ++i) { + r[i] = textures.allocateTextureUnit(); + } + return r; +} +function setValueV1f(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1f(this.addr, v); + cache[0] = v; +} +function setValueV2f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2f(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2fv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV3f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3f(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else if (v.r !== void 0) { + if (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) { + gl.uniform3f(this.addr, v.r, v.g, v.b); + cache[0] = v.r; + cache[1] = v.g; + cache[2] = v.b; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3fv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV4f(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4f(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4fv(this.addr, v); + copyArray(cache, v); + } +} +function setValueM2(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix2fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat2array.set(elements); + gl.uniformMatrix2fv(this.addr, false, mat2array); + copyArray(cache, elements); + } +} +function setValueM3(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix3fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat3array.set(elements); + gl.uniformMatrix3fv(this.addr, false, mat3array); + copyArray(cache, elements); + } +} +function setValueM4(gl, v) { + const cache = this.cache; + const elements = v.elements; + if (elements === void 0) { + if (arraysEqual(cache, v)) return; + gl.uniformMatrix4fv(this.addr, false, v); + copyArray(cache, v); + } else { + if (arraysEqual(cache, elements)) return; + mat4array.set(elements); + gl.uniformMatrix4fv(this.addr, false, mat4array); + copyArray(cache, elements); + } +} +function setValueV1i(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1i(this.addr, v); + cache[0] = v; +} +function setValueV2i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2i(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2iv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV3i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3i(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3iv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV4i(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4i(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4iv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV1ui(gl, v) { + const cache = this.cache; + if (cache[0] === v) return; + gl.uniform1ui(this.addr, v); + cache[0] = v; +} +function setValueV2ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y) { + gl.uniform2ui(this.addr, v.x, v.y); + cache[0] = v.x; + cache[1] = v.y; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform2uiv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV3ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { + gl.uniform3ui(this.addr, v.x, v.y, v.z); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform3uiv(this.addr, v); + copyArray(cache, v); + } +} +function setValueV4ui(gl, v) { + const cache = this.cache; + if (v.x !== void 0) { + if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { + gl.uniform4ui(this.addr, v.x, v.y, v.z, v.w); + cache[0] = v.x; + cache[1] = v.y; + cache[2] = v.z; + cache[3] = v.w; + } + } else { + if (arraysEqual(cache, v)) return; + gl.uniform4uiv(this.addr, v); + copyArray(cache, v); + } +} +function setValueT1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + let emptyTexture2D; + if (this.type === gl.SAMPLER_2D_SHADOW) { + emptyShadowTexture.compareFunction = LessEqualCompare; + emptyTexture2D = emptyShadowTexture; + } else { + emptyTexture2D = emptyTexture; + } + textures.setTexture2D(v || emptyTexture2D, unit); +} +function setValueT3D1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTexture3D(v || empty3dTexture, unit); +} +function setValueT6(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTextureCube(v || emptyCubeTexture, unit); +} +function setValueT2DArray1(gl, v, textures) { + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + if (cache[0] !== unit) { + gl.uniform1i(this.addr, unit); + cache[0] = unit; + } + textures.setTexture2DArray(v || emptyArrayTexture, unit); +} +function getSingularSetter(type) { + switch (type) { + case 5126: + return setValueV1f; + case 35664: + return setValueV2f; + case 35665: + return setValueV3f; + case 35666: + return setValueV4f; + case 35674: + return setValueM2; + case 35675: + return setValueM3; + case 35676: + return setValueM4; + case 5124: + case 35670: + return setValueV1i; + case 35667: + case 35671: + return setValueV2i; + case 35668: + case 35672: + return setValueV3i; + case 35669: + case 35673: + return setValueV4i; + case 5125: + return setValueV1ui; + case 36294: + return setValueV2ui; + case 36295: + return setValueV3ui; + case 36296: + return setValueV4ui; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return setValueT1; + case 35679: + case 36299: + case 36307: + return setValueT3D1; + case 35680: + case 36300: + case 36308: + case 36293: + return setValueT6; + case 36289: + case 36303: + case 36311: + case 36292: + return setValueT2DArray1; + } +} +function setValueV1fArray(gl, v) { + gl.uniform1fv(this.addr, v); +} +function setValueV2fArray(gl, v) { + const data = flatten(v, this.size, 2); + gl.uniform2fv(this.addr, data); +} +function setValueV3fArray(gl, v) { + const data = flatten(v, this.size, 3); + gl.uniform3fv(this.addr, data); +} +function setValueV4fArray(gl, v) { + const data = flatten(v, this.size, 4); + gl.uniform4fv(this.addr, data); +} +function setValueM2Array(gl, v) { + const data = flatten(v, this.size, 4); + gl.uniformMatrix2fv(this.addr, false, data); +} +function setValueM3Array(gl, v) { + const data = flatten(v, this.size, 9); + gl.uniformMatrix3fv(this.addr, false, data); +} +function setValueM4Array(gl, v) { + const data = flatten(v, this.size, 16); + gl.uniformMatrix4fv(this.addr, false, data); +} +function setValueV1iArray(gl, v) { + gl.uniform1iv(this.addr, v); +} +function setValueV2iArray(gl, v) { + gl.uniform2iv(this.addr, v); +} +function setValueV3iArray(gl, v) { + gl.uniform3iv(this.addr, v); +} +function setValueV4iArray(gl, v) { + gl.uniform4iv(this.addr, v); +} +function setValueV1uiArray(gl, v) { + gl.uniform1uiv(this.addr, v); +} +function setValueV2uiArray(gl, v) { + gl.uniform2uiv(this.addr, v); +} +function setValueV3uiArray(gl, v) { + gl.uniform3uiv(this.addr, v); +} +function setValueV4uiArray(gl, v) { + gl.uniform4uiv(this.addr, v); +} +function setValueT1Array(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture2D(v[i] || emptyTexture, units[i]); + } +} +function setValueT3DArray(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture3D(v[i] || empty3dTexture, units[i]); + } +} +function setValueT6Array(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTextureCube(v[i] || emptyCubeTexture, units[i]); + } +} +function setValueT2DArrayArray(gl, v, textures) { + const cache = this.cache; + const n = v.length; + const units = allocTexUnits(textures, n); + if (!arraysEqual(cache, units)) { + gl.uniform1iv(this.addr, units); + copyArray(cache, units); + } + for (let i = 0; i !== n; ++i) { + textures.setTexture2DArray(v[i] || emptyArrayTexture, units[i]); + } +} +function getPureArraySetter(type) { + switch (type) { + case 5126: + return setValueV1fArray; + case 35664: + return setValueV2fArray; + case 35665: + return setValueV3fArray; + case 35666: + return setValueV4fArray; + case 35674: + return setValueM2Array; + case 35675: + return setValueM3Array; + case 35676: + return setValueM4Array; + case 5124: + case 35670: + return setValueV1iArray; + case 35667: + case 35671: + return setValueV2iArray; + case 35668: + case 35672: + return setValueV3iArray; + case 35669: + case 35673: + return setValueV4iArray; + case 5125: + return setValueV1uiArray; + case 36294: + return setValueV2uiArray; + case 36295: + return setValueV3uiArray; + case 36296: + return setValueV4uiArray; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return setValueT1Array; + case 35679: + case 36299: + case 36307: + return setValueT3DArray; + case 35680: + case 36300: + case 36308: + case 36293: + return setValueT6Array; + case 36289: + case 36303: + case 36311: + case 36292: + return setValueT2DArrayArray; + } +} +var SingleUniform = class { + constructor(id, activeInfo, addr) { + this.id = id; + this.addr = addr; + this.cache = []; + this.type = activeInfo.type; + this.setValue = getSingularSetter(activeInfo.type); + } +}; +var PureArrayUniform = class { + constructor(id, activeInfo, addr) { + this.id = id; + this.addr = addr; + this.cache = []; + this.type = activeInfo.type; + this.size = activeInfo.size; + this.setValue = getPureArraySetter(activeInfo.type); + } +}; +var StructuredUniform = class { + constructor(id) { + this.id = id; + this.seq = []; + this.map = {}; + } + setValue(gl, value, textures) { + const seq = this.seq; + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i]; + u.setValue(gl, value[u.id], textures); + } + } +}; +var RePathPart = /(\w+)(\])?(\[|\.)?/g; +function addUniform(container, uniformObject) { + container.seq.push(uniformObject); + container.map[uniformObject.id] = uniformObject; +} +function parseUniform(activeInfo, addr, container) { + const path = activeInfo.name, pathLength = path.length; + RePathPart.lastIndex = 0; + while (true) { + const match = RePathPart.exec(path), matchEnd = RePathPart.lastIndex; + let id = match[1]; + const idIsIndex = match[2] === "]", subscript = match[3]; + if (idIsIndex) id = id | 0; + if (subscript === void 0 || subscript === "[" && matchEnd + 2 === pathLength) { + addUniform(container, subscript === void 0 ? new SingleUniform(id, activeInfo, addr) : new PureArrayUniform(id, activeInfo, addr)); + break; + } else { + const map = container.map; + let next = map[id]; + if (next === void 0) { + next = new StructuredUniform(id); + addUniform(container, next); + } + container = next; + } + } +} +var WebGLUniforms = class { + constructor(gl, program) { + this.seq = []; + this.map = {}; + const n = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); + for (let i = 0; i < n; ++i) { + const info = gl.getActiveUniform(program, i), addr = gl.getUniformLocation(program, info.name); + parseUniform(info, addr, this); + } + } + setValue(gl, name, value, textures) { + const u = this.map[name]; + if (u !== void 0) u.setValue(gl, value, textures); + } + setOptional(gl, object, name) { + const v = object[name]; + if (v !== void 0) this.setValue(gl, name, v); + } + static upload(gl, seq, values, textures) { + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i], v = values[u.id]; + if (v.needsUpdate !== false) { + u.setValue(gl, v.value, textures); + } + } + } + static seqWithValue(seq, values) { + const r = []; + for (let i = 0, n = seq.length; i !== n; ++i) { + const u = seq[i]; + if (u.id in values) r.push(u); + } + return r; + } +}; +function WebGLShader(gl, type, string) { + const shader = gl.createShader(type); + gl.shaderSource(shader, string); + gl.compileShader(shader); + return shader; +} +var COMPLETION_STATUS_KHR = 37297; +var programIdCount = 0; +function handleSource(string, errorLine) { + const lines = string.split("\n"); + const lines2 = []; + const from = Math.max(errorLine - 6, 0); + const to = Math.min(errorLine + 6, lines.length); + for (let i = from; i < to; i++) { + const line = i + 1; + lines2.push(`${line === errorLine ? ">" : " "} ${line}: ${lines[i]}`); + } + return lines2.join("\n"); +} +function getEncodingComponents(colorSpace) { + const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); + const encodingPrimaries = ColorManagement.getPrimaries(colorSpace); + let gamutMapping; + if (workingPrimaries === encodingPrimaries) { + gamutMapping = ""; + } else if (workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries) { + gamutMapping = "LinearDisplayP3ToLinearSRGB"; + } else if (workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries) { + gamutMapping = "LinearSRGBToLinearDisplayP3"; + } + switch (colorSpace) { + case LinearSRGBColorSpace: + case LinearDisplayP3ColorSpace: + return [gamutMapping, "LinearTransferOETF"]; + case SRGBColorSpace: + case DisplayP3ColorSpace: + return [gamutMapping, "sRGBTransferOETF"]; + default: + console.warn("THREE.WebGLProgram: Unsupported color space:", colorSpace); + return [gamutMapping, "LinearTransferOETF"]; + } +} +function getShaderErrors(gl, shader, type) { + const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + const errors = gl.getShaderInfoLog(shader).trim(); + if (status && errors === "") return ""; + const errorMatches = /ERROR: 0:(\d+)/.exec(errors); + if (errorMatches) { + const errorLine = parseInt(errorMatches[1]); + return type.toUpperCase() + "\n\n" + errors + "\n\n" + handleSource(gl.getShaderSource(shader), errorLine); + } else { + return errors; + } +} +function getTexelEncodingFunction(functionName, colorSpace) { + const components = getEncodingComponents(colorSpace); + return `vec4 ${functionName}( vec4 value ) { return ${components[0]}( ${components[1]}( value ) ); }`; +} +function getToneMappingFunction(functionName, toneMapping) { + let toneMappingName; + switch (toneMapping) { + case LinearToneMapping: + toneMappingName = "Linear"; + break; + case ReinhardToneMapping: + toneMappingName = "Reinhard"; + break; + case CineonToneMapping: + toneMappingName = "OptimizedCineon"; + break; + case ACESFilmicToneMapping: + toneMappingName = "ACESFilmic"; + break; + case AgXToneMapping: + toneMappingName = "AgX"; + break; + case NeutralToneMapping: + toneMappingName = "Neutral"; + break; + case CustomToneMapping: + toneMappingName = "Custom"; + break; + default: + console.warn("THREE.WebGLProgram: Unsupported toneMapping:", toneMapping); + toneMappingName = "Linear"; + } + return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; +} +var _v0$1 = new Vector3(); +function getLuminanceFunction() { + ColorManagement.getLuminanceCoefficients(_v0$1); + const r = _v0$1.x.toFixed(4); + const g = _v0$1.y.toFixed(4); + const b = _v0$1.z.toFixed(4); + return [ + "float luminance( const in vec3 rgb ) {", + ` const vec3 weights = vec3( ${r}, ${g}, ${b} );`, + " return dot( weights, rgb );", + "}" + ].join("\n"); +} +function generateVertexExtensions(parameters) { + const chunks = [ + parameters.extensionClipCullDistance ? "#extension GL_ANGLE_clip_cull_distance : require" : "", + parameters.extensionMultiDraw ? "#extension GL_ANGLE_multi_draw : require" : "" + ]; + return chunks.filter(filterEmptyLine).join("\n"); +} +function generateDefines(defines) { + const chunks = []; + for (const name in defines) { + const value = defines[name]; + if (value === false) continue; + chunks.push("#define " + name + " " + value); + } + return chunks.join("\n"); +} +function fetchAttributeLocations(gl, program) { + const attributes = {}; + const n = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); + for (let i = 0; i < n; i++) { + const info = gl.getActiveAttrib(program, i); + const name = info.name; + let locationSize = 1; + if (info.type === gl.FLOAT_MAT2) locationSize = 2; + if (info.type === gl.FLOAT_MAT3) locationSize = 3; + if (info.type === gl.FLOAT_MAT4) locationSize = 4; + attributes[name] = { + type: info.type, + location: gl.getAttribLocation(program, name), + locationSize + }; + } + return attributes; +} +function filterEmptyLine(string) { + return string !== ""; +} +function replaceLightNums(string, parameters) { + const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps; + return string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows); +} +function replaceClippingPlaneNums(string, parameters) { + return string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection); +} +var includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; +function resolveIncludes(string) { + return string.replace(includePattern, includeReplacer); +} +var shaderChunkMap = /* @__PURE__ */ new Map(); +function includeReplacer(match, include) { + let string = ShaderChunk[include]; + if (string === void 0) { + const newInclude = shaderChunkMap.get(include); + if (newInclude !== void 0) { + string = ShaderChunk[newInclude]; + console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude); + } else { + throw new Error("Can not resolve #include <" + include + ">"); + } + } + return resolveIncludes(string); +} +var unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; +function unrollLoops(string) { + return string.replace(unrollLoopPattern, loopReplacer); +} +function loopReplacer(match, start, end, snippet) { + let string = ""; + for (let i = parseInt(start); i < parseInt(end); i++) { + string += snippet.replace(/\[\s*i\s*\]/g, "[ " + i + " ]").replace(/UNROLLED_LOOP_INDEX/g, i); + } + return string; +} +function generatePrecision(parameters) { + let precisionstring = `precision ${parameters.precision} float; + precision ${parameters.precision} int; + precision ${parameters.precision} sampler2D; + precision ${parameters.precision} samplerCube; + precision ${parameters.precision} sampler3D; + precision ${parameters.precision} sampler2DArray; + precision ${parameters.precision} sampler2DShadow; + precision ${parameters.precision} samplerCubeShadow; + precision ${parameters.precision} sampler2DArrayShadow; + precision ${parameters.precision} isampler2D; + precision ${parameters.precision} isampler3D; + precision ${parameters.precision} isamplerCube; + precision ${parameters.precision} isampler2DArray; + precision ${parameters.precision} usampler2D; + precision ${parameters.precision} usampler3D; + precision ${parameters.precision} usamplerCube; + precision ${parameters.precision} usampler2DArray; + `; + if (parameters.precision === "highp") { + precisionstring += "\n#define HIGH_PRECISION"; + } else if (parameters.precision === "mediump") { + precisionstring += "\n#define MEDIUM_PRECISION"; + } else if (parameters.precision === "lowp") { + precisionstring += "\n#define LOW_PRECISION"; + } + return precisionstring; +} +function generateShadowMapTypeDefine(parameters) { + let shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC"; + if (parameters.shadowMapType === PCFShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF"; + } else if (parameters.shadowMapType === PCFSoftShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT"; + } else if (parameters.shadowMapType === VSMShadowMap) { + shadowMapTypeDefine = "SHADOWMAP_TYPE_VSM"; + } + return shadowMapTypeDefine; +} +function generateEnvMapTypeDefine(parameters) { + let envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + if (parameters.envMap) { + switch (parameters.envMapMode) { + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = "ENVMAP_TYPE_CUBE"; + break; + case CubeUVReflectionMapping: + envMapTypeDefine = "ENVMAP_TYPE_CUBE_UV"; + break; + } + } + return envMapTypeDefine; +} +function generateEnvMapModeDefine(parameters) { + let envMapModeDefine = "ENVMAP_MODE_REFLECTION"; + if (parameters.envMap) { + switch (parameters.envMapMode) { + case CubeRefractionMapping: + envMapModeDefine = "ENVMAP_MODE_REFRACTION"; + break; + } + } + return envMapModeDefine; +} +function generateEnvMapBlendingDefine(parameters) { + let envMapBlendingDefine = "ENVMAP_BLENDING_NONE"; + if (parameters.envMap) { + switch (parameters.combine) { + case MultiplyOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY"; + break; + case MixOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_MIX"; + break; + case AddOperation: + envMapBlendingDefine = "ENVMAP_BLENDING_ADD"; + break; + } + } + return envMapBlendingDefine; +} +function generateCubeUVSize(parameters) { + const imageHeight = parameters.envMapCubeUVHeight; + if (imageHeight === null) return null; + const maxMip = Math.log2(imageHeight) - 2; + const texelHeight = 1 / imageHeight; + const texelWidth = 1 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16)); + return { texelWidth, texelHeight, maxMip }; +} +function WebGLProgram(renderer, cacheKey, parameters, bindingStates) { + const gl = renderer.getContext(); + const defines = parameters.defines; + let vertexShader = parameters.vertexShader; + let fragmentShader = parameters.fragmentShader; + const shadowMapTypeDefine = generateShadowMapTypeDefine(parameters); + const envMapTypeDefine = generateEnvMapTypeDefine(parameters); + const envMapModeDefine = generateEnvMapModeDefine(parameters); + const envMapBlendingDefine = generateEnvMapBlendingDefine(parameters); + const envMapCubeUVSize = generateCubeUVSize(parameters); + const customVertexExtensions = generateVertexExtensions(parameters); + const customDefines = generateDefines(defines); + const program = gl.createProgram(); + let prefixVertex, prefixFragment; + let versionString = parameters.glslVersion ? "#version " + parameters.glslVersion + "\n" : ""; + if (parameters.isRawShaderMaterial) { + prefixVertex = [ + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines + ].filter(filterEmptyLine).join("\n"); + if (prefixVertex.length > 0) { + prefixVertex += "\n"; + } + prefixFragment = [ + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines + ].filter(filterEmptyLine).join("\n"); + if (prefixFragment.length > 0) { + prefixFragment += "\n"; + } + } else { + prefixVertex = [ + generatePrecision(parameters), + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines, + parameters.extensionClipCullDistance ? "#define USE_CLIP_DISTANCE" : "", + parameters.batching ? "#define USE_BATCHING" : "", + parameters.batchingColor ? "#define USE_BATCHING_COLOR" : "", + parameters.instancing ? "#define USE_INSTANCING" : "", + parameters.instancingColor ? "#define USE_INSTANCING_COLOR" : "", + parameters.instancingMorph ? "#define USE_INSTANCING_MORPH" : "", + parameters.useFog && parameters.fog ? "#define USE_FOG" : "", + parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", + parameters.map ? "#define USE_MAP" : "", + parameters.envMap ? "#define USE_ENVMAP" : "", + parameters.envMap ? "#define " + envMapModeDefine : "", + parameters.lightMap ? "#define USE_LIGHTMAP" : "", + parameters.aoMap ? "#define USE_AOMAP" : "", + parameters.bumpMap ? "#define USE_BUMPMAP" : "", + parameters.normalMap ? "#define USE_NORMALMAP" : "", + parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", + parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", + parameters.displacementMap ? "#define USE_DISPLACEMENTMAP" : "", + parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", + parameters.anisotropy ? "#define USE_ANISOTROPY" : "", + parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", + parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", + parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", + parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", + parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", + parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", + parameters.specularMap ? "#define USE_SPECULARMAP" : "", + parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", + parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", + parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", + parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", + parameters.alphaMap ? "#define USE_ALPHAMAP" : "", + parameters.alphaHash ? "#define USE_ALPHAHASH" : "", + parameters.transmission ? "#define USE_TRANSMISSION" : "", + parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", + parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", + parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", + parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", + // + parameters.mapUv ? "#define MAP_UV " + parameters.mapUv : "", + parameters.alphaMapUv ? "#define ALPHAMAP_UV " + parameters.alphaMapUv : "", + parameters.lightMapUv ? "#define LIGHTMAP_UV " + parameters.lightMapUv : "", + parameters.aoMapUv ? "#define AOMAP_UV " + parameters.aoMapUv : "", + parameters.emissiveMapUv ? "#define EMISSIVEMAP_UV " + parameters.emissiveMapUv : "", + parameters.bumpMapUv ? "#define BUMPMAP_UV " + parameters.bumpMapUv : "", + parameters.normalMapUv ? "#define NORMALMAP_UV " + parameters.normalMapUv : "", + parameters.displacementMapUv ? "#define DISPLACEMENTMAP_UV " + parameters.displacementMapUv : "", + parameters.metalnessMapUv ? "#define METALNESSMAP_UV " + parameters.metalnessMapUv : "", + parameters.roughnessMapUv ? "#define ROUGHNESSMAP_UV " + parameters.roughnessMapUv : "", + parameters.anisotropyMapUv ? "#define ANISOTROPYMAP_UV " + parameters.anisotropyMapUv : "", + parameters.clearcoatMapUv ? "#define CLEARCOATMAP_UV " + parameters.clearcoatMapUv : "", + parameters.clearcoatNormalMapUv ? "#define CLEARCOAT_NORMALMAP_UV " + parameters.clearcoatNormalMapUv : "", + parameters.clearcoatRoughnessMapUv ? "#define CLEARCOAT_ROUGHNESSMAP_UV " + parameters.clearcoatRoughnessMapUv : "", + parameters.iridescenceMapUv ? "#define IRIDESCENCEMAP_UV " + parameters.iridescenceMapUv : "", + parameters.iridescenceThicknessMapUv ? "#define IRIDESCENCE_THICKNESSMAP_UV " + parameters.iridescenceThicknessMapUv : "", + parameters.sheenColorMapUv ? "#define SHEEN_COLORMAP_UV " + parameters.sheenColorMapUv : "", + parameters.sheenRoughnessMapUv ? "#define SHEEN_ROUGHNESSMAP_UV " + parameters.sheenRoughnessMapUv : "", + parameters.specularMapUv ? "#define SPECULARMAP_UV " + parameters.specularMapUv : "", + parameters.specularColorMapUv ? "#define SPECULAR_COLORMAP_UV " + parameters.specularColorMapUv : "", + parameters.specularIntensityMapUv ? "#define SPECULAR_INTENSITYMAP_UV " + parameters.specularIntensityMapUv : "", + parameters.transmissionMapUv ? "#define TRANSMISSIONMAP_UV " + parameters.transmissionMapUv : "", + parameters.thicknessMapUv ? "#define THICKNESSMAP_UV " + parameters.thicknessMapUv : "", + // + parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", + parameters.vertexColors ? "#define USE_COLOR" : "", + parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", + parameters.vertexUv1s ? "#define USE_UV1" : "", + parameters.vertexUv2s ? "#define USE_UV2" : "", + parameters.vertexUv3s ? "#define USE_UV3" : "", + parameters.pointsUvs ? "#define USE_POINTS_UV" : "", + parameters.flatShading ? "#define FLAT_SHADED" : "", + parameters.skinning ? "#define USE_SKINNING" : "", + parameters.morphTargets ? "#define USE_MORPHTARGETS" : "", + parameters.morphNormals && parameters.flatShading === false ? "#define USE_MORPHNORMALS" : "", + parameters.morphColors ? "#define USE_MORPHCOLORS" : "", + parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_TEXTURE_STRIDE " + parameters.morphTextureStride : "", + parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_COUNT " + parameters.morphTargetsCount : "", + parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", + parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", + parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", + parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", + parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", + parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", + "uniform mat4 modelMatrix;", + "uniform mat4 modelViewMatrix;", + "uniform mat4 projectionMatrix;", + "uniform mat4 viewMatrix;", + "uniform mat3 normalMatrix;", + "uniform vec3 cameraPosition;", + "uniform bool isOrthographic;", + "#ifdef USE_INSTANCING", + " attribute mat4 instanceMatrix;", + "#endif", + "#ifdef USE_INSTANCING_COLOR", + " attribute vec3 instanceColor;", + "#endif", + "#ifdef USE_INSTANCING_MORPH", + " uniform sampler2D morphTexture;", + "#endif", + "attribute vec3 position;", + "attribute vec3 normal;", + "attribute vec2 uv;", + "#ifdef USE_UV1", + " attribute vec2 uv1;", + "#endif", + "#ifdef USE_UV2", + " attribute vec2 uv2;", + "#endif", + "#ifdef USE_UV3", + " attribute vec2 uv3;", + "#endif", + "#ifdef USE_TANGENT", + " attribute vec4 tangent;", + "#endif", + "#if defined( USE_COLOR_ALPHA )", + " attribute vec4 color;", + "#elif defined( USE_COLOR )", + " attribute vec3 color;", + "#endif", + "#ifdef USE_SKINNING", + " attribute vec4 skinIndex;", + " attribute vec4 skinWeight;", + "#endif", + "\n" + ].filter(filterEmptyLine).join("\n"); + prefixFragment = [ + generatePrecision(parameters), + "#define SHADER_TYPE " + parameters.shaderType, + "#define SHADER_NAME " + parameters.shaderName, + customDefines, + parameters.useFog && parameters.fog ? "#define USE_FOG" : "", + parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", + parameters.alphaToCoverage ? "#define ALPHA_TO_COVERAGE" : "", + parameters.map ? "#define USE_MAP" : "", + parameters.matcap ? "#define USE_MATCAP" : "", + parameters.envMap ? "#define USE_ENVMAP" : "", + parameters.envMap ? "#define " + envMapTypeDefine : "", + parameters.envMap ? "#define " + envMapModeDefine : "", + parameters.envMap ? "#define " + envMapBlendingDefine : "", + envMapCubeUVSize ? "#define CUBEUV_TEXEL_WIDTH " + envMapCubeUVSize.texelWidth : "", + envMapCubeUVSize ? "#define CUBEUV_TEXEL_HEIGHT " + envMapCubeUVSize.texelHeight : "", + envMapCubeUVSize ? "#define CUBEUV_MAX_MIP " + envMapCubeUVSize.maxMip + ".0" : "", + parameters.lightMap ? "#define USE_LIGHTMAP" : "", + parameters.aoMap ? "#define USE_AOMAP" : "", + parameters.bumpMap ? "#define USE_BUMPMAP" : "", + parameters.normalMap ? "#define USE_NORMALMAP" : "", + parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", + parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", + parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", + parameters.anisotropy ? "#define USE_ANISOTROPY" : "", + parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", + parameters.clearcoat ? "#define USE_CLEARCOAT" : "", + parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", + parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", + parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", + parameters.dispersion ? "#define USE_DISPERSION" : "", + parameters.iridescence ? "#define USE_IRIDESCENCE" : "", + parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", + parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", + parameters.specularMap ? "#define USE_SPECULARMAP" : "", + parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", + parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", + parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", + parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", + parameters.alphaMap ? "#define USE_ALPHAMAP" : "", + parameters.alphaTest ? "#define USE_ALPHATEST" : "", + parameters.alphaHash ? "#define USE_ALPHAHASH" : "", + parameters.sheen ? "#define USE_SHEEN" : "", + parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", + parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", + parameters.transmission ? "#define USE_TRANSMISSION" : "", + parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", + parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", + parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", + parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? "#define USE_COLOR" : "", + parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", + parameters.vertexUv1s ? "#define USE_UV1" : "", + parameters.vertexUv2s ? "#define USE_UV2" : "", + parameters.vertexUv3s ? "#define USE_UV3" : "", + parameters.pointsUvs ? "#define USE_POINTS_UV" : "", + parameters.gradientMap ? "#define USE_GRADIENTMAP" : "", + parameters.flatShading ? "#define FLAT_SHADED" : "", + parameters.doubleSided ? "#define DOUBLE_SIDED" : "", + parameters.flipSided ? "#define FLIP_SIDED" : "", + parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", + parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", + parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", + parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", + parameters.decodeVideoTexture ? "#define DECODE_VIDEO_TEXTURE" : "", + parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", + "uniform mat4 viewMatrix;", + "uniform vec3 cameraPosition;", + "uniform bool isOrthographic;", + parameters.toneMapping !== NoToneMapping ? "#define TONE_MAPPING" : "", + parameters.toneMapping !== NoToneMapping ? ShaderChunk["tonemapping_pars_fragment"] : "", + // this code is required here because it is used by the toneMapping() function defined below + parameters.toneMapping !== NoToneMapping ? getToneMappingFunction("toneMapping", parameters.toneMapping) : "", + parameters.dithering ? "#define DITHERING" : "", + parameters.opaque ? "#define OPAQUE" : "", + ShaderChunk["colorspace_pars_fragment"], + // this code is required here because it is used by the various encoding/decoding function defined below + getTexelEncodingFunction("linearToOutputTexel", parameters.outputColorSpace), + getLuminanceFunction(), + parameters.useDepthPacking ? "#define DEPTH_PACKING " + parameters.depthPacking : "", + "\n" + ].filter(filterEmptyLine).join("\n"); + } + vertexShader = resolveIncludes(vertexShader); + vertexShader = replaceLightNums(vertexShader, parameters); + vertexShader = replaceClippingPlaneNums(vertexShader, parameters); + fragmentShader = resolveIncludes(fragmentShader); + fragmentShader = replaceLightNums(fragmentShader, parameters); + fragmentShader = replaceClippingPlaneNums(fragmentShader, parameters); + vertexShader = unrollLoops(vertexShader); + fragmentShader = unrollLoops(fragmentShader); + if (parameters.isRawShaderMaterial !== true) { + versionString = "#version 300 es\n"; + prefixVertex = [ + customVertexExtensions, + "#define attribute in", + "#define varying out", + "#define texture2D texture" + ].join("\n") + "\n" + prefixVertex; + prefixFragment = [ + "#define varying in", + parameters.glslVersion === GLSL3 ? "" : "layout(location = 0) out highp vec4 pc_fragColor;", + parameters.glslVersion === GLSL3 ? "" : "#define gl_FragColor pc_fragColor", + "#define gl_FragDepthEXT gl_FragDepth", + "#define texture2D texture", + "#define textureCube texture", + "#define texture2DProj textureProj", + "#define texture2DLodEXT textureLod", + "#define texture2DProjLodEXT textureProjLod", + "#define textureCubeLodEXT textureLod", + "#define texture2DGradEXT textureGrad", + "#define texture2DProjGradEXT textureProjGrad", + "#define textureCubeGradEXT textureGrad" + ].join("\n") + "\n" + prefixFragment; + } + const vertexGlsl = versionString + prefixVertex + vertexShader; + const fragmentGlsl = versionString + prefixFragment + fragmentShader; + const glVertexShader = WebGLShader(gl, gl.VERTEX_SHADER, vertexGlsl); + const glFragmentShader = WebGLShader(gl, gl.FRAGMENT_SHADER, fragmentGlsl); + gl.attachShader(program, glVertexShader); + gl.attachShader(program, glFragmentShader); + if (parameters.index0AttributeName !== void 0) { + gl.bindAttribLocation(program, 0, parameters.index0AttributeName); + } else if (parameters.morphTargets === true) { + gl.bindAttribLocation(program, 0, "position"); + } + gl.linkProgram(program); + function onFirstUse(self2) { + if (renderer.debug.checkShaderErrors) { + const programLog = gl.getProgramInfoLog(program).trim(); + const vertexLog = gl.getShaderInfoLog(glVertexShader).trim(); + const fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim(); + let runnable = true; + let haveDiagnostics = true; + if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { + runnable = false; + if (typeof renderer.debug.onShaderError === "function") { + renderer.debug.onShaderError(gl, program, glVertexShader, glFragmentShader); + } else { + const vertexErrors = getShaderErrors(gl, glVertexShader, "vertex"); + const fragmentErrors = getShaderErrors(gl, glFragmentShader, "fragment"); + console.error( + "THREE.WebGLProgram: Shader Error " + gl.getError() + " - VALIDATE_STATUS " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n\nMaterial Name: " + self2.name + "\nMaterial Type: " + self2.type + "\n\nProgram Info Log: " + programLog + "\n" + vertexErrors + "\n" + fragmentErrors + ); + } + } else if (programLog !== "") { + console.warn("THREE.WebGLProgram: Program Info Log:", programLog); + } else if (vertexLog === "" || fragmentLog === "") { + haveDiagnostics = false; + } + if (haveDiagnostics) { + self2.diagnostics = { + runnable, + programLog, + vertexShader: { + log: vertexLog, + prefix: prefixVertex + }, + fragmentShader: { + log: fragmentLog, + prefix: prefixFragment + } + }; + } + } + gl.deleteShader(glVertexShader); + gl.deleteShader(glFragmentShader); + cachedUniforms = new WebGLUniforms(gl, program); + cachedAttributes = fetchAttributeLocations(gl, program); + } + let cachedUniforms; + this.getUniforms = function() { + if (cachedUniforms === void 0) { + onFirstUse(this); + } + return cachedUniforms; + }; + let cachedAttributes; + this.getAttributes = function() { + if (cachedAttributes === void 0) { + onFirstUse(this); + } + return cachedAttributes; + }; + let programReady = parameters.rendererExtensionParallelShaderCompile === false; + this.isReady = function() { + if (programReady === false) { + programReady = gl.getProgramParameter(program, COMPLETION_STATUS_KHR); + } + return programReady; + }; + this.destroy = function() { + bindingStates.releaseStatesOfProgram(this); + gl.deleteProgram(program); + this.program = void 0; + }; + this.type = parameters.shaderType; + this.name = parameters.shaderName; + this.id = programIdCount++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + return this; +} +var _id$1 = 0; +var WebGLShaderCache = class { + constructor() { + this.shaderCache = /* @__PURE__ */ new Map(); + this.materialCache = /* @__PURE__ */ new Map(); + } + update(material) { + const vertexShader = material.vertexShader; + const fragmentShader = material.fragmentShader; + const vertexShaderStage = this._getShaderStage(vertexShader); + const fragmentShaderStage = this._getShaderStage(fragmentShader); + const materialShaders = this._getShaderCacheForMaterial(material); + if (materialShaders.has(vertexShaderStage) === false) { + materialShaders.add(vertexShaderStage); + vertexShaderStage.usedTimes++; + } + if (materialShaders.has(fragmentShaderStage) === false) { + materialShaders.add(fragmentShaderStage); + fragmentShaderStage.usedTimes++; + } + return this; + } + remove(material) { + const materialShaders = this.materialCache.get(material); + for (const shaderStage of materialShaders) { + shaderStage.usedTimes--; + if (shaderStage.usedTimes === 0) this.shaderCache.delete(shaderStage.code); + } + this.materialCache.delete(material); + return this; + } + getVertexShaderID(material) { + return this._getShaderStage(material.vertexShader).id; + } + getFragmentShaderID(material) { + return this._getShaderStage(material.fragmentShader).id; + } + dispose() { + this.shaderCache.clear(); + this.materialCache.clear(); + } + _getShaderCacheForMaterial(material) { + const cache = this.materialCache; + let set = cache.get(material); + if (set === void 0) { + set = /* @__PURE__ */ new Set(); + cache.set(material, set); + } + return set; + } + _getShaderStage(code) { + const cache = this.shaderCache; + let stage = cache.get(code); + if (stage === void 0) { + stage = new WebGLShaderStage(code); + cache.set(code, stage); + } + return stage; + } +}; +var WebGLShaderStage = class { + constructor(code) { + this.id = _id$1++; + this.code = code; + this.usedTimes = 0; + } +}; +function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping) { + const _programLayers = new Layers(); + const _customShaders = new WebGLShaderCache(); + const _activeChannels = /* @__PURE__ */ new Set(); + const programs = []; + const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures; + let precision = capabilities.precision; + const shaderIDs = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }; + function getChannel(value) { + _activeChannels.add(value); + if (value === 0) return "uv"; + return `uv${value}`; + } + function getParameters(material, lights, shadows, scene, object) { + const fog = scene.fog; + const geometry = object.geometry; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); + const envMapCubeUVHeight = !!envMap && envMap.mapping === CubeUVReflectionMapping ? envMap.image.height : null; + const shaderID = shaderIDs[material.type]; + if (material.precision !== null) { + precision = capabilities.getMaxPrecision(material.precision); + if (precision !== material.precision) { + console.warn("THREE.WebGLProgram.getParameters:", material.precision, "not supported, using", precision, "instead."); + } + } + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + let morphTextureStride = 0; + if (geometry.morphAttributes.position !== void 0) morphTextureStride = 1; + if (geometry.morphAttributes.normal !== void 0) morphTextureStride = 2; + if (geometry.morphAttributes.color !== void 0) morphTextureStride = 3; + let vertexShader, fragmentShader; + let customVertexShaderID, customFragmentShaderID; + if (shaderID) { + const shader = ShaderLib[shaderID]; + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + } else { + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + _customShaders.update(material); + customVertexShaderID = _customShaders.getVertexShaderID(material); + customFragmentShaderID = _customShaders.getFragmentShaderID(material); + } + const currentRenderTarget = renderer.getRenderTarget(); + const IS_INSTANCEDMESH = object.isInstancedMesh === true; + const IS_BATCHEDMESH = object.isBatchedMesh === true; + const HAS_MAP = !!material.map; + const HAS_MATCAP = !!material.matcap; + const HAS_ENVMAP = !!envMap; + const HAS_AOMAP = !!material.aoMap; + const HAS_LIGHTMAP = !!material.lightMap; + const HAS_BUMPMAP = !!material.bumpMap; + const HAS_NORMALMAP = !!material.normalMap; + const HAS_DISPLACEMENTMAP = !!material.displacementMap; + const HAS_EMISSIVEMAP = !!material.emissiveMap; + const HAS_METALNESSMAP = !!material.metalnessMap; + const HAS_ROUGHNESSMAP = !!material.roughnessMap; + const HAS_ANISOTROPY = material.anisotropy > 0; + const HAS_CLEARCOAT = material.clearcoat > 0; + const HAS_DISPERSION = material.dispersion > 0; + const HAS_IRIDESCENCE = material.iridescence > 0; + const HAS_SHEEN = material.sheen > 0; + const HAS_TRANSMISSION = material.transmission > 0; + const HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !!material.anisotropyMap; + const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !!material.clearcoatMap; + const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !!material.clearcoatNormalMap; + const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !!material.clearcoatRoughnessMap; + const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !!material.iridescenceMap; + const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !!material.iridescenceThicknessMap; + const HAS_SHEEN_COLORMAP = HAS_SHEEN && !!material.sheenColorMap; + const HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !!material.sheenRoughnessMap; + const HAS_SPECULARMAP = !!material.specularMap; + const HAS_SPECULAR_COLORMAP = !!material.specularColorMap; + const HAS_SPECULAR_INTENSITYMAP = !!material.specularIntensityMap; + const HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !!material.transmissionMap; + const HAS_THICKNESSMAP = HAS_TRANSMISSION && !!material.thicknessMap; + const HAS_GRADIENTMAP = !!material.gradientMap; + const HAS_ALPHAMAP = !!material.alphaMap; + const HAS_ALPHATEST = material.alphaTest > 0; + const HAS_ALPHAHASH = !!material.alphaHash; + const HAS_EXTENSIONS = !!material.extensions; + let toneMapping = NoToneMapping; + if (material.toneMapped) { + if (currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true) { + toneMapping = renderer.toneMapping; + } + } + const parameters = { + shaderID, + shaderType: material.type, + shaderName: material.name, + vertexShader, + fragmentShader, + defines: material.defines, + customVertexShaderID, + customFragmentShaderID, + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + precision, + batching: IS_BATCHEDMESH, + batchingColor: IS_BATCHEDMESH && object._colorsTexture !== null, + instancing: IS_INSTANCEDMESH, + instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null, + instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null, + supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES, + outputColorSpace: currentRenderTarget === null ? renderer.outputColorSpace : currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace, + alphaToCoverage: !!material.alphaToCoverage, + map: HAS_MAP, + matcap: HAS_MATCAP, + envMap: HAS_ENVMAP, + envMapMode: HAS_ENVMAP && envMap.mapping, + envMapCubeUVHeight, + aoMap: HAS_AOMAP, + lightMap: HAS_LIGHTMAP, + bumpMap: HAS_BUMPMAP, + normalMap: HAS_NORMALMAP, + displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP, + emissiveMap: HAS_EMISSIVEMAP, + normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, + normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, + metalnessMap: HAS_METALNESSMAP, + roughnessMap: HAS_ROUGHNESSMAP, + anisotropy: HAS_ANISOTROPY, + anisotropyMap: HAS_ANISOTROPYMAP, + clearcoat: HAS_CLEARCOAT, + clearcoatMap: HAS_CLEARCOATMAP, + clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP, + clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP, + dispersion: HAS_DISPERSION, + iridescence: HAS_IRIDESCENCE, + iridescenceMap: HAS_IRIDESCENCEMAP, + iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP, + sheen: HAS_SHEEN, + sheenColorMap: HAS_SHEEN_COLORMAP, + sheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP, + specularMap: HAS_SPECULARMAP, + specularColorMap: HAS_SPECULAR_COLORMAP, + specularIntensityMap: HAS_SPECULAR_INTENSITYMAP, + transmission: HAS_TRANSMISSION, + transmissionMap: HAS_TRANSMISSIONMAP, + thicknessMap: HAS_THICKNESSMAP, + gradientMap: HAS_GRADIENTMAP, + opaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false, + alphaMap: HAS_ALPHAMAP, + alphaTest: HAS_ALPHATEST, + alphaHash: HAS_ALPHAHASH, + combine: material.combine, + // + mapUv: HAS_MAP && getChannel(material.map.channel), + aoMapUv: HAS_AOMAP && getChannel(material.aoMap.channel), + lightMapUv: HAS_LIGHTMAP && getChannel(material.lightMap.channel), + bumpMapUv: HAS_BUMPMAP && getChannel(material.bumpMap.channel), + normalMapUv: HAS_NORMALMAP && getChannel(material.normalMap.channel), + displacementMapUv: HAS_DISPLACEMENTMAP && getChannel(material.displacementMap.channel), + emissiveMapUv: HAS_EMISSIVEMAP && getChannel(material.emissiveMap.channel), + metalnessMapUv: HAS_METALNESSMAP && getChannel(material.metalnessMap.channel), + roughnessMapUv: HAS_ROUGHNESSMAP && getChannel(material.roughnessMap.channel), + anisotropyMapUv: HAS_ANISOTROPYMAP && getChannel(material.anisotropyMap.channel), + clearcoatMapUv: HAS_CLEARCOATMAP && getChannel(material.clearcoatMap.channel), + clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel(material.clearcoatNormalMap.channel), + clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel(material.clearcoatRoughnessMap.channel), + iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel(material.iridescenceMap.channel), + iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel(material.iridescenceThicknessMap.channel), + sheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel(material.sheenColorMap.channel), + sheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel(material.sheenRoughnessMap.channel), + specularMapUv: HAS_SPECULARMAP && getChannel(material.specularMap.channel), + specularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel(material.specularColorMap.channel), + specularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel(material.specularIntensityMap.channel), + transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel(material.transmissionMap.channel), + thicknessMapUv: HAS_THICKNESSMAP && getChannel(material.thicknessMap.channel), + alphaMapUv: HAS_ALPHAMAP && getChannel(material.alphaMap.channel), + // + vertexTangents: !!geometry.attributes.tangent && (HAS_NORMALMAP || HAS_ANISOTROPY), + vertexColors: material.vertexColors, + vertexAlphas: material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4, + pointsUvs: object.isPoints === true && !!geometry.attributes.uv && (HAS_MAP || HAS_ALPHAMAP), + fog: !!fog, + useFog: material.fog === true, + fogExp2: !!fog && fog.isFogExp2, + flatShading: material.flatShading === true, + sizeAttenuation: material.sizeAttenuation === true, + logarithmicDepthBuffer, + skinning: object.isSkinnedMesh === true, + morphTargets: geometry.morphAttributes.position !== void 0, + morphNormals: geometry.morphAttributes.normal !== void 0, + morphColors: geometry.morphAttributes.color !== void 0, + morphTargetsCount, + morphTextureStride, + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numSpotLightMaps: lights.spotLightMap.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps, + numLightProbes: lights.numLightProbes, + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + dithering: material.dithering, + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + toneMapping, + decodeVideoTexture: HAS_MAP && material.map.isVideoTexture === true && ColorManagement.getTransfer(material.map.colorSpace) === SRGBTransfer, + premultipliedAlpha: material.premultipliedAlpha, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + useDepthPacking: material.depthPacking >= 0, + depthPacking: material.depthPacking || 0, + index0AttributeName: material.index0AttributeName, + extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has("WEBGL_clip_cull_distance"), + extensionMultiDraw: (HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH) && extensions.has("WEBGL_multi_draw"), + rendererExtensionParallelShaderCompile: extensions.has("KHR_parallel_shader_compile"), + customProgramCacheKey: material.customProgramCacheKey() + }; + parameters.vertexUv1s = _activeChannels.has(1); + parameters.vertexUv2s = _activeChannels.has(2); + parameters.vertexUv3s = _activeChannels.has(3); + _activeChannels.clear(); + return parameters; + } + function getProgramCacheKey(parameters) { + const array = []; + if (parameters.shaderID) { + array.push(parameters.shaderID); + } else { + array.push(parameters.customVertexShaderID); + array.push(parameters.customFragmentShaderID); + } + if (parameters.defines !== void 0) { + for (const name in parameters.defines) { + array.push(name); + array.push(parameters.defines[name]); + } + } + if (parameters.isRawShaderMaterial === false) { + getProgramCacheKeyParameters(array, parameters); + getProgramCacheKeyBooleans(array, parameters); + array.push(renderer.outputColorSpace); + } + array.push(parameters.customProgramCacheKey); + return array.join(); + } + function getProgramCacheKeyParameters(array, parameters) { + array.push(parameters.precision); + array.push(parameters.outputColorSpace); + array.push(parameters.envMapMode); + array.push(parameters.envMapCubeUVHeight); + array.push(parameters.mapUv); + array.push(parameters.alphaMapUv); + array.push(parameters.lightMapUv); + array.push(parameters.aoMapUv); + array.push(parameters.bumpMapUv); + array.push(parameters.normalMapUv); + array.push(parameters.displacementMapUv); + array.push(parameters.emissiveMapUv); + array.push(parameters.metalnessMapUv); + array.push(parameters.roughnessMapUv); + array.push(parameters.anisotropyMapUv); + array.push(parameters.clearcoatMapUv); + array.push(parameters.clearcoatNormalMapUv); + array.push(parameters.clearcoatRoughnessMapUv); + array.push(parameters.iridescenceMapUv); + array.push(parameters.iridescenceThicknessMapUv); + array.push(parameters.sheenColorMapUv); + array.push(parameters.sheenRoughnessMapUv); + array.push(parameters.specularMapUv); + array.push(parameters.specularColorMapUv); + array.push(parameters.specularIntensityMapUv); + array.push(parameters.transmissionMapUv); + array.push(parameters.thicknessMapUv); + array.push(parameters.combine); + array.push(parameters.fogExp2); + array.push(parameters.sizeAttenuation); + array.push(parameters.morphTargetsCount); + array.push(parameters.morphAttributeCount); + array.push(parameters.numDirLights); + array.push(parameters.numPointLights); + array.push(parameters.numSpotLights); + array.push(parameters.numSpotLightMaps); + array.push(parameters.numHemiLights); + array.push(parameters.numRectAreaLights); + array.push(parameters.numDirLightShadows); + array.push(parameters.numPointLightShadows); + array.push(parameters.numSpotLightShadows); + array.push(parameters.numSpotLightShadowsWithMaps); + array.push(parameters.numLightProbes); + array.push(parameters.shadowMapType); + array.push(parameters.toneMapping); + array.push(parameters.numClippingPlanes); + array.push(parameters.numClipIntersection); + array.push(parameters.depthPacking); + } + function getProgramCacheKeyBooleans(array, parameters) { + _programLayers.disableAll(); + if (parameters.supportsVertexTextures) + _programLayers.enable(0); + if (parameters.instancing) + _programLayers.enable(1); + if (parameters.instancingColor) + _programLayers.enable(2); + if (parameters.instancingMorph) + _programLayers.enable(3); + if (parameters.matcap) + _programLayers.enable(4); + if (parameters.envMap) + _programLayers.enable(5); + if (parameters.normalMapObjectSpace) + _programLayers.enable(6); + if (parameters.normalMapTangentSpace) + _programLayers.enable(7); + if (parameters.clearcoat) + _programLayers.enable(8); + if (parameters.iridescence) + _programLayers.enable(9); + if (parameters.alphaTest) + _programLayers.enable(10); + if (parameters.vertexColors) + _programLayers.enable(11); + if (parameters.vertexAlphas) + _programLayers.enable(12); + if (parameters.vertexUv1s) + _programLayers.enable(13); + if (parameters.vertexUv2s) + _programLayers.enable(14); + if (parameters.vertexUv3s) + _programLayers.enable(15); + if (parameters.vertexTangents) + _programLayers.enable(16); + if (parameters.anisotropy) + _programLayers.enable(17); + if (parameters.alphaHash) + _programLayers.enable(18); + if (parameters.batching) + _programLayers.enable(19); + if (parameters.dispersion) + _programLayers.enable(20); + if (parameters.batchingColor) + _programLayers.enable(21); + array.push(_programLayers.mask); + _programLayers.disableAll(); + if (parameters.fog) + _programLayers.enable(0); + if (parameters.useFog) + _programLayers.enable(1); + if (parameters.flatShading) + _programLayers.enable(2); + if (parameters.logarithmicDepthBuffer) + _programLayers.enable(3); + if (parameters.skinning) + _programLayers.enable(4); + if (parameters.morphTargets) + _programLayers.enable(5); + if (parameters.morphNormals) + _programLayers.enable(6); + if (parameters.morphColors) + _programLayers.enable(7); + if (parameters.premultipliedAlpha) + _programLayers.enable(8); + if (parameters.shadowMapEnabled) + _programLayers.enable(9); + if (parameters.doubleSided) + _programLayers.enable(10); + if (parameters.flipSided) + _programLayers.enable(11); + if (parameters.useDepthPacking) + _programLayers.enable(12); + if (parameters.dithering) + _programLayers.enable(13); + if (parameters.transmission) + _programLayers.enable(14); + if (parameters.sheen) + _programLayers.enable(15); + if (parameters.opaque) + _programLayers.enable(16); + if (parameters.pointsUvs) + _programLayers.enable(17); + if (parameters.decodeVideoTexture) + _programLayers.enable(18); + if (parameters.alphaToCoverage) + _programLayers.enable(19); + array.push(_programLayers.mask); + } + function getUniforms(material) { + const shaderID = shaderIDs[material.type]; + let uniforms; + if (shaderID) { + const shader = ShaderLib[shaderID]; + uniforms = UniformsUtils.clone(shader.uniforms); + } else { + uniforms = material.uniforms; + } + return uniforms; + } + function acquireProgram(parameters, cacheKey) { + let program; + for (let p = 0, pl = programs.length; p < pl; p++) { + const preexistingProgram = programs[p]; + if (preexistingProgram.cacheKey === cacheKey) { + program = preexistingProgram; + ++program.usedTimes; + break; + } + } + if (program === void 0) { + program = new WebGLProgram(renderer, cacheKey, parameters, bindingStates); + programs.push(program); + } + return program; + } + function releaseProgram(program) { + if (--program.usedTimes === 0) { + const i = programs.indexOf(program); + programs[i] = programs[programs.length - 1]; + programs.pop(); + program.destroy(); + } + } + function releaseShaderCache(material) { + _customShaders.remove(material); + } + function dispose() { + _customShaders.dispose(); + } + return { + getParameters, + getProgramCacheKey, + getUniforms, + acquireProgram, + releaseProgram, + releaseShaderCache, + // Exposed for resource monitoring & error feedback via renderer.info: + programs, + dispose + }; +} +function WebGLProperties() { + let properties = /* @__PURE__ */ new WeakMap(); + function get(object) { + let map = properties.get(object); + if (map === void 0) { + map = {}; + properties.set(object, map); + } + return map; + } + function remove(object) { + properties.delete(object); + } + function update(object, key, value) { + properties.get(object)[key] = value; + } + function dispose() { + properties = /* @__PURE__ */ new WeakMap(); + } + return { + get, + remove, + update, + dispose + }; +} +function painterSortStable(a, b) { + if (a.groupOrder !== b.groupOrder) { + return a.groupOrder - b.groupOrder; + } else if (a.renderOrder !== b.renderOrder) { + return a.renderOrder - b.renderOrder; + } else if (a.material.id !== b.material.id) { + return a.material.id - b.material.id; + } else if (a.z !== b.z) { + return a.z - b.z; + } else { + return a.id - b.id; + } +} +function reversePainterSortStable(a, b) { + if (a.groupOrder !== b.groupOrder) { + return a.groupOrder - b.groupOrder; + } else if (a.renderOrder !== b.renderOrder) { + return a.renderOrder - b.renderOrder; + } else if (a.z !== b.z) { + return b.z - a.z; + } else { + return a.id - b.id; + } +} +function WebGLRenderList() { + const renderItems = []; + let renderItemsIndex = 0; + const opaque = []; + const transmissive = []; + const transparent = []; + function init() { + renderItemsIndex = 0; + opaque.length = 0; + transmissive.length = 0; + transparent.length = 0; + } + function getNextRenderItem(object, geometry, material, groupOrder, z, group) { + let renderItem = renderItems[renderItemsIndex]; + if (renderItem === void 0) { + renderItem = { + id: object.id, + object, + geometry, + material, + groupOrder, + renderOrder: object.renderOrder, + z, + group + }; + renderItems[renderItemsIndex] = renderItem; + } else { + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + } + renderItemsIndex++; + return renderItem; + } + function push(object, geometry, material, groupOrder, z, group) { + const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); + if (material.transmission > 0) { + transmissive.push(renderItem); + } else if (material.transparent === true) { + transparent.push(renderItem); + } else { + opaque.push(renderItem); + } + } + function unshift(object, geometry, material, groupOrder, z, group) { + const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); + if (material.transmission > 0) { + transmissive.unshift(renderItem); + } else if (material.transparent === true) { + transparent.unshift(renderItem); + } else { + opaque.unshift(renderItem); + } + } + function sort(customOpaqueSort, customTransparentSort) { + if (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable); + if (transmissive.length > 1) transmissive.sort(customTransparentSort || reversePainterSortStable); + if (transparent.length > 1) transparent.sort(customTransparentSort || reversePainterSortStable); + } + function finish() { + for (let i = renderItemsIndex, il = renderItems.length; i < il; i++) { + const renderItem = renderItems[i]; + if (renderItem.id === null) break; + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.group = null; + } + } + return { + opaque, + transmissive, + transparent, + init, + push, + unshift, + finish, + sort + }; +} +function WebGLRenderLists() { + let lists = /* @__PURE__ */ new WeakMap(); + function get(scene, renderCallDepth) { + const listArray = lists.get(scene); + let list; + if (listArray === void 0) { + list = new WebGLRenderList(); + lists.set(scene, [list]); + } else { + if (renderCallDepth >= listArray.length) { + list = new WebGLRenderList(); + listArray.push(list); + } else { + list = listArray[renderCallDepth]; + } + } + return list; + } + function dispose() { + lists = /* @__PURE__ */ new WeakMap(); + } + return { + get, + dispose + }; +} +function UniformsCache() { + const lights = {}; + return { + get: function(light) { + if (lights[light.id] !== void 0) { + return lights[light.id]; + } + let uniforms; + switch (light.type) { + case "DirectionalLight": + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + case "SpotLight": + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + case "RectAreaLight": + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + } + lights[light.id] = uniforms; + return uniforms; + } + }; +} +function ShadowUniformsCache() { + const lights = {}; + return { + get: function(light) { + if (lights[light.id] !== void 0) { + return lights[light.id]; + } + let uniforms; + switch (light.type) { + case "DirectionalLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + case "SpotLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + case "PointLight": + uniforms = { + shadowIntensity: 1, + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1e3 + }; + break; + } + lights[light.id] = uniforms; + return uniforms; + } + }; +} +var nextVersion = 0; +function shadowCastingAndTexturingLightsFirst(lightA, lightB) { + return (lightB.castShadow ? 2 : 0) - (lightA.castShadow ? 2 : 0) + (lightB.map ? 1 : 0) - (lightA.map ? 1 : 0); +} +function WebGLLights(extensions) { + const cache = new UniformsCache(); + const shadowCache = ShadowUniformsCache(); + const state = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + numSpotMaps: -1, + numLightProbes: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotLightMap: [], + spotShadow: [], + spotShadowMap: [], + spotLightMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + numSpotLightShadowsWithMaps: 0, + numLightProbes: 0 + }; + for (let i = 0; i < 9; i++) state.probe.push(new Vector3()); + const vector3 = new Vector3(); + const matrix4 = new Matrix4(); + const matrix42 = new Matrix4(); + function setup(lights) { + let r = 0, g = 0, b = 0; + for (let i = 0; i < 9; i++) state.probe[i].set(0, 0, 0); + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + let numDirectionalShadows = 0; + let numPointShadows = 0; + let numSpotShadows = 0; + let numSpotMaps = 0; + let numSpotShadowsWithMaps = 0; + let numLightProbes = 0; + lights.sort(shadowCastingAndTexturingLightsFirst); + for (let i = 0, l = lights.length; i < l; i++) { + const light = lights[i]; + const color = light.color; + const intensity = light.intensity; + const distance = light.distance; + const shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null; + if (light.isAmbientLight) { + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + } else if (light.isLightProbe) { + for (let j = 0; j < 9; j++) { + state.probe[j].addScaledVector(light.sh.coefficients[j], intensity); + } + numLightProbes++; + } else if (light.isDirectionalLight) { + const uniforms = cache.get(light); + uniforms.color.copy(light.color).multiplyScalar(light.intensity); + if (light.castShadow) { + const shadow = light.shadow; + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + state.directionalShadow[directionalLength] = shadowUniforms; + state.directionalShadowMap[directionalLength] = shadowMap; + state.directionalShadowMatrix[directionalLength] = light.shadow.matrix; + numDirectionalShadows++; + } + state.directional[directionalLength] = uniforms; + directionalLength++; + } else if (light.isSpotLight) { + const uniforms = cache.get(light); + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.color.copy(color).multiplyScalar(intensity); + uniforms.distance = distance; + uniforms.coneCos = Math.cos(light.angle); + uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra)); + uniforms.decay = light.decay; + state.spot[spotLength] = uniforms; + const shadow = light.shadow; + if (light.map) { + state.spotLightMap[numSpotMaps] = light.map; + numSpotMaps++; + shadow.updateMatrices(light); + if (light.castShadow) numSpotShadowsWithMaps++; + } + state.spotLightMatrix[spotLength] = shadow.matrix; + if (light.castShadow) { + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + state.spotShadow[spotLength] = shadowUniforms; + state.spotShadowMap[spotLength] = shadowMap; + numSpotShadows++; + } + spotLength++; + } else if (light.isRectAreaLight) { + const uniforms = cache.get(light); + uniforms.color.copy(color).multiplyScalar(intensity); + uniforms.halfWidth.set(light.width * 0.5, 0, 0); + uniforms.halfHeight.set(0, light.height * 0.5, 0); + state.rectArea[rectAreaLength] = uniforms; + rectAreaLength++; + } else if (light.isPointLight) { + const uniforms = cache.get(light); + uniforms.color.copy(light.color).multiplyScalar(light.intensity); + uniforms.distance = light.distance; + uniforms.decay = light.decay; + if (light.castShadow) { + const shadow = light.shadow; + const shadowUniforms = shadowCache.get(light); + shadowUniforms.shadowIntensity = shadow.intensity; + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + shadowUniforms.shadowCameraNear = shadow.camera.near; + shadowUniforms.shadowCameraFar = shadow.camera.far; + state.pointShadow[pointLength] = shadowUniforms; + state.pointShadowMap[pointLength] = shadowMap; + state.pointShadowMatrix[pointLength] = light.shadow.matrix; + numPointShadows++; + } + state.point[pointLength] = uniforms; + pointLength++; + } else if (light.isHemisphereLight) { + const uniforms = cache.get(light); + uniforms.skyColor.copy(light.color).multiplyScalar(intensity); + uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity); + state.hemi[hemiLength] = uniforms; + hemiLength++; + } + } + if (rectAreaLength > 0) { + if (extensions.has("OES_texture_float_linear") === true) { + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + } else { + state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; + state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; + } + } + state.ambient[0] = r; + state.ambient[1] = g; + state.ambient[2] = b; + const hash = state.hash; + if (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows || hash.numSpotMaps !== numSpotMaps || hash.numLightProbes !== numLightProbes) { + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps; + state.spotLightMap.length = numSpotMaps; + state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps; + state.numLightProbes = numLightProbes; + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + hash.numSpotMaps = numSpotMaps; + hash.numLightProbes = numLightProbes; + state.version = nextVersion++; + } + } + function setupView(lights, camera) { + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + const viewMatrix = camera.matrixWorldInverse; + for (let i = 0, l = lights.length; i < l; i++) { + const light = lights[i]; + if (light.isDirectionalLight) { + const uniforms = state.directional[directionalLength]; + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + vector3.setFromMatrixPosition(light.target.matrixWorld); + uniforms.direction.sub(vector3); + uniforms.direction.transformDirection(viewMatrix); + directionalLength++; + } else if (light.isSpotLight) { + const uniforms = state.spot[spotLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + vector3.setFromMatrixPosition(light.target.matrixWorld); + uniforms.direction.sub(vector3); + uniforms.direction.transformDirection(viewMatrix); + spotLength++; + } else if (light.isRectAreaLight) { + const uniforms = state.rectArea[rectAreaLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + matrix42.identity(); + matrix4.copy(light.matrixWorld); + matrix4.premultiply(viewMatrix); + matrix42.extractRotation(matrix4); + uniforms.halfWidth.set(light.width * 0.5, 0, 0); + uniforms.halfHeight.set(0, light.height * 0.5, 0); + uniforms.halfWidth.applyMatrix4(matrix42); + uniforms.halfHeight.applyMatrix4(matrix42); + rectAreaLength++; + } else if (light.isPointLight) { + const uniforms = state.point[pointLength]; + uniforms.position.setFromMatrixPosition(light.matrixWorld); + uniforms.position.applyMatrix4(viewMatrix); + pointLength++; + } else if (light.isHemisphereLight) { + const uniforms = state.hemi[hemiLength]; + uniforms.direction.setFromMatrixPosition(light.matrixWorld); + uniforms.direction.transformDirection(viewMatrix); + hemiLength++; + } + } + } + return { + setup, + setupView, + state + }; +} +function WebGLRenderState(extensions) { + const lights = new WebGLLights(extensions); + const lightsArray = []; + const shadowsArray = []; + function init(camera) { + state.camera = camera; + lightsArray.length = 0; + shadowsArray.length = 0; + } + function pushLight(light) { + lightsArray.push(light); + } + function pushShadow(shadowLight) { + shadowsArray.push(shadowLight); + } + function setupLights() { + lights.setup(lightsArray); + } + function setupLightsView(camera) { + lights.setupView(lightsArray, camera); + } + const state = { + lightsArray, + shadowsArray, + camera: null, + lights, + transmissionRenderTarget: {} + }; + return { + init, + state, + setupLights, + setupLightsView, + pushLight, + pushShadow + }; +} +function WebGLRenderStates(extensions) { + let renderStates = /* @__PURE__ */ new WeakMap(); + function get(scene, renderCallDepth = 0) { + const renderStateArray = renderStates.get(scene); + let renderState; + if (renderStateArray === void 0) { + renderState = new WebGLRenderState(extensions); + renderStates.set(scene, [renderState]); + } else { + if (renderCallDepth >= renderStateArray.length) { + renderState = new WebGLRenderState(extensions); + renderStateArray.push(renderState); + } else { + renderState = renderStateArray[renderCallDepth]; + } + } + return renderState; + } + function dispose() { + renderStates = /* @__PURE__ */ new WeakMap(); + } + return { + get, + dispose + }; +} +var MeshDepthMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshDepthMaterial = true; + this.type = "MeshDepthMaterial"; + this.depthPacking = BasicDepthPacking; + this.map = null; + this.alphaMap = null; + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.depthPacking = source.depthPacking; + this.map = source.map; + this.alphaMap = source.alphaMap; + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + return this; + } +}; +var MeshDistanceMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshDistanceMaterial = true; + this.type = "MeshDistanceMaterial"; + this.map = null; + this.alphaMap = null; + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + return this; + } +}; +var vertex = "void main() {\n gl_Position = vec4( position, 1.0 );\n}"; +var fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n const float samples = float( VSM_SAMPLES );\n float mean = 0.0;\n float squared_mean = 0.0;\n float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n float uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n for ( float i = 0.0; i < samples; i ++ ) {\n float uvOffset = uvStart + i * uvStride;\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean / samples;\n squared_mean = squared_mean / samples;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; +function WebGLShadowMap(renderer, objects, capabilities) { + let _frustum2 = new Frustum(); + const _shadowMapSize = new Vector2(), _viewportSize = new Vector2(), _viewport = new Vector4(), _depthMaterial = new MeshDepthMaterial({ depthPacking: RGBADepthPacking }), _distanceMaterial = new MeshDistanceMaterial(), _materialCache = {}, _maxTextureSize = capabilities.maxTextureSize; + const shadowSide = { [FrontSide]: BackSide, [BackSide]: FrontSide, [DoubleSide]: DoubleSide }; + const shadowMaterialVertical = new ShaderMaterial({ + defines: { + VSM_SAMPLES: 8 + }, + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4 } + }, + vertexShader: vertex, + fragmentShader: fragment + }); + const shadowMaterialHorizontal = shadowMaterialVertical.clone(); + shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; + const fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + "position", + new BufferAttribute( + new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), + 3 + ) + ); + const fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical); + const scope = this; + this.enabled = false; + this.autoUpdate = true; + this.needsUpdate = false; + this.type = PCFShadowMap; + let _previousType = this.type; + this.render = function(lights, scene, camera) { + if (scope.enabled === false) return; + if (scope.autoUpdate === false && scope.needsUpdate === false) return; + if (lights.length === 0) return; + const currentRenderTarget = renderer.getRenderTarget(); + const activeCubeFace = renderer.getActiveCubeFace(); + const activeMipmapLevel = renderer.getActiveMipmapLevel(); + const _state = renderer.state; + _state.setBlending(NoBlending); + _state.buffers.color.setClear(1, 1, 1, 1); + _state.buffers.depth.setTest(true); + _state.setScissorTest(false); + const toVSM = _previousType !== VSMShadowMap && this.type === VSMShadowMap; + const fromVSM = _previousType === VSMShadowMap && this.type !== VSMShadowMap; + for (let i = 0, il = lights.length; i < il; i++) { + const light = lights[i]; + const shadow = light.shadow; + if (shadow === void 0) { + console.warn("THREE.WebGLShadowMap:", light, "has no shadow."); + continue; + } + if (shadow.autoUpdate === false && shadow.needsUpdate === false) continue; + _shadowMapSize.copy(shadow.mapSize); + const shadowFrameExtents = shadow.getFrameExtents(); + _shadowMapSize.multiply(shadowFrameExtents); + _viewportSize.copy(shadow.mapSize); + if (_shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize) { + if (_shadowMapSize.x > _maxTextureSize) { + _viewportSize.x = Math.floor(_maxTextureSize / shadowFrameExtents.x); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + } + if (_shadowMapSize.y > _maxTextureSize) { + _viewportSize.y = Math.floor(_maxTextureSize / shadowFrameExtents.y); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + } + } + if (shadow.map === null || toVSM === true || fromVSM === true) { + const pars = this.type !== VSMShadowMap ? { minFilter: NearestFilter, magFilter: NearestFilter } : {}; + if (shadow.map !== null) { + shadow.map.dispose(); + } + shadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars); + shadow.map.texture.name = light.name + ".shadowMap"; + shadow.camera.updateProjectionMatrix(); + } + renderer.setRenderTarget(shadow.map); + renderer.clear(); + const viewportCount = shadow.getViewportCount(); + for (let vp = 0; vp < viewportCount; vp++) { + const viewport = shadow.getViewport(vp); + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + _state.viewport(_viewport); + shadow.updateMatrices(light, vp); + _frustum2 = shadow.getFrustum(); + renderObject(scene, camera, shadow.camera, light, this.type); + } + if (shadow.isPointLightShadow !== true && this.type === VSMShadowMap) { + VSMPass(shadow, camera); + } + shadow.needsUpdate = false; + } + _previousType = this.type; + scope.needsUpdate = false; + renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel); + }; + function VSMPass(shadow, camera) { + const geometry = objects.update(fullScreenMesh); + if (shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples) { + shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples; + shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples; + shadowMaterialVertical.needsUpdate = true; + shadowMaterialHorizontal.needsUpdate = true; + } + if (shadow.mapPass === null) { + shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y); + } + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + renderer.setRenderTarget(shadow.mapPass); + renderer.clear(); + renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null); + shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; + renderer.setRenderTarget(shadow.map); + renderer.clear(); + renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null); + } + function getDepthMaterial(object, material, light, type) { + let result = null; + const customMaterial = light.isPointLight === true ? object.customDistanceMaterial : object.customDepthMaterial; + if (customMaterial !== void 0) { + result = customMaterial; + } else { + result = light.isPointLight === true ? _distanceMaterial : _depthMaterial; + if (renderer.localClippingEnabled && material.clipShadows === true && Array.isArray(material.clippingPlanes) && material.clippingPlanes.length !== 0 || material.displacementMap && material.displacementScale !== 0 || material.alphaMap && material.alphaTest > 0 || material.map && material.alphaTest > 0) { + const keyA = result.uuid, keyB = material.uuid; + let materialsForVariant = _materialCache[keyA]; + if (materialsForVariant === void 0) { + materialsForVariant = {}; + _materialCache[keyA] = materialsForVariant; + } + let cachedMaterial = materialsForVariant[keyB]; + if (cachedMaterial === void 0) { + cachedMaterial = result.clone(); + materialsForVariant[keyB] = cachedMaterial; + material.addEventListener("dispose", onMaterialDispose); + } + result = cachedMaterial; + } + } + result.visible = material.visible; + result.wireframe = material.wireframe; + if (type === VSMShadowMap) { + result.side = material.shadowSide !== null ? material.shadowSide : material.side; + } else { + result.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side]; + } + result.alphaMap = material.alphaMap; + result.alphaTest = material.alphaTest; + result.map = material.map; + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + result.displacementMap = material.displacementMap; + result.displacementScale = material.displacementScale; + result.displacementBias = material.displacementBias; + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + if (light.isPointLight === true && result.isMeshDistanceMaterial === true) { + const materialProperties = renderer.properties.get(result); + materialProperties.light = light; + } + return result; + } + function renderObject(object, camera, shadowCamera, light, type) { + if (object.visible === false) return; + const visible = object.layers.test(camera.layers); + if (visible && (object.isMesh || object.isLine || object.isPoints)) { + if ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum2.intersectsObject(object))) { + object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld); + const geometry = objects.update(object); + const material = object.material; + if (Array.isArray(material)) { + const groups = geometry.groups; + for (let k = 0, kl = groups.length; k < kl; k++) { + const group = groups[k]; + const groupMaterial = material[group.materialIndex]; + if (groupMaterial && groupMaterial.visible) { + const depthMaterial = getDepthMaterial(object, groupMaterial, light, type); + object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); + renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group); + object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); + } + } + } else if (material.visible) { + const depthMaterial = getDepthMaterial(object, material, light, type); + object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); + renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null); + object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); + } + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + renderObject(children[i], camera, shadowCamera, light, type); + } + } + function onMaterialDispose(event) { + const material = event.target; + material.removeEventListener("dispose", onMaterialDispose); + for (const id in _materialCache) { + const cache = _materialCache[id]; + const uuid = event.target.uuid; + if (uuid in cache) { + const shadowMaterial = cache[uuid]; + shadowMaterial.dispose(); + delete cache[uuid]; + } + } + } +} +function WebGLState(gl) { + function ColorBuffer() { + let locked = false; + const color = new Vector4(); + let currentColorMask = null; + const currentColorClear = new Vector4(0, 0, 0, 0); + return { + setMask: function(colorMask) { + if (currentColorMask !== colorMask && !locked) { + gl.colorMask(colorMask, colorMask, colorMask, colorMask); + currentColorMask = colorMask; + } + }, + setLocked: function(lock) { + locked = lock; + }, + setClear: function(r, g, b, a, premultipliedAlpha) { + if (premultipliedAlpha === true) { + r *= a; + g *= a; + b *= a; + } + color.set(r, g, b, a); + if (currentColorClear.equals(color) === false) { + gl.clearColor(r, g, b, a); + currentColorClear.copy(color); + } + }, + reset: function() { + locked = false; + currentColorMask = null; + currentColorClear.set(-1, 0, 0, 0); + } + }; + } + function DepthBuffer() { + let locked = false; + let currentDepthMask = null; + let currentDepthFunc = null; + let currentDepthClear = null; + return { + setTest: function(depthTest) { + if (depthTest) { + enable(gl.DEPTH_TEST); + } else { + disable(gl.DEPTH_TEST); + } + }, + setMask: function(depthMask) { + if (currentDepthMask !== depthMask && !locked) { + gl.depthMask(depthMask); + currentDepthMask = depthMask; + } + }, + setFunc: function(depthFunc) { + if (currentDepthFunc !== depthFunc) { + switch (depthFunc) { + case NeverDepth: + gl.depthFunc(gl.NEVER); + break; + case AlwaysDepth: + gl.depthFunc(gl.ALWAYS); + break; + case LessDepth: + gl.depthFunc(gl.LESS); + break; + case LessEqualDepth: + gl.depthFunc(gl.LEQUAL); + break; + case EqualDepth: + gl.depthFunc(gl.EQUAL); + break; + case GreaterEqualDepth: + gl.depthFunc(gl.GEQUAL); + break; + case GreaterDepth: + gl.depthFunc(gl.GREATER); + break; + case NotEqualDepth: + gl.depthFunc(gl.NOTEQUAL); + break; + default: + gl.depthFunc(gl.LEQUAL); + } + currentDepthFunc = depthFunc; + } + }, + setLocked: function(lock) { + locked = lock; + }, + setClear: function(depth) { + if (currentDepthClear !== depth) { + gl.clearDepth(depth); + currentDepthClear = depth; + } + }, + reset: function() { + locked = false; + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + } + }; + } + function StencilBuffer() { + let locked = false; + let currentStencilMask = null; + let currentStencilFunc = null; + let currentStencilRef = null; + let currentStencilFuncMask = null; + let currentStencilFail = null; + let currentStencilZFail = null; + let currentStencilZPass = null; + let currentStencilClear = null; + return { + setTest: function(stencilTest) { + if (!locked) { + if (stencilTest) { + enable(gl.STENCIL_TEST); + } else { + disable(gl.STENCIL_TEST); + } + } + }, + setMask: function(stencilMask) { + if (currentStencilMask !== stencilMask && !locked) { + gl.stencilMask(stencilMask); + currentStencilMask = stencilMask; + } + }, + setFunc: function(stencilFunc, stencilRef, stencilMask) { + if (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) { + gl.stencilFunc(stencilFunc, stencilRef, stencilMask); + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + } + }, + setOp: function(stencilFail, stencilZFail, stencilZPass) { + if (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) { + gl.stencilOp(stencilFail, stencilZFail, stencilZPass); + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + } + }, + setLocked: function(lock) { + locked = lock; + }, + setClear: function(stencil) { + if (currentStencilClear !== stencil) { + gl.clearStencil(stencil); + currentStencilClear = stencil; + } + }, + reset: function() { + locked = false; + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + } + }; + } + const colorBuffer = new ColorBuffer(); + const depthBuffer = new DepthBuffer(); + const stencilBuffer = new StencilBuffer(); + const uboBindings = /* @__PURE__ */ new WeakMap(); + const uboProgramMap = /* @__PURE__ */ new WeakMap(); + let enabledCapabilities = {}; + let currentBoundFramebuffers = {}; + let currentDrawbuffers = /* @__PURE__ */ new WeakMap(); + let defaultDrawbuffers = []; + let currentProgram = null; + let currentBlendingEnabled = false; + let currentBlending = null; + let currentBlendEquation = null; + let currentBlendSrc = null; + let currentBlendDst = null; + let currentBlendEquationAlpha = null; + let currentBlendSrcAlpha = null; + let currentBlendDstAlpha = null; + let currentBlendColor = new Color(0, 0, 0); + let currentBlendAlpha = 0; + let currentPremultipledAlpha = false; + let currentFlipSided = null; + let currentCullFace = null; + let currentLineWidth = null; + let currentPolygonOffsetFactor = null; + let currentPolygonOffsetUnits = null; + const maxTextures = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS); + let lineWidthAvailable = false; + let version = 0; + const glVersion = gl.getParameter(gl.VERSION); + if (glVersion.indexOf("WebGL") !== -1) { + version = parseFloat(/^WebGL (\d)/.exec(glVersion)[1]); + lineWidthAvailable = version >= 1; + } else if (glVersion.indexOf("OpenGL ES") !== -1) { + version = parseFloat(/^OpenGL ES (\d)/.exec(glVersion)[1]); + lineWidthAvailable = version >= 2; + } + let currentTextureSlot = null; + let currentBoundTextures = {}; + const scissorParam = gl.getParameter(gl.SCISSOR_BOX); + const viewportParam = gl.getParameter(gl.VIEWPORT); + const currentScissor = new Vector4().fromArray(scissorParam); + const currentViewport = new Vector4().fromArray(viewportParam); + function createTexture(type, target, count, dimensions) { + const data = new Uint8Array(4); + const texture = gl.createTexture(); + gl.bindTexture(type, texture); + gl.texParameteri(type, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(type, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + for (let i = 0; i < count; i++) { + if (type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY) { + gl.texImage3D(target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + } else { + gl.texImage2D(target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); + } + } + return texture; + } + const emptyTextures = {}; + emptyTextures[gl.TEXTURE_2D] = createTexture(gl.TEXTURE_2D, gl.TEXTURE_2D, 1); + emptyTextures[gl.TEXTURE_CUBE_MAP] = createTexture(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6); + emptyTextures[gl.TEXTURE_2D_ARRAY] = createTexture(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1); + emptyTextures[gl.TEXTURE_3D] = createTexture(gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1); + colorBuffer.setClear(0, 0, 0, 1); + depthBuffer.setClear(1); + stencilBuffer.setClear(0); + enable(gl.DEPTH_TEST); + depthBuffer.setFunc(LessEqualDepth); + setFlipSided(false); + setCullFace(CullFaceBack); + enable(gl.CULL_FACE); + setBlending(NoBlending); + function enable(id) { + if (enabledCapabilities[id] !== true) { + gl.enable(id); + enabledCapabilities[id] = true; + } + } + function disable(id) { + if (enabledCapabilities[id] !== false) { + gl.disable(id); + enabledCapabilities[id] = false; + } + } + function bindFramebuffer(target, framebuffer) { + if (currentBoundFramebuffers[target] !== framebuffer) { + gl.bindFramebuffer(target, framebuffer); + currentBoundFramebuffers[target] = framebuffer; + if (target === gl.DRAW_FRAMEBUFFER) { + currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer; + } + if (target === gl.FRAMEBUFFER) { + currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer; + } + return true; + } + return false; + } + function drawBuffers(renderTarget, framebuffer) { + let drawBuffers2 = defaultDrawbuffers; + let needsUpdate = false; + if (renderTarget) { + drawBuffers2 = currentDrawbuffers.get(framebuffer); + if (drawBuffers2 === void 0) { + drawBuffers2 = []; + currentDrawbuffers.set(framebuffer, drawBuffers2); + } + const textures = renderTarget.textures; + if (drawBuffers2.length !== textures.length || drawBuffers2[0] !== gl.COLOR_ATTACHMENT0) { + for (let i = 0, il = textures.length; i < il; i++) { + drawBuffers2[i] = gl.COLOR_ATTACHMENT0 + i; + } + drawBuffers2.length = textures.length; + needsUpdate = true; + } + } else { + if (drawBuffers2[0] !== gl.BACK) { + drawBuffers2[0] = gl.BACK; + needsUpdate = true; + } + } + if (needsUpdate) { + gl.drawBuffers(drawBuffers2); + } + } + function useProgram(program) { + if (currentProgram !== program) { + gl.useProgram(program); + currentProgram = program; + return true; + } + return false; + } + const equationToGL = { + [AddEquation]: gl.FUNC_ADD, + [SubtractEquation]: gl.FUNC_SUBTRACT, + [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT + }; + equationToGL[MinEquation] = gl.MIN; + equationToGL[MaxEquation] = gl.MAX; + const factorToGL = { + [ZeroFactor]: gl.ZERO, + [OneFactor]: gl.ONE, + [SrcColorFactor]: gl.SRC_COLOR, + [SrcAlphaFactor]: gl.SRC_ALPHA, + [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE, + [DstColorFactor]: gl.DST_COLOR, + [DstAlphaFactor]: gl.DST_ALPHA, + [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR, + [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA, + [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR, + [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA, + [ConstantColorFactor]: gl.CONSTANT_COLOR, + [OneMinusConstantColorFactor]: gl.ONE_MINUS_CONSTANT_COLOR, + [ConstantAlphaFactor]: gl.CONSTANT_ALPHA, + [OneMinusConstantAlphaFactor]: gl.ONE_MINUS_CONSTANT_ALPHA + }; + function setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha) { + if (blending === NoBlending) { + if (currentBlendingEnabled === true) { + disable(gl.BLEND); + currentBlendingEnabled = false; + } + return; + } + if (currentBlendingEnabled === false) { + enable(gl.BLEND); + currentBlendingEnabled = true; + } + if (blending !== CustomBlending) { + if (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) { + if (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) { + gl.blendEquation(gl.FUNC_ADD); + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + } + if (premultipliedAlpha) { + switch (blending) { + case NormalBlending: + gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + break; + case AdditiveBlending: + gl.blendFunc(gl.ONE, gl.ONE); + break; + case SubtractiveBlending: + gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); + break; + case MultiplyBlending: + gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", blending); + break; + } + } else { + switch (blending) { + case NormalBlending: + gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + break; + case AdditiveBlending: + gl.blendFunc(gl.SRC_ALPHA, gl.ONE); + break; + case SubtractiveBlending: + gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); + break; + case MultiplyBlending: + gl.blendFunc(gl.ZERO, gl.SRC_COLOR); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", blending); + break; + } + } + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentBlendColor.set(0, 0, 0); + currentBlendAlpha = 0; + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + } + return; + } + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + if (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) { + gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]); + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + } + if (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) { + gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]); + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + } + if (blendColor.equals(currentBlendColor) === false || blendAlpha !== currentBlendAlpha) { + gl.blendColor(blendColor.r, blendColor.g, blendColor.b, blendAlpha); + currentBlendColor.copy(blendColor); + currentBlendAlpha = blendAlpha; + } + currentBlending = blending; + currentPremultipledAlpha = false; + } + function setMaterial(material, frontFaceCW) { + material.side === DoubleSide ? disable(gl.CULL_FACE) : enable(gl.CULL_FACE); + let flipSided = material.side === BackSide; + if (frontFaceCW) flipSided = !flipSided; + setFlipSided(flipSided); + material.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha); + depthBuffer.setFunc(material.depthFunc); + depthBuffer.setTest(material.depthTest); + depthBuffer.setMask(material.depthWrite); + colorBuffer.setMask(material.colorWrite); + const stencilWrite = material.stencilWrite; + stencilBuffer.setTest(stencilWrite); + if (stencilWrite) { + stencilBuffer.setMask(material.stencilWriteMask); + stencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask); + stencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass); + } + setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits); + material.alphaToCoverage === true ? enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : disable(gl.SAMPLE_ALPHA_TO_COVERAGE); + } + function setFlipSided(flipSided) { + if (currentFlipSided !== flipSided) { + if (flipSided) { + gl.frontFace(gl.CW); + } else { + gl.frontFace(gl.CCW); + } + currentFlipSided = flipSided; + } + } + function setCullFace(cullFace) { + if (cullFace !== CullFaceNone) { + enable(gl.CULL_FACE); + if (cullFace !== currentCullFace) { + if (cullFace === CullFaceBack) { + gl.cullFace(gl.BACK); + } else if (cullFace === CullFaceFront) { + gl.cullFace(gl.FRONT); + } else { + gl.cullFace(gl.FRONT_AND_BACK); + } + } + } else { + disable(gl.CULL_FACE); + } + currentCullFace = cullFace; + } + function setLineWidth(width) { + if (width !== currentLineWidth) { + if (lineWidthAvailable) gl.lineWidth(width); + currentLineWidth = width; + } + } + function setPolygonOffset(polygonOffset, factor, units) { + if (polygonOffset) { + enable(gl.POLYGON_OFFSET_FILL); + if (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) { + gl.polygonOffset(factor, units); + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + } + } else { + disable(gl.POLYGON_OFFSET_FILL); + } + } + function setScissorTest(scissorTest) { + if (scissorTest) { + enable(gl.SCISSOR_TEST); + } else { + disable(gl.SCISSOR_TEST); + } + } + function activeTexture(webglSlot) { + if (webglSlot === void 0) webglSlot = gl.TEXTURE0 + maxTextures - 1; + if (currentTextureSlot !== webglSlot) { + gl.activeTexture(webglSlot); + currentTextureSlot = webglSlot; + } + } + function bindTexture(webglType, webglTexture, webglSlot) { + if (webglSlot === void 0) { + if (currentTextureSlot === null) { + webglSlot = gl.TEXTURE0 + maxTextures - 1; + } else { + webglSlot = currentTextureSlot; + } + } + let boundTexture = currentBoundTextures[webglSlot]; + if (boundTexture === void 0) { + boundTexture = { type: void 0, texture: void 0 }; + currentBoundTextures[webglSlot] = boundTexture; + } + if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) { + if (currentTextureSlot !== webglSlot) { + gl.activeTexture(webglSlot); + currentTextureSlot = webglSlot; + } + gl.bindTexture(webglType, webglTexture || emptyTextures[webglType]); + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + } + } + function unbindTexture() { + const boundTexture = currentBoundTextures[currentTextureSlot]; + if (boundTexture !== void 0 && boundTexture.type !== void 0) { + gl.bindTexture(boundTexture.type, null); + boundTexture.type = void 0; + boundTexture.texture = void 0; + } + } + function compressedTexImage2D() { + try { + gl.compressedTexImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function compressedTexImage3D() { + try { + gl.compressedTexImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texSubImage2D() { + try { + gl.texSubImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texSubImage3D() { + try { + gl.texSubImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function compressedTexSubImage2D() { + try { + gl.compressedTexSubImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function compressedTexSubImage3D() { + try { + gl.compressedTexSubImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texStorage2D() { + try { + gl.texStorage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texStorage3D() { + try { + gl.texStorage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texImage2D() { + try { + gl.texImage2D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function texImage3D() { + try { + gl.texImage3D.apply(gl, arguments); + } catch (error) { + console.error("THREE.WebGLState:", error); + } + } + function scissor(scissor2) { + if (currentScissor.equals(scissor2) === false) { + gl.scissor(scissor2.x, scissor2.y, scissor2.z, scissor2.w); + currentScissor.copy(scissor2); + } + } + function viewport(viewport2) { + if (currentViewport.equals(viewport2) === false) { + gl.viewport(viewport2.x, viewport2.y, viewport2.z, viewport2.w); + currentViewport.copy(viewport2); + } + } + function updateUBOMapping(uniformsGroup, program) { + let mapping = uboProgramMap.get(program); + if (mapping === void 0) { + mapping = /* @__PURE__ */ new WeakMap(); + uboProgramMap.set(program, mapping); + } + let blockIndex = mapping.get(uniformsGroup); + if (blockIndex === void 0) { + blockIndex = gl.getUniformBlockIndex(program, uniformsGroup.name); + mapping.set(uniformsGroup, blockIndex); + } + } + function uniformBlockBinding(uniformsGroup, program) { + const mapping = uboProgramMap.get(program); + const blockIndex = mapping.get(uniformsGroup); + if (uboBindings.get(program) !== blockIndex) { + gl.uniformBlockBinding(program, blockIndex, uniformsGroup.__bindingPointIndex); + uboBindings.set(program, blockIndex); + } + } + function reset() { + gl.disable(gl.BLEND); + gl.disable(gl.CULL_FACE); + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.POLYGON_OFFSET_FILL); + gl.disable(gl.SCISSOR_TEST); + gl.disable(gl.STENCIL_TEST); + gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE); + gl.blendEquation(gl.FUNC_ADD); + gl.blendFunc(gl.ONE, gl.ZERO); + gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); + gl.blendColor(0, 0, 0, 0); + gl.colorMask(true, true, true, true); + gl.clearColor(0, 0, 0, 0); + gl.depthMask(true); + gl.depthFunc(gl.LESS); + gl.clearDepth(1); + gl.stencilMask(4294967295); + gl.stencilFunc(gl.ALWAYS, 0, 4294967295); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + gl.clearStencil(0); + gl.cullFace(gl.BACK); + gl.frontFace(gl.CCW); + gl.polygonOffset(0, 0); + gl.activeTexture(gl.TEXTURE0); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null); + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); + gl.useProgram(null); + gl.lineWidth(1); + gl.scissor(0, 0, gl.canvas.width, gl.canvas.height); + gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); + enabledCapabilities = {}; + currentTextureSlot = null; + currentBoundTextures = {}; + currentBoundFramebuffers = {}; + currentDrawbuffers = /* @__PURE__ */ new WeakMap(); + defaultDrawbuffers = []; + currentProgram = null; + currentBlendingEnabled = false; + currentBlending = null; + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentBlendColor = new Color(0, 0, 0); + currentBlendAlpha = 0; + currentPremultipledAlpha = false; + currentFlipSided = null; + currentCullFace = null; + currentLineWidth = null; + currentPolygonOffsetFactor = null; + currentPolygonOffsetUnits = null; + currentScissor.set(0, 0, gl.canvas.width, gl.canvas.height); + currentViewport.set(0, 0, gl.canvas.width, gl.canvas.height); + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + } + return { + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + enable, + disable, + bindFramebuffer, + drawBuffers, + useProgram, + setBlending, + setMaterial, + setFlipSided, + setCullFace, + setLineWidth, + setPolygonOffset, + setScissorTest, + activeTexture, + bindTexture, + unbindTexture, + compressedTexImage2D, + compressedTexImage3D, + texImage2D, + texImage3D, + updateUBOMapping, + uniformBlockBinding, + texStorage2D, + texStorage3D, + texSubImage2D, + texSubImage3D, + compressedTexSubImage2D, + compressedTexSubImage3D, + scissor, + viewport, + reset + }; +} +function contain(texture, aspect2) { + const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; + if (imageAspect > aspect2) { + texture.repeat.x = 1; + texture.repeat.y = imageAspect / aspect2; + texture.offset.x = 0; + texture.offset.y = (1 - texture.repeat.y) / 2; + } else { + texture.repeat.x = aspect2 / imageAspect; + texture.repeat.y = 1; + texture.offset.x = (1 - texture.repeat.x) / 2; + texture.offset.y = 0; + } + return texture; +} +function cover(texture, aspect2) { + const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; + if (imageAspect > aspect2) { + texture.repeat.x = aspect2 / imageAspect; + texture.repeat.y = 1; + texture.offset.x = (1 - texture.repeat.x) / 2; + texture.offset.y = 0; + } else { + texture.repeat.x = 1; + texture.repeat.y = imageAspect / aspect2; + texture.offset.x = 0; + texture.offset.y = (1 - texture.repeat.y) / 2; + } + return texture; +} +function fill(texture) { + texture.repeat.x = 1; + texture.repeat.y = 1; + texture.offset.x = 0; + texture.offset.y = 0; + return texture; +} +function getByteLength(width, height, format, type) { + const typeByteLength = getTextureTypeByteLength(type); + switch (format) { + case AlphaFormat: + return width * height; + case LuminanceFormat: + return width * height; + case LuminanceAlphaFormat: + return width * height * 2; + case RedFormat: + return width * height / typeByteLength.components * typeByteLength.byteLength; + case RedIntegerFormat: + return width * height / typeByteLength.components * typeByteLength.byteLength; + case RGFormat: + return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; + case RGIntegerFormat: + return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; + case RGBFormat: + return width * height * 3 / typeByteLength.components * typeByteLength.byteLength; + case RGBAFormat: + return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; + case RGBAIntegerFormat: + return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; + case RGB_S3TC_DXT1_Format: + case RGBA_S3TC_DXT1_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; + case RGBA_S3TC_DXT3_Format: + case RGBA_S3TC_DXT5_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGB_PVRTC_2BPPV1_Format: + case RGBA_PVRTC_2BPPV1_Format: + return Math.max(width, 16) * Math.max(height, 8) / 4; + case RGB_PVRTC_4BPPV1_Format: + case RGBA_PVRTC_4BPPV1_Format: + return Math.max(width, 8) * Math.max(height, 8) / 2; + case RGB_ETC1_Format: + case RGB_ETC2_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; + case RGBA_ETC2_EAC_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_4x4_Format: + return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_5x4_Format: + return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16; + case RGBA_ASTC_5x5_Format: + return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_6x5_Format: + return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_6x6_Format: + return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_8x5_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_8x6_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_8x8_Format: + return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16; + case RGBA_ASTC_10x5_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16; + case RGBA_ASTC_10x6_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16; + case RGBA_ASTC_10x8_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16; + case RGBA_ASTC_10x10_Format: + return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16; + case RGBA_ASTC_12x10_Format: + return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16; + case RGBA_ASTC_12x12_Format: + return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16; + case RGBA_BPTC_Format: + case RGB_BPTC_SIGNED_Format: + case RGB_BPTC_UNSIGNED_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; + case RED_RGTC1_Format: + case SIGNED_RED_RGTC1_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 8; + case RED_GREEN_RGTC2_Format: + case SIGNED_RED_GREEN_RGTC2_Format: + return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; + } + throw new Error( + `Unable to determine texture byte length for ${format} format.` + ); +} +function getTextureTypeByteLength(type) { + switch (type) { + case UnsignedByteType: + case ByteType: + return { byteLength: 1, components: 1 }; + case UnsignedShortType: + case ShortType: + case HalfFloatType: + return { byteLength: 2, components: 1 }; + case UnsignedShort4444Type: + case UnsignedShort5551Type: + return { byteLength: 2, components: 4 }; + case UnsignedIntType: + case IntType: + case FloatType: + return { byteLength: 4, components: 1 }; + case UnsignedInt5999Type: + return { byteLength: 4, components: 3 }; + } + throw new Error(`Unknown texture type ${type}.`); +} +var TextureUtils = { + contain, + cover, + fill, + getByteLength +}; +function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) { + const multisampledRTTExt = extensions.has("WEBGL_multisampled_render_to_texture") ? extensions.get("WEBGL_multisampled_render_to_texture") : null; + const supportsInvalidateFramebuffer = typeof navigator === "undefined" ? false : /OculusBrowser/g.test(navigator.userAgent); + const _imageDimensions = new Vector2(); + const _videoTextures = /* @__PURE__ */ new WeakMap(); + let _canvas2; + const _sources = /* @__PURE__ */ new WeakMap(); + let useOffscreenCanvas = false; + try { + useOffscreenCanvas = typeof OffscreenCanvas !== "undefined" && new OffscreenCanvas(1, 1).getContext("2d") !== null; + } catch (err) { + } + function createCanvas(width, height) { + return useOffscreenCanvas ? ( + // eslint-disable-next-line compat/compat + new OffscreenCanvas(width, height) + ) : createElementNS("canvas"); + } + function resizeImage(image, needsNewCanvas, maxSize) { + let scale = 1; + const dimensions = getDimensions(image); + if (dimensions.width > maxSize || dimensions.height > maxSize) { + scale = maxSize / Math.max(dimensions.width, dimensions.height); + } + if (scale < 1) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap || typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { + const width = Math.floor(scale * dimensions.width); + const height = Math.floor(scale * dimensions.height); + if (_canvas2 === void 0) _canvas2 = createCanvas(width, height); + const canvas = needsNewCanvas ? createCanvas(width, height) : _canvas2; + canvas.width = width; + canvas.height = height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, width, height); + console.warn("THREE.WebGLRenderer: Texture has been resized from (" + dimensions.width + "x" + dimensions.height + ") to (" + width + "x" + height + ")."); + return canvas; + } else { + if ("data" in image) { + console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + dimensions.width + "x" + dimensions.height + ")."); + } + return image; + } + } + return image; + } + function textureNeedsGenerateMipmaps(texture) { + return texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + } + function generateMipmap(target) { + _gl.generateMipmap(target); + } + function getInternalFormat(internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false) { + if (internalFormatName !== null) { + if (_gl[internalFormatName] !== void 0) return _gl[internalFormatName]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + internalFormatName + "'"); + } + let internalFormat = glFormat; + if (glFormat === _gl.RED) { + if (glType === _gl.FLOAT) internalFormat = _gl.R32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.R16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8; + } + if (glFormat === _gl.RED_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.R16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.R32UI; + if (glType === _gl.BYTE) internalFormat = _gl.R8I; + if (glType === _gl.SHORT) internalFormat = _gl.R16I; + if (glType === _gl.INT) internalFormat = _gl.R32I; + } + if (glFormat === _gl.RG) { + if (glType === _gl.FLOAT) internalFormat = _gl.RG32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RG16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8; + } + if (glFormat === _gl.RG_INTEGER) { + if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8UI; + if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.RG16UI; + if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.RG32UI; + if (glType === _gl.BYTE) internalFormat = _gl.RG8I; + if (glType === _gl.SHORT) internalFormat = _gl.RG16I; + if (glType === _gl.INT) internalFormat = _gl.RG32I; + } + if (glFormat === _gl.RGB) { + if (glType === _gl.UNSIGNED_INT_5_9_9_9_REV) internalFormat = _gl.RGB9_E5; + } + if (glFormat === _gl.RGBA) { + const transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer(colorSpace); + if (glType === _gl.FLOAT) internalFormat = _gl.RGBA32F; + if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RGBA16F; + if (glType === _gl.UNSIGNED_BYTE) internalFormat = transfer === SRGBTransfer ? _gl.SRGB8_ALPHA8 : _gl.RGBA8; + if (glType === _gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = _gl.RGBA4; + if (glType === _gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = _gl.RGB5_A1; + } + if (internalFormat === _gl.R16F || internalFormat === _gl.R32F || internalFormat === _gl.RG16F || internalFormat === _gl.RG32F || internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F) { + extensions.get("EXT_color_buffer_float"); + } + return internalFormat; + } + function getInternalDepthFormat(useStencil, depthType) { + let glInternalFormat; + if (useStencil) { + if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { + glInternalFormat = _gl.DEPTH24_STENCIL8; + } else if (depthType === FloatType) { + glInternalFormat = _gl.DEPTH32F_STENCIL8; + } else if (depthType === UnsignedShortType) { + glInternalFormat = _gl.DEPTH24_STENCIL8; + console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment."); + } + } else { + if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { + glInternalFormat = _gl.DEPTH_COMPONENT24; + } else if (depthType === FloatType) { + glInternalFormat = _gl.DEPTH_COMPONENT32F; + } else if (depthType === UnsignedShortType) { + glInternalFormat = _gl.DEPTH_COMPONENT16; + } + } + return glInternalFormat; + } + function getMipLevels(texture, image) { + if (textureNeedsGenerateMipmaps(texture) === true || texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) { + return Math.log2(Math.max(image.width, image.height)) + 1; + } else if (texture.mipmaps !== void 0 && texture.mipmaps.length > 0) { + return texture.mipmaps.length; + } else if (texture.isCompressedTexture && Array.isArray(texture.image)) { + return image.mipmaps.length; + } else { + return 1; + } + } + function onTextureDispose(event) { + const texture = event.target; + texture.removeEventListener("dispose", onTextureDispose); + deallocateTexture(texture); + if (texture.isVideoTexture) { + _videoTextures.delete(texture); + } + } + function onRenderTargetDispose(event) { + const renderTarget = event.target; + renderTarget.removeEventListener("dispose", onRenderTargetDispose); + deallocateRenderTarget(renderTarget); + } + function deallocateTexture(texture) { + const textureProperties = properties.get(texture); + if (textureProperties.__webglInit === void 0) return; + const source = texture.source; + const webglTextures = _sources.get(source); + if (webglTextures) { + const webglTexture = webglTextures[textureProperties.__cacheKey]; + webglTexture.usedTimes--; + if (webglTexture.usedTimes === 0) { + deleteTexture(texture); + } + if (Object.keys(webglTextures).length === 0) { + _sources.delete(source); + } + } + properties.remove(texture); + } + function deleteTexture(texture) { + const textureProperties = properties.get(texture); + _gl.deleteTexture(textureProperties.__webglTexture); + const source = texture.source; + const webglTextures = _sources.get(source); + delete webglTextures[textureProperties.__cacheKey]; + info.memory.textures--; + } + function deallocateRenderTarget(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + if (renderTarget.depthTexture) { + renderTarget.depthTexture.dispose(); + } + if (renderTarget.isWebGLCubeRenderTarget) { + for (let i = 0; i < 6; i++) { + if (Array.isArray(renderTargetProperties.__webglFramebuffer[i])) { + for (let level = 0; level < renderTargetProperties.__webglFramebuffer[i].length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i][level]); + } else { + _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]); + } + if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]); + } + } else { + if (Array.isArray(renderTargetProperties.__webglFramebuffer)) { + for (let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[level]); + } else { + _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer); + } + if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer); + if (renderTargetProperties.__webglMultisampledFramebuffer) _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer); + if (renderTargetProperties.__webglColorRenderbuffer) { + for (let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i++) { + if (renderTargetProperties.__webglColorRenderbuffer[i]) _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer[i]); + } + } + if (renderTargetProperties.__webglDepthRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer); + } + const textures = renderTarget.textures; + for (let i = 0, il = textures.length; i < il; i++) { + const attachmentProperties = properties.get(textures[i]); + if (attachmentProperties.__webglTexture) { + _gl.deleteTexture(attachmentProperties.__webglTexture); + info.memory.textures--; + } + properties.remove(textures[i]); + } + properties.remove(renderTarget); + } + let textureUnits = 0; + function resetTextureUnits() { + textureUnits = 0; + } + function allocateTextureUnit() { + const textureUnit = textureUnits; + if (textureUnit >= capabilities.maxTextures) { + console.warn("THREE.WebGLTextures: Trying to use " + textureUnit + " texture units while this GPU supports only " + capabilities.maxTextures); + } + textureUnits += 1; + return textureUnit; + } + function getTextureCacheKey(texture) { + const array = []; + array.push(texture.wrapS); + array.push(texture.wrapT); + array.push(texture.wrapR || 0); + array.push(texture.magFilter); + array.push(texture.minFilter); + array.push(texture.anisotropy); + array.push(texture.internalFormat); + array.push(texture.format); + array.push(texture.type); + array.push(texture.generateMipmaps); + array.push(texture.premultiplyAlpha); + array.push(texture.flipY); + array.push(texture.unpackAlignment); + array.push(texture.colorSpace); + return array.join(); + } + function setTexture2D(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.isVideoTexture) updateVideoTexture(texture); + if (texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version) { + const image = texture.image; + if (image === null) { + console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found."); + } else if (image.complete === false) { + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete"); + } else { + uploadTexture(textureProperties, texture, slot); + return; + } + } + state.bindTexture(_gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + function setTexture2DArray(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + function setTexture3D(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + function setTextureCube(texture, slot) { + const textureProperties = properties.get(texture); + if (texture.version > 0 && textureProperties.__version !== texture.version) { + uploadCubeTexture(textureProperties, texture, slot); + return; + } + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + } + const wrappingToGL = { + [RepeatWrapping]: _gl.REPEAT, + [ClampToEdgeWrapping]: _gl.CLAMP_TO_EDGE, + [MirroredRepeatWrapping]: _gl.MIRRORED_REPEAT + }; + const filterToGL = { + [NearestFilter]: _gl.NEAREST, + [NearestMipmapNearestFilter]: _gl.NEAREST_MIPMAP_NEAREST, + [NearestMipmapLinearFilter]: _gl.NEAREST_MIPMAP_LINEAR, + [LinearFilter]: _gl.LINEAR, + [LinearMipmapNearestFilter]: _gl.LINEAR_MIPMAP_NEAREST, + [LinearMipmapLinearFilter]: _gl.LINEAR_MIPMAP_LINEAR + }; + const compareToGL = { + [NeverCompare]: _gl.NEVER, + [AlwaysCompare]: _gl.ALWAYS, + [LessCompare]: _gl.LESS, + [LessEqualCompare]: _gl.LEQUAL, + [EqualCompare]: _gl.EQUAL, + [GreaterEqualCompare]: _gl.GEQUAL, + [GreaterCompare]: _gl.GREATER, + [NotEqualCompare]: _gl.NOTEQUAL + }; + function setTextureParameters(textureType, texture) { + if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false && (texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter || texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter)) { + console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."); + } + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]); + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]); + if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) { + _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]); + } + _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]); + _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]); + if (texture.compareFunction) { + _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE); + _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[texture.compareFunction]); + } + if (extensions.has("EXT_texture_filter_anisotropic") === true) { + if (texture.magFilter === NearestFilter) return; + if (texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter) return; + if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false) return; + if (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) { + const extension = extensions.get("EXT_texture_filter_anisotropic"); + _gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy())); + properties.get(texture).__currentAnisotropy = texture.anisotropy; + } + } + } + function initTexture(textureProperties, texture) { + let forceUpload = false; + if (textureProperties.__webglInit === void 0) { + textureProperties.__webglInit = true; + texture.addEventListener("dispose", onTextureDispose); + } + const source = texture.source; + let webglTextures = _sources.get(source); + if (webglTextures === void 0) { + webglTextures = {}; + _sources.set(source, webglTextures); + } + const textureCacheKey = getTextureCacheKey(texture); + if (textureCacheKey !== textureProperties.__cacheKey) { + if (webglTextures[textureCacheKey] === void 0) { + webglTextures[textureCacheKey] = { + texture: _gl.createTexture(), + usedTimes: 0 + }; + info.memory.textures++; + forceUpload = true; + } + webglTextures[textureCacheKey].usedTimes++; + const webglTexture = webglTextures[textureProperties.__cacheKey]; + if (webglTexture !== void 0) { + webglTextures[textureProperties.__cacheKey].usedTimes--; + if (webglTexture.usedTimes === 0) { + deleteTexture(texture); + } + } + textureProperties.__cacheKey = textureCacheKey; + textureProperties.__webglTexture = webglTextures[textureCacheKey].texture; + } + return forceUpload; + } + function uploadTexture(textureProperties, texture, slot) { + let textureType = _gl.TEXTURE_2D; + if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) textureType = _gl.TEXTURE_2D_ARRAY; + if (texture.isData3DTexture) textureType = _gl.TEXTURE_3D; + const forceUpload = initTexture(textureProperties, texture); + const source = texture.source; + state.bindTexture(textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + const sourceProperties = properties.get(source); + if (source.version !== sourceProperties.__version || forceUpload === true) { + state.activeTexture(_gl.TEXTURE0 + slot); + const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); + const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); + const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); + _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); + let image = resizeImage(texture.image, false, capabilities.maxTextureSize); + image = verifyColorSpace(texture, image); + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + let glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture); + setTextureParameters(textureType, texture); + let mipmap; + const mipmaps = texture.mipmaps; + const useTexStorage = texture.isVideoTexture !== true; + const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; + const dataReady = source.dataReady; + const levels = getMipLevels(texture, image); + if (texture.isDepthTexture) { + glInternalFormat = getInternalDepthFormat(texture.format === DepthStencilFormat, texture.type); + if (allocateMemory) { + if (useTexStorage) { + state.texStorage2D(_gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height); + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null); + } + } + } else if (texture.isDataTexture) { + if (mipmaps.length > 0) { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + texture.generateMipmaps = false; + } else { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); + } + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data); + } + } + } else if (texture.isCompressedTexture) { + if (texture.isCompressedArrayTexture) { + if (useTexStorage && allocateMemory) { + state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height, image.depth); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + if (texture.layerUpdates.size > 0) { + const layerByteLength = getByteLength(mipmap.width, mipmap.height, texture.format, texture.type); + for (const layerIndex of texture.layerUpdates) { + const layerData = mipmap.data.subarray( + layerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT, + (layerIndex + 1) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT + ); + state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0); + } + texture.clearLayerUpdates(); + } else { + state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0); + } + } + } else { + state.compressedTexImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data); + } + } else { + state.texImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data); + } + } + } + } else { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + state.compressedTexSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); + } + } else { + state.compressedTexImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + } + } + } else if (texture.isDataArrayTexture) { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth); + } + if (dataReady) { + if (texture.layerUpdates.size > 0) { + const layerByteLength = getByteLength(image.width, image.height, texture.format, texture.type); + for (const layerIndex of texture.layerUpdates) { + const layerData = image.data.subarray( + layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT, + (layerIndex + 1) * layerByteLength / image.data.BYTES_PER_ELEMENT + ); + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData); + } + texture.clearLayerUpdates(); + } else { + state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); + } + } + } else { + state.texImage3D(_gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); + } + } else if (texture.isData3DTexture) { + if (useTexStorage) { + if (allocateMemory) { + state.texStorage3D(_gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth); + } + if (dataReady) { + state.texSubImage3D(_gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); + } + } else { + state.texImage3D(_gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); + } + } else if (texture.isFramebufferTexture) { + if (allocateMemory) { + if (useTexStorage) { + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); + } else { + let width = image.width, height = image.height; + for (let i = 0; i < levels; i++) { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null); + width >>= 1; + height >>= 1; + } + } + } + } else { + if (mipmaps.length > 0) { + if (useTexStorage && allocateMemory) { + const dimensions = getDimensions(mipmaps[0]); + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); + } + for (let i = 0, il = mipmaps.length; i < il; i++) { + mipmap = mipmaps[i]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap); + } + } + texture.generateMipmaps = false; + } else { + if (useTexStorage) { + if (allocateMemory) { + const dimensions = getDimensions(image); + state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); + } + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image); + } + } else { + state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image); + } + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(textureType); + } + sourceProperties.__version = source.version; + if (texture.onUpdate) texture.onUpdate(texture); + } + textureProperties.__version = texture.version; + } + function uploadCubeTexture(textureProperties, texture, slot) { + if (texture.image.length !== 6) return; + const forceUpload = initTexture(textureProperties, texture); + const source = texture.source; + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); + const sourceProperties = properties.get(source); + if (source.version !== sourceProperties.__version || forceUpload === true) { + state.activeTexture(_gl.TEXTURE0 + slot); + const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); + const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); + const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); + _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); + const isCompressed = texture.isCompressedTexture || texture.image[0].isCompressedTexture; + const isDataTexture = texture.image[0] && texture.image[0].isDataTexture; + const cubeImage = []; + for (let i = 0; i < 6; i++) { + if (!isCompressed && !isDataTexture) { + cubeImage[i] = resizeImage(texture.image[i], true, capabilities.maxCubemapSize); + } else { + cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i]; + } + cubeImage[i] = verifyColorSpace(texture, cubeImage[i]); + } + const image = cubeImage[0], glFormat = utils.convert(texture.format, texture.colorSpace), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const useTexStorage = texture.isVideoTexture !== true; + const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; + const dataReady = source.dataReady; + let levels = getMipLevels(texture, image); + setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); + let mipmaps; + if (isCompressed) { + if (useTexStorage && allocateMemory) { + state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height); + } + for (let i = 0; i < 6; i++) { + mipmaps = cubeImage[i].mipmaps; + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + if (texture.format !== RGBAFormat) { + if (glFormat !== null) { + if (useTexStorage) { + if (dataReady) { + state.compressedTexSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); + } + } else { + state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); + } + } else { + console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"); + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); + } + } + } + } + } else { + mipmaps = texture.mipmaps; + if (useTexStorage && allocateMemory) { + if (mipmaps.length > 0) levels++; + const dimensions = getDimensions(cubeImage[0]); + state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height); + } + for (let i = 0; i < 6; i++) { + if (isDataTexture) { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[i].width, cubeImage[i].height, glFormat, glType, cubeImage[i].data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[i].width, cubeImage[i].height, 0, glFormat, glType, cubeImage[i].data); + } + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + const mipmapImage = mipmap.image[i].image; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data); + } + } + } else { + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[i]); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[i]); + } + for (let j = 0; j < mipmaps.length; j++) { + const mipmap = mipmaps[j]; + if (useTexStorage) { + if (dataReady) { + state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[i]); + } + } else { + state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[i]); + } + } + } + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(_gl.TEXTURE_CUBE_MAP); + } + sourceProperties.__version = source.version; + if (texture.onUpdate) texture.onUpdate(texture); + } + textureProperties.__version = texture.version; + } + function setupFrameBufferTexture(framebuffer, renderTarget, texture, attachment, textureTarget, level) { + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const renderTargetProperties = properties.get(renderTarget); + if (!renderTargetProperties.__hasExternalTextures) { + const width = Math.max(1, renderTarget.width >> level); + const height = Math.max(1, renderTarget.height >> level); + if (textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY) { + state.texImage3D(textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null); + } else { + state.texImage2D(textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null); + } + } + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, 0, getRenderTargetSamples(renderTarget)); + } else if (textureTarget === _gl.TEXTURE_2D || textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, level); + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + function setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) { + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); + if (renderTarget.depthBuffer) { + const depthTexture = renderTarget.depthTexture; + const depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null; + const glInternalFormat = getInternalDepthFormat(renderTarget.stencilBuffer, depthType); + const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const samples = getRenderTargetSamples(renderTarget); + const isUseMultisampledRTT = useMultisampledRTT(renderTarget); + if (isUseMultisampledRTT) { + multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else if (isMultisample) { + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else { + _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); + } + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer); + } else { + const textures = renderTarget.textures; + for (let i = 0; i < textures.length; i++) { + const texture = textures[i]; + const glFormat = utils.convert(texture.format, texture.colorSpace); + const glType = utils.convert(texture.type); + const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); + const samples = getRenderTargetSamples(renderTarget); + if (isMultisample && useMultisampledRTT(renderTarget) === false) { + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + } else { + _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); + } + } + } + _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); + } + function setupDepthTexture(framebuffer, renderTarget) { + const isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget; + if (isCube) throw new Error("Depth Texture with cube render targets is not supported"); + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) { + throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + } + if (!properties.get(renderTarget.depthTexture).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) { + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + } + setTexture2D(renderTarget.depthTexture, 0); + const webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture; + const samples = getRenderTargetSamples(renderTarget); + if (renderTarget.depthTexture.format === DepthFormat) { + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); + } else { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); + } + } else if (renderTarget.depthTexture.format === DepthStencilFormat) { + if (useMultisampledRTT(renderTarget)) { + multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); + } else { + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); + } + } else { + throw new Error("Unknown depthTexture format"); + } + } + function setupDepthRenderbuffer(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + const isCube = renderTarget.isWebGLCubeRenderTarget === true; + if (renderTarget.depthTexture && !renderTargetProperties.__autoAllocateDepthBuffer) { + if (isCube) throw new Error("target.depthTexture not supported in Cube render targets"); + setupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget); + } else { + if (isCube) { + renderTargetProperties.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[i]); + renderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false); + } + } else { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false); + } + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + function rebindTextures(renderTarget, colorTexture, depthTexture) { + const renderTargetProperties = properties.get(renderTarget); + if (colorTexture !== void 0) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0); + } + if (depthTexture !== void 0) { + setupDepthRenderbuffer(renderTarget); + } + } + function setupRenderTarget(renderTarget) { + const texture = renderTarget.texture; + const renderTargetProperties = properties.get(renderTarget); + const textureProperties = properties.get(texture); + renderTarget.addEventListener("dispose", onRenderTargetDispose); + const textures = renderTarget.textures; + const isCube = renderTarget.isWebGLCubeRenderTarget === true; + const isMultipleRenderTargets = textures.length > 1; + if (!isMultipleRenderTargets) { + if (textureProperties.__webglTexture === void 0) { + textureProperties.__webglTexture = _gl.createTexture(); + } + textureProperties.__version = texture.version; + info.memory.textures++; + } + if (isCube) { + renderTargetProperties.__webglFramebuffer = []; + for (let i = 0; i < 6; i++) { + if (texture.mipmaps && texture.mipmaps.length > 0) { + renderTargetProperties.__webglFramebuffer[i] = []; + for (let level = 0; level < texture.mipmaps.length; level++) { + renderTargetProperties.__webglFramebuffer[i][level] = _gl.createFramebuffer(); + } + } else { + renderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer(); + } + } + } else { + if (texture.mipmaps && texture.mipmaps.length > 0) { + renderTargetProperties.__webglFramebuffer = []; + for (let level = 0; level < texture.mipmaps.length; level++) { + renderTargetProperties.__webglFramebuffer[level] = _gl.createFramebuffer(); + } + } else { + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + } + if (isMultipleRenderTargets) { + for (let i = 0, il = textures.length; i < il; i++) { + const attachmentProperties = properties.get(textures[i]); + if (attachmentProperties.__webglTexture === void 0) { + attachmentProperties.__webglTexture = _gl.createTexture(); + info.memory.textures++; + } + } + } + if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = []; + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + for (let i = 0; i < textures.length; i++) { + const texture2 = textures[i]; + renderTargetProperties.__webglColorRenderbuffer[i] = _gl.createRenderbuffer(); + _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const glFormat = utils.convert(texture2.format, texture2.colorSpace); + const glType = utils.convert(texture2.type); + const glInternalFormat = getInternalFormat(texture2.internalFormat, glFormat, glType, texture2.colorSpace, renderTarget.isXRRenderTarget === true); + const samples = getRenderTargetSamples(renderTarget); + _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + } + _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); + if (renderTarget.depthBuffer) { + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true); + } + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + } + } + if (isCube) { + state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); + setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); + for (let i = 0; i < 6; i++) { + if (texture.mipmaps && texture.mipmaps.length > 0) { + for (let level = 0; level < texture.mipmaps.length; level++) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i][level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level); + } + } else { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0); + } + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(_gl.TEXTURE_CUBE_MAP); + } + state.unbindTexture(); + } else if (isMultipleRenderTargets) { + for (let i = 0, il = textures.length; i < il; i++) { + const attachment = textures[i]; + const attachmentProperties = properties.get(attachment); + state.bindTexture(_gl.TEXTURE_2D, attachmentProperties.__webglTexture); + setTextureParameters(_gl.TEXTURE_2D, attachment); + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0); + if (textureNeedsGenerateMipmaps(attachment)) { + generateMipmap(_gl.TEXTURE_2D); + } + } + state.unbindTexture(); + } else { + let glTextureType = _gl.TEXTURE_2D; + if (renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { + glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY; + } + state.bindTexture(glTextureType, textureProperties.__webglTexture); + setTextureParameters(glTextureType, texture); + if (texture.mipmaps && texture.mipmaps.length > 0) { + for (let level = 0; level < texture.mipmaps.length; level++) { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level); + } + } else { + setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0); + } + if (textureNeedsGenerateMipmaps(texture)) { + generateMipmap(glTextureType); + } + state.unbindTexture(); + } + if (renderTarget.depthBuffer) { + setupDepthRenderbuffer(renderTarget); + } + } + function updateRenderTargetMipmap(renderTarget) { + const textures = renderTarget.textures; + for (let i = 0, il = textures.length; i < il; i++) { + const texture = textures[i]; + if (textureNeedsGenerateMipmaps(texture)) { + const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; + const webglTexture = properties.get(texture).__webglTexture; + state.bindTexture(target, webglTexture); + generateMipmap(target); + state.unbindTexture(); + } + } + } + const invalidationArrayRead = []; + const invalidationArrayDraw = []; + function updateMultisampleRenderTarget(renderTarget) { + if (renderTarget.samples > 0) { + if (useMultisampledRTT(renderTarget) === false) { + const textures = renderTarget.textures; + const width = renderTarget.width; + const height = renderTarget.height; + let mask = _gl.COLOR_BUFFER_BIT; + const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + const renderTargetProperties = properties.get(renderTarget); + const isMultipleRenderTargets = textures.length > 1; + if (isMultipleRenderTargets) { + for (let i = 0; i < textures.length; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null); + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0); + } + } + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + for (let i = 0; i < textures.length; i++) { + if (renderTarget.resolveDepthBuffer) { + if (renderTarget.depthBuffer) mask |= _gl.DEPTH_BUFFER_BIT; + if (renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer) mask |= _gl.STENCIL_BUFFER_BIT; + } + if (isMultipleRenderTargets) { + _gl.framebufferRenderbuffer(_gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const webglTexture = properties.get(textures[i]).__webglTexture; + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0); + } + _gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST); + if (supportsInvalidateFramebuffer === true) { + invalidationArrayRead.length = 0; + invalidationArrayDraw.length = 0; + invalidationArrayRead.push(_gl.COLOR_ATTACHMENT0 + i); + if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false) { + invalidationArrayRead.push(depthStyle); + invalidationArrayDraw.push(depthStyle); + _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, invalidationArrayDraw); + } + _gl.invalidateFramebuffer(_gl.READ_FRAMEBUFFER, invalidationArrayRead); + } + } + state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null); + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, null); + if (isMultipleRenderTargets) { + for (let i = 0; i < textures.length; i++) { + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); + const webglTexture = properties.get(textures[i]).__webglTexture; + state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); + _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0); + } + } + state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); + } else { + if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer) { + const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; + _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, [depthStyle]); + } + } + } + } + function getRenderTargetSamples(renderTarget) { + return Math.min(capabilities.maxSamples, renderTarget.samples); + } + function useMultisampledRTT(renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + return renderTarget.samples > 0 && extensions.has("WEBGL_multisampled_render_to_texture") === true && renderTargetProperties.__useRenderToTexture !== false; + } + function updateVideoTexture(texture) { + const frame = info.render.frame; + if (_videoTextures.get(texture) !== frame) { + _videoTextures.set(texture, frame); + texture.update(); + } + } + function verifyColorSpace(texture, image) { + const colorSpace = texture.colorSpace; + const format = texture.format; + const type = texture.type; + if (texture.isCompressedTexture === true || texture.isVideoTexture === true) return image; + if (colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace) { + if (ColorManagement.getTransfer(colorSpace) === SRGBTransfer) { + if (format !== RGBAFormat || type !== UnsignedByteType) { + console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."); + } + } else { + console.error("THREE.WebGLTextures: Unsupported texture color space:", colorSpace); + } + } + return image; + } + function getDimensions(image) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement) { + _imageDimensions.width = image.naturalWidth || image.width; + _imageDimensions.height = image.naturalHeight || image.height; + } else if (typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { + _imageDimensions.width = image.displayWidth; + _imageDimensions.height = image.displayHeight; + } else { + _imageDimensions.width = image.width; + _imageDimensions.height = image.height; + } + return _imageDimensions; + } + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.rebindTextures = rebindTextures; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + this.setupDepthRenderbuffer = setupDepthRenderbuffer; + this.setupFrameBufferTexture = setupFrameBufferTexture; + this.useMultisampledRTT = useMultisampledRTT; +} +function WebGLUtils(gl, extensions) { + function convert(p, colorSpace = NoColorSpace) { + let extension; + const transfer = ColorManagement.getTransfer(colorSpace); + if (p === UnsignedByteType) return gl.UNSIGNED_BYTE; + if (p === UnsignedShort4444Type) return gl.UNSIGNED_SHORT_4_4_4_4; + if (p === UnsignedShort5551Type) return gl.UNSIGNED_SHORT_5_5_5_1; + if (p === UnsignedInt5999Type) return gl.UNSIGNED_INT_5_9_9_9_REV; + if (p === ByteType) return gl.BYTE; + if (p === ShortType) return gl.SHORT; + if (p === UnsignedShortType) return gl.UNSIGNED_SHORT; + if (p === IntType) return gl.INT; + if (p === UnsignedIntType) return gl.UNSIGNED_INT; + if (p === FloatType) return gl.FLOAT; + if (p === HalfFloatType) return gl.HALF_FLOAT; + if (p === AlphaFormat) return gl.ALPHA; + if (p === RGBFormat) return gl.RGB; + if (p === RGBAFormat) return gl.RGBA; + if (p === LuminanceFormat) return gl.LUMINANCE; + if (p === LuminanceAlphaFormat) return gl.LUMINANCE_ALPHA; + if (p === DepthFormat) return gl.DEPTH_COMPONENT; + if (p === DepthStencilFormat) return gl.DEPTH_STENCIL; + if (p === RedFormat) return gl.RED; + if (p === RedIntegerFormat) return gl.RED_INTEGER; + if (p === RGFormat) return gl.RG; + if (p === RGIntegerFormat) return gl.RG_INTEGER; + if (p === RGBAIntegerFormat) return gl.RGBA_INTEGER; + if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { + if (transfer === SRGBTransfer) { + extension = extensions.get("WEBGL_compressed_texture_s3tc_srgb"); + if (extension !== null) { + if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; + } else { + return null; + } + } else { + extension = extensions.get("WEBGL_compressed_texture_s3tc"); + if (extension !== null) { + if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + } else { + return null; + } + } + } + if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { + extension = extensions.get("WEBGL_compressed_texture_pvrtc"); + if (extension !== null) { + if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + } else { + return null; + } + } + if (p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { + extension = extensions.get("WEBGL_compressed_texture_etc"); + if (extension !== null) { + if (p === RGB_ETC1_Format || p === RGB_ETC2_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; + if (p === RGBA_ETC2_EAC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; + } else { + return null; + } + } + if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { + extension = extensions.get("WEBGL_compressed_texture_astc"); + if (extension !== null) { + if (p === RGBA_ASTC_4x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; + if (p === RGBA_ASTC_5x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; + if (p === RGBA_ASTC_5x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; + if (p === RGBA_ASTC_6x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; + if (p === RGBA_ASTC_6x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; + if (p === RGBA_ASTC_8x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; + if (p === RGBA_ASTC_8x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; + if (p === RGBA_ASTC_8x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; + if (p === RGBA_ASTC_10x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; + if (p === RGBA_ASTC_10x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; + if (p === RGBA_ASTC_10x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; + if (p === RGBA_ASTC_10x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; + if (p === RGBA_ASTC_12x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; + if (p === RGBA_ASTC_12x12_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; + } else { + return null; + } + } + if (p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format) { + extension = extensions.get("EXT_texture_compression_bptc"); + if (extension !== null) { + if (p === RGBA_BPTC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; + if (p === RGB_BPTC_SIGNED_Format) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT; + if (p === RGB_BPTC_UNSIGNED_Format) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT; + } else { + return null; + } + } + if (p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format) { + extension = extensions.get("EXT_texture_compression_rgtc"); + if (extension !== null) { + if (p === RGBA_BPTC_Format) return extension.COMPRESSED_RED_RGTC1_EXT; + if (p === SIGNED_RED_RGTC1_Format) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT; + if (p === RED_GREEN_RGTC2_Format) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT; + if (p === SIGNED_RED_GREEN_RGTC2_Format) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT; + } else { + return null; + } + } + if (p === UnsignedInt248Type) return gl.UNSIGNED_INT_24_8; + return gl[p] !== void 0 ? gl[p] : null; + } + return { convert }; +} +var ArrayCamera = class extends PerspectiveCamera { + constructor(array = []) { + super(); + this.isArrayCamera = true; + this.cameras = array; + } +}; +var Group = class extends Object3D { + constructor() { + super(); + this.isGroup = true; + this.type = "Group"; + } +}; +var _moveEvent = { type: "move" }; +var WebXRController = class { + constructor() { + this._targetRay = null; + this._grip = null; + this._hand = null; + } + getHandSpace() { + if (this._hand === null) { + this._hand = new Group(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + this._hand.joints = {}; + this._hand.inputState = { pinching: false }; + } + return this._hand; + } + getTargetRaySpace() { + if (this._targetRay === null) { + this._targetRay = new Group(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + this._targetRay.hasLinearVelocity = false; + this._targetRay.linearVelocity = new Vector3(); + this._targetRay.hasAngularVelocity = false; + this._targetRay.angularVelocity = new Vector3(); + } + return this._targetRay; + } + getGripSpace() { + if (this._grip === null) { + this._grip = new Group(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + this._grip.hasLinearVelocity = false; + this._grip.linearVelocity = new Vector3(); + this._grip.hasAngularVelocity = false; + this._grip.angularVelocity = new Vector3(); + } + return this._grip; + } + dispatchEvent(event) { + if (this._targetRay !== null) { + this._targetRay.dispatchEvent(event); + } + if (this._grip !== null) { + this._grip.dispatchEvent(event); + } + if (this._hand !== null) { + this._hand.dispatchEvent(event); + } + return this; + } + connect(inputSource) { + if (inputSource && inputSource.hand) { + const hand = this._hand; + if (hand) { + for (const inputjoint of inputSource.hand.values()) { + this._getHandJoint(hand, inputjoint); + } + } + } + this.dispatchEvent({ type: "connected", data: inputSource }); + return this; + } + disconnect(inputSource) { + this.dispatchEvent({ type: "disconnected", data: inputSource }); + if (this._targetRay !== null) { + this._targetRay.visible = false; + } + if (this._grip !== null) { + this._grip.visible = false; + } + if (this._hand !== null) { + this._hand.visible = false; + } + return this; + } + update(inputSource, frame, referenceSpace) { + let inputPose = null; + let gripPose = null; + let handPose = null; + const targetRay = this._targetRay; + const grip = this._grip; + const hand = this._hand; + if (inputSource && frame.session.visibilityState !== "visible-blurred") { + if (hand && inputSource.hand) { + handPose = true; + for (const inputjoint of inputSource.hand.values()) { + const jointPose = frame.getJointPose(inputjoint, referenceSpace); + const joint = this._getHandJoint(hand, inputjoint); + if (jointPose !== null) { + joint.matrix.fromArray(jointPose.transform.matrix); + joint.matrix.decompose(joint.position, joint.rotation, joint.scale); + joint.matrixWorldNeedsUpdate = true; + joint.jointRadius = jointPose.radius; + } + joint.visible = jointPose !== null; + } + const indexTip = hand.joints["index-finger-tip"]; + const thumbTip = hand.joints["thumb-tip"]; + const distance = indexTip.position.distanceTo(thumbTip.position); + const distanceToPinch = 0.02; + const threshold = 5e-3; + if (hand.inputState.pinching && distance > distanceToPinch + threshold) { + hand.inputState.pinching = false; + this.dispatchEvent({ + type: "pinchend", + handedness: inputSource.handedness, + target: this + }); + } else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) { + hand.inputState.pinching = true; + this.dispatchEvent({ + type: "pinchstart", + handedness: inputSource.handedness, + target: this + }); + } + } else { + if (grip !== null && inputSource.gripSpace) { + gripPose = frame.getPose(inputSource.gripSpace, referenceSpace); + if (gripPose !== null) { + grip.matrix.fromArray(gripPose.transform.matrix); + grip.matrix.decompose(grip.position, grip.rotation, grip.scale); + grip.matrixWorldNeedsUpdate = true; + if (gripPose.linearVelocity) { + grip.hasLinearVelocity = true; + grip.linearVelocity.copy(gripPose.linearVelocity); + } else { + grip.hasLinearVelocity = false; + } + if (gripPose.angularVelocity) { + grip.hasAngularVelocity = true; + grip.angularVelocity.copy(gripPose.angularVelocity); + } else { + grip.hasAngularVelocity = false; + } + } + } + } + if (targetRay !== null) { + inputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace); + if (inputPose === null && gripPose !== null) { + inputPose = gripPose; + } + if (inputPose !== null) { + targetRay.matrix.fromArray(inputPose.transform.matrix); + targetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale); + targetRay.matrixWorldNeedsUpdate = true; + if (inputPose.linearVelocity) { + targetRay.hasLinearVelocity = true; + targetRay.linearVelocity.copy(inputPose.linearVelocity); + } else { + targetRay.hasLinearVelocity = false; + } + if (inputPose.angularVelocity) { + targetRay.hasAngularVelocity = true; + targetRay.angularVelocity.copy(inputPose.angularVelocity); + } else { + targetRay.hasAngularVelocity = false; + } + this.dispatchEvent(_moveEvent); + } + } + } + if (targetRay !== null) { + targetRay.visible = inputPose !== null; + } + if (grip !== null) { + grip.visible = gripPose !== null; + } + if (hand !== null) { + hand.visible = handPose !== null; + } + return this; + } + // private method + _getHandJoint(hand, inputjoint) { + if (hand.joints[inputjoint.jointName] === void 0) { + const joint = new Group(); + joint.matrixAutoUpdate = false; + joint.visible = false; + hand.joints[inputjoint.jointName] = joint; + hand.add(joint); + } + return hand.joints[inputjoint.jointName]; + } +}; +var _occlusion_vertex = ` +void main() { + + gl_Position = vec4( position, 1.0 ); + +}`; +var _occlusion_fragment = ` +uniform sampler2DArray depthColor; +uniform float depthWidth; +uniform float depthHeight; + +void main() { + + vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); + + if ( coord.x >= 1.0 ) { + + gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; + + } else { + + gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; + + } + +}`; +var WebXRDepthSensing = class { + constructor() { + this.texture = null; + this.mesh = null; + this.depthNear = 0; + this.depthFar = 0; + } + init(renderer, depthData, renderState) { + if (this.texture === null) { + const texture = new Texture(); + const texProps = renderer.properties.get(texture); + texProps.__webglTexture = depthData.texture; + if (depthData.depthNear != renderState.depthNear || depthData.depthFar != renderState.depthFar) { + this.depthNear = depthData.depthNear; + this.depthFar = depthData.depthFar; + } + this.texture = texture; + } + } + getMesh(cameraXR) { + if (this.texture !== null) { + if (this.mesh === null) { + const viewport = cameraXR.cameras[0].viewport; + const material = new ShaderMaterial({ + vertexShader: _occlusion_vertex, + fragmentShader: _occlusion_fragment, + uniforms: { + depthColor: { value: this.texture }, + depthWidth: { value: viewport.z }, + depthHeight: { value: viewport.w } + } + }); + this.mesh = new Mesh(new PlaneGeometry(20, 20), material); + } + } + return this.mesh; + } + reset() { + this.texture = null; + this.mesh = null; + } + getDepthTexture() { + return this.texture; + } +}; +var WebXRManager = class extends EventDispatcher { + constructor(renderer, gl) { + super(); + const scope = this; + let session = null; + let framebufferScaleFactor = 1; + let referenceSpace = null; + let referenceSpaceType = "local-floor"; + let foveation = 1; + let customReferenceSpace = null; + let pose = null; + let glBinding = null; + let glProjLayer = null; + let glBaseLayer = null; + let xrFrame = null; + const depthSensing = new WebXRDepthSensing(); + const attributes = gl.getContextAttributes(); + let initialRenderTarget = null; + let newRenderTarget = null; + const controllers = []; + const controllerInputSources = []; + const currentSize = new Vector2(); + let currentPixelRatio = null; + const cameraL = new PerspectiveCamera(); + cameraL.layers.enable(1); + cameraL.viewport = new Vector4(); + const cameraR = new PerspectiveCamera(); + cameraR.layers.enable(2); + cameraR.viewport = new Vector4(); + const cameras = [cameraL, cameraR]; + const cameraXR = new ArrayCamera(); + cameraXR.layers.enable(1); + cameraXR.layers.enable(2); + let _currentDepthNear = null; + let _currentDepthFar = null; + this.cameraAutoUpdate = true; + this.enabled = false; + this.isPresenting = false; + this.getController = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getTargetRaySpace(); + }; + this.getControllerGrip = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getGripSpace(); + }; + this.getHand = function(index) { + let controller = controllers[index]; + if (controller === void 0) { + controller = new WebXRController(); + controllers[index] = controller; + } + return controller.getHandSpace(); + }; + function onSessionEvent(event) { + const controllerIndex = controllerInputSources.indexOf(event.inputSource); + if (controllerIndex === -1) { + return; + } + const controller = controllers[controllerIndex]; + if (controller !== void 0) { + controller.update(event.inputSource, event.frame, customReferenceSpace || referenceSpace); + controller.dispatchEvent({ type: event.type, data: event.inputSource }); + } + } + function onSessionEnd() { + session.removeEventListener("select", onSessionEvent); + session.removeEventListener("selectstart", onSessionEvent); + session.removeEventListener("selectend", onSessionEvent); + session.removeEventListener("squeeze", onSessionEvent); + session.removeEventListener("squeezestart", onSessionEvent); + session.removeEventListener("squeezeend", onSessionEvent); + session.removeEventListener("end", onSessionEnd); + session.removeEventListener("inputsourceschange", onInputSourcesChange); + for (let i = 0; i < controllers.length; i++) { + const inputSource = controllerInputSources[i]; + if (inputSource === null) continue; + controllerInputSources[i] = null; + controllers[i].disconnect(inputSource); + } + _currentDepthNear = null; + _currentDepthFar = null; + depthSensing.reset(); + renderer.setRenderTarget(initialRenderTarget); + glBaseLayer = null; + glProjLayer = null; + glBinding = null; + session = null; + newRenderTarget = null; + animation.stop(); + scope.isPresenting = false; + renderer.setPixelRatio(currentPixelRatio); + renderer.setSize(currentSize.width, currentSize.height, false); + scope.dispatchEvent({ type: "sessionend" }); + } + this.setFramebufferScaleFactor = function(value) { + framebufferScaleFactor = value; + if (scope.isPresenting === true) { + console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting."); + } + }; + this.setReferenceSpaceType = function(value) { + referenceSpaceType = value; + if (scope.isPresenting === true) { + console.warn("THREE.WebXRManager: Cannot change reference space type while presenting."); + } + }; + this.getReferenceSpace = function() { + return customReferenceSpace || referenceSpace; + }; + this.setReferenceSpace = function(space) { + customReferenceSpace = space; + }; + this.getBaseLayer = function() { + return glProjLayer !== null ? glProjLayer : glBaseLayer; + }; + this.getBinding = function() { + return glBinding; + }; + this.getFrame = function() { + return xrFrame; + }; + this.getSession = function() { + return session; + }; + this.setSession = async function(value) { + session = value; + if (session !== null) { + initialRenderTarget = renderer.getRenderTarget(); + session.addEventListener("select", onSessionEvent); + session.addEventListener("selectstart", onSessionEvent); + session.addEventListener("selectend", onSessionEvent); + session.addEventListener("squeeze", onSessionEvent); + session.addEventListener("squeezestart", onSessionEvent); + session.addEventListener("squeezeend", onSessionEvent); + session.addEventListener("end", onSessionEnd); + session.addEventListener("inputsourceschange", onInputSourcesChange); + if (attributes.xrCompatible !== true) { + await gl.makeXRCompatible(); + } + currentPixelRatio = renderer.getPixelRatio(); + renderer.getSize(currentSize); + if (session.renderState.layers === void 0) { + const layerInit = { + antialias: attributes.antialias, + alpha: true, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor + }; + glBaseLayer = new XRWebGLLayer(session, gl, layerInit); + session.updateRenderState({ baseLayer: glBaseLayer }); + renderer.setPixelRatio(1); + renderer.setSize(glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false); + newRenderTarget = new WebGLRenderTarget( + glBaseLayer.framebufferWidth, + glBaseLayer.framebufferHeight, + { + format: RGBAFormat, + type: UnsignedByteType, + colorSpace: renderer.outputColorSpace, + stencilBuffer: attributes.stencil + } + ); + } else { + let depthFormat = null; + let depthType = null; + let glDepthFormat = null; + if (attributes.depth) { + glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24; + depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat; + depthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType; + } + const projectionlayerInit = { + colorFormat: gl.RGBA8, + depthFormat: glDepthFormat, + scaleFactor: framebufferScaleFactor + }; + glBinding = new XRWebGLBinding(session, gl); + glProjLayer = glBinding.createProjectionLayer(projectionlayerInit); + session.updateRenderState({ layers: [glProjLayer] }); + renderer.setPixelRatio(1); + renderer.setSize(glProjLayer.textureWidth, glProjLayer.textureHeight, false); + newRenderTarget = new WebGLRenderTarget( + glProjLayer.textureWidth, + glProjLayer.textureHeight, + { + format: RGBAFormat, + type: UnsignedByteType, + depthTexture: new DepthTexture(glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, void 0, void 0, void 0, void 0, void 0, void 0, depthFormat), + stencilBuffer: attributes.stencil, + colorSpace: renderer.outputColorSpace, + samples: attributes.antialias ? 4 : 0, + resolveDepthBuffer: glProjLayer.ignoreDepthValues === false + } + ); + } + newRenderTarget.isXRRenderTarget = true; + this.setFoveation(foveation); + customReferenceSpace = null; + referenceSpace = await session.requestReferenceSpace(referenceSpaceType); + animation.setContext(session); + animation.start(); + scope.isPresenting = true; + scope.dispatchEvent({ type: "sessionstart" }); + } + }; + this.getEnvironmentBlendMode = function() { + if (session !== null) { + return session.environmentBlendMode; + } + }; + this.getDepthTexture = function() { + return depthSensing.getDepthTexture(); + }; + function onInputSourcesChange(event) { + for (let i = 0; i < event.removed.length; i++) { + const inputSource = event.removed[i]; + const index = controllerInputSources.indexOf(inputSource); + if (index >= 0) { + controllerInputSources[index] = null; + controllers[index].disconnect(inputSource); + } + } + for (let i = 0; i < event.added.length; i++) { + const inputSource = event.added[i]; + let controllerIndex = controllerInputSources.indexOf(inputSource); + if (controllerIndex === -1) { + for (let i2 = 0; i2 < controllers.length; i2++) { + if (i2 >= controllerInputSources.length) { + controllerInputSources.push(inputSource); + controllerIndex = i2; + break; + } else if (controllerInputSources[i2] === null) { + controllerInputSources[i2] = inputSource; + controllerIndex = i2; + break; + } + } + if (controllerIndex === -1) break; + } + const controller = controllers[controllerIndex]; + if (controller) { + controller.connect(inputSource); + } + } + } + const cameraLPos = new Vector3(); + const cameraRPos = new Vector3(); + function setProjectionFromUnion(camera, cameraL2, cameraR2) { + cameraLPos.setFromMatrixPosition(cameraL2.matrixWorld); + cameraRPos.setFromMatrixPosition(cameraR2.matrixWorld); + const ipd = cameraLPos.distanceTo(cameraRPos); + const projL = cameraL2.projectionMatrix.elements; + const projR = cameraR2.projectionMatrix.elements; + const near = projL[14] / (projL[10] - 1); + const far = projL[14] / (projL[10] + 1); + const topFov = (projL[9] + 1) / projL[5]; + const bottomFov = (projL[9] - 1) / projL[5]; + const leftFov = (projL[8] - 1) / projL[0]; + const rightFov = (projR[8] + 1) / projR[0]; + const left = near * leftFov; + const right = near * rightFov; + const zOffset = ipd / (-leftFov + rightFov); + const xOffset = zOffset * -leftFov; + cameraL2.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale); + camera.translateX(xOffset); + camera.translateZ(zOffset); + camera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale); + camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); + const near2 = near + zOffset; + const far2 = far + zOffset; + const left2 = left - xOffset; + const right2 = right + (ipd - xOffset); + const top2 = topFov * far / far2 * near2; + const bottom2 = bottomFov * far / far2 * near2; + camera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2); + camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); + } + function updateCamera(camera, parent) { + if (parent === null) { + camera.matrixWorld.copy(camera.matrix); + } else { + camera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix); + } + camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); + } + this.updateCamera = function(camera) { + if (session === null) return; + if (depthSensing.texture !== null) { + camera.near = depthSensing.depthNear; + camera.far = depthSensing.depthFar; + } + cameraXR.near = cameraR.near = cameraL.near = camera.near; + cameraXR.far = cameraR.far = cameraL.far = camera.far; + if (_currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far) { + session.updateRenderState({ + depthNear: cameraXR.near, + depthFar: cameraXR.far + }); + _currentDepthNear = cameraXR.near; + _currentDepthFar = cameraXR.far; + cameraL.near = _currentDepthNear; + cameraL.far = _currentDepthFar; + cameraR.near = _currentDepthNear; + cameraR.far = _currentDepthFar; + cameraL.updateProjectionMatrix(); + cameraR.updateProjectionMatrix(); + camera.updateProjectionMatrix(); + } + const parent = camera.parent; + const cameras2 = cameraXR.cameras; + updateCamera(cameraXR, parent); + for (let i = 0; i < cameras2.length; i++) { + updateCamera(cameras2[i], parent); + } + if (cameras2.length === 2) { + setProjectionFromUnion(cameraXR, cameraL, cameraR); + } else { + cameraXR.projectionMatrix.copy(cameraL.projectionMatrix); + } + updateUserCamera(camera, cameraXR, parent); + }; + function updateUserCamera(camera, cameraXR2, parent) { + if (parent === null) { + camera.matrix.copy(cameraXR2.matrixWorld); + } else { + camera.matrix.copy(parent.matrixWorld); + camera.matrix.invert(); + camera.matrix.multiply(cameraXR2.matrixWorld); + } + camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); + camera.updateMatrixWorld(true); + camera.projectionMatrix.copy(cameraXR2.projectionMatrix); + camera.projectionMatrixInverse.copy(cameraXR2.projectionMatrixInverse); + if (camera.isPerspectiveCamera) { + camera.fov = RAD2DEG * 2 * Math.atan(1 / camera.projectionMatrix.elements[5]); + camera.zoom = 1; + } + } + this.getCamera = function() { + return cameraXR; + }; + this.getFoveation = function() { + if (glProjLayer === null && glBaseLayer === null) { + return void 0; + } + return foveation; + }; + this.setFoveation = function(value) { + foveation = value; + if (glProjLayer !== null) { + glProjLayer.fixedFoveation = value; + } + if (glBaseLayer !== null && glBaseLayer.fixedFoveation !== void 0) { + glBaseLayer.fixedFoveation = value; + } + }; + this.hasDepthSensing = function() { + return depthSensing.texture !== null; + }; + this.getDepthSensingMesh = function() { + return depthSensing.getMesh(cameraXR); + }; + let onAnimationFrameCallback = null; + function onAnimationFrame(time, frame) { + pose = frame.getViewerPose(customReferenceSpace || referenceSpace); + xrFrame = frame; + if (pose !== null) { + const views = pose.views; + if (glBaseLayer !== null) { + renderer.setRenderTargetFramebuffer(newRenderTarget, glBaseLayer.framebuffer); + renderer.setRenderTarget(newRenderTarget); + } + let cameraXRNeedsUpdate = false; + if (views.length !== cameraXR.cameras.length) { + cameraXR.cameras.length = 0; + cameraXRNeedsUpdate = true; + } + for (let i = 0; i < views.length; i++) { + const view = views[i]; + let viewport = null; + if (glBaseLayer !== null) { + viewport = glBaseLayer.getViewport(view); + } else { + const glSubImage = glBinding.getViewSubImage(glProjLayer, view); + viewport = glSubImage.viewport; + if (i === 0) { + renderer.setRenderTargetTextures( + newRenderTarget, + glSubImage.colorTexture, + glProjLayer.ignoreDepthValues ? void 0 : glSubImage.depthStencilTexture + ); + renderer.setRenderTarget(newRenderTarget); + } + } + let camera = cameras[i]; + if (camera === void 0) { + camera = new PerspectiveCamera(); + camera.layers.enable(i); + camera.viewport = new Vector4(); + cameras[i] = camera; + } + camera.matrix.fromArray(view.transform.matrix); + camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); + camera.projectionMatrix.fromArray(view.projectionMatrix); + camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); + camera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height); + if (i === 0) { + cameraXR.matrix.copy(camera.matrix); + cameraXR.matrix.decompose(cameraXR.position, cameraXR.quaternion, cameraXR.scale); + } + if (cameraXRNeedsUpdate === true) { + cameraXR.cameras.push(camera); + } + } + const enabledFeatures = session.enabledFeatures; + if (enabledFeatures && enabledFeatures.includes("depth-sensing")) { + const depthData = glBinding.getDepthInformation(views[0]); + if (depthData && depthData.isValid && depthData.texture) { + depthSensing.init(renderer, depthData, session.renderState); + } + } + } + for (let i = 0; i < controllers.length; i++) { + const inputSource = controllerInputSources[i]; + const controller = controllers[i]; + if (inputSource !== null && controller !== void 0) { + controller.update(inputSource, frame, customReferenceSpace || referenceSpace); + } + } + if (onAnimationFrameCallback) onAnimationFrameCallback(time, frame); + if (frame.detectedPlanes) { + scope.dispatchEvent({ type: "planesdetected", data: frame }); + } + xrFrame = null; + } + const animation = new WebGLAnimation(); + animation.setAnimationLoop(onAnimationFrame); + this.setAnimationLoop = function(callback) { + onAnimationFrameCallback = callback; + }; + this.dispose = function() { + }; + } +}; +var _e1 = new Euler(); +var _m1 = new Matrix4(); +function WebGLMaterials(renderer, properties) { + function refreshTransformUniform(map, uniform) { + if (map.matrixAutoUpdate === true) { + map.updateMatrix(); + } + uniform.value.copy(map.matrix); + } + function refreshFogUniforms(uniforms, fog) { + fog.color.getRGB(uniforms.fogColor.value, getUnlitUniformColorSpace(renderer)); + if (fog.isFog) { + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + } else if (fog.isFogExp2) { + uniforms.fogDensity.value = fog.density; + } + } + function refreshMaterialUniforms(uniforms, material, pixelRatio, height, transmissionRenderTarget) { + if (material.isMeshBasicMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshLambertMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshToonMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsToon(uniforms, material); + } else if (material.isMeshPhongMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsPhong(uniforms, material); + } else if (material.isMeshStandardMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsStandard(uniforms, material); + if (material.isMeshPhysicalMaterial) { + refreshUniformsPhysical(uniforms, material, transmissionRenderTarget); + } + } else if (material.isMeshMatcapMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsMatcap(uniforms, material); + } else if (material.isMeshDepthMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isMeshDistanceMaterial) { + refreshUniformsCommon(uniforms, material); + refreshUniformsDistance(uniforms, material); + } else if (material.isMeshNormalMaterial) { + refreshUniformsCommon(uniforms, material); + } else if (material.isLineBasicMaterial) { + refreshUniformsLine(uniforms, material); + if (material.isLineDashedMaterial) { + refreshUniformsDash(uniforms, material); + } + } else if (material.isPointsMaterial) { + refreshUniformsPoints(uniforms, material, pixelRatio, height); + } else if (material.isSpriteMaterial) { + refreshUniformsSprites(uniforms, material); + } else if (material.isShadowMaterial) { + uniforms.color.value.copy(material.color); + uniforms.opacity.value = material.opacity; + } else if (material.isShaderMaterial) { + material.uniformsNeedUpdate = false; + } + } + function refreshUniformsCommon(uniforms, material) { + uniforms.opacity.value = material.opacity; + if (material.color) { + uniforms.diffuse.value.copy(material.color); + } + if (material.emissive) { + uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity); + } + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.bumpMap) { + uniforms.bumpMap.value = material.bumpMap; + refreshTransformUniform(material.bumpMap, uniforms.bumpMapTransform); + uniforms.bumpScale.value = material.bumpScale; + if (material.side === BackSide) { + uniforms.bumpScale.value *= -1; + } + } + if (material.normalMap) { + uniforms.normalMap.value = material.normalMap; + refreshTransformUniform(material.normalMap, uniforms.normalMapTransform); + uniforms.normalScale.value.copy(material.normalScale); + if (material.side === BackSide) { + uniforms.normalScale.value.negate(); + } + } + if (material.displacementMap) { + uniforms.displacementMap.value = material.displacementMap; + refreshTransformUniform(material.displacementMap, uniforms.displacementMapTransform); + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + } + if (material.emissiveMap) { + uniforms.emissiveMap.value = material.emissiveMap; + refreshTransformUniform(material.emissiveMap, uniforms.emissiveMapTransform); + } + if (material.specularMap) { + uniforms.specularMap.value = material.specularMap; + refreshTransformUniform(material.specularMap, uniforms.specularMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + const materialProperties = properties.get(material); + const envMap = materialProperties.envMap; + const envMapRotation = materialProperties.envMapRotation; + if (envMap) { + uniforms.envMap.value = envMap; + _e1.copy(envMapRotation); + _e1.x *= -1; + _e1.y *= -1; + _e1.z *= -1; + if (envMap.isCubeTexture && envMap.isRenderTargetTexture === false) { + _e1.y *= -1; + _e1.z *= -1; + } + uniforms.envMapRotation.value.setFromMatrix4(_m1.makeRotationFromEuler(_e1)); + uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; + uniforms.reflectivity.value = material.reflectivity; + uniforms.ior.value = material.ior; + uniforms.refractionRatio.value = material.refractionRatio; + } + if (material.lightMap) { + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + refreshTransformUniform(material.lightMap, uniforms.lightMapTransform); + } + if (material.aoMap) { + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + refreshTransformUniform(material.aoMap, uniforms.aoMapTransform); + } + } + function refreshUniformsLine(uniforms, material) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + } + function refreshUniformsDash(uniforms, material) { + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + } + function refreshUniformsPoints(uniforms, material, pixelRatio, height) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.uvTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + } + function refreshUniformsSprites(uniforms, material) { + uniforms.diffuse.value.copy(material.color); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + if (material.map) { + uniforms.map.value = material.map; + refreshTransformUniform(material.map, uniforms.mapTransform); + } + if (material.alphaMap) { + uniforms.alphaMap.value = material.alphaMap; + refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); + } + if (material.alphaTest > 0) { + uniforms.alphaTest.value = material.alphaTest; + } + } + function refreshUniformsPhong(uniforms, material) { + uniforms.specular.value.copy(material.specular); + uniforms.shininess.value = Math.max(material.shininess, 1e-4); + } + function refreshUniformsToon(uniforms, material) { + if (material.gradientMap) { + uniforms.gradientMap.value = material.gradientMap; + } + } + function refreshUniformsStandard(uniforms, material) { + uniforms.metalness.value = material.metalness; + if (material.metalnessMap) { + uniforms.metalnessMap.value = material.metalnessMap; + refreshTransformUniform(material.metalnessMap, uniforms.metalnessMapTransform); + } + uniforms.roughness.value = material.roughness; + if (material.roughnessMap) { + uniforms.roughnessMap.value = material.roughnessMap; + refreshTransformUniform(material.roughnessMap, uniforms.roughnessMapTransform); + } + if (material.envMap) { + uniforms.envMapIntensity.value = material.envMapIntensity; + } + } + function refreshUniformsPhysical(uniforms, material, transmissionRenderTarget) { + uniforms.ior.value = material.ior; + if (material.sheen > 0) { + uniforms.sheenColor.value.copy(material.sheenColor).multiplyScalar(material.sheen); + uniforms.sheenRoughness.value = material.sheenRoughness; + if (material.sheenColorMap) { + uniforms.sheenColorMap.value = material.sheenColorMap; + refreshTransformUniform(material.sheenColorMap, uniforms.sheenColorMapTransform); + } + if (material.sheenRoughnessMap) { + uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; + refreshTransformUniform(material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform); + } + } + if (material.clearcoat > 0) { + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + if (material.clearcoatMap) { + uniforms.clearcoatMap.value = material.clearcoatMap; + refreshTransformUniform(material.clearcoatMap, uniforms.clearcoatMapTransform); + } + if (material.clearcoatRoughnessMap) { + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + refreshTransformUniform(material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform); + } + if (material.clearcoatNormalMap) { + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + refreshTransformUniform(material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform); + uniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale); + if (material.side === BackSide) { + uniforms.clearcoatNormalScale.value.negate(); + } + } + } + if (material.dispersion > 0) { + uniforms.dispersion.value = material.dispersion; + } + if (material.iridescence > 0) { + uniforms.iridescence.value = material.iridescence; + uniforms.iridescenceIOR.value = material.iridescenceIOR; + uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[0]; + uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[1]; + if (material.iridescenceMap) { + uniforms.iridescenceMap.value = material.iridescenceMap; + refreshTransformUniform(material.iridescenceMap, uniforms.iridescenceMapTransform); + } + if (material.iridescenceThicknessMap) { + uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap; + refreshTransformUniform(material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform); + } + } + if (material.transmission > 0) { + uniforms.transmission.value = material.transmission; + uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; + uniforms.transmissionSamplerSize.value.set(transmissionRenderTarget.width, transmissionRenderTarget.height); + if (material.transmissionMap) { + uniforms.transmissionMap.value = material.transmissionMap; + refreshTransformUniform(material.transmissionMap, uniforms.transmissionMapTransform); + } + uniforms.thickness.value = material.thickness; + if (material.thicknessMap) { + uniforms.thicknessMap.value = material.thicknessMap; + refreshTransformUniform(material.thicknessMap, uniforms.thicknessMapTransform); + } + uniforms.attenuationDistance.value = material.attenuationDistance; + uniforms.attenuationColor.value.copy(material.attenuationColor); + } + if (material.anisotropy > 0) { + uniforms.anisotropyVector.value.set(material.anisotropy * Math.cos(material.anisotropyRotation), material.anisotropy * Math.sin(material.anisotropyRotation)); + if (material.anisotropyMap) { + uniforms.anisotropyMap.value = material.anisotropyMap; + refreshTransformUniform(material.anisotropyMap, uniforms.anisotropyMapTransform); + } + } + uniforms.specularIntensity.value = material.specularIntensity; + uniforms.specularColor.value.copy(material.specularColor); + if (material.specularColorMap) { + uniforms.specularColorMap.value = material.specularColorMap; + refreshTransformUniform(material.specularColorMap, uniforms.specularColorMapTransform); + } + if (material.specularIntensityMap) { + uniforms.specularIntensityMap.value = material.specularIntensityMap; + refreshTransformUniform(material.specularIntensityMap, uniforms.specularIntensityMapTransform); + } + } + function refreshUniformsMatcap(uniforms, material) { + if (material.matcap) { + uniforms.matcap.value = material.matcap; + } + } + function refreshUniformsDistance(uniforms, material) { + const light = properties.get(material).light; + uniforms.referencePosition.value.setFromMatrixPosition(light.matrixWorld); + uniforms.nearDistance.value = light.shadow.camera.near; + uniforms.farDistance.value = light.shadow.camera.far; + } + return { + refreshFogUniforms, + refreshMaterialUniforms + }; +} +function WebGLUniformsGroups(gl, info, capabilities, state) { + let buffers = {}; + let updateList = {}; + let allocatedBindingPoints = []; + const maxBindingPoints = gl.getParameter(gl.MAX_UNIFORM_BUFFER_BINDINGS); + function bind(uniformsGroup, program) { + const webglProgram = program.program; + state.uniformBlockBinding(uniformsGroup, webglProgram); + } + function update(uniformsGroup, program) { + let buffer = buffers[uniformsGroup.id]; + if (buffer === void 0) { + prepareUniformsGroup(uniformsGroup); + buffer = createBuffer(uniformsGroup); + buffers[uniformsGroup.id] = buffer; + uniformsGroup.addEventListener("dispose", onUniformsGroupsDispose); + } + const webglProgram = program.program; + state.updateUBOMapping(uniformsGroup, webglProgram); + const frame = info.render.frame; + if (updateList[uniformsGroup.id] !== frame) { + updateBufferData(uniformsGroup); + updateList[uniformsGroup.id] = frame; + } + } + function createBuffer(uniformsGroup) { + const bindingPointIndex = allocateBindingPointIndex(); + uniformsGroup.__bindingPointIndex = bindingPointIndex; + const buffer = gl.createBuffer(); + const size = uniformsGroup.__size; + const usage = uniformsGroup.usage; + gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); + gl.bufferData(gl.UNIFORM_BUFFER, size, usage); + gl.bindBuffer(gl.UNIFORM_BUFFER, null); + gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPointIndex, buffer); + return buffer; + } + function allocateBindingPointIndex() { + for (let i = 0; i < maxBindingPoints; i++) { + if (allocatedBindingPoints.indexOf(i) === -1) { + allocatedBindingPoints.push(i); + return i; + } + } + console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."); + return 0; + } + function updateBufferData(uniformsGroup) { + const buffer = buffers[uniformsGroup.id]; + const uniforms = uniformsGroup.uniforms; + const cache = uniformsGroup.__cache; + gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); + for (let i = 0, il = uniforms.length; i < il; i++) { + const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; + for (let j = 0, jl = uniformArray.length; j < jl; j++) { + const uniform = uniformArray[j]; + if (hasUniformChanged(uniform, i, j, cache) === true) { + const offset = uniform.__offset; + const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; + let arrayOffset = 0; + for (let k = 0; k < values.length; k++) { + const value = values[k]; + const info2 = getUniformSize(value); + if (typeof value === "number" || typeof value === "boolean") { + uniform.__data[0] = value; + gl.bufferSubData(gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data); + } else if (value.isMatrix3) { + uniform.__data[0] = value.elements[0]; + uniform.__data[1] = value.elements[1]; + uniform.__data[2] = value.elements[2]; + uniform.__data[3] = 0; + uniform.__data[4] = value.elements[3]; + uniform.__data[5] = value.elements[4]; + uniform.__data[6] = value.elements[5]; + uniform.__data[7] = 0; + uniform.__data[8] = value.elements[6]; + uniform.__data[9] = value.elements[7]; + uniform.__data[10] = value.elements[8]; + uniform.__data[11] = 0; + } else { + value.toArray(uniform.__data, arrayOffset); + arrayOffset += info2.storage / Float32Array.BYTES_PER_ELEMENT; + } + } + gl.bufferSubData(gl.UNIFORM_BUFFER, offset, uniform.__data); + } + } + } + gl.bindBuffer(gl.UNIFORM_BUFFER, null); + } + function hasUniformChanged(uniform, index, indexArray, cache) { + const value = uniform.value; + const indexString = index + "_" + indexArray; + if (cache[indexString] === void 0) { + if (typeof value === "number" || typeof value === "boolean") { + cache[indexString] = value; + } else { + cache[indexString] = value.clone(); + } + return true; + } else { + const cachedObject = cache[indexString]; + if (typeof value === "number" || typeof value === "boolean") { + if (cachedObject !== value) { + cache[indexString] = value; + return true; + } + } else { + if (cachedObject.equals(value) === false) { + cachedObject.copy(value); + return true; + } + } + } + return false; + } + function prepareUniformsGroup(uniformsGroup) { + const uniforms = uniformsGroup.uniforms; + let offset = 0; + const chunkSize = 16; + for (let i = 0, l = uniforms.length; i < l; i++) { + const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; + for (let j = 0, jl = uniformArray.length; j < jl; j++) { + const uniform = uniformArray[j]; + const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; + for (let k = 0, kl = values.length; k < kl; k++) { + const value = values[k]; + const info2 = getUniformSize(value); + const chunkOffset2 = offset % chunkSize; + const chunkPadding = chunkOffset2 % info2.boundary; + const chunkStart = chunkOffset2 + chunkPadding; + offset += chunkPadding; + if (chunkStart !== 0 && chunkSize - chunkStart < info2.storage) { + offset += chunkSize - chunkStart; + } + uniform.__data = new Float32Array(info2.storage / Float32Array.BYTES_PER_ELEMENT); + uniform.__offset = offset; + offset += info2.storage; + } + } + } + const chunkOffset = offset % chunkSize; + if (chunkOffset > 0) offset += chunkSize - chunkOffset; + uniformsGroup.__size = offset; + uniformsGroup.__cache = {}; + return this; + } + function getUniformSize(value) { + const info2 = { + boundary: 0, + // bytes + storage: 0 + // bytes + }; + if (typeof value === "number" || typeof value === "boolean") { + info2.boundary = 4; + info2.storage = 4; + } else if (value.isVector2) { + info2.boundary = 8; + info2.storage = 8; + } else if (value.isVector3 || value.isColor) { + info2.boundary = 16; + info2.storage = 12; + } else if (value.isVector4) { + info2.boundary = 16; + info2.storage = 16; + } else if (value.isMatrix3) { + info2.boundary = 48; + info2.storage = 48; + } else if (value.isMatrix4) { + info2.boundary = 64; + info2.storage = 64; + } else if (value.isTexture) { + console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."); + } else { + console.warn("THREE.WebGLRenderer: Unsupported uniform value type.", value); + } + return info2; + } + function onUniformsGroupsDispose(event) { + const uniformsGroup = event.target; + uniformsGroup.removeEventListener("dispose", onUniformsGroupsDispose); + const index = allocatedBindingPoints.indexOf(uniformsGroup.__bindingPointIndex); + allocatedBindingPoints.splice(index, 1); + gl.deleteBuffer(buffers[uniformsGroup.id]); + delete buffers[uniformsGroup.id]; + delete updateList[uniformsGroup.id]; + } + function dispose() { + for (const id in buffers) { + gl.deleteBuffer(buffers[id]); + } + allocatedBindingPoints = []; + buffers = {}; + updateList = {}; + } + return { + bind, + update, + dispose + }; +} +var WebGLRenderer = class { + constructor(parameters = {}) { + const { + canvas = createCanvasElement(), + context = null, + depth = true, + stencil = false, + alpha = false, + antialias = false, + premultipliedAlpha = true, + preserveDrawingBuffer = false, + powerPreference = "default", + failIfMajorPerformanceCaveat = false + } = parameters; + this.isWebGLRenderer = true; + let _alpha; + if (context !== null) { + if (typeof WebGLRenderingContext !== "undefined" && context instanceof WebGLRenderingContext) { + throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163."); + } + _alpha = context.getContextAttributes().alpha; + } else { + _alpha = alpha; + } + const uintClearColor = new Uint32Array(4); + const intClearColor = new Int32Array(4); + let currentRenderList = null; + let currentRenderState = null; + const renderListStack = []; + const renderStateStack = []; + this.domElement = canvas; + this.debug = { + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true, + /** + * Callback for custom error reporting. + * @type {?Function} + */ + onShaderError: null + }; + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + this.sortObjects = true; + this.clippingPlanes = []; + this.localClippingEnabled = false; + this._outputColorSpace = SRGBColorSpace; + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1; + const _this = this; + let _isContextLost = false; + let _currentActiveCubeFace = 0; + let _currentActiveMipmapLevel = 0; + let _currentRenderTarget = null; + let _currentMaterialId = -1; + let _currentCamera = null; + const _currentViewport = new Vector4(); + const _currentScissor = new Vector4(); + let _currentScissorTest = null; + const _currentClearColor = new Color(0); + let _currentClearAlpha = 0; + let _width = canvas.width; + let _height = canvas.height; + let _pixelRatio = 1; + let _opaqueSort = null; + let _transparentSort = null; + const _viewport = new Vector4(0, 0, _width, _height); + const _scissor = new Vector4(0, 0, _width, _height); + let _scissorTest = false; + const _frustum2 = new Frustum(); + let _clippingEnabled = false; + let _localClippingEnabled = false; + const _projScreenMatrix2 = new Matrix4(); + const _vector32 = new Vector3(); + const _vector4 = new Vector4(); + const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + let _renderBackground = false; + function getTargetPixelRatio() { + return _currentRenderTarget === null ? _pixelRatio : 1; + } + let _gl = context; + function getContext(contextName, contextAttributes) { + return canvas.getContext(contextName, contextAttributes); + } + try { + const contextAttributes = { + alpha: true, + depth, + stencil, + antialias, + premultipliedAlpha, + preserveDrawingBuffer, + powerPreference, + failIfMajorPerformanceCaveat + }; + if ("setAttribute" in canvas) canvas.setAttribute("data-engine", `three.js r${REVISION}`); + canvas.addEventListener("webglcontextlost", onContextLost, false); + canvas.addEventListener("webglcontextrestored", onContextRestore, false); + canvas.addEventListener("webglcontextcreationerror", onContextCreationError, false); + if (_gl === null) { + const contextName = "webgl2"; + _gl = getContext(contextName, contextAttributes); + if (_gl === null) { + if (getContext(contextName)) { + throw new Error("Error creating WebGL context with your selected attributes."); + } else { + throw new Error("Error creating WebGL context."); + } + } + } + } catch (error) { + console.error("THREE.WebGLRenderer: " + error.message); + throw error; + } + let extensions, capabilities, state, info; + let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; + let programCache, materials, renderLists, renderStates, clipping, shadowMap; + let background, morphtargets, bufferRenderer, indexedBufferRenderer; + let utils, bindingStates, uniformsGroups; + function initGLContext() { + extensions = new WebGLExtensions(_gl); + extensions.init(); + utils = new WebGLUtils(_gl, extensions); + capabilities = new WebGLCapabilities(_gl, extensions, parameters, utils); + state = new WebGLState(_gl); + info = new WebGLInfo(_gl); + properties = new WebGLProperties(); + textures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info); + cubemaps = new WebGLCubeMaps(_this); + cubeuvmaps = new WebGLCubeUVMaps(_this); + attributes = new WebGLAttributes(_gl); + bindingStates = new WebGLBindingStates(_gl, attributes); + geometries = new WebGLGeometries(_gl, attributes, info, bindingStates); + objects = new WebGLObjects(_gl, geometries, attributes, info); + morphtargets = new WebGLMorphtargets(_gl, capabilities, textures); + clipping = new WebGLClipping(properties); + programCache = new WebGLPrograms(_this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping); + materials = new WebGLMaterials(_this, properties); + renderLists = new WebGLRenderLists(); + renderStates = new WebGLRenderStates(extensions); + background = new WebGLBackground(_this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha); + shadowMap = new WebGLShadowMap(_this, objects, capabilities); + uniformsGroups = new WebGLUniformsGroups(_gl, info, capabilities, state); + bufferRenderer = new WebGLBufferRenderer(_gl, extensions, info); + indexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info); + info.programs = programCache.programs; + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.shadowMap = shadowMap; + _this.state = state; + _this.info = info; + } + initGLContext(); + const xr = new WebXRManager(_this, _gl); + this.xr = xr; + this.getContext = function() { + return _gl; + }; + this.getContextAttributes = function() { + return _gl.getContextAttributes(); + }; + this.forceContextLoss = function() { + const extension = extensions.get("WEBGL_lose_context"); + if (extension) extension.loseContext(); + }; + this.forceContextRestore = function() { + const extension = extensions.get("WEBGL_lose_context"); + if (extension) extension.restoreContext(); + }; + this.getPixelRatio = function() { + return _pixelRatio; + }; + this.setPixelRatio = function(value) { + if (value === void 0) return; + _pixelRatio = value; + this.setSize(_width, _height, false); + }; + this.getSize = function(target) { + return target.set(_width, _height); + }; + this.setSize = function(width, height, updateStyle = true) { + if (xr.isPresenting) { + console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."); + return; + } + _width = width; + _height = height; + canvas.width = Math.floor(width * _pixelRatio); + canvas.height = Math.floor(height * _pixelRatio); + if (updateStyle === true) { + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } + this.setViewport(0, 0, width, height); + }; + this.getDrawingBufferSize = function(target) { + return target.set(_width * _pixelRatio, _height * _pixelRatio).floor(); + }; + this.setDrawingBufferSize = function(width, height, pixelRatio) { + _width = width; + _height = height; + _pixelRatio = pixelRatio; + canvas.width = Math.floor(width * pixelRatio); + canvas.height = Math.floor(height * pixelRatio); + this.setViewport(0, 0, width, height); + }; + this.getCurrentViewport = function(target) { + return target.copy(_currentViewport); + }; + this.getViewport = function(target) { + return target.copy(_viewport); + }; + this.setViewport = function(x, y, width, height) { + if (x.isVector4) { + _viewport.set(x.x, x.y, x.z, x.w); + } else { + _viewport.set(x, y, width, height); + } + state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).round()); + }; + this.getScissor = function(target) { + return target.copy(_scissor); + }; + this.setScissor = function(x, y, width, height) { + if (x.isVector4) { + _scissor.set(x.x, x.y, x.z, x.w); + } else { + _scissor.set(x, y, width, height); + } + state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).round()); + }; + this.getScissorTest = function() { + return _scissorTest; + }; + this.setScissorTest = function(boolean) { + state.setScissorTest(_scissorTest = boolean); + }; + this.setOpaqueSort = function(method) { + _opaqueSort = method; + }; + this.setTransparentSort = function(method) { + _transparentSort = method; + }; + this.getClearColor = function(target) { + return target.copy(background.getClearColor()); + }; + this.setClearColor = function() { + background.setClearColor.apply(background, arguments); + }; + this.getClearAlpha = function() { + return background.getClearAlpha(); + }; + this.setClearAlpha = function() { + background.setClearAlpha.apply(background, arguments); + }; + this.clear = function(color = true, depth2 = true, stencil2 = true) { + let bits = 0; + if (color) { + let isIntegerFormat = false; + if (_currentRenderTarget !== null) { + const targetFormat = _currentRenderTarget.texture.format; + isIntegerFormat = targetFormat === RGBAIntegerFormat || targetFormat === RGIntegerFormat || targetFormat === RedIntegerFormat; + } + if (isIntegerFormat) { + const targetType = _currentRenderTarget.texture.type; + const isUnsignedType = targetType === UnsignedByteType || targetType === UnsignedIntType || targetType === UnsignedShortType || targetType === UnsignedInt248Type || targetType === UnsignedShort4444Type || targetType === UnsignedShort5551Type; + const clearColor = background.getClearColor(); + const a = background.getClearAlpha(); + const r = clearColor.r; + const g = clearColor.g; + const b = clearColor.b; + if (isUnsignedType) { + uintClearColor[0] = r; + uintClearColor[1] = g; + uintClearColor[2] = b; + uintClearColor[3] = a; + _gl.clearBufferuiv(_gl.COLOR, 0, uintClearColor); + } else { + intClearColor[0] = r; + intClearColor[1] = g; + intClearColor[2] = b; + intClearColor[3] = a; + _gl.clearBufferiv(_gl.COLOR, 0, intClearColor); + } + } else { + bits |= _gl.COLOR_BUFFER_BIT; + } + } + if (depth2) bits |= _gl.DEPTH_BUFFER_BIT; + if (stencil2) { + bits |= _gl.STENCIL_BUFFER_BIT; + this.state.buffers.stencil.setMask(4294967295); + } + _gl.clear(bits); + }; + this.clearColor = function() { + this.clear(true, false, false); + }; + this.clearDepth = function() { + this.clear(false, true, false); + }; + this.clearStencil = function() { + this.clear(false, false, true); + }; + this.dispose = function() { + canvas.removeEventListener("webglcontextlost", onContextLost, false); + canvas.removeEventListener("webglcontextrestored", onContextRestore, false); + canvas.removeEventListener("webglcontextcreationerror", onContextCreationError, false); + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + cubeuvmaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + uniformsGroups.dispose(); + programCache.dispose(); + xr.dispose(); + xr.removeEventListener("sessionstart", onXRSessionStart); + xr.removeEventListener("sessionend", onXRSessionEnd); + animation.stop(); + }; + function onContextLost(event) { + event.preventDefault(); + console.log("THREE.WebGLRenderer: Context Lost."); + _isContextLost = true; + } + function onContextRestore() { + console.log("THREE.WebGLRenderer: Context Restored."); + _isContextLost = false; + const infoAutoReset = info.autoReset; + const shadowMapEnabled = shadowMap.enabled; + const shadowMapAutoUpdate = shadowMap.autoUpdate; + const shadowMapNeedsUpdate = shadowMap.needsUpdate; + const shadowMapType = shadowMap.type; + initGLContext(); + info.autoReset = infoAutoReset; + shadowMap.enabled = shadowMapEnabled; + shadowMap.autoUpdate = shadowMapAutoUpdate; + shadowMap.needsUpdate = shadowMapNeedsUpdate; + shadowMap.type = shadowMapType; + } + function onContextCreationError(event) { + console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ", event.statusMessage); + } + function onMaterialDispose(event) { + const material = event.target; + material.removeEventListener("dispose", onMaterialDispose); + deallocateMaterial(material); + } + function deallocateMaterial(material) { + releaseMaterialProgramReferences(material); + properties.remove(material); + } + function releaseMaterialProgramReferences(material) { + const programs = properties.get(material).programs; + if (programs !== void 0) { + programs.forEach(function(program) { + programCache.releaseProgram(program); + }); + if (material.isShaderMaterial) { + programCache.releaseShaderCache(material); + } + } + } + this.renderBufferDirect = function(camera, scene, geometry, material, object, group) { + if (scene === null) scene = _emptyScene; + const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0; + const program = setProgram(camera, scene, geometry, material, object); + state.setMaterial(material, frontFaceCW); + let index = geometry.index; + let rangeFactor = 1; + if (material.wireframe === true) { + index = geometries.getWireframeAttribute(geometry); + if (index === void 0) return; + rangeFactor = 2; + } + const drawRange = geometry.drawRange; + const position = geometry.attributes.position; + let drawStart = drawRange.start * rangeFactor; + let drawEnd = (drawRange.start + drawRange.count) * rangeFactor; + if (group !== null) { + drawStart = Math.max(drawStart, group.start * rangeFactor); + drawEnd = Math.min(drawEnd, (group.start + group.count) * rangeFactor); + } + if (index !== null) { + drawStart = Math.max(drawStart, 0); + drawEnd = Math.min(drawEnd, index.count); + } else if (position !== void 0 && position !== null) { + drawStart = Math.max(drawStart, 0); + drawEnd = Math.min(drawEnd, position.count); + } + const drawCount = drawEnd - drawStart; + if (drawCount < 0 || drawCount === Infinity) return; + bindingStates.setup(object, material, program, geometry, index); + let attribute; + let renderer = bufferRenderer; + if (index !== null) { + attribute = attributes.get(index); + renderer = indexedBufferRenderer; + renderer.setIndex(attribute); + } + if (object.isMesh) { + if (material.wireframe === true) { + state.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio()); + renderer.setMode(_gl.LINES); + } else { + renderer.setMode(_gl.TRIANGLES); + } + } else if (object.isLine) { + let lineWidth = material.linewidth; + if (lineWidth === void 0) lineWidth = 1; + state.setLineWidth(lineWidth * getTargetPixelRatio()); + if (object.isLineSegments) { + renderer.setMode(_gl.LINES); + } else if (object.isLineLoop) { + renderer.setMode(_gl.LINE_LOOP); + } else { + renderer.setMode(_gl.LINE_STRIP); + } + } else if (object.isPoints) { + renderer.setMode(_gl.POINTS); + } else if (object.isSprite) { + renderer.setMode(_gl.TRIANGLES); + } + if (object.isBatchedMesh) { + if (object._multiDrawInstances !== null) { + renderer.renderMultiDrawInstances(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances); + } else { + if (!extensions.get("WEBGL_multi_draw")) { + const starts = object._multiDrawStarts; + const counts = object._multiDrawCounts; + const drawCount2 = object._multiDrawCount; + const bytesPerElement = index ? attributes.get(index).bytesPerElement : 1; + const uniforms = properties.get(material).currentProgram.getUniforms(); + for (let i = 0; i < drawCount2; i++) { + uniforms.setValue(_gl, "_gl_DrawID", i); + renderer.render(starts[i] / bytesPerElement, counts[i]); + } + } else { + renderer.renderMultiDraw(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount); + } + } + } else if (object.isInstancedMesh) { + renderer.renderInstances(drawStart, drawCount, object.count); + } else if (geometry.isInstancedBufferGeometry) { + const maxInstanceCount = geometry._maxInstanceCount !== void 0 ? geometry._maxInstanceCount : Infinity; + const instanceCount = Math.min(geometry.instanceCount, maxInstanceCount); + renderer.renderInstances(drawStart, drawCount, instanceCount); + } else { + renderer.render(drawStart, drawCount); + } + }; + function prepareMaterial(material, scene, object) { + if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { + material.side = BackSide; + material.needsUpdate = true; + getProgram(material, scene, object); + material.side = FrontSide; + material.needsUpdate = true; + getProgram(material, scene, object); + material.side = DoubleSide; + } else { + getProgram(material, scene, object); + } + } + this.compile = function(scene, camera, targetScene = null) { + if (targetScene === null) targetScene = scene; + currentRenderState = renderStates.get(targetScene); + currentRenderState.init(camera); + renderStateStack.push(currentRenderState); + targetScene.traverseVisible(function(object) { + if (object.isLight && object.layers.test(camera.layers)) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } + }); + if (scene !== targetScene) { + scene.traverseVisible(function(object) { + if (object.isLight && object.layers.test(camera.layers)) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } + }); + } + currentRenderState.setupLights(); + const materials2 = /* @__PURE__ */ new Set(); + scene.traverse(function(object) { + const material = object.material; + if (material) { + if (Array.isArray(material)) { + for (let i = 0; i < material.length; i++) { + const material2 = material[i]; + prepareMaterial(material2, targetScene, object); + materials2.add(material2); + } + } else { + prepareMaterial(material, targetScene, object); + materials2.add(material); + } + } + }); + renderStateStack.pop(); + currentRenderState = null; + return materials2; + }; + this.compileAsync = function(scene, camera, targetScene = null) { + const materials2 = this.compile(scene, camera, targetScene); + return new Promise((resolve) => { + function checkMaterialsReady() { + materials2.forEach(function(material) { + const materialProperties = properties.get(material); + const program = materialProperties.currentProgram; + if (program.isReady()) { + materials2.delete(material); + } + }); + if (materials2.size === 0) { + resolve(scene); + return; + } + setTimeout(checkMaterialsReady, 10); + } + if (extensions.get("KHR_parallel_shader_compile") !== null) { + checkMaterialsReady(); + } else { + setTimeout(checkMaterialsReady, 10); + } + }); + }; + let onAnimationFrameCallback = null; + function onAnimationFrame(time) { + if (onAnimationFrameCallback) onAnimationFrameCallback(time); + } + function onXRSessionStart() { + animation.stop(); + } + function onXRSessionEnd() { + animation.start(); + } + const animation = new WebGLAnimation(); + animation.setAnimationLoop(onAnimationFrame); + if (typeof self !== "undefined") animation.setContext(self); + this.setAnimationLoop = function(callback) { + onAnimationFrameCallback = callback; + xr.setAnimationLoop(callback); + callback === null ? animation.stop() : animation.start(); + }; + xr.addEventListener("sessionstart", onXRSessionStart); + xr.addEventListener("sessionend", onXRSessionEnd); + this.render = function(scene, camera) { + if (camera !== void 0 && camera.isCamera !== true) { + console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); + return; + } + if (_isContextLost === true) return; + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + if (xr.enabled === true && xr.isPresenting === true) { + if (xr.cameraAutoUpdate === true) xr.updateCamera(camera); + camera = xr.getCamera(); + } + if (scene.isScene === true) scene.onBeforeRender(_this, scene, camera, _currentRenderTarget); + currentRenderState = renderStates.get(scene, renderStateStack.length); + currentRenderState.init(camera); + renderStateStack.push(currentRenderState); + _projScreenMatrix2.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); + _frustum2.setFromProjectionMatrix(_projScreenMatrix2); + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled); + currentRenderList = renderLists.get(scene, renderListStack.length); + currentRenderList.init(); + renderListStack.push(currentRenderList); + if (xr.enabled === true && xr.isPresenting === true) { + const depthSensingMesh = _this.xr.getDepthSensingMesh(); + if (depthSensingMesh !== null) { + projectObject(depthSensingMesh, camera, -Infinity, _this.sortObjects); + } + } + projectObject(scene, camera, 0, _this.sortObjects); + currentRenderList.finish(); + if (_this.sortObjects === true) { + currentRenderList.sort(_opaqueSort, _transparentSort); + } + _renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false; + if (_renderBackground) { + background.addToRenderList(currentRenderList, scene); + } + this.info.render.frame++; + if (_clippingEnabled === true) clipping.beginShadows(); + const shadowsArray = currentRenderState.state.shadowsArray; + shadowMap.render(shadowsArray, scene, camera); + if (_clippingEnabled === true) clipping.endShadows(); + if (this.info.autoReset === true) this.info.reset(); + const opaqueObjects = currentRenderList.opaque; + const transmissiveObjects = currentRenderList.transmissive; + currentRenderState.setupLights(); + if (camera.isArrayCamera) { + const cameras = camera.cameras; + if (transmissiveObjects.length > 0) { + for (let i = 0, l = cameras.length; i < l; i++) { + const camera2 = cameras[i]; + renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera2); + } + } + if (_renderBackground) background.render(scene); + for (let i = 0, l = cameras.length; i < l; i++) { + const camera2 = cameras[i]; + renderScene(currentRenderList, scene, camera2, camera2.viewport); + } + } else { + if (transmissiveObjects.length > 0) renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera); + if (_renderBackground) background.render(scene); + renderScene(currentRenderList, scene, camera); + } + if (_currentRenderTarget !== null) { + textures.updateMultisampleRenderTarget(_currentRenderTarget); + textures.updateRenderTargetMipmap(_currentRenderTarget); + } + if (scene.isScene === true) scene.onAfterRender(_this, scene, camera); + bindingStates.resetDefaultState(); + _currentMaterialId = -1; + _currentCamera = null; + renderStateStack.pop(); + if (renderStateStack.length > 0) { + currentRenderState = renderStateStack[renderStateStack.length - 1]; + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, currentRenderState.state.camera); + } else { + currentRenderState = null; + } + renderListStack.pop(); + if (renderListStack.length > 0) { + currentRenderList = renderListStack[renderListStack.length - 1]; + } else { + currentRenderList = null; + } + }; + function projectObject(object, camera, groupOrder, sortObjects) { + if (object.visible === false) return; + const visible = object.layers.test(camera.layers); + if (visible) { + if (object.isGroup) { + groupOrder = object.renderOrder; + } else if (object.isLOD) { + if (object.autoUpdate === true) object.update(camera); + } else if (object.isLight) { + currentRenderState.pushLight(object); + if (object.castShadow) { + currentRenderState.pushShadow(object); + } + } else if (object.isSprite) { + if (!object.frustumCulled || _frustum2.intersectsSprite(object)) { + if (sortObjects) { + _vector4.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix2); + } + const geometry = objects.update(object); + const material = object.material; + if (material.visible) { + currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); + } + } + } else if (object.isMesh || object.isLine || object.isPoints) { + if (!object.frustumCulled || _frustum2.intersectsObject(object)) { + const geometry = objects.update(object); + const material = object.material; + if (sortObjects) { + if (object.boundingSphere !== void 0) { + if (object.boundingSphere === null) object.computeBoundingSphere(); + _vector4.copy(object.boundingSphere.center); + } else { + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _vector4.copy(geometry.boundingSphere.center); + } + _vector4.applyMatrix4(object.matrixWorld).applyMatrix4(_projScreenMatrix2); + } + if (Array.isArray(material)) { + const groups = geometry.groups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + const groupMaterial = material[group.materialIndex]; + if (groupMaterial && groupMaterial.visible) { + currentRenderList.push(object, geometry, groupMaterial, groupOrder, _vector4.z, group); + } + } + } else if (material.visible) { + currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); + } + } + } + } + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + projectObject(children[i], camera, groupOrder, sortObjects); + } + } + function renderScene(currentRenderList2, scene, camera, viewport) { + const opaqueObjects = currentRenderList2.opaque; + const transmissiveObjects = currentRenderList2.transmissive; + const transparentObjects = currentRenderList2.transparent; + currentRenderState.setupLightsView(camera); + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); + if (viewport) state.viewport(_currentViewport.copy(viewport)); + if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera); + if (transmissiveObjects.length > 0) renderObjects(transmissiveObjects, scene, camera); + if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); + state.buffers.depth.setTest(true); + state.buffers.depth.setMask(true); + state.buffers.color.setMask(true); + state.setPolygonOffset(false); + } + function renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera) { + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + if (overrideMaterial !== null) { + return; + } + if (currentRenderState.state.transmissionRenderTarget[camera.id] === void 0) { + currentRenderState.state.transmissionRenderTarget[camera.id] = new WebGLRenderTarget(1, 1, { + generateMipmaps: true, + type: extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float") ? HalfFloatType : UnsignedByteType, + minFilter: LinearMipmapLinearFilter, + samples: 4, + stencilBuffer: stencil, + resolveDepthBuffer: false, + resolveStencilBuffer: false, + colorSpace: ColorManagement.workingColorSpace + }); + } + const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[camera.id]; + const activeViewport = camera.viewport || _currentViewport; + transmissionRenderTarget.setSize(activeViewport.z, activeViewport.w); + const currentRenderTarget = _this.getRenderTarget(); + _this.setRenderTarget(transmissionRenderTarget); + _this.getClearColor(_currentClearColor); + _currentClearAlpha = _this.getClearAlpha(); + if (_currentClearAlpha < 1) _this.setClearColor(16777215, 0.5); + _this.clear(); + if (_renderBackground) background.render(scene); + const currentToneMapping = _this.toneMapping; + _this.toneMapping = NoToneMapping; + const currentCameraViewport = camera.viewport; + if (camera.viewport !== void 0) camera.viewport = void 0; + currentRenderState.setupLightsView(camera); + if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); + renderObjects(opaqueObjects, scene, camera); + textures.updateMultisampleRenderTarget(transmissionRenderTarget); + textures.updateRenderTargetMipmap(transmissionRenderTarget); + if (extensions.has("WEBGL_multisampled_render_to_texture") === false) { + let renderTargetNeedsUpdate = false; + for (let i = 0, l = transmissiveObjects.length; i < l; i++) { + const renderItem = transmissiveObjects[i]; + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = renderItem.material; + const group = renderItem.group; + if (material.side === DoubleSide && object.layers.test(camera.layers)) { + const currentSide = material.side; + material.side = BackSide; + material.needsUpdate = true; + renderObject(object, scene, camera, geometry, material, group); + material.side = currentSide; + material.needsUpdate = true; + renderTargetNeedsUpdate = true; + } + } + if (renderTargetNeedsUpdate === true) { + textures.updateMultisampleRenderTarget(transmissionRenderTarget); + textures.updateRenderTargetMipmap(transmissionRenderTarget); + } + } + _this.setRenderTarget(currentRenderTarget); + _this.setClearColor(_currentClearColor, _currentClearAlpha); + if (currentCameraViewport !== void 0) camera.viewport = currentCameraViewport; + _this.toneMapping = currentToneMapping; + } + function renderObjects(renderList, scene, camera) { + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + for (let i = 0, l = renderList.length; i < l; i++) { + const renderItem = renderList[i]; + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + if (object.layers.test(camera.layers)) { + renderObject(object, scene, camera, geometry, material, group); + } + } + } + function renderObject(object, scene, camera, geometry, material, group) { + object.onBeforeRender(_this, scene, camera, geometry, material, group); + object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); + object.normalMatrix.getNormalMatrix(object.modelViewMatrix); + if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { + material.side = BackSide; + material.needsUpdate = true; + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + material.side = FrontSide; + material.needsUpdate = true; + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + material.side = DoubleSide; + } else { + _this.renderBufferDirect(camera, scene, geometry, material, object, group); + } + object.onAfterRender(_this, scene, camera, geometry, material, group); + } + function getProgram(material, scene, object) { + if (scene.isScene !== true) scene = _emptyScene; + const materialProperties = properties.get(material); + const lights = currentRenderState.state.lights; + const shadowsArray = currentRenderState.state.shadowsArray; + const lightsStateVersion = lights.state.version; + const parameters2 = programCache.getParameters(material, lights.state, shadowsArray, scene, object); + const programCacheKey = programCache.getProgramCacheKey(parameters2); + let programs = materialProperties.programs; + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || materialProperties.environment); + materialProperties.envMapRotation = materialProperties.environment !== null && material.envMap === null ? scene.environmentRotation : material.envMapRotation; + if (programs === void 0) { + material.addEventListener("dispose", onMaterialDispose); + programs = /* @__PURE__ */ new Map(); + materialProperties.programs = programs; + } + let program = programs.get(programCacheKey); + if (program !== void 0) { + if (materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion) { + updateCommonMaterialProperties(material, parameters2); + return program; + } + } else { + parameters2.uniforms = programCache.getUniforms(material); + material.onBeforeCompile(parameters2, _this); + program = programCache.acquireProgram(parameters2, programCacheKey); + programs.set(programCacheKey, program); + materialProperties.uniforms = parameters2.uniforms; + } + const uniforms = materialProperties.uniforms; + if (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) { + uniforms.clippingPlanes = clipping.uniform; + } + updateCommonMaterialProperties(material, parameters2); + materialProperties.needsLights = materialNeedsLights(material); + materialProperties.lightsStateVersion = lightsStateVersion; + if (materialProperties.needsLights) { + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotLightMatrix.value = lights.state.spotLightMatrix; + uniforms.spotLightMap.value = lights.state.spotLightMap; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + } + materialProperties.currentProgram = program; + materialProperties.uniformsList = null; + return program; + } + function getUniformList(materialProperties) { + if (materialProperties.uniformsList === null) { + const progUniforms = materialProperties.currentProgram.getUniforms(); + materialProperties.uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, materialProperties.uniforms); + } + return materialProperties.uniformsList; + } + function updateCommonMaterialProperties(material, parameters2) { + const materialProperties = properties.get(material); + materialProperties.outputColorSpace = parameters2.outputColorSpace; + materialProperties.batching = parameters2.batching; + materialProperties.batchingColor = parameters2.batchingColor; + materialProperties.instancing = parameters2.instancing; + materialProperties.instancingColor = parameters2.instancingColor; + materialProperties.instancingMorph = parameters2.instancingMorph; + materialProperties.skinning = parameters2.skinning; + materialProperties.morphTargets = parameters2.morphTargets; + materialProperties.morphNormals = parameters2.morphNormals; + materialProperties.morphColors = parameters2.morphColors; + materialProperties.morphTargetsCount = parameters2.morphTargetsCount; + materialProperties.numClippingPlanes = parameters2.numClippingPlanes; + materialProperties.numIntersection = parameters2.numClipIntersection; + materialProperties.vertexAlphas = parameters2.vertexAlphas; + materialProperties.vertexTangents = parameters2.vertexTangents; + materialProperties.toneMapping = parameters2.toneMapping; + } + function setProgram(camera, scene, geometry, material, object) { + if (scene.isScene !== true) scene = _emptyScene; + textures.resetTextureUnits(); + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const colorSpace = _currentRenderTarget === null ? _this.outputColorSpace : _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace; + const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); + const vertexAlphas = material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4; + const vertexTangents = !!geometry.attributes.tangent && (!!material.normalMap || material.anisotropy > 0); + const morphTargets = !!geometry.morphAttributes.position; + const morphNormals = !!geometry.morphAttributes.normal; + const morphColors = !!geometry.morphAttributes.color; + let toneMapping = NoToneMapping; + if (material.toneMapped) { + if (_currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true) { + toneMapping = _this.toneMapping; + } + } + const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; + const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; + const materialProperties = properties.get(material); + const lights = currentRenderState.state.lights; + if (_clippingEnabled === true) { + if (_localClippingEnabled === true || camera !== _currentCamera) { + const useCache = camera === _currentCamera && material.id === _currentMaterialId; + clipping.setState(material, camera, useCache); + } + } + let needsProgramChange = false; + if (material.version === materialProperties.__version) { + if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) { + needsProgramChange = true; + } else if (materialProperties.outputColorSpace !== colorSpace) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batching === false) { + needsProgramChange = true; + } else if (!object.isBatchedMesh && materialProperties.batching === true) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null) { + needsProgramChange = true; + } else if (object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancing === false) { + needsProgramChange = true; + } else if (!object.isInstancedMesh && materialProperties.instancing === true) { + needsProgramChange = true; + } else if (object.isSkinnedMesh && materialProperties.skinning === false) { + needsProgramChange = true; + } else if (!object.isSkinnedMesh && materialProperties.skinning === true) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null) { + needsProgramChange = true; + } else if (object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null) { + needsProgramChange = true; + } else if (materialProperties.envMap !== envMap) { + needsProgramChange = true; + } else if (material.fog === true && materialProperties.fog !== fog) { + needsProgramChange = true; + } else if (materialProperties.numClippingPlanes !== void 0 && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) { + needsProgramChange = true; + } else if (materialProperties.vertexAlphas !== vertexAlphas) { + needsProgramChange = true; + } else if (materialProperties.vertexTangents !== vertexTangents) { + needsProgramChange = true; + } else if (materialProperties.morphTargets !== morphTargets) { + needsProgramChange = true; + } else if (materialProperties.morphNormals !== morphNormals) { + needsProgramChange = true; + } else if (materialProperties.morphColors !== morphColors) { + needsProgramChange = true; + } else if (materialProperties.toneMapping !== toneMapping) { + needsProgramChange = true; + } else if (materialProperties.morphTargetsCount !== morphTargetsCount) { + needsProgramChange = true; + } + } else { + needsProgramChange = true; + materialProperties.__version = material.version; + } + let program = materialProperties.currentProgram; + if (needsProgramChange === true) { + program = getProgram(material, scene, object); + } + let refreshProgram = false; + let refreshMaterial = false; + let refreshLights = false; + const p_uniforms = program.getUniforms(), m_uniforms = materialProperties.uniforms; + if (state.useProgram(program.program)) { + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + } + if (material.id !== _currentMaterialId) { + _currentMaterialId = material.id; + refreshMaterial = true; + } + if (refreshProgram || _currentCamera !== camera) { + p_uniforms.setValue(_gl, "projectionMatrix", camera.projectionMatrix); + p_uniforms.setValue(_gl, "viewMatrix", camera.matrixWorldInverse); + const uCamPos = p_uniforms.map.cameraPosition; + if (uCamPos !== void 0) { + uCamPos.setValue(_gl, _vector32.setFromMatrixPosition(camera.matrixWorld)); + } + if (capabilities.logarithmicDepthBuffer) { + p_uniforms.setValue( + _gl, + "logDepthBufFC", + 2 / (Math.log(camera.far + 1) / Math.LN2) + ); + } + if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) { + p_uniforms.setValue(_gl, "isOrthographic", camera.isOrthographicCamera === true); + } + if (_currentCamera !== camera) { + _currentCamera = camera; + refreshMaterial = true; + refreshLights = true; + } + } + if (object.isSkinnedMesh) { + p_uniforms.setOptional(_gl, object, "bindMatrix"); + p_uniforms.setOptional(_gl, object, "bindMatrixInverse"); + const skeleton = object.skeleton; + if (skeleton) { + if (skeleton.boneTexture === null) skeleton.computeBoneTexture(); + p_uniforms.setValue(_gl, "boneTexture", skeleton.boneTexture, textures); + } + } + if (object.isBatchedMesh) { + p_uniforms.setOptional(_gl, object, "batchingTexture"); + p_uniforms.setValue(_gl, "batchingTexture", object._matricesTexture, textures); + p_uniforms.setOptional(_gl, object, "batchingIdTexture"); + p_uniforms.setValue(_gl, "batchingIdTexture", object._indirectTexture, textures); + p_uniforms.setOptional(_gl, object, "batchingColorTexture"); + if (object._colorsTexture !== null) { + p_uniforms.setValue(_gl, "batchingColorTexture", object._colorsTexture, textures); + } + } + const morphAttributes = geometry.morphAttributes; + if (morphAttributes.position !== void 0 || morphAttributes.normal !== void 0 || morphAttributes.color !== void 0) { + morphtargets.update(object, geometry, program); + } + if (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) { + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue(_gl, "receiveShadow", object.receiveShadow); + } + if (material.isMeshGouraudMaterial && material.envMap !== null) { + m_uniforms.envMap.value = envMap; + m_uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; + } + if (material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null) { + m_uniforms.envMapIntensity.value = scene.environmentIntensity; + } + if (refreshMaterial) { + p_uniforms.setValue(_gl, "toneMappingExposure", _this.toneMappingExposure); + if (materialProperties.needsLights) { + markUniformsLightsNeedsUpdate(m_uniforms, refreshLights); + } + if (fog && material.fog === true) { + materials.refreshFogUniforms(m_uniforms, fog); + } + materials.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[camera.id]); + WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); + } + if (material.isShaderMaterial && material.uniformsNeedUpdate === true) { + WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); + material.uniformsNeedUpdate = false; + } + if (material.isSpriteMaterial) { + p_uniforms.setValue(_gl, "center", object.center); + } + p_uniforms.setValue(_gl, "modelViewMatrix", object.modelViewMatrix); + p_uniforms.setValue(_gl, "normalMatrix", object.normalMatrix); + p_uniforms.setValue(_gl, "modelMatrix", object.matrixWorld); + if (material.isShaderMaterial || material.isRawShaderMaterial) { + const groups = material.uniformsGroups; + for (let i = 0, l = groups.length; i < l; i++) { + const group = groups[i]; + uniformsGroups.update(group, program); + uniformsGroups.bind(group, program); + } + } + return program; + } + function markUniformsLightsNeedsUpdate(uniforms, value) { + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + } + function materialNeedsLights(material) { + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true; + } + this.getActiveCubeFace = function() { + return _currentActiveCubeFace; + }; + this.getActiveMipmapLevel = function() { + return _currentActiveMipmapLevel; + }; + this.getRenderTarget = function() { + return _currentRenderTarget; + }; + this.setRenderTargetTextures = function(renderTarget, colorTexture, depthTexture) { + properties.get(renderTarget.texture).__webglTexture = colorTexture; + properties.get(renderTarget.depthTexture).__webglTexture = depthTexture; + const renderTargetProperties = properties.get(renderTarget); + renderTargetProperties.__hasExternalTextures = true; + renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === void 0; + if (!renderTargetProperties.__autoAllocateDepthBuffer) { + if (extensions.has("WEBGL_multisampled_render_to_texture") === true) { + console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"); + renderTargetProperties.__useRenderToTexture = false; + } + } + }; + this.setRenderTargetFramebuffer = function(renderTarget, defaultFramebuffer) { + const renderTargetProperties = properties.get(renderTarget); + renderTargetProperties.__webglFramebuffer = defaultFramebuffer; + renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === void 0; + }; + this.setRenderTarget = function(renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) { + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + let useDefaultFramebuffer = true; + let framebuffer = null; + let isCube = false; + let isRenderTarget3D = false; + if (renderTarget) { + const renderTargetProperties = properties.get(renderTarget); + if (renderTargetProperties.__useDefaultFramebuffer !== void 0) { + state.bindFramebuffer(_gl.FRAMEBUFFER, null); + useDefaultFramebuffer = false; + } else if (renderTargetProperties.__webglFramebuffer === void 0) { + textures.setupRenderTarget(renderTarget); + } else if (renderTargetProperties.__hasExternalTextures) { + textures.rebindTextures(renderTarget, properties.get(renderTarget.texture).__webglTexture, properties.get(renderTarget.depthTexture).__webglTexture); + } + const texture = renderTarget.texture; + if (texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + isRenderTarget3D = true; + } + const __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget) { + if (Array.isArray(__webglFramebuffer[activeCubeFace])) { + framebuffer = __webglFramebuffer[activeCubeFace][activeMipmapLevel]; + } else { + framebuffer = __webglFramebuffer[activeCubeFace]; + } + isCube = true; + } else if (renderTarget.samples > 0 && textures.useMultisampledRTT(renderTarget) === false) { + framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; + } else { + if (Array.isArray(__webglFramebuffer)) { + framebuffer = __webglFramebuffer[activeMipmapLevel]; + } else { + framebuffer = __webglFramebuffer; + } + } + _currentViewport.copy(renderTarget.viewport); + _currentScissor.copy(renderTarget.scissor); + _currentScissorTest = renderTarget.scissorTest; + } else { + _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor(); + _currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor(); + _currentScissorTest = _scissorTest; + } + const framebufferBound = state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + if (framebufferBound && useDefaultFramebuffer) { + state.drawBuffers(renderTarget, framebuffer); + } + state.viewport(_currentViewport); + state.scissor(_currentScissor); + state.setScissorTest(_currentScissorTest); + if (isCube) { + const textureProperties = properties.get(renderTarget.texture); + _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel); + } else if (isRenderTarget3D) { + const textureProperties = properties.get(renderTarget.texture); + const layer = activeCubeFace || 0; + _gl.framebufferTextureLayer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer); + } + _currentMaterialId = -1; + }; + this.readRenderTargetPixels = function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { + if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + return; + } + let framebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { + framebuffer = framebuffer[activeCubeFaceIndex]; + } + if (framebuffer) { + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + try { + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + if (!capabilities.textureFormatReadable(textureFormat)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + return; + } + if (!capabilities.textureTypeReadable(textureType)) { + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + return; + } + if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { + _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer); + } + } finally { + const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2); + } + } + }; + this.readRenderTargetPixelsAsync = async function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { + if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); + } + let framebuffer = properties.get(renderTarget).__webglFramebuffer; + if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { + framebuffer = framebuffer[activeCubeFaceIndex]; + } + if (framebuffer) { + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); + try { + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + if (!capabilities.textureFormatReadable(textureFormat)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format."); + } + if (!capabilities.textureTypeReadable(textureType)) { + throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type."); + } + if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { + const glBuffer = _gl.createBuffer(); + _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); + _gl.bufferData(_gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ); + _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), 0); + _gl.flush(); + const sync = _gl.fenceSync(_gl.SYNC_GPU_COMMANDS_COMPLETE, 0); + await probeAsync(_gl, sync, 4); + try { + _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); + _gl.getBufferSubData(_gl.PIXEL_PACK_BUFFER, 0, buffer); + } finally { + _gl.deleteBuffer(glBuffer); + _gl.deleteSync(sync); + } + return buffer; + } + } finally { + const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; + state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2); + } + } + }; + this.copyFramebufferToTexture = function(texture, position = null, level = 0) { + if (texture.isTexture !== true) { + warnOnce("WebGLRenderer: copyFramebufferToTexture function signature has changed."); + position = arguments[0] || null; + texture = arguments[1]; + } + const levelScale = Math.pow(2, -level); + const width = Math.floor(texture.image.width * levelScale); + const height = Math.floor(texture.image.height * levelScale); + const x = position !== null ? position.x : 0; + const y = position !== null ? position.y : 0; + textures.setTexture2D(texture, 0); + _gl.copyTexSubImage2D(_gl.TEXTURE_2D, level, 0, 0, x, y, width, height); + state.unbindTexture(); + }; + this.copyTextureToTexture = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { + if (srcTexture.isTexture !== true) { + warnOnce("WebGLRenderer: copyTextureToTexture function signature has changed."); + dstPosition = arguments[0] || null; + srcTexture = arguments[1]; + dstTexture = arguments[2]; + level = arguments[3] || 0; + srcRegion = null; + } + let width, height, minX, minY; + let dstX, dstY; + if (srcRegion !== null) { + width = srcRegion.max.x - srcRegion.min.x; + height = srcRegion.max.y - srcRegion.min.y; + minX = srcRegion.min.x; + minY = srcRegion.min.y; + } else { + width = srcTexture.image.width; + height = srcTexture.image.height; + minX = 0; + minY = 0; + } + if (dstPosition !== null) { + dstX = dstPosition.x; + dstY = dstPosition.y; + } else { + dstX = 0; + dstY = 0; + } + const glFormat = utils.convert(dstTexture.format); + const glType = utils.convert(dstTexture.type); + textures.setTexture2D(dstTexture, 0); + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); + const currentUnpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); + const currentUnpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); + const currentUnpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); + const currentUnpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); + const currentUnpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); + const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, minX); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, minY); + if (srcTexture.isDataTexture) { + _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data); + } else { + if (srcTexture.isCompressedTexture) { + _gl.compressedTexSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data); + } else { + _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image); + } + } + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); + _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); + if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(_gl.TEXTURE_2D); + state.unbindTexture(); + }; + this.copyTextureToTexture3D = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { + if (srcTexture.isTexture !== true) { + warnOnce("WebGLRenderer: copyTextureToTexture3D function signature has changed."); + srcRegion = arguments[0] || null; + dstPosition = arguments[1] || null; + srcTexture = arguments[2]; + dstTexture = arguments[3]; + level = arguments[4] || 0; + } + let width, height, depth2, minX, minY, minZ; + let dstX, dstY, dstZ; + const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; + if (srcRegion !== null) { + width = srcRegion.max.x - srcRegion.min.x; + height = srcRegion.max.y - srcRegion.min.y; + depth2 = srcRegion.max.z - srcRegion.min.z; + minX = srcRegion.min.x; + minY = srcRegion.min.y; + minZ = srcRegion.min.z; + } else { + width = image.width; + height = image.height; + depth2 = image.depth; + minX = 0; + minY = 0; + minZ = 0; + } + if (dstPosition !== null) { + dstX = dstPosition.x; + dstY = dstPosition.y; + dstZ = dstPosition.z; + } else { + dstX = 0; + dstY = 0; + dstZ = 0; + } + const glFormat = utils.convert(dstTexture.format); + const glType = utils.convert(dstTexture.type); + let glTarget; + if (dstTexture.isData3DTexture) { + textures.setTexture3D(dstTexture, 0); + glTarget = _gl.TEXTURE_3D; + } else if (dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture) { + textures.setTexture2DArray(dstTexture, 0); + glTarget = _gl.TEXTURE_2D_ARRAY; + } else { + console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray."); + return; + } + _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); + _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); + _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); + const currentUnpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); + const currentUnpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); + const currentUnpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); + const currentUnpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); + const currentUnpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, minX); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, minY); + _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, minZ); + if (srcTexture.isDataTexture || srcTexture.isData3DTexture) { + _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image.data); + } else { + if (dstTexture.isCompressedArrayTexture) { + _gl.compressedTexSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, image.data); + } else { + _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image); + } + } + _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); + _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); + _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); + _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); + _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); + if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(glTarget); + state.unbindTexture(); + }; + this.initRenderTarget = function(target) { + if (properties.get(target).__webglFramebuffer === void 0) { + textures.setupRenderTarget(target); + } + }; + this.initTexture = function(texture) { + if (texture.isCubeTexture) { + textures.setTextureCube(texture, 0); + } else if (texture.isData3DTexture) { + textures.setTexture3D(texture, 0); + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + textures.setTexture2DArray(texture, 0); + } else { + textures.setTexture2D(texture, 0); + } + state.unbindTexture(); + }; + this.resetState = function() { + _currentActiveCubeFace = 0; + _currentActiveMipmapLevel = 0; + _currentRenderTarget = null; + state.reset(); + bindingStates.reset(); + }; + if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); + } + } + get coordinateSystem() { + return WebGLCoordinateSystem; + } + get outputColorSpace() { + return this._outputColorSpace; + } + set outputColorSpace(colorSpace) { + this._outputColorSpace = colorSpace; + const gl = this.getContext(); + gl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? "display-p3" : "srgb"; + gl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? "display-p3" : "srgb"; + } +}; +var FogExp2 = class _FogExp2 { + constructor(color, density = 25e-5) { + this.isFogExp2 = true; + this.name = ""; + this.color = new Color(color); + this.density = density; + } + clone() { + return new _FogExp2(this.color, this.density); + } + toJSON() { + return { + type: "FogExp2", + name: this.name, + color: this.color.getHex(), + density: this.density + }; + } +}; +var Fog = class _Fog { + constructor(color, near = 1, far = 1e3) { + this.isFog = true; + this.name = ""; + this.color = new Color(color); + this.near = near; + this.far = far; + } + clone() { + return new _Fog(this.color, this.near, this.far); + } + toJSON() { + return { + type: "Fog", + name: this.name, + color: this.color.getHex(), + near: this.near, + far: this.far + }; + } +}; +var Scene = class extends Object3D { + constructor() { + super(); + this.isScene = true; + this.type = "Scene"; + this.background = null; + this.environment = null; + this.fog = null; + this.backgroundBlurriness = 0; + this.backgroundIntensity = 1; + this.backgroundRotation = new Euler(); + this.environmentIntensity = 1; + this.environmentRotation = new Euler(); + this.overrideMaterial = null; + if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); + } + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.background !== null) this.background = source.background.clone(); + if (source.environment !== null) this.environment = source.environment.clone(); + if (source.fog !== null) this.fog = source.fog.clone(); + this.backgroundBlurriness = source.backgroundBlurriness; + this.backgroundIntensity = source.backgroundIntensity; + this.backgroundRotation.copy(source.backgroundRotation); + this.environmentIntensity = source.environmentIntensity; + this.environmentRotation.copy(source.environmentRotation); + if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone(); + this.matrixAutoUpdate = source.matrixAutoUpdate; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.fog !== null) data.object.fog = this.fog.toJSON(); + if (this.backgroundBlurriness > 0) data.object.backgroundBlurriness = this.backgroundBlurriness; + if (this.backgroundIntensity !== 1) data.object.backgroundIntensity = this.backgroundIntensity; + data.object.backgroundRotation = this.backgroundRotation.toArray(); + if (this.environmentIntensity !== 1) data.object.environmentIntensity = this.environmentIntensity; + data.object.environmentRotation = this.environmentRotation.toArray(); + return data; + } +}; +var InterleavedBuffer = class { + constructor(array, stride) { + this.isInterleavedBuffer = true; + this.array = array; + this.stride = stride; + this.count = array !== void 0 ? array.length / stride : 0; + this.usage = StaticDrawUsage; + this._updateRange = { offset: 0, count: -1 }; + this.updateRanges = []; + this.version = 0; + this.uuid = generateUUID(); + } + onUploadCallback() { + } + set needsUpdate(value) { + if (value === true) this.version++; + } + get updateRange() { + warnOnce("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."); + return this._updateRange; + } + setUsage(value) { + this.usage = value; + return this; + } + addUpdateRange(start, count) { + this.updateRanges.push({ start, count }); + } + clearUpdateRanges() { + this.updateRanges.length = 0; + } + copy(source) { + this.array = new source.array.constructor(source.array); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + return this; + } + copyAt(index1, attribute, index2) { + index1 *= this.stride; + index2 *= attribute.stride; + for (let i = 0, l = this.stride; i < l; i++) { + this.array[index1 + i] = attribute.array[index2 + i]; + } + return this; + } + set(value, offset = 0) { + this.array.set(value, offset); + return this; + } + clone(data) { + if (data.arrayBuffers === void 0) { + data.arrayBuffers = {}; + } + if (this.array.buffer._uuid === void 0) { + this.array.buffer._uuid = generateUUID(); + } + if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { + data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer; + } + const array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]); + const ib = new this.constructor(array, this.stride); + ib.setUsage(this.usage); + return ib; + } + onUpload(callback) { + this.onUploadCallback = callback; + return this; + } + toJSON(data) { + if (data.arrayBuffers === void 0) { + data.arrayBuffers = {}; + } + if (this.array.buffer._uuid === void 0) { + this.array.buffer._uuid = generateUUID(); + } + if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { + data.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer)); + } + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + } +}; +var _vector$6 = new Vector3(); +var InterleavedBufferAttribute = class _InterleavedBufferAttribute { + constructor(interleavedBuffer, itemSize, offset, normalized = false) { + this.isInterleavedBufferAttribute = true; + this.name = ""; + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + this.normalized = normalized; + } + get count() { + return this.data.count; + } + get array() { + return this.data.array; + } + set needsUpdate(value) { + this.data.needsUpdate = value; + } + applyMatrix4(m) { + for (let i = 0, l = this.data.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.applyMatrix4(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + applyNormalMatrix(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.applyNormalMatrix(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + transformDirection(m) { + for (let i = 0, l = this.count; i < l; i++) { + _vector$6.fromBufferAttribute(this, i); + _vector$6.transformDirection(m); + this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); + } + return this; + } + getComponent(index, component) { + let value = this.array[index * this.data.stride + this.offset + component]; + if (this.normalized) value = denormalize(value, this.array); + return value; + } + setComponent(index, component, value) { + if (this.normalized) value = normalize(value, this.array); + this.data.array[index * this.data.stride + this.offset + component] = value; + return this; + } + setX(index, x) { + if (this.normalized) x = normalize(x, this.array); + this.data.array[index * this.data.stride + this.offset] = x; + return this; + } + setY(index, y) { + if (this.normalized) y = normalize(y, this.array); + this.data.array[index * this.data.stride + this.offset + 1] = y; + return this; + } + setZ(index, z) { + if (this.normalized) z = normalize(z, this.array); + this.data.array[index * this.data.stride + this.offset + 2] = z; + return this; + } + setW(index, w) { + if (this.normalized) w = normalize(w, this.array); + this.data.array[index * this.data.stride + this.offset + 3] = w; + return this; + } + getX(index) { + let x = this.data.array[index * this.data.stride + this.offset]; + if (this.normalized) x = denormalize(x, this.array); + return x; + } + getY(index) { + let y = this.data.array[index * this.data.stride + this.offset + 1]; + if (this.normalized) y = denormalize(y, this.array); + return y; + } + getZ(index) { + let z = this.data.array[index * this.data.stride + this.offset + 2]; + if (this.normalized) z = denormalize(z, this.array); + return z; + } + getW(index) { + let w = this.data.array[index * this.data.stride + this.offset + 3]; + if (this.normalized) w = denormalize(w, this.array); + return w; + } + setXY(index, x, y) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + return this; + } + setXYZ(index, x, y, z) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + this.data.array[index + 2] = z; + return this; + } + setXYZW(index, x, y, z, w) { + index = index * this.data.stride + this.offset; + if (this.normalized) { + x = normalize(x, this.array); + y = normalize(y, this.array); + z = normalize(z, this.array); + w = normalize(w, this.array); + } + this.data.array[index + 0] = x; + this.data.array[index + 1] = y; + this.data.array[index + 2] = z; + this.data.array[index + 3] = w; + return this; + } + clone(data) { + if (data === void 0) { + console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data."); + const array = []; + for (let i = 0; i < this.count; i++) { + const index = i * this.data.stride + this.offset; + for (let j = 0; j < this.itemSize; j++) { + array.push(this.data.array[index + j]); + } + } + return new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized); + } else { + if (data.interleavedBuffers === void 0) { + data.interleavedBuffers = {}; + } + if (data.interleavedBuffers[this.data.uuid] === void 0) { + data.interleavedBuffers[this.data.uuid] = this.data.clone(data); + } + return new _InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized); + } + } + toJSON(data) { + if (data === void 0) { + console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data."); + const array = []; + for (let i = 0; i < this.count; i++) { + const index = i * this.data.stride + this.offset; + for (let j = 0; j < this.itemSize; j++) { + array.push(this.data.array[index + j]); + } + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array, + normalized: this.normalized + }; + } else { + if (data.interleavedBuffers === void 0) { + data.interleavedBuffers = {}; + } + if (data.interleavedBuffers[this.data.uuid] === void 0) { + data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data); + } + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + } + } +}; +var SpriteMaterial = class extends Material { + constructor(parameters) { + super(); + this.isSpriteMaterial = true; + this.type = "SpriteMaterial"; + this.color = new Color(16777215); + this.map = null; + this.alphaMap = null; + this.rotation = 0; + this.sizeAttenuation = true; + this.transparent = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.rotation = source.rotation; + this.sizeAttenuation = source.sizeAttenuation; + this.fog = source.fog; + return this; + } +}; +var _geometry; +var _intersectPoint = new Vector3(); +var _worldScale = new Vector3(); +var _mvPosition = new Vector3(); +var _alignedPosition = new Vector2(); +var _rotatedPosition = new Vector2(); +var _viewWorldMatrix = new Matrix4(); +var _vA = new Vector3(); +var _vB = new Vector3(); +var _vC = new Vector3(); +var _uvA = new Vector2(); +var _uvB = new Vector2(); +var _uvC = new Vector2(); +var Sprite = class extends Object3D { + constructor(material = new SpriteMaterial()) { + super(); + this.isSprite = true; + this.type = "Sprite"; + if (_geometry === void 0) { + _geometry = new BufferGeometry(); + const float32Array = new Float32Array([ + -0.5, + -0.5, + 0, + 0, + 0, + 0.5, + -0.5, + 0, + 1, + 0, + 0.5, + 0.5, + 0, + 1, + 1, + -0.5, + 0.5, + 0, + 0, + 1 + ]); + const interleavedBuffer = new InterleavedBuffer(float32Array, 5); + _geometry.setIndex([0, 1, 2, 0, 2, 3]); + _geometry.setAttribute("position", new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); + _geometry.setAttribute("uv", new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); + } + this.geometry = _geometry; + this.material = material; + this.center = new Vector2(0.5, 0.5); + } + raycast(raycaster, intersects2) { + if (raycaster.camera === null) { + console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'); + } + _worldScale.setFromMatrixScale(this.matrixWorld); + _viewWorldMatrix.copy(raycaster.camera.matrixWorld); + this.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld); + _mvPosition.setFromMatrixPosition(this.modelViewMatrix); + if (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) { + _worldScale.multiplyScalar(-_mvPosition.z); + } + const rotation = this.material.rotation; + let sin, cos; + if (rotation !== 0) { + cos = Math.cos(rotation); + sin = Math.sin(rotation); + } + const center = this.center; + transformVertex(_vA.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); + transformVertex(_vB.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); + transformVertex(_vC.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); + _uvA.set(0, 0); + _uvB.set(1, 0); + _uvC.set(1, 1); + let intersect2 = raycaster.ray.intersectTriangle(_vA, _vB, _vC, false, _intersectPoint); + if (intersect2 === null) { + transformVertex(_vB.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); + _uvB.set(0, 1); + intersect2 = raycaster.ray.intersectTriangle(_vA, _vC, _vB, false, _intersectPoint); + if (intersect2 === null) { + return; + } + } + const distance = raycaster.ray.origin.distanceTo(_intersectPoint); + if (distance < raycaster.near || distance > raycaster.far) return; + intersects2.push({ + distance, + point: _intersectPoint.clone(), + uv: Triangle.getInterpolation(_intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()), + face: null, + object: this + }); + } + copy(source, recursive) { + super.copy(source, recursive); + if (source.center !== void 0) this.center.copy(source.center); + this.material = source.material; + return this; + } +}; +function transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) { + _alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); + if (sin !== void 0) { + _rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y; + _rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y; + } else { + _rotatedPosition.copy(_alignedPosition); + } + vertexPosition.copy(mvPosition); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + vertexPosition.applyMatrix4(_viewWorldMatrix); +} +var _v1$2 = new Vector3(); +var _v2$1 = new Vector3(); +var LOD = class extends Object3D { + constructor() { + super(); + this._currentLevel = 0; + this.type = "LOD"; + Object.defineProperties(this, { + levels: { + enumerable: true, + value: [] + }, + isLOD: { + value: true + } + }); + this.autoUpdate = true; + } + copy(source) { + super.copy(source, false); + const levels = source.levels; + for (let i = 0, l = levels.length; i < l; i++) { + const level = levels[i]; + this.addLevel(level.object.clone(), level.distance, level.hysteresis); + } + this.autoUpdate = source.autoUpdate; + return this; + } + addLevel(object, distance = 0, hysteresis = 0) { + distance = Math.abs(distance); + const levels = this.levels; + let l; + for (l = 0; l < levels.length; l++) { + if (distance < levels[l].distance) { + break; + } + } + levels.splice(l, 0, { distance, hysteresis, object }); + this.add(object); + return this; + } + getCurrentLevel() { + return this._currentLevel; + } + getObjectForDistance(distance) { + const levels = this.levels; + if (levels.length > 0) { + let i, l; + for (i = 1, l = levels.length; i < l; i++) { + let levelDistance = levels[i].distance; + if (levels[i].object.visible) { + levelDistance -= levelDistance * levels[i].hysteresis; + } + if (distance < levelDistance) { + break; + } + } + return levels[i - 1].object; + } + return null; + } + raycast(raycaster, intersects2) { + const levels = this.levels; + if (levels.length > 0) { + _v1$2.setFromMatrixPosition(this.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_v1$2); + this.getObjectForDistance(distance).raycast(raycaster, intersects2); + } + } + update(camera) { + const levels = this.levels; + if (levels.length > 1) { + _v1$2.setFromMatrixPosition(camera.matrixWorld); + _v2$1.setFromMatrixPosition(this.matrixWorld); + const distance = _v1$2.distanceTo(_v2$1) / camera.zoom; + levels[0].object.visible = true; + let i, l; + for (i = 1, l = levels.length; i < l; i++) { + let levelDistance = levels[i].distance; + if (levels[i].object.visible) { + levelDistance -= levelDistance * levels[i].hysteresis; + } + if (distance >= levelDistance) { + levels[i - 1].object.visible = false; + levels[i].object.visible = true; + } else { + break; + } + } + this._currentLevel = i - 1; + for (; i < l; i++) { + levels[i].object.visible = false; + } + } + } + toJSON(meta) { + const data = super.toJSON(meta); + if (this.autoUpdate === false) data.object.autoUpdate = false; + data.object.levels = []; + const levels = this.levels; + for (let i = 0, l = levels.length; i < l; i++) { + const level = levels[i]; + data.object.levels.push({ + object: level.object.uuid, + distance: level.distance, + hysteresis: level.hysteresis + }); + } + return data; + } +}; +var _basePosition = new Vector3(); +var _skinIndex = new Vector4(); +var _skinWeight = new Vector4(); +var _vector3 = new Vector3(); +var _matrix4 = new Matrix4(); +var _vertex = new Vector3(); +var _sphere$4 = new Sphere(); +var _inverseMatrix$2 = new Matrix4(); +var _ray$2 = new Ray(); +var SkinnedMesh = class extends Mesh { + constructor(geometry, material) { + super(geometry, material); + this.isSkinnedMesh = true; + this.type = "SkinnedMesh"; + this.bindMode = AttachedBindMode; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + this.boundingBox = null; + this.boundingSphere = null; + } + computeBoundingBox() { + const geometry = this.geometry; + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + this.boundingBox.makeEmpty(); + const positionAttribute = geometry.getAttribute("position"); + for (let i = 0; i < positionAttribute.count; i++) { + this.getVertexPosition(i, _vertex); + this.boundingBox.expandByPoint(_vertex); + } + } + computeBoundingSphere() { + const geometry = this.geometry; + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + this.boundingSphere.makeEmpty(); + const positionAttribute = geometry.getAttribute("position"); + for (let i = 0; i < positionAttribute.count; i++) { + this.getVertexPosition(i, _vertex); + this.boundingSphere.expandByPoint(_vertex); + } + } + copy(source, recursive) { + super.copy(source, recursive); + this.bindMode = source.bindMode; + this.bindMatrix.copy(source.bindMatrix); + this.bindMatrixInverse.copy(source.bindMatrixInverse); + this.skeleton = source.skeleton; + if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); + if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); + return this; + } + raycast(raycaster, intersects2) { + const material = this.material; + const matrixWorld = this.matrixWorld; + if (material === void 0) return; + if (this.boundingSphere === null) this.computeBoundingSphere(); + _sphere$4.copy(this.boundingSphere); + _sphere$4.applyMatrix4(matrixWorld); + if (raycaster.ray.intersectsSphere(_sphere$4) === false) return; + _inverseMatrix$2.copy(matrixWorld).invert(); + _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); + if (this.boundingBox !== null) { + if (_ray$2.intersectsBox(this.boundingBox) === false) return; + } + this._computeIntersections(raycaster, intersects2, _ray$2); + } + getVertexPosition(index, target) { + super.getVertexPosition(index, target); + this.applyBoneTransform(index, target); + return target; + } + bind(skeleton, bindMatrix) { + this.skeleton = skeleton; + if (bindMatrix === void 0) { + this.updateMatrixWorld(true); + this.skeleton.calculateInverses(); + bindMatrix = this.matrixWorld; + } + this.bindMatrix.copy(bindMatrix); + this.bindMatrixInverse.copy(bindMatrix).invert(); + } + pose() { + this.skeleton.pose(); + } + normalizeSkinWeights() { + const vector = new Vector4(); + const skinWeight = this.geometry.attributes.skinWeight; + for (let i = 0, l = skinWeight.count; i < l; i++) { + vector.fromBufferAttribute(skinWeight, i); + const scale = 1 / vector.manhattanLength(); + if (scale !== Infinity) { + vector.multiplyScalar(scale); + } else { + vector.set(1, 0, 0, 0); + } + skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w); + } + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + if (this.bindMode === AttachedBindMode) { + this.bindMatrixInverse.copy(this.matrixWorld).invert(); + } else if (this.bindMode === DetachedBindMode) { + this.bindMatrixInverse.copy(this.bindMatrix).invert(); + } else { + console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode); + } + } + applyBoneTransform(index, vector) { + const skeleton = this.skeleton; + const geometry = this.geometry; + _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index); + _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index); + _basePosition.copy(vector).applyMatrix4(this.bindMatrix); + vector.set(0, 0, 0); + for (let i = 0; i < 4; i++) { + const weight = _skinWeight.getComponent(i); + if (weight !== 0) { + const boneIndex = _skinIndex.getComponent(i); + _matrix4.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]); + vector.addScaledVector(_vector3.copy(_basePosition).applyMatrix4(_matrix4), weight); + } + } + return vector.applyMatrix4(this.bindMatrixInverse); + } +}; +var Bone = class extends Object3D { + constructor() { + super(); + this.isBone = true; + this.type = "Bone"; + } +}; +var DataTexture = class extends Texture { + constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace) { + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isDataTexture = true; + this.image = { data, width, height }; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + } +}; +var _offsetMatrix = new Matrix4(); +var _identityMatrix$1 = new Matrix4(); +var Skeleton = class _Skeleton { + constructor(bones = [], boneInverses = []) { + this.uuid = generateUUID(); + this.bones = bones.slice(0); + this.boneInverses = boneInverses; + this.boneMatrices = null; + this.boneTexture = null; + this.init(); + } + init() { + const bones = this.bones; + const boneInverses = this.boneInverses; + this.boneMatrices = new Float32Array(bones.length * 16); + if (boneInverses.length === 0) { + this.calculateInverses(); + } else { + if (bones.length !== boneInverses.length) { + console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."); + this.boneInverses = []; + for (let i = 0, il = this.bones.length; i < il; i++) { + this.boneInverses.push(new Matrix4()); + } + } + } + } + calculateInverses() { + this.boneInverses.length = 0; + for (let i = 0, il = this.bones.length; i < il; i++) { + const inverse = new Matrix4(); + if (this.bones[i]) { + inverse.copy(this.bones[i].matrixWorld).invert(); + } + this.boneInverses.push(inverse); + } + } + pose() { + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone) { + bone.matrixWorld.copy(this.boneInverses[i]).invert(); + } + } + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone) { + if (bone.parent && bone.parent.isBone) { + bone.matrix.copy(bone.parent.matrixWorld).invert(); + bone.matrix.multiply(bone.matrixWorld); + } else { + bone.matrix.copy(bone.matrixWorld); + } + bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); + } + } + } + update() { + const bones = this.bones; + const boneInverses = this.boneInverses; + const boneMatrices = this.boneMatrices; + const boneTexture = this.boneTexture; + for (let i = 0, il = bones.length; i < il; i++) { + const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix$1; + _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]); + _offsetMatrix.toArray(boneMatrices, i * 16); + } + if (boneTexture !== null) { + boneTexture.needsUpdate = true; + } + } + clone() { + return new _Skeleton(this.bones, this.boneInverses); + } + computeBoneTexture() { + let size = Math.sqrt(this.bones.length * 4); + size = Math.ceil(size / 4) * 4; + size = Math.max(size, 4); + const boneMatrices = new Float32Array(size * size * 4); + boneMatrices.set(this.boneMatrices); + const boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType); + boneTexture.needsUpdate = true; + this.boneMatrices = boneMatrices; + this.boneTexture = boneTexture; + return this; + } + getBoneByName(name) { + for (let i = 0, il = this.bones.length; i < il; i++) { + const bone = this.bones[i]; + if (bone.name === name) { + return bone; + } + } + return void 0; + } + dispose() { + if (this.boneTexture !== null) { + this.boneTexture.dispose(); + this.boneTexture = null; + } + } + fromJSON(json, bones) { + this.uuid = json.uuid; + for (let i = 0, l = json.bones.length; i < l; i++) { + const uuid = json.bones[i]; + let bone = bones[uuid]; + if (bone === void 0) { + console.warn("THREE.Skeleton: No bone found with UUID:", uuid); + bone = new Bone(); + } + this.bones.push(bone); + this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i])); + } + this.init(); + return this; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "Skeleton", + generator: "Skeleton.toJSON" + }, + bones: [], + boneInverses: [] + }; + data.uuid = this.uuid; + const bones = this.bones; + const boneInverses = this.boneInverses; + for (let i = 0, l = bones.length; i < l; i++) { + const bone = bones[i]; + data.bones.push(bone.uuid); + const boneInverse = boneInverses[i]; + data.boneInverses.push(boneInverse.toArray()); + } + return data; + } +}; +var InstancedBufferAttribute = class extends BufferAttribute { + constructor(array, itemSize, normalized, meshPerAttribute = 1) { + super(array, itemSize, normalized); + this.isInstancedBufferAttribute = true; + this.meshPerAttribute = meshPerAttribute; + } + copy(source) { + super.copy(source); + this.meshPerAttribute = source.meshPerAttribute; + return this; + } + toJSON() { + const data = super.toJSON(); + data.meshPerAttribute = this.meshPerAttribute; + data.isInstancedBufferAttribute = true; + return data; + } +}; +var _instanceLocalMatrix = new Matrix4(); +var _instanceWorldMatrix = new Matrix4(); +var _instanceIntersects = []; +var _box3 = new Box3(); +var _identity = new Matrix4(); +var _mesh$1 = new Mesh(); +var _sphere$3 = new Sphere(); +var InstancedMesh = class extends Mesh { + constructor(geometry, material, count) { + super(geometry, material); + this.isInstancedMesh = true; + this.instanceMatrix = new InstancedBufferAttribute(new Float32Array(count * 16), 16); + this.instanceColor = null; + this.morphTexture = null; + this.count = count; + this.boundingBox = null; + this.boundingSphere = null; + for (let i = 0; i < count; i++) { + this.setMatrixAt(i, _identity); + } + } + computeBoundingBox() { + const geometry = this.geometry; + const count = this.count; + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + this.boundingBox.makeEmpty(); + for (let i = 0; i < count; i++) { + this.getMatrixAt(i, _instanceLocalMatrix); + _box3.copy(geometry.boundingBox).applyMatrix4(_instanceLocalMatrix); + this.boundingBox.union(_box3); + } + } + computeBoundingSphere() { + const geometry = this.geometry; + const count = this.count; + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + if (geometry.boundingSphere === null) { + geometry.computeBoundingSphere(); + } + this.boundingSphere.makeEmpty(); + for (let i = 0; i < count; i++) { + this.getMatrixAt(i, _instanceLocalMatrix); + _sphere$3.copy(geometry.boundingSphere).applyMatrix4(_instanceLocalMatrix); + this.boundingSphere.union(_sphere$3); + } + } + copy(source, recursive) { + super.copy(source, recursive); + this.instanceMatrix.copy(source.instanceMatrix); + if (source.morphTexture !== null) this.morphTexture = source.morphTexture.clone(); + if (source.instanceColor !== null) this.instanceColor = source.instanceColor.clone(); + this.count = source.count; + if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); + if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); + return this; + } + getColorAt(index, color) { + color.fromArray(this.instanceColor.array, index * 3); + } + getMatrixAt(index, matrix) { + matrix.fromArray(this.instanceMatrix.array, index * 16); + } + getMorphAt(index, object) { + const objectInfluences = object.morphTargetInfluences; + const array = this.morphTexture.source.data.data; + const len = objectInfluences.length + 1; + const dataIndex = index * len + 1; + for (let i = 0; i < objectInfluences.length; i++) { + objectInfluences[i] = array[dataIndex + i]; + } + } + raycast(raycaster, intersects2) { + const matrixWorld = this.matrixWorld; + const raycastTimes = this.count; + _mesh$1.geometry = this.geometry; + _mesh$1.material = this.material; + if (_mesh$1.material === void 0) return; + if (this.boundingSphere === null) this.computeBoundingSphere(); + _sphere$3.copy(this.boundingSphere); + _sphere$3.applyMatrix4(matrixWorld); + if (raycaster.ray.intersectsSphere(_sphere$3) === false) return; + for (let instanceId = 0; instanceId < raycastTimes; instanceId++) { + this.getMatrixAt(instanceId, _instanceLocalMatrix); + _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); + _mesh$1.matrixWorld = _instanceWorldMatrix; + _mesh$1.raycast(raycaster, _instanceIntersects); + for (let i = 0, l = _instanceIntersects.length; i < l; i++) { + const intersect2 = _instanceIntersects[i]; + intersect2.instanceId = instanceId; + intersect2.object = this; + intersects2.push(intersect2); + } + _instanceIntersects.length = 0; + } + } + setColorAt(index, color) { + if (this.instanceColor === null) { + this.instanceColor = new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count * 3).fill(1), 3); + } + color.toArray(this.instanceColor.array, index * 3); + } + setMatrixAt(index, matrix) { + matrix.toArray(this.instanceMatrix.array, index * 16); + } + setMorphAt(index, object) { + const objectInfluences = object.morphTargetInfluences; + const len = objectInfluences.length + 1; + if (this.morphTexture === null) { + this.morphTexture = new DataTexture(new Float32Array(len * this.count), len, this.count, RedFormat, FloatType); + } + const array = this.morphTexture.source.data.data; + let morphInfluencesSum = 0; + for (let i = 0; i < objectInfluences.length; i++) { + morphInfluencesSum += objectInfluences[i]; + } + const morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + const dataIndex = len * index; + array[dataIndex] = morphBaseInfluence; + array.set(objectInfluences, dataIndex + 1); + } + updateMorphTargets() { + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + if (this.morphTexture !== null) { + this.morphTexture.dispose(); + this.morphTexture = null; + } + return this; + } +}; +function sortOpaque(a, b) { + return a.z - b.z; +} +function sortTransparent(a, b) { + return b.z - a.z; +} +var MultiDrawRenderList = class { + constructor() { + this.index = 0; + this.pool = []; + this.list = []; + } + push(drawRange, z, index) { + const pool = this.pool; + const list = this.list; + if (this.index >= pool.length) { + pool.push({ + start: -1, + count: -1, + z: -1, + index: -1 + }); + } + const item = pool[this.index]; + list.push(item); + this.index++; + item.start = drawRange.start; + item.count = drawRange.count; + item.z = z; + item.index = index; + } + reset() { + this.list.length = 0; + this.index = 0; + } +}; +var _matrix$1 = new Matrix4(); +var _invMatrixWorld = new Matrix4(); +var _identityMatrix = new Matrix4(); +var _whiteColor = new Color(1, 1, 1); +var _projScreenMatrix$2 = new Matrix4(); +var _frustum = new Frustum(); +var _box$1 = new Box3(); +var _sphere$2 = new Sphere(); +var _vector$5 = new Vector3(); +var _forward = new Vector3(); +var _temp = new Vector3(); +var _renderList = new MultiDrawRenderList(); +var _mesh = new Mesh(); +var _batchIntersects = []; +function copyAttributeData(src, target, targetOffset = 0) { + const itemSize = target.itemSize; + if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) { + const vertexCount = src.count; + for (let i = 0; i < vertexCount; i++) { + for (let c = 0; c < itemSize; c++) { + target.setComponent(i + targetOffset, c, src.getComponent(i, c)); + } + } + } else { + target.array.set(src.array, targetOffset * itemSize); + } + target.needsUpdate = true; +} +var BatchedMesh = class extends Mesh { + get maxInstanceCount() { + return this._maxInstanceCount; + } + constructor(maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) { + super(new BufferGeometry(), material); + this.isBatchedMesh = true; + this.perObjectFrustumCulled = true; + this.sortObjects = true; + this.boundingBox = null; + this.boundingSphere = null; + this.customSort = null; + this._drawInfo = []; + this._drawRanges = []; + this._reservedRanges = []; + this._bounds = []; + this._maxInstanceCount = maxInstanceCount; + this._maxVertexCount = maxVertexCount; + this._maxIndexCount = maxIndexCount; + this._geometryInitialized = false; + this._geometryCount = 0; + this._multiDrawCounts = new Int32Array(maxInstanceCount); + this._multiDrawStarts = new Int32Array(maxInstanceCount); + this._multiDrawCount = 0; + this._multiDrawInstances = null; + this._visibilityChanged = true; + this._matricesTexture = null; + this._indirectTexture = null; + this._colorsTexture = null; + this._initMatricesTexture(); + this._initIndirectTexture(); + } + _initMatricesTexture() { + let size = Math.sqrt(this._maxInstanceCount * 4); + size = Math.ceil(size / 4) * 4; + size = Math.max(size, 4); + const matricesArray = new Float32Array(size * size * 4); + const matricesTexture = new DataTexture(matricesArray, size, size, RGBAFormat, FloatType); + this._matricesTexture = matricesTexture; + } + _initIndirectTexture() { + let size = Math.sqrt(this._maxInstanceCount); + size = Math.ceil(size); + const indirectArray = new Uint32Array(size * size); + const indirectTexture = new DataTexture(indirectArray, size, size, RedIntegerFormat, UnsignedIntType); + this._indirectTexture = indirectTexture; + } + _initColorsTexture() { + let size = Math.sqrt(this._maxIndexCount); + size = Math.ceil(size); + const colorsArray = new Float32Array(size * size * 4).fill(1); + const colorsTexture = new DataTexture(colorsArray, size, size, RGBAFormat, FloatType); + colorsTexture.colorSpace = ColorManagement.workingColorSpace; + this._colorsTexture = colorsTexture; + } + _initializeGeometry(reference) { + const geometry = this.geometry; + const maxVertexCount = this._maxVertexCount; + const maxIndexCount = this._maxIndexCount; + if (this._geometryInitialized === false) { + for (const attributeName in reference.attributes) { + const srcAttribute = reference.getAttribute(attributeName); + const { array, itemSize, normalized } = srcAttribute; + const dstArray = new array.constructor(maxVertexCount * itemSize); + const dstAttribute = new BufferAttribute(dstArray, itemSize, normalized); + geometry.setAttribute(attributeName, dstAttribute); + } + if (reference.getIndex() !== null) { + const indexArray = maxVertexCount > 65535 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount); + geometry.setIndex(new BufferAttribute(indexArray, 1)); + } + this._geometryInitialized = true; + } + } + // Make sure the geometry is compatible with the existing combined geometry attributes + _validateGeometry(geometry) { + const batchGeometry = this.geometry; + if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) { + throw new Error('BatchedMesh: All geometries must consistently have "index".'); + } + for (const attributeName in batchGeometry.attributes) { + if (!geometry.hasAttribute(attributeName)) { + throw new Error(`BatchedMesh: Added geometry missing "${attributeName}". All geometries must have consistent attributes.`); + } + const srcAttribute = geometry.getAttribute(attributeName); + const dstAttribute = batchGeometry.getAttribute(attributeName); + if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) { + throw new Error("BatchedMesh: All attributes must have a consistent itemSize and normalized value."); + } + } + } + setCustomSort(func) { + this.customSort = func; + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const geometryCount = this._geometryCount; + const boundingBox = this.boundingBox; + const drawInfo = this._drawInfo; + boundingBox.makeEmpty(); + for (let i = 0; i < geometryCount; i++) { + if (drawInfo[i].active === false) continue; + const geometryId = drawInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingBoxAt(geometryId, _box$1).applyMatrix4(_matrix$1); + boundingBox.union(_box$1); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + const boundingSphere = this.boundingSphere; + const drawInfo = this._drawInfo; + boundingSphere.makeEmpty(); + for (let i = 0, l = drawInfo.length; i < l; i++) { + if (drawInfo[i].active === false) continue; + const geometryId = drawInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + boundingSphere.union(_sphere$2); + } + } + addInstance(geometryId) { + if (this._drawInfo.length >= this._maxInstanceCount) { + throw new Error("BatchedMesh: Maximum item count reached."); + } + this._drawInfo.push({ + visible: true, + active: true, + geometryIndex: geometryId + }); + const drawId = this._drawInfo.length - 1; + const matricesTexture = this._matricesTexture; + const matricesArray = matricesTexture.image.data; + _identityMatrix.toArray(matricesArray, drawId * 16); + matricesTexture.needsUpdate = true; + const colorsTexture = this._colorsTexture; + if (colorsTexture) { + _whiteColor.toArray(colorsTexture.image.data, drawId * 4); + colorsTexture.needsUpdate = true; + } + return drawId; + } + addGeometry(geometry, vertexCount = -1, indexCount = -1) { + this._initializeGeometry(geometry); + this._validateGeometry(geometry); + if (this._drawInfo.length >= this._maxInstanceCount) { + throw new Error("BatchedMesh: Maximum item count reached."); + } + const reservedRange = { + vertexStart: -1, + vertexCount: -1, + indexStart: -1, + indexCount: -1 + }; + let lastRange = null; + const reservedRanges = this._reservedRanges; + const drawRanges = this._drawRanges; + const bounds = this._bounds; + if (this._geometryCount !== 0) { + lastRange = reservedRanges[reservedRanges.length - 1]; + } + if (vertexCount === -1) { + reservedRange.vertexCount = geometry.getAttribute("position").count; + } else { + reservedRange.vertexCount = vertexCount; + } + if (lastRange === null) { + reservedRange.vertexStart = 0; + } else { + reservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount; + } + const index = geometry.getIndex(); + const hasIndex = index !== null; + if (hasIndex) { + if (indexCount === -1) { + reservedRange.indexCount = index.count; + } else { + reservedRange.indexCount = indexCount; + } + if (lastRange === null) { + reservedRange.indexStart = 0; + } else { + reservedRange.indexStart = lastRange.indexStart + lastRange.indexCount; + } + } + if (reservedRange.indexStart !== -1 && reservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount || reservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount) { + throw new Error("BatchedMesh: Reserved space request exceeds the maximum buffer size."); + } + const geometryId = this._geometryCount; + this._geometryCount++; + reservedRanges.push(reservedRange); + drawRanges.push({ + start: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart, + count: -1 + }); + bounds.push({ + boxInitialized: false, + box: new Box3(), + sphereInitialized: false, + sphere: new Sphere() + }); + this.setGeometryAt(geometryId, geometry); + return geometryId; + } + setGeometryAt(geometryId, geometry) { + if (geometryId >= this._geometryCount) { + throw new Error("BatchedMesh: Maximum geometry count reached."); + } + this._validateGeometry(geometry); + const batchGeometry = this.geometry; + const hasIndex = batchGeometry.getIndex() !== null; + const dstIndex = batchGeometry.getIndex(); + const srcIndex = geometry.getIndex(); + const reservedRange = this._reservedRanges[geometryId]; + if (hasIndex && srcIndex.count > reservedRange.indexCount || geometry.attributes.position.count > reservedRange.vertexCount) { + throw new Error("BatchedMesh: Reserved space not large enough for provided geometry."); + } + const vertexStart = reservedRange.vertexStart; + const vertexCount = reservedRange.vertexCount; + for (const attributeName in batchGeometry.attributes) { + const srcAttribute = geometry.getAttribute(attributeName); + const dstAttribute = batchGeometry.getAttribute(attributeName); + copyAttributeData(srcAttribute, dstAttribute, vertexStart); + const itemSize = srcAttribute.itemSize; + for (let i = srcAttribute.count, l = vertexCount; i < l; i++) { + const index = vertexStart + i; + for (let c = 0; c < itemSize; c++) { + dstAttribute.setComponent(index, c, 0); + } + } + dstAttribute.needsUpdate = true; + dstAttribute.addUpdateRange(vertexStart * itemSize, vertexCount * itemSize); + } + if (hasIndex) { + const indexStart = reservedRange.indexStart; + for (let i = 0; i < srcIndex.count; i++) { + dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i)); + } + for (let i = srcIndex.count, l = reservedRange.indexCount; i < l; i++) { + dstIndex.setX(indexStart + i, vertexStart); + } + dstIndex.needsUpdate = true; + dstIndex.addUpdateRange(indexStart, reservedRange.indexCount); + } + const bound = this._bounds[geometryId]; + if (geometry.boundingBox !== null) { + bound.box.copy(geometry.boundingBox); + bound.boxInitialized = true; + } else { + bound.boxInitialized = false; + } + if (geometry.boundingSphere !== null) { + bound.sphere.copy(geometry.boundingSphere); + bound.sphereInitialized = true; + } else { + bound.sphereInitialized = false; + } + const drawRange = this._drawRanges[geometryId]; + const posAttr = geometry.getAttribute("position"); + drawRange.count = hasIndex ? srcIndex.count : posAttr.count; + this._visibilityChanged = true; + return geometryId; + } + /* + deleteGeometry( geometryId ) { + + // TODO: delete geometry and associated instances + + } + */ + /* + deleteInstance( instanceId ) { + + // Note: User needs to call optimize() afterward to pack the data. + + const drawInfo = this._drawInfo; + if ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) { + + return this; + + } + + drawInfo[ instanceId ].active = false; + this._visibilityChanged = true; + + return this; + + } + */ + // get bounding box and compute it if it doesn't exist + getBoundingBoxAt(geometryId, target) { + if (geometryId >= this._geometryCount) { + return null; + } + const bound = this._bounds[geometryId]; + const box = bound.box; + const geometry = this.geometry; + if (bound.boxInitialized === false) { + box.makeEmpty(); + const index = geometry.index; + const position = geometry.attributes.position; + const drawRange = this._drawRanges[geometryId]; + for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { + let iv = i; + if (index) { + iv = index.getX(iv); + } + box.expandByPoint(_vector$5.fromBufferAttribute(position, iv)); + } + bound.boxInitialized = true; + } + target.copy(box); + return target; + } + // get bounding sphere and compute it if it doesn't exist + getBoundingSphereAt(geometryId, target) { + if (geometryId >= this._geometryCount) { + return null; + } + const bound = this._bounds[geometryId]; + const sphere = bound.sphere; + const geometry = this.geometry; + if (bound.sphereInitialized === false) { + sphere.makeEmpty(); + this.getBoundingBoxAt(geometryId, _box$1); + _box$1.getCenter(sphere.center); + const index = geometry.index; + const position = geometry.attributes.position; + const drawRange = this._drawRanges[geometryId]; + let maxRadiusSq = 0; + for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { + let iv = i; + if (index) { + iv = index.getX(iv); + } + _vector$5.fromBufferAttribute(position, iv); + maxRadiusSq = Math.max(maxRadiusSq, sphere.center.distanceToSquared(_vector$5)); + } + sphere.radius = Math.sqrt(maxRadiusSq); + bound.sphereInitialized = true; + } + target.copy(sphere); + return target; + } + setMatrixAt(instanceId, matrix) { + const drawInfo = this._drawInfo; + const matricesTexture = this._matricesTexture; + const matricesArray = this._matricesTexture.image.data; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { + return this; + } + matrix.toArray(matricesArray, instanceId * 16); + matricesTexture.needsUpdate = true; + return this; + } + getMatrixAt(instanceId, matrix) { + const drawInfo = this._drawInfo; + const matricesArray = this._matricesTexture.image.data; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { + return null; + } + return matrix.fromArray(matricesArray, instanceId * 16); + } + setColorAt(instanceId, color) { + if (this._colorsTexture === null) { + this._initColorsTexture(); + } + const colorsTexture = this._colorsTexture; + const colorsArray = this._colorsTexture.image.data; + const drawInfo = this._drawInfo; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { + return this; + } + color.toArray(colorsArray, instanceId * 4); + colorsTexture.needsUpdate = true; + return this; + } + getColorAt(instanceId, color) { + const colorsArray = this._colorsTexture.image.data; + const drawInfo = this._drawInfo; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { + return null; + } + return color.fromArray(colorsArray, instanceId * 4); + } + setVisibleAt(instanceId, value) { + const drawInfo = this._drawInfo; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false || drawInfo[instanceId].visible === value) { + return this; + } + drawInfo[instanceId].visible = value; + this._visibilityChanged = true; + return this; + } + getVisibleAt(instanceId) { + const drawInfo = this._drawInfo; + if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { + return false; + } + return drawInfo[instanceId].visible; + } + raycast(raycaster, intersects2) { + const drawInfo = this._drawInfo; + const drawRanges = this._drawRanges; + const matrixWorld = this.matrixWorld; + const batchGeometry = this.geometry; + _mesh.material = this.material; + _mesh.geometry.index = batchGeometry.index; + _mesh.geometry.attributes = batchGeometry.attributes; + if (_mesh.geometry.boundingBox === null) { + _mesh.geometry.boundingBox = new Box3(); + } + if (_mesh.geometry.boundingSphere === null) { + _mesh.geometry.boundingSphere = new Sphere(); + } + for (let i = 0, l = drawInfo.length; i < l; i++) { + if (!drawInfo[i].visible || !drawInfo[i].active) { + continue; + } + const geometryId = drawInfo[i].geometryIndex; + const drawRange = drawRanges[geometryId]; + _mesh.geometry.setDrawRange(drawRange.start, drawRange.count); + this.getMatrixAt(i, _mesh.matrixWorld).premultiply(matrixWorld); + this.getBoundingBoxAt(geometryId, _mesh.geometry.boundingBox); + this.getBoundingSphereAt(geometryId, _mesh.geometry.boundingSphere); + _mesh.raycast(raycaster, _batchIntersects); + for (let j = 0, l2 = _batchIntersects.length; j < l2; j++) { + const intersect2 = _batchIntersects[j]; + intersect2.object = this; + intersect2.batchId = i; + intersects2.push(intersect2); + } + _batchIntersects.length = 0; + } + _mesh.material = null; + _mesh.geometry.index = null; + _mesh.geometry.attributes = {}; + _mesh.geometry.setDrawRange(0, Infinity); + } + copy(source) { + super.copy(source); + this.geometry = source.geometry.clone(); + this.perObjectFrustumCulled = source.perObjectFrustumCulled; + this.sortObjects = source.sortObjects; + this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null; + this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null; + this._drawRanges = source._drawRanges.map((range) => ({ ...range })); + this._reservedRanges = source._reservedRanges.map((range) => ({ ...range })); + this._drawInfo = source._drawInfo.map((inf) => ({ ...inf })); + this._bounds = source._bounds.map((bound) => ({ + boxInitialized: bound.boxInitialized, + box: bound.box.clone(), + sphereInitialized: bound.sphereInitialized, + sphere: bound.sphere.clone() + })); + this._maxInstanceCount = source._maxInstanceCount; + this._maxVertexCount = source._maxVertexCount; + this._maxIndexCount = source._maxIndexCount; + this._geometryInitialized = source._geometryInitialized; + this._geometryCount = source._geometryCount; + this._multiDrawCounts = source._multiDrawCounts.slice(); + this._multiDrawStarts = source._multiDrawStarts.slice(); + this._matricesTexture = source._matricesTexture.clone(); + this._matricesTexture.image.data = this._matricesTexture.image.data.slice(); + if (this._colorsTexture !== null) { + this._colorsTexture = source._colorsTexture.clone(); + this._colorsTexture.image.data = this._colorsTexture.image.data.slice(); + } + return this; + } + dispose() { + this.geometry.dispose(); + this._matricesTexture.dispose(); + this._matricesTexture = null; + this._indirectTexture.dispose(); + this._indirectTexture = null; + if (this._colorsTexture !== null) { + this._colorsTexture.dispose(); + this._colorsTexture = null; + } + return this; + } + onBeforeRender(renderer, scene, camera, geometry, material) { + if (!this._visibilityChanged && !this.perObjectFrustumCulled && !this.sortObjects) { + return; + } + const index = geometry.getIndex(); + const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT; + const drawInfo = this._drawInfo; + const multiDrawStarts = this._multiDrawStarts; + const multiDrawCounts = this._multiDrawCounts; + const drawRanges = this._drawRanges; + const perObjectFrustumCulled = this.perObjectFrustumCulled; + const indirectTexture = this._indirectTexture; + const indirectArray = indirectTexture.image.data; + if (perObjectFrustumCulled) { + _projScreenMatrix$2.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse).multiply(this.matrixWorld); + _frustum.setFromProjectionMatrix( + _projScreenMatrix$2, + renderer.coordinateSystem + ); + } + let count = 0; + if (this.sortObjects) { + _invMatrixWorld.copy(this.matrixWorld).invert(); + _vector$5.setFromMatrixPosition(camera.matrixWorld).applyMatrix4(_invMatrixWorld); + _forward.set(0, 0, -1).transformDirection(camera.matrixWorld).transformDirection(_invMatrixWorld); + for (let i = 0, l = drawInfo.length; i < l; i++) { + if (drawInfo[i].visible && drawInfo[i].active) { + const geometryId = drawInfo[i].geometryIndex; + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + let culled = false; + if (perObjectFrustumCulled) { + culled = !_frustum.intersectsSphere(_sphere$2); + } + if (!culled) { + const z = _temp.subVectors(_sphere$2.center, _vector$5).dot(_forward); + _renderList.push(drawRanges[geometryId], z, i); + } + } + } + const list = _renderList.list; + const customSort = this.customSort; + if (customSort === null) { + list.sort(material.transparent ? sortTransparent : sortOpaque); + } else { + customSort.call(this, list, camera); + } + for (let i = 0, l = list.length; i < l; i++) { + const item = list[i]; + multiDrawStarts[count] = item.start * bytesPerElement; + multiDrawCounts[count] = item.count; + indirectArray[count] = item.index; + count++; + } + _renderList.reset(); + } else { + for (let i = 0, l = drawInfo.length; i < l; i++) { + if (drawInfo[i].visible && drawInfo[i].active) { + const geometryId = drawInfo[i].geometryIndex; + let culled = false; + if (perObjectFrustumCulled) { + this.getMatrixAt(i, _matrix$1); + this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); + culled = !_frustum.intersectsSphere(_sphere$2); + } + if (!culled) { + const range = drawRanges[geometryId]; + multiDrawStarts[count] = range.start * bytesPerElement; + multiDrawCounts[count] = range.count; + indirectArray[count] = i; + count++; + } + } + } + } + indirectTexture.needsUpdate = true; + this._multiDrawCount = count; + this._visibilityChanged = false; + } + onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial) { + this.onBeforeRender(renderer, null, shadowCamera, geometry, depthMaterial); + } +}; +var LineBasicMaterial = class extends Material { + constructor(parameters) { + super(); + this.isLineBasicMaterial = true; + this.type = "LineBasicMaterial"; + this.color = new Color(16777215); + this.map = null; + this.linewidth = 1; + this.linecap = "round"; + this.linejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + this.fog = source.fog; + return this; + } +}; +var _vStart = new Vector3(); +var _vEnd = new Vector3(); +var _inverseMatrix$1 = new Matrix4(); +var _ray$1 = new Ray(); +var _sphere$1 = new Sphere(); +var _intersectPointOnRay = new Vector3(); +var _intersectPointOnSegment = new Vector3(); +var Line = class extends Object3D { + constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) { + super(); + this.isLine = true; + this.type = "Line"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + computeLineDistances() { + const geometry = this.geometry; + if (geometry.index === null) { + const positionAttribute = geometry.attributes.position; + const lineDistances = [0]; + for (let i = 1, l = positionAttribute.count; i < l; i++) { + _vStart.fromBufferAttribute(positionAttribute, i - 1); + _vEnd.fromBufferAttribute(positionAttribute, i); + lineDistances[i] = lineDistances[i - 1]; + lineDistances[i] += _vStart.distanceTo(_vEnd); + } + geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); + } else { + console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + } + return this; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Line.threshold; + const drawRange = geometry.drawRange; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$1.copy(geometry.boundingSphere); + _sphere$1.applyMatrix4(matrixWorld); + _sphere$1.radius += threshold; + if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; + _inverseMatrix$1.copy(matrixWorld).invert(); + _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); + const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); + const localThresholdSq = localThreshold * localThreshold; + const step = this.isLineSegments ? 2 : 1; + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + if (index !== null) { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, l = end - 1; i < l; i += step) { + const a = index.getX(i); + const b = index.getX(i + 1); + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); + if (intersect2) { + intersects2.push(intersect2); + } + } + if (this.isLineLoop) { + const a = index.getX(end - 1); + const b = index.getX(start); + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); + if (intersect2) { + intersects2.push(intersect2); + } + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (let i = start, l = end - 1; i < l; i += step) { + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, i, i + 1); + if (intersect2) { + intersects2.push(intersect2); + } + } + if (this.isLineLoop) { + const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, end - 1, start); + if (intersect2) { + intersects2.push(intersect2); + } + } + } + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } +}; +function checkIntersection(object, raycaster, ray, thresholdSq, a, b) { + const positionAttribute = object.geometry.attributes.position; + _vStart.fromBufferAttribute(positionAttribute, a); + _vEnd.fromBufferAttribute(positionAttribute, b); + const distSq = ray.distanceSqToSegment(_vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment); + if (distSq > thresholdSq) return; + _intersectPointOnRay.applyMatrix4(object.matrixWorld); + const distance = raycaster.ray.origin.distanceTo(_intersectPointOnRay); + if (distance < raycaster.near || distance > raycaster.far) return; + return { + distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: _intersectPointOnSegment.clone().applyMatrix4(object.matrixWorld), + index: a, + face: null, + faceIndex: null, + object + }; +} +var _start = new Vector3(); +var _end = new Vector3(); +var LineSegments = class extends Line { + constructor(geometry, material) { + super(geometry, material); + this.isLineSegments = true; + this.type = "LineSegments"; + } + computeLineDistances() { + const geometry = this.geometry; + if (geometry.index === null) { + const positionAttribute = geometry.attributes.position; + const lineDistances = []; + for (let i = 0, l = positionAttribute.count; i < l; i += 2) { + _start.fromBufferAttribute(positionAttribute, i); + _end.fromBufferAttribute(positionAttribute, i + 1); + lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1]; + lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end); + } + geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); + } else { + console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + } + return this; + } +}; +var LineLoop = class extends Line { + constructor(geometry, material) { + super(geometry, material); + this.isLineLoop = true; + this.type = "LineLoop"; + } +}; +var PointsMaterial = class extends Material { + constructor(parameters) { + super(); + this.isPointsMaterial = true; + this.type = "PointsMaterial"; + this.color = new Color(16777215); + this.map = null; + this.alphaMap = null; + this.size = 1; + this.sizeAttenuation = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.alphaMap = source.alphaMap; + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + this.fog = source.fog; + return this; + } +}; +var _inverseMatrix = new Matrix4(); +var _ray = new Ray(); +var _sphere = new Sphere(); +var _position$2 = new Vector3(); +var Points = class extends Object3D { + constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) { + super(); + this.isPoints = true; + this.type = "Points"; + this.geometry = geometry; + this.material = material; + this.updateMorphTargets(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.material = Array.isArray(source.material) ? source.material.slice() : source.material; + this.geometry = source.geometry; + return this; + } + raycast(raycaster, intersects2) { + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Points.threshold; + const drawRange = geometry.drawRange; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere.copy(geometry.boundingSphere); + _sphere.applyMatrix4(matrixWorld); + _sphere.radius += threshold; + if (raycaster.ray.intersectsSphere(_sphere) === false) return; + _inverseMatrix.copy(matrixWorld).invert(); + _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); + const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); + const localThresholdSq = localThreshold * localThreshold; + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + if (index !== null) { + const start = Math.max(0, drawRange.start); + const end = Math.min(index.count, drawRange.start + drawRange.count); + for (let i = start, il = end; i < il; i++) { + const a = index.getX(i); + _position$2.fromBufferAttribute(positionAttribute, a); + testPoint(_position$2, a, localThresholdSq, matrixWorld, raycaster, intersects2, this); + } + } else { + const start = Math.max(0, drawRange.start); + const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (let i = start, l = end; i < l; i++) { + _position$2.fromBufferAttribute(positionAttribute, i); + testPoint(_position$2, i, localThresholdSq, matrixWorld, raycaster, intersects2, this); + } + } + } + updateMorphTargets() { + const geometry = this.geometry; + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys(morphAttributes); + if (keys.length > 0) { + const morphAttribute = morphAttributes[keys[0]]; + if (morphAttribute !== void 0) { + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + for (let m = 0, ml = morphAttribute.length; m < ml; m++) { + const name = morphAttribute[m].name || String(m); + this.morphTargetInfluences.push(0); + this.morphTargetDictionary[name] = m; + } + } + } + } +}; +function testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects2, object) { + const rayPointDistanceSq = _ray.distanceSqToPoint(point); + if (rayPointDistanceSq < localThresholdSq) { + const intersectPoint = new Vector3(); + _ray.closestPointToPoint(point, intersectPoint); + intersectPoint.applyMatrix4(matrixWorld); + const distance = raycaster.ray.origin.distanceTo(intersectPoint); + if (distance < raycaster.near || distance > raycaster.far) return; + intersects2.push({ + distance, + distanceToRay: Math.sqrt(rayPointDistanceSq), + point: intersectPoint, + index, + face: null, + object + }); + } +} +var VideoTexture = class extends Texture { + constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { + super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isVideoTexture = true; + this.minFilter = minFilter !== void 0 ? minFilter : LinearFilter; + this.magFilter = magFilter !== void 0 ? magFilter : LinearFilter; + this.generateMipmaps = false; + const scope = this; + function updateVideo() { + scope.needsUpdate = true; + video.requestVideoFrameCallback(updateVideo); + } + if ("requestVideoFrameCallback" in video) { + video.requestVideoFrameCallback(updateVideo); + } + } + clone() { + return new this.constructor(this.image).copy(this); + } + update() { + const video = this.image; + const hasVideoFrameCallback = "requestVideoFrameCallback" in video; + if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { + this.needsUpdate = true; + } + } +}; +var FramebufferTexture = class extends Texture { + constructor(width, height) { + super({ width, height }); + this.isFramebufferTexture = true; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.generateMipmaps = false; + this.needsUpdate = true; + } +}; +var CompressedTexture = class extends Texture { + constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace) { + super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); + this.isCompressedTexture = true; + this.image = { width, height }; + this.mipmaps = mipmaps; + this.flipY = false; + this.generateMipmaps = false; + } +}; +var CompressedArrayTexture = class extends CompressedTexture { + constructor(mipmaps, width, height, depth, format, type) { + super(mipmaps, width, height, format, type); + this.isCompressedArrayTexture = true; + this.image.depth = depth; + this.wrapR = ClampToEdgeWrapping; + this.layerUpdates = /* @__PURE__ */ new Set(); + } + addLayerUpdate(layerIndex) { + this.layerUpdates.add(layerIndex); + } + clearLayerUpdates() { + this.layerUpdates.clear(); + } +}; +var CompressedCubeTexture = class extends CompressedTexture { + constructor(images, format, type) { + super(void 0, images[0].width, images[0].height, format, type, CubeReflectionMapping); + this.isCompressedCubeTexture = true; + this.isCubeTexture = true; + this.image = images; + } +}; +var CanvasTexture = class extends Texture { + constructor(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { + super(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); + this.isCanvasTexture = true; + this.needsUpdate = true; + } +}; +var Curve = class { + constructor() { + this.type = "Curve"; + this.arcLengthDivisions = 200; + } + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + getPoint() { + console.warn("THREE.Curve: .getPoint() not implemented."); + return null; + } + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + getPointAt(u, optionalTarget) { + const t = this.getUtoTmapping(u); + return this.getPoint(t, optionalTarget); + } + // Get sequence of points using getPoint( t ) + getPoints(divisions = 5) { + const points = []; + for (let d = 0; d <= divisions; d++) { + points.push(this.getPoint(d / divisions)); + } + return points; + } + // Get sequence of points using getPointAt( u ) + getSpacedPoints(divisions = 5) { + const points = []; + for (let d = 0; d <= divisions; d++) { + points.push(this.getPointAt(d / divisions)); + } + return points; + } + // Get total curve arc length + getLength() { + const lengths = this.getLengths(); + return lengths[lengths.length - 1]; + } + // Get list of cumulative segment lengths + getLengths(divisions = this.arcLengthDivisions) { + if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) { + return this.cacheArcLengths; + } + this.needsUpdate = false; + const cache = []; + let current, last = this.getPoint(0); + let sum = 0; + cache.push(0); + for (let p = 1; p <= divisions; p++) { + current = this.getPoint(p / divisions); + sum += current.distanceTo(last); + cache.push(sum); + last = current; + } + this.cacheArcLengths = cache; + return cache; + } + updateArcLengths() { + this.needsUpdate = true; + this.getLengths(); + } + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + getUtoTmapping(u, distance) { + const arcLengths = this.getLengths(); + let i = 0; + const il = arcLengths.length; + let targetArcLength; + if (distance) { + targetArcLength = distance; + } else { + targetArcLength = u * arcLengths[il - 1]; + } + let low = 0, high = il - 1, comparison; + while (low <= high) { + i = Math.floor(low + (high - low) / 2); + comparison = arcLengths[i] - targetArcLength; + if (comparison < 0) { + low = i + 1; + } else if (comparison > 0) { + high = i - 1; + } else { + high = i; + break; + } + } + i = high; + if (arcLengths[i] === targetArcLength) { + return i / (il - 1); + } + const lengthBefore = arcLengths[i]; + const lengthAfter = arcLengths[i + 1]; + const segmentLength = lengthAfter - lengthBefore; + const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; + const t = (i + segmentFraction) / (il - 1); + return t; + } + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + getTangent(t, optionalTarget) { + const delta = 1e-4; + let t1 = t - delta; + let t2 = t + delta; + if (t1 < 0) t1 = 0; + if (t2 > 1) t2 = 1; + const pt1 = this.getPoint(t1); + const pt2 = this.getPoint(t2); + const tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3()); + tangent.copy(pt2).sub(pt1).normalize(); + return tangent; + } + getTangentAt(u, optionalTarget) { + const t = this.getUtoTmapping(u); + return this.getTangent(t, optionalTarget); + } + computeFrenetFrames(segments, closed) { + const normal = new Vector3(); + const tangents = []; + const normals = []; + const binormals = []; + const vec = new Vector3(); + const mat = new Matrix4(); + for (let i = 0; i <= segments; i++) { + const u = i / segments; + tangents[i] = this.getTangentAt(u, new Vector3()); + } + normals[0] = new Vector3(); + binormals[0] = new Vector3(); + let min = Number.MAX_VALUE; + const tx = Math.abs(tangents[0].x); + const ty = Math.abs(tangents[0].y); + const tz = Math.abs(tangents[0].z); + if (tx <= min) { + min = tx; + normal.set(1, 0, 0); + } + if (ty <= min) { + min = ty; + normal.set(0, 1, 0); + } + if (tz <= min) { + normal.set(0, 0, 1); + } + vec.crossVectors(tangents[0], normal).normalize(); + normals[0].crossVectors(tangents[0], vec); + binormals[0].crossVectors(tangents[0], normals[0]); + for (let i = 1; i <= segments; i++) { + normals[i] = normals[i - 1].clone(); + binormals[i] = binormals[i - 1].clone(); + vec.crossVectors(tangents[i - 1], tangents[i]); + if (vec.length() > Number.EPSILON) { + vec.normalize(); + const theta = Math.acos(clamp(tangents[i - 1].dot(tangents[i]), -1, 1)); + normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta)); + } + binormals[i].crossVectors(tangents[i], normals[i]); + } + if (closed === true) { + let theta = Math.acos(clamp(normals[0].dot(normals[segments]), -1, 1)); + theta /= segments; + if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) { + theta = -theta; + } + for (let i = 1; i <= segments; i++) { + normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i)); + binormals[i].crossVectors(tangents[i], normals[i]); + } + } + return { + tangents, + normals, + binormals + }; + } + clone() { + return new this.constructor().copy(this); + } + copy(source) { + this.arcLengthDivisions = source.arcLengthDivisions; + return this; + } + toJSON() { + const data = { + metadata: { + version: 4.6, + type: "Curve", + generator: "Curve.toJSON" + } + }; + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + return data; + } + fromJSON(json) { + this.arcLengthDivisions = json.arcLengthDivisions; + return this; + } +}; +var EllipseCurve = class extends Curve { + constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0) { + super(); + this.isEllipseCurve = true; + this.type = "EllipseCurve"; + this.aX = aX; + this.aY = aY; + this.xRadius = xRadius; + this.yRadius = yRadius; + this.aStartAngle = aStartAngle; + this.aEndAngle = aEndAngle; + this.aClockwise = aClockwise; + this.aRotation = aRotation; + } + getPoint(t, optionalTarget = new Vector2()) { + const point = optionalTarget; + const twoPi = Math.PI * 2; + let deltaAngle = this.aEndAngle - this.aStartAngle; + const samePoints = Math.abs(deltaAngle) < Number.EPSILON; + while (deltaAngle < 0) deltaAngle += twoPi; + while (deltaAngle > twoPi) deltaAngle -= twoPi; + if (deltaAngle < Number.EPSILON) { + if (samePoints) { + deltaAngle = 0; + } else { + deltaAngle = twoPi; + } + } + if (this.aClockwise === true && !samePoints) { + if (deltaAngle === twoPi) { + deltaAngle = -twoPi; + } else { + deltaAngle = deltaAngle - twoPi; + } + } + const angle = this.aStartAngle + t * deltaAngle; + let x = this.aX + this.xRadius * Math.cos(angle); + let y = this.aY + this.yRadius * Math.sin(angle); + if (this.aRotation !== 0) { + const cos = Math.cos(this.aRotation); + const sin = Math.sin(this.aRotation); + const tx = x - this.aX; + const ty = y - this.aY; + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + } + return point.set(x, y); + } + copy(source) { + super.copy(source); + this.aX = source.aX; + this.aY = source.aY; + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + this.aClockwise = source.aClockwise; + this.aRotation = source.aRotation; + return this; + } + toJSON() { + const data = super.toJSON(); + data.aX = this.aX; + data.aY = this.aY; + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + data.aClockwise = this.aClockwise; + data.aRotation = this.aRotation; + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.aX = json.aX; + this.aY = json.aY; + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + this.aClockwise = json.aClockwise; + this.aRotation = json.aRotation; + return this; + } +}; +var ArcCurve = class extends EllipseCurve { + constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + super(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); + this.isArcCurve = true; + this.type = "ArcCurve"; + } +}; +function CubicPoly() { + let c0 = 0, c1 = 0, c2 = 0, c3 = 0; + function init(x0, x1, t0, t1) { + c0 = x0; + c1 = t0; + c2 = -3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + } + return { + initCatmullRom: function(x0, x1, x2, x3, tension) { + init(x1, x2, tension * (x2 - x0), tension * (x3 - x1)); + }, + initNonuniformCatmullRom: function(x0, x1, x2, x3, dt0, dt1, dt2) { + let t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1; + let t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; + t1 *= dt1; + t2 *= dt1; + init(x1, x2, t1, t2); + }, + calc: function(t) { + const t2 = t * t; + const t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + } + }; +} +var tmp = new Vector3(); +var px = new CubicPoly(); +var py = new CubicPoly(); +var pz = new CubicPoly(); +var CatmullRomCurve3 = class extends Curve { + constructor(points = [], closed = false, curveType = "centripetal", tension = 0.5) { + super(); + this.isCatmullRomCurve3 = true; + this.type = "CatmullRomCurve3"; + this.points = points; + this.closed = closed; + this.curveType = curveType; + this.tension = tension; + } + getPoint(t, optionalTarget = new Vector3()) { + const point = optionalTarget; + const points = this.points; + const l = points.length; + const p = (l - (this.closed ? 0 : 1)) * t; + let intPoint = Math.floor(p); + let weight = p - intPoint; + if (this.closed) { + intPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l; + } else if (weight === 0 && intPoint === l - 1) { + intPoint = l - 2; + weight = 1; + } + let p0, p3; + if (this.closed || intPoint > 0) { + p0 = points[(intPoint - 1) % l]; + } else { + tmp.subVectors(points[0], points[1]).add(points[0]); + p0 = tmp; + } + const p1 = points[intPoint % l]; + const p2 = points[(intPoint + 1) % l]; + if (this.closed || intPoint + 2 < l) { + p3 = points[(intPoint + 2) % l]; + } else { + tmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]); + p3 = tmp; + } + if (this.curveType === "centripetal" || this.curveType === "chordal") { + const pow = this.curveType === "chordal" ? 0.5 : 0.25; + let dt0 = Math.pow(p0.distanceToSquared(p1), pow); + let dt1 = Math.pow(p1.distanceToSquared(p2), pow); + let dt2 = Math.pow(p2.distanceToSquared(p3), pow); + if (dt1 < 1e-4) dt1 = 1; + if (dt0 < 1e-4) dt0 = dt1; + if (dt2 < 1e-4) dt2 = dt1; + px.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2); + py.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2); + pz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2); + } else if (this.curveType === "catmullrom") { + px.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension); + py.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension); + pz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension); + } + point.set( + px.calc(weight), + py.calc(weight), + pz.calc(weight) + ); + return point; + } + copy(source) { + super.copy(source); + this.points = []; + for (let i = 0, l = source.points.length; i < l; i++) { + const point = source.points[i]; + this.points.push(point.clone()); + } + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + return this; + } + toJSON() { + const data = super.toJSON(); + data.points = []; + for (let i = 0, l = this.points.length; i < l; i++) { + const point = this.points[i]; + data.points.push(point.toArray()); + } + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.points = []; + for (let i = 0, l = json.points.length; i < l; i++) { + const point = json.points[i]; + this.points.push(new Vector3().fromArray(point)); + } + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + return this; + } +}; +function CatmullRom(t, p0, p1, p2, p3) { + const v0 = (p2 - p0) * 0.5; + const v1 = (p3 - p1) * 0.5; + const t2 = t * t; + const t3 = t * t2; + return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; +} +function QuadraticBezierP0(t, p) { + const k = 1 - t; + return k * k * p; +} +function QuadraticBezierP1(t, p) { + return 2 * (1 - t) * t * p; +} +function QuadraticBezierP2(t, p) { + return t * t * p; +} +function QuadraticBezier(t, p0, p1, p2) { + return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2); +} +function CubicBezierP0(t, p) { + const k = 1 - t; + return k * k * k * p; +} +function CubicBezierP1(t, p) { + const k = 1 - t; + return 3 * k * k * t * p; +} +function CubicBezierP2(t, p) { + return 3 * (1 - t) * t * t * p; +} +function CubicBezierP3(t, p) { + return t * t * t * p; +} +function CubicBezier(t, p0, p1, p2, p3) { + return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3); +} +var CubicBezierCurve = class extends Curve { + constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2()) { + super(); + this.isCubicBezierCurve = true; + this.type = "CubicBezierCurve"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + } + getPoint(t, optionalTarget = new Vector2()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + point.set( + CubicBezier(t, v0.x, v1.x, v2.x, v3.x), + CubicBezier(t, v0.y, v1.y, v2.y, v3.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + this.v3.copy(source.v3); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + this.v3.fromArray(json.v3); + return this; + } +}; +var CubicBezierCurve3 = class extends Curve { + constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3()) { + super(); + this.isCubicBezierCurve3 = true; + this.type = "CubicBezierCurve3"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + } + getPoint(t, optionalTarget = new Vector3()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + point.set( + CubicBezier(t, v0.x, v1.x, v2.x, v3.x), + CubicBezier(t, v0.y, v1.y, v2.y, v3.y), + CubicBezier(t, v0.z, v1.z, v2.z, v3.z) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + this.v3.copy(source.v3); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + this.v3.fromArray(json.v3); + return this; + } +}; +var LineCurve = class extends Curve { + constructor(v1 = new Vector2(), v2 = new Vector2()) { + super(); + this.isLineCurve = true; + this.type = "LineCurve"; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t, optionalTarget = new Vector2()) { + const point = optionalTarget; + if (t === 1) { + point.copy(this.v2); + } else { + point.copy(this.v2).sub(this.v1); + point.multiplyScalar(t).add(this.v1); + } + return point; + } + // Line curve is linear, so we can overwrite default getPointAt + getPointAt(u, optionalTarget) { + return this.getPoint(u, optionalTarget); + } + getTangent(t, optionalTarget = new Vector2()) { + return optionalTarget.subVectors(this.v2, this.v1).normalize(); + } + getTangentAt(u, optionalTarget) { + return this.getTangent(u, optionalTarget); + } + copy(source) { + super.copy(source); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +}; +var LineCurve3 = class extends Curve { + constructor(v1 = new Vector3(), v2 = new Vector3()) { + super(); + this.isLineCurve3 = true; + this.type = "LineCurve3"; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t, optionalTarget = new Vector3()) { + const point = optionalTarget; + if (t === 1) { + point.copy(this.v2); + } else { + point.copy(this.v2).sub(this.v1); + point.multiplyScalar(t).add(this.v1); + } + return point; + } + // Line curve is linear, so we can overwrite default getPointAt + getPointAt(u, optionalTarget) { + return this.getPoint(u, optionalTarget); + } + getTangent(t, optionalTarget = new Vector3()) { + return optionalTarget.subVectors(this.v2, this.v1).normalize(); + } + getTangentAt(u, optionalTarget) { + return this.getTangent(u, optionalTarget); + } + copy(source) { + super.copy(source); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +}; +var QuadraticBezierCurve = class extends Curve { + constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) { + super(); + this.isQuadraticBezierCurve = true; + this.type = "QuadraticBezierCurve"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t, optionalTarget = new Vector2()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + point.set( + QuadraticBezier(t, v0.x, v1.x, v2.x), + QuadraticBezier(t, v0.y, v1.y, v2.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +}; +var QuadraticBezierCurve3 = class extends Curve { + constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) { + super(); + this.isQuadraticBezierCurve3 = true; + this.type = "QuadraticBezierCurve3"; + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t, optionalTarget = new Vector3()) { + const point = optionalTarget; + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + point.set( + QuadraticBezier(t, v0.x, v1.x, v2.x), + QuadraticBezier(t, v0.y, v1.y, v2.y), + QuadraticBezier(t, v0.z, v1.z, v2.z) + ); + return point; + } + copy(source) { + super.copy(source); + this.v0.copy(source.v0); + this.v1.copy(source.v1); + this.v2.copy(source.v2); + return this; + } + toJSON() { + const data = super.toJSON(); + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.v0.fromArray(json.v0); + this.v1.fromArray(json.v1); + this.v2.fromArray(json.v2); + return this; + } +}; +var SplineCurve = class extends Curve { + constructor(points = []) { + super(); + this.isSplineCurve = true; + this.type = "SplineCurve"; + this.points = points; + } + getPoint(t, optionalTarget = new Vector2()) { + const point = optionalTarget; + const points = this.points; + const p = (points.length - 1) * t; + const intPoint = Math.floor(p); + const weight = p - intPoint; + const p0 = points[intPoint === 0 ? intPoint : intPoint - 1]; + const p1 = points[intPoint]; + const p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1]; + const p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2]; + point.set( + CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), + CatmullRom(weight, p0.y, p1.y, p2.y, p3.y) + ); + return point; + } + copy(source) { + super.copy(source); + this.points = []; + for (let i = 0, l = source.points.length; i < l; i++) { + const point = source.points[i]; + this.points.push(point.clone()); + } + return this; + } + toJSON() { + const data = super.toJSON(); + data.points = []; + for (let i = 0, l = this.points.length; i < l; i++) { + const point = this.points[i]; + data.points.push(point.toArray()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.points = []; + for (let i = 0, l = json.points.length; i < l; i++) { + const point = json.points[i]; + this.points.push(new Vector2().fromArray(point)); + } + return this; + } +}; +var Curves = Object.freeze({ + __proto__: null, + ArcCurve, + CatmullRomCurve3, + CubicBezierCurve, + CubicBezierCurve3, + EllipseCurve, + LineCurve, + LineCurve3, + QuadraticBezierCurve, + QuadraticBezierCurve3, + SplineCurve +}); +var CurvePath = class extends Curve { + constructor() { + super(); + this.type = "CurvePath"; + this.curves = []; + this.autoClose = false; + } + add(curve) { + this.curves.push(curve); + } + closePath() { + const startPoint = this.curves[0].getPoint(0); + const endPoint = this.curves[this.curves.length - 1].getPoint(1); + if (!startPoint.equals(endPoint)) { + const lineType = startPoint.isVector2 === true ? "LineCurve" : "LineCurve3"; + this.curves.push(new Curves[lineType](endPoint, startPoint)); + } + return this; + } + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + getPoint(t, optionalTarget) { + const d = t * this.getLength(); + const curveLengths = this.getCurveLengths(); + let i = 0; + while (i < curveLengths.length) { + if (curveLengths[i] >= d) { + const diff = curveLengths[i] - d; + const curve = this.curves[i]; + const segmentLength = curve.getLength(); + const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + return curve.getPointAt(u, optionalTarget); + } + i++; + } + return null; + } + // We cannot use the default THREE.Curve getPoint() with getLength() because in + // THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath + // getPoint() depends on getLength + getLength() { + const lens = this.getCurveLengths(); + return lens[lens.length - 1]; + } + // cacheLengths must be recalculated. + updateArcLengths() { + this.needsUpdate = true; + this.cacheLengths = null; + this.getCurveLengths(); + } + // Compute lengths and cache them + // We cannot overwrite getLengths() because UtoT mapping uses it. + getCurveLengths() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) { + return this.cacheLengths; + } + const lengths = []; + let sums = 0; + for (let i = 0, l = this.curves.length; i < l; i++) { + sums += this.curves[i].getLength(); + lengths.push(sums); + } + this.cacheLengths = lengths; + return lengths; + } + getSpacedPoints(divisions = 40) { + const points = []; + for (let i = 0; i <= divisions; i++) { + points.push(this.getPoint(i / divisions)); + } + if (this.autoClose) { + points.push(points[0]); + } + return points; + } + getPoints(divisions = 12) { + const points = []; + let last; + for (let i = 0, curves = this.curves; i < curves.length; i++) { + const curve = curves[i]; + const resolution = curve.isEllipseCurve ? divisions * 2 : curve.isLineCurve || curve.isLineCurve3 ? 1 : curve.isSplineCurve ? divisions * curve.points.length : divisions; + const pts = curve.getPoints(resolution); + for (let j = 0; j < pts.length; j++) { + const point = pts[j]; + if (last && last.equals(point)) continue; + points.push(point); + last = point; + } + } + if (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0])) { + points.push(points[0]); + } + return points; + } + copy(source) { + super.copy(source); + this.curves = []; + for (let i = 0, l = source.curves.length; i < l; i++) { + const curve = source.curves[i]; + this.curves.push(curve.clone()); + } + this.autoClose = source.autoClose; + return this; + } + toJSON() { + const data = super.toJSON(); + data.autoClose = this.autoClose; + data.curves = []; + for (let i = 0, l = this.curves.length; i < l; i++) { + const curve = this.curves[i]; + data.curves.push(curve.toJSON()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.autoClose = json.autoClose; + this.curves = []; + for (let i = 0, l = json.curves.length; i < l; i++) { + const curve = json.curves[i]; + this.curves.push(new Curves[curve.type]().fromJSON(curve)); + } + return this; + } +}; +var Path = class extends CurvePath { + constructor(points) { + super(); + this.type = "Path"; + this.currentPoint = new Vector2(); + if (points) { + this.setFromPoints(points); + } + } + setFromPoints(points) { + this.moveTo(points[0].x, points[0].y); + for (let i = 1, l = points.length; i < l; i++) { + this.lineTo(points[i].x, points[i].y); + } + return this; + } + moveTo(x, y) { + this.currentPoint.set(x, y); + return this; + } + lineTo(x, y) { + const curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y)); + this.curves.push(curve); + this.currentPoint.set(x, y); + return this; + } + quadraticCurveTo(aCPx, aCPy, aX, aY) { + const curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2(aCPx, aCPy), + new Vector2(aX, aY) + ); + this.curves.push(curve); + this.currentPoint.set(aX, aY); + return this; + } + bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { + const curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2(aCP1x, aCP1y), + new Vector2(aCP2x, aCP2y), + new Vector2(aX, aY) + ); + this.curves.push(curve); + this.currentPoint.set(aX, aY); + return this; + } + splineThru(pts) { + const npts = [this.currentPoint.clone()].concat(pts); + const curve = new SplineCurve(npts); + this.curves.push(curve); + this.currentPoint.copy(pts[pts.length - 1]); + return this; + } + arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + this.absarc( + aX + x0, + aY + y0, + aRadius, + aStartAngle, + aEndAngle, + aClockwise + ); + return this; + } + absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { + this.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); + return this; + } + ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + this.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + return this; + } + absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + const curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + if (this.curves.length > 0) { + const firstPoint = curve.getPoint(0); + if (!firstPoint.equals(this.currentPoint)) { + this.lineTo(firstPoint.x, firstPoint.y); + } + } + this.curves.push(curve); + const lastPoint = curve.getPoint(1); + this.currentPoint.copy(lastPoint); + return this; + } + copy(source) { + super.copy(source); + this.currentPoint.copy(source.currentPoint); + return this; + } + toJSON() { + const data = super.toJSON(); + data.currentPoint = this.currentPoint.toArray(); + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.currentPoint.fromArray(json.currentPoint); + return this; + } +}; +var LatheGeometry = class _LatheGeometry extends BufferGeometry { + constructor(points = [new Vector2(0, -0.5), new Vector2(0.5, 0), new Vector2(0, 0.5)], segments = 12, phiStart = 0, phiLength = Math.PI * 2) { + super(); + this.type = "LatheGeometry"; + this.parameters = { + points, + segments, + phiStart, + phiLength + }; + segments = Math.floor(segments); + phiLength = clamp(phiLength, 0, Math.PI * 2); + const indices = []; + const vertices = []; + const uvs = []; + const initNormals = []; + const normals = []; + const inverseSegments = 1 / segments; + const vertex2 = new Vector3(); + const uv = new Vector2(); + const normal = new Vector3(); + const curNormal = new Vector3(); + const prevNormal = new Vector3(); + let dx = 0; + let dy = 0; + for (let j = 0; j <= points.length - 1; j++) { + switch (j) { + case 0: + dx = points[j + 1].x - points[j].x; + dy = points[j + 1].y - points[j].y; + normal.x = dy * 1; + normal.y = -dx; + normal.z = dy * 0; + prevNormal.copy(normal); + normal.normalize(); + initNormals.push(normal.x, normal.y, normal.z); + break; + case points.length - 1: + initNormals.push(prevNormal.x, prevNormal.y, prevNormal.z); + break; + default: + dx = points[j + 1].x - points[j].x; + dy = points[j + 1].y - points[j].y; + normal.x = dy * 1; + normal.y = -dx; + normal.z = dy * 0; + curNormal.copy(normal); + normal.x += prevNormal.x; + normal.y += prevNormal.y; + normal.z += prevNormal.z; + normal.normalize(); + initNormals.push(normal.x, normal.y, normal.z); + prevNormal.copy(curNormal); + } + } + for (let i = 0; i <= segments; i++) { + const phi = phiStart + i * inverseSegments * phiLength; + const sin = Math.sin(phi); + const cos = Math.cos(phi); + for (let j = 0; j <= points.length - 1; j++) { + vertex2.x = points[j].x * sin; + vertex2.y = points[j].y; + vertex2.z = points[j].x * cos; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + uv.x = i / segments; + uv.y = j / (points.length - 1); + uvs.push(uv.x, uv.y); + const x = initNormals[3 * j + 0] * sin; + const y = initNormals[3 * j + 1]; + const z = initNormals[3 * j + 0] * cos; + normals.push(x, y, z); + } + } + for (let i = 0; i < segments; i++) { + for (let j = 0; j < points.length - 1; j++) { + const base = j + i * points.length; + const a = base; + const b = base + points.length; + const c = base + points.length + 1; + const d = base + 1; + indices.push(a, b, d); + indices.push(c, d, b); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _LatheGeometry(data.points, data.segments, data.phiStart, data.phiLength); + } +}; +var CapsuleGeometry = class _CapsuleGeometry extends LatheGeometry { + constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { + const path = new Path(); + path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); + path.absarc(0, length / 2, radius, 0, Math.PI * 0.5); + super(path.getPoints(capSegments), radialSegments); + this.type = "CapsuleGeometry"; + this.parameters = { + radius, + length, + capSegments, + radialSegments + }; + } + static fromJSON(data) { + return new _CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments); + } +}; +var CircleGeometry = class _CircleGeometry extends BufferGeometry { + constructor(radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "CircleGeometry"; + this.parameters = { + radius, + segments, + thetaStart, + thetaLength + }; + segments = Math.max(3, segments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const vertex2 = new Vector3(); + const uv = new Vector2(); + vertices.push(0, 0, 0); + normals.push(0, 0, 1); + uvs.push(0.5, 0.5); + for (let s = 0, i = 3; s <= segments; s++, i += 3) { + const segment = thetaStart + s / segments * thetaLength; + vertex2.x = radius * Math.cos(segment); + vertex2.y = radius * Math.sin(segment); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, 0, 1); + uv.x = (vertices[i] / radius + 1) / 2; + uv.y = (vertices[i + 1] / radius + 1) / 2; + uvs.push(uv.x, uv.y); + } + for (let i = 1; i <= segments; i++) { + indices.push(i, i + 1, 0); + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _CircleGeometry(data.radius, data.segments, data.thetaStart, data.thetaLength); + } +}; +var CylinderGeometry = class _CylinderGeometry extends BufferGeometry { + constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "CylinderGeometry"; + this.parameters = { + radiusTop, + radiusBottom, + height, + radialSegments, + heightSegments, + openEnded, + thetaStart, + thetaLength + }; + const scope = this; + radialSegments = Math.floor(radialSegments); + heightSegments = Math.floor(heightSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let index = 0; + const indexArray = []; + const halfHeight = height / 2; + let groupStart = 0; + generateTorso(); + if (openEnded === false) { + if (radiusTop > 0) generateCap(true); + if (radiusBottom > 0) generateCap(false); + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generateTorso() { + const normal = new Vector3(); + const vertex2 = new Vector3(); + let groupCount = 0; + const slope = (radiusBottom - radiusTop) / height; + for (let y = 0; y <= heightSegments; y++) { + const indexRow = []; + const v = y / heightSegments; + const radius = v * (radiusBottom - radiusTop) + radiusTop; + for (let x = 0; x <= radialSegments; x++) { + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + const sinTheta = Math.sin(theta); + const cosTheta = Math.cos(theta); + vertex2.x = radius * sinTheta; + vertex2.y = -v * height + halfHeight; + vertex2.z = radius * cosTheta; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.set(sinTheta, slope, cosTheta).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u, 1 - v); + indexRow.push(index++); + } + indexArray.push(indexRow); + } + for (let x = 0; x < radialSegments; x++) { + for (let y = 0; y < heightSegments; y++) { + const a = indexArray[y][x]; + const b = indexArray[y + 1][x]; + const c = indexArray[y + 1][x + 1]; + const d = indexArray[y][x + 1]; + indices.push(a, b, d); + indices.push(b, c, d); + groupCount += 6; + } + } + scope.addGroup(groupStart, groupCount, 0); + groupStart += groupCount; + } + function generateCap(top) { + const centerIndexStart = index; + const uv = new Vector2(); + const vertex2 = new Vector3(); + let groupCount = 0; + const radius = top === true ? radiusTop : radiusBottom; + const sign2 = top === true ? 1 : -1; + for (let x = 1; x <= radialSegments; x++) { + vertices.push(0, halfHeight * sign2, 0); + normals.push(0, sign2, 0); + uvs.push(0.5, 0.5); + index++; + } + const centerIndexEnd = index; + for (let x = 0; x <= radialSegments; x++) { + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + const cosTheta = Math.cos(theta); + const sinTheta = Math.sin(theta); + vertex2.x = radius * sinTheta; + vertex2.y = halfHeight * sign2; + vertex2.z = radius * cosTheta; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, sign2, 0); + uv.x = cosTheta * 0.5 + 0.5; + uv.y = sinTheta * 0.5 * sign2 + 0.5; + uvs.push(uv.x, uv.y); + index++; + } + for (let x = 0; x < radialSegments; x++) { + const c = centerIndexStart + x; + const i = centerIndexEnd + x; + if (top === true) { + indices.push(i, i + 1, c); + } else { + indices.push(i + 1, i, c); + } + groupCount += 3; + } + scope.addGroup(groupStart, groupCount, top === true ? 1 : 2); + groupStart += groupCount; + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _CylinderGeometry(data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); + } +}; +var ConeGeometry = class _ConeGeometry extends CylinderGeometry { + constructor(radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { + super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength); + this.type = "ConeGeometry"; + this.parameters = { + radius, + height, + radialSegments, + heightSegments, + openEnded, + thetaStart, + thetaLength + }; + } + static fromJSON(data) { + return new _ConeGeometry(data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); + } +}; +var PolyhedronGeometry = class _PolyhedronGeometry extends BufferGeometry { + constructor(vertices = [], indices = [], radius = 1, detail = 0) { + super(); + this.type = "PolyhedronGeometry"; + this.parameters = { + vertices, + indices, + radius, + detail + }; + const vertexBuffer = []; + const uvBuffer = []; + subdivide(detail); + applyRadius(radius); + generateUVs(); + this.setAttribute("position", new Float32BufferAttribute(vertexBuffer, 3)); + this.setAttribute("normal", new Float32BufferAttribute(vertexBuffer.slice(), 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvBuffer, 2)); + if (detail === 0) { + this.computeVertexNormals(); + } else { + this.normalizeNormals(); + } + function subdivide(detail2) { + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + for (let i = 0; i < indices.length; i += 3) { + getVertexByIndex(indices[i + 0], a); + getVertexByIndex(indices[i + 1], b); + getVertexByIndex(indices[i + 2], c); + subdivideFace(a, b, c, detail2); + } + } + function subdivideFace(a, b, c, detail2) { + const cols = detail2 + 1; + const v = []; + for (let i = 0; i <= cols; i++) { + v[i] = []; + const aj = a.clone().lerp(c, i / cols); + const bj = b.clone().lerp(c, i / cols); + const rows = cols - i; + for (let j = 0; j <= rows; j++) { + if (j === 0 && i === cols) { + v[i][j] = aj; + } else { + v[i][j] = aj.clone().lerp(bj, j / rows); + } + } + } + for (let i = 0; i < cols; i++) { + for (let j = 0; j < 2 * (cols - i) - 1; j++) { + const k = Math.floor(j / 2); + if (j % 2 === 0) { + pushVertex(v[i][k + 1]); + pushVertex(v[i + 1][k]); + pushVertex(v[i][k]); + } else { + pushVertex(v[i][k + 1]); + pushVertex(v[i + 1][k + 1]); + pushVertex(v[i + 1][k]); + } + } + } + } + function applyRadius(radius2) { + const vertex2 = new Vector3(); + for (let i = 0; i < vertexBuffer.length; i += 3) { + vertex2.x = vertexBuffer[i + 0]; + vertex2.y = vertexBuffer[i + 1]; + vertex2.z = vertexBuffer[i + 2]; + vertex2.normalize().multiplyScalar(radius2); + vertexBuffer[i + 0] = vertex2.x; + vertexBuffer[i + 1] = vertex2.y; + vertexBuffer[i + 2] = vertex2.z; + } + } + function generateUVs() { + const vertex2 = new Vector3(); + for (let i = 0; i < vertexBuffer.length; i += 3) { + vertex2.x = vertexBuffer[i + 0]; + vertex2.y = vertexBuffer[i + 1]; + vertex2.z = vertexBuffer[i + 2]; + const u = azimuth(vertex2) / 2 / Math.PI + 0.5; + const v = inclination(vertex2) / Math.PI + 0.5; + uvBuffer.push(u, 1 - v); + } + correctUVs(); + correctSeam(); + } + function correctSeam() { + for (let i = 0; i < uvBuffer.length; i += 6) { + const x0 = uvBuffer[i + 0]; + const x1 = uvBuffer[i + 2]; + const x2 = uvBuffer[i + 4]; + const max = Math.max(x0, x1, x2); + const min = Math.min(x0, x1, x2); + if (max > 0.9 && min < 0.1) { + if (x0 < 0.2) uvBuffer[i + 0] += 1; + if (x1 < 0.2) uvBuffer[i + 2] += 1; + if (x2 < 0.2) uvBuffer[i + 4] += 1; + } + } + } + function pushVertex(vertex2) { + vertexBuffer.push(vertex2.x, vertex2.y, vertex2.z); + } + function getVertexByIndex(index, vertex2) { + const stride = index * 3; + vertex2.x = vertices[stride + 0]; + vertex2.y = vertices[stride + 1]; + vertex2.z = vertices[stride + 2]; + } + function correctUVs() { + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + const centroid = new Vector3(); + const uvA = new Vector2(); + const uvB = new Vector2(); + const uvC = new Vector2(); + for (let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) { + a.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]); + b.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]); + c.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]); + uvA.set(uvBuffer[j + 0], uvBuffer[j + 1]); + uvB.set(uvBuffer[j + 2], uvBuffer[j + 3]); + uvC.set(uvBuffer[j + 4], uvBuffer[j + 5]); + centroid.copy(a).add(b).add(c).divideScalar(3); + const azi = azimuth(centroid); + correctUV(uvA, j + 0, a, azi); + correctUV(uvB, j + 2, b, azi); + correctUV(uvC, j + 4, c, azi); + } + } + function correctUV(uv, stride, vector, azimuth2) { + if (azimuth2 < 0 && uv.x === 1) { + uvBuffer[stride] = uv.x - 1; + } + if (vector.x === 0 && vector.z === 0) { + uvBuffer[stride] = azimuth2 / 2 / Math.PI + 0.5; + } + } + function azimuth(vector) { + return Math.atan2(vector.z, -vector.x); + } + function inclination(vector) { + return Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z)); + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _PolyhedronGeometry(data.vertices, data.indices, data.radius, data.details); + } +}; +var DodecahedronGeometry = class _DodecahedronGeometry extends PolyhedronGeometry { + constructor(radius = 1, detail = 0) { + const t = (1 + Math.sqrt(5)) / 2; + const r = 1 / t; + const vertices = [ + // (±1, ±1, ±1) + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + // (0, ±1/φ, ±φ) + 0, + -r, + -t, + 0, + -r, + t, + 0, + r, + -t, + 0, + r, + t, + // (±1/φ, ±φ, 0) + -r, + -t, + 0, + -r, + t, + 0, + r, + -t, + 0, + r, + t, + 0, + // (±φ, 0, ±1/φ) + -t, + 0, + -r, + t, + 0, + -r, + -t, + 0, + r, + t, + 0, + r + ]; + const indices = [ + 3, + 11, + 7, + 3, + 7, + 15, + 3, + 15, + 13, + 7, + 19, + 17, + 7, + 17, + 6, + 7, + 6, + 15, + 17, + 4, + 8, + 17, + 8, + 10, + 17, + 10, + 6, + 8, + 0, + 16, + 8, + 16, + 2, + 8, + 2, + 10, + 0, + 12, + 1, + 0, + 1, + 18, + 0, + 18, + 16, + 6, + 10, + 2, + 6, + 2, + 13, + 6, + 13, + 15, + 2, + 16, + 18, + 2, + 18, + 3, + 2, + 3, + 13, + 18, + 1, + 9, + 18, + 9, + 11, + 18, + 11, + 3, + 4, + 14, + 12, + 4, + 12, + 0, + 4, + 0, + 8, + 11, + 9, + 5, + 11, + 5, + 19, + 11, + 19, + 7, + 19, + 5, + 14, + 19, + 14, + 4, + 19, + 4, + 17, + 1, + 12, + 14, + 1, + 14, + 5, + 1, + 5, + 9 + ]; + super(vertices, indices, radius, detail); + this.type = "DodecahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new _DodecahedronGeometry(data.radius, data.detail); + } +}; +var _v0 = new Vector3(); +var _v1$1 = new Vector3(); +var _normal = new Vector3(); +var _triangle = new Triangle(); +var EdgesGeometry = class extends BufferGeometry { + constructor(geometry = null, thresholdAngle = 1) { + super(); + this.type = "EdgesGeometry"; + this.parameters = { + geometry, + thresholdAngle + }; + if (geometry !== null) { + const precisionPoints = 4; + const precision = Math.pow(10, precisionPoints); + const thresholdDot = Math.cos(DEG2RAD * thresholdAngle); + const indexAttr = geometry.getIndex(); + const positionAttr = geometry.getAttribute("position"); + const indexCount = indexAttr ? indexAttr.count : positionAttr.count; + const indexArr = [0, 0, 0]; + const vertKeys = ["a", "b", "c"]; + const hashes = new Array(3); + const edgeData = {}; + const vertices = []; + for (let i = 0; i < indexCount; i += 3) { + if (indexAttr) { + indexArr[0] = indexAttr.getX(i); + indexArr[1] = indexAttr.getX(i + 1); + indexArr[2] = indexAttr.getX(i + 2); + } else { + indexArr[0] = i; + indexArr[1] = i + 1; + indexArr[2] = i + 2; + } + const { a, b, c } = _triangle; + a.fromBufferAttribute(positionAttr, indexArr[0]); + b.fromBufferAttribute(positionAttr, indexArr[1]); + c.fromBufferAttribute(positionAttr, indexArr[2]); + _triangle.getNormal(_normal); + hashes[0] = `${Math.round(a.x * precision)},${Math.round(a.y * precision)},${Math.round(a.z * precision)}`; + hashes[1] = `${Math.round(b.x * precision)},${Math.round(b.y * precision)},${Math.round(b.z * precision)}`; + hashes[2] = `${Math.round(c.x * precision)},${Math.round(c.y * precision)},${Math.round(c.z * precision)}`; + if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) { + continue; + } + for (let j = 0; j < 3; j++) { + const jNext = (j + 1) % 3; + const vecHash0 = hashes[j]; + const vecHash1 = hashes[jNext]; + const v0 = _triangle[vertKeys[j]]; + const v1 = _triangle[vertKeys[jNext]]; + const hash = `${vecHash0}_${vecHash1}`; + const reverseHash = `${vecHash1}_${vecHash0}`; + if (reverseHash in edgeData && edgeData[reverseHash]) { + if (_normal.dot(edgeData[reverseHash].normal) <= thresholdDot) { + vertices.push(v0.x, v0.y, v0.z); + vertices.push(v1.x, v1.y, v1.z); + } + edgeData[reverseHash] = null; + } else if (!(hash in edgeData)) { + edgeData[hash] = { + index0: indexArr[j], + index1: indexArr[jNext], + normal: _normal.clone() + }; + } + } + } + for (const key in edgeData) { + if (edgeData[key]) { + const { index0, index1 } = edgeData[key]; + _v0.fromBufferAttribute(positionAttr, index0); + _v1$1.fromBufferAttribute(positionAttr, index1); + vertices.push(_v0.x, _v0.y, _v0.z); + vertices.push(_v1$1.x, _v1$1.y, _v1$1.z); + } + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +}; +var Shape = class extends Path { + constructor(points) { + super(points); + this.uuid = generateUUID(); + this.type = "Shape"; + this.holes = []; + } + getPointsHoles(divisions) { + const holesPts = []; + for (let i = 0, l = this.holes.length; i < l; i++) { + holesPts[i] = this.holes[i].getPoints(divisions); + } + return holesPts; + } + // get points of shape and holes (keypoints based on segments parameter) + extractPoints(divisions) { + return { + shape: this.getPoints(divisions), + holes: this.getPointsHoles(divisions) + }; + } + copy(source) { + super.copy(source); + this.holes = []; + for (let i = 0, l = source.holes.length; i < l; i++) { + const hole = source.holes[i]; + this.holes.push(hole.clone()); + } + return this; + } + toJSON() { + const data = super.toJSON(); + data.uuid = this.uuid; + data.holes = []; + for (let i = 0, l = this.holes.length; i < l; i++) { + const hole = this.holes[i]; + data.holes.push(hole.toJSON()); + } + return data; + } + fromJSON(json) { + super.fromJSON(json); + this.uuid = json.uuid; + this.holes = []; + for (let i = 0, l = json.holes.length; i < l; i++) { + const hole = json.holes[i]; + this.holes.push(new Path().fromJSON(hole)); + } + return this; + } +}; +var Earcut = { + triangulate: function(data, holeIndices, dim = 2) { + const hasHoles = holeIndices && holeIndices.length; + const outerLen = hasHoles ? holeIndices[0] * dim : data.length; + let outerNode = linkedList(data, 0, outerLen, dim, true); + const triangles = []; + if (!outerNode || outerNode.next === outerNode.prev) return triangles; + let minX, minY, maxX, maxY, x, y, invSize; + if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); + if (data.length > 80 * dim) { + minX = maxX = data[0]; + minY = maxY = data[1]; + for (let i = dim; i < outerLen; i += dim) { + x = data[i]; + y = data[i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + } + invSize = Math.max(maxX - minX, maxY - minY); + invSize = invSize !== 0 ? 32767 / invSize : 0; + } + earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0); + return triangles; + } +}; +function linkedList(data, start, end, dim, clockwise) { + let i, last; + if (clockwise === signedArea(data, start, end, dim) > 0) { + for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); + } else { + for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); + } + if (last && equals(last, last.next)) { + removeNode(last); + last = last.next; + } + return last; +} +function filterPoints(start, end) { + if (!start) return start; + if (!end) end = start; + let p = start, again; + do { + again = false; + if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { + removeNode(p); + p = end = p.prev; + if (p === p.next) break; + again = true; + } else { + p = p.next; + } + } while (again || p !== end); + return end; +} +function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { + if (!ear) return; + if (!pass && invSize) indexCurve(ear, minX, minY, invSize); + let stop = ear, prev, next; + while (ear.prev !== ear.next) { + prev = ear.prev; + next = ear.next; + if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { + triangles.push(prev.i / dim | 0); + triangles.push(ear.i / dim | 0); + triangles.push(next.i / dim | 0); + removeNode(ear); + ear = next.next; + stop = next.next; + continue; + } + ear = next; + if (ear === stop) { + if (!pass) { + earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); + } else if (pass === 1) { + ear = cureLocalIntersections(filterPoints(ear), triangles, dim); + earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); + } else if (pass === 2) { + splitEarcut(ear, triangles, dim, minX, minY, invSize); + } + break; + } + } +} +function isEar(ear) { + const a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; + const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; + let p = c.next; + while (p !== a) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.next; + } + return true; +} +function isEarHashed(ear, minX, minY, invSize) { + const a = ear.prev, b = ear, c = ear.next; + if (area(a, b, c) >= 0) return false; + const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; + const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; + const minZ = zOrder(x0, y0, minX, minY, invSize), maxZ = zOrder(x1, y1, minX, minY, invSize); + let p = ear.prevZ, n = ear.nextZ; + while (p && p.z >= minZ && n && n.z <= maxZ) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + while (p && p.z >= minZ) { + if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; + p = p.prevZ; + } + while (n && n.z <= maxZ) { + if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; + n = n.nextZ; + } + return true; +} +function cureLocalIntersections(start, triangles, dim) { + let p = start; + do { + const a = p.prev, b = p.next.next; + if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { + triangles.push(a.i / dim | 0); + triangles.push(p.i / dim | 0); + triangles.push(b.i / dim | 0); + removeNode(p); + removeNode(p.next); + p = start = b; + } + p = p.next; + } while (p !== start); + return filterPoints(p); +} +function splitEarcut(start, triangles, dim, minX, minY, invSize) { + let a = start; + do { + let b = a.next.next; + while (b !== a.prev) { + if (a.i !== b.i && isValidDiagonal(a, b)) { + let c = splitPolygon(a, b); + a = filterPoints(a, a.next); + c = filterPoints(c, c.next); + earcutLinked(a, triangles, dim, minX, minY, invSize, 0); + earcutLinked(c, triangles, dim, minX, minY, invSize, 0); + return; + } + b = b.next; + } + a = a.next; + } while (a !== start); +} +function eliminateHoles(data, holeIndices, outerNode, dim) { + const queue = []; + let i, len, start, end, list; + for (i = 0, len = holeIndices.length; i < len; i++) { + start = holeIndices[i] * dim; + end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; + list = linkedList(data, start, end, dim, false); + if (list === list.next) list.steiner = true; + queue.push(getLeftmost(list)); + } + queue.sort(compareX); + for (i = 0; i < queue.length; i++) { + outerNode = eliminateHole(queue[i], outerNode); + } + return outerNode; +} +function compareX(a, b) { + return a.x - b.x; +} +function eliminateHole(hole, outerNode) { + const bridge = findHoleBridge(hole, outerNode); + if (!bridge) { + return outerNode; + } + const bridgeReverse = splitPolygon(bridge, hole); + filterPoints(bridgeReverse, bridgeReverse.next); + return filterPoints(bridge, bridge.next); +} +function findHoleBridge(hole, outerNode) { + let p = outerNode, qx = -Infinity, m; + const hx = hole.x, hy = hole.y; + do { + if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { + const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); + if (x <= hx && x > qx) { + qx = x; + m = p.x < p.next.x ? p : p.next; + if (x === hx) return m; + } + } + p = p.next; + } while (p !== outerNode); + if (!m) return null; + const stop = m, mx = m.x, my = m.y; + let tanMin = Infinity, tan; + p = m; + do { + if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { + tan = Math.abs(hy - p.y) / (hx - p.x); + if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) { + m = p; + tanMin = tan; + } + } + p = p.next; + } while (p !== stop); + return m; +} +function sectorContainsSector(m, p) { + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; +} +function indexCurve(start, minX, minY, invSize) { + let p = start; + do { + if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + } while (p !== start); + p.prevZ.nextZ = null; + p.prevZ = null; + sortLinked(p); +} +function sortLinked(list) { + let i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; + do { + p = list; + list = null; + tail = null; + numMerges = 0; + while (p) { + numMerges++; + q = p; + pSize = 0; + for (i = 0; i < inSize; i++) { + pSize++; + q = q.nextZ; + if (!q) break; + } + qSize = inSize; + while (pSize > 0 || qSize > 0 && q) { + if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { + e = p; + p = p.nextZ; + pSize--; + } else { + e = q; + q = q.nextZ; + qSize--; + } + if (tail) tail.nextZ = e; + else list = e; + e.prevZ = tail; + tail = e; + } + p = q; + } + tail.nextZ = null; + inSize *= 2; + } while (numMerges > 1); + return list; +} +function zOrder(x, y, minX, minY, invSize) { + x = (x - minX) * invSize | 0; + y = (y - minY) * invSize | 0; + x = (x | x << 8) & 16711935; + x = (x | x << 4) & 252645135; + x = (x | x << 2) & 858993459; + x = (x | x << 1) & 1431655765; + y = (y | y << 8) & 16711935; + y = (y | y << 4) & 252645135; + y = (y | y << 2) & 858993459; + y = (y | y << 1) & 1431655765; + return x | y << 1; +} +function getLeftmost(start) { + let p = start, leftmost = start; + do { + if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p; + p = p.next; + } while (p !== start); + return leftmost; +} +function pointInTriangle(ax, ay, bx, by, cx, cy, px2, py2) { + return (cx - px2) * (ay - py2) >= (ax - px2) * (cy - py2) && (ax - px2) * (by - py2) >= (bx - px2) * (ay - py2) && (bx - px2) * (cy - py2) >= (cx - px2) * (by - py2); +} +function isValidDiagonal(a, b) { + return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges + (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible + (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors + equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); +} +function area(p, q, r) { + return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); +} +function equals(p1, p2) { + return p1.x === p2.x && p1.y === p2.y; +} +function intersects(p1, q1, p2, q2) { + const o1 = sign(area(p1, q1, p2)); + const o2 = sign(area(p1, q1, q2)); + const o3 = sign(area(p2, q2, p1)); + const o4 = sign(area(p2, q2, q1)); + if (o1 !== o2 && o3 !== o4) return true; + if (o1 === 0 && onSegment(p1, p2, q1)) return true; + if (o2 === 0 && onSegment(p1, q2, q1)) return true; + if (o3 === 0 && onSegment(p2, p1, q2)) return true; + if (o4 === 0 && onSegment(p2, q1, q2)) return true; + return false; +} +function onSegment(p, q, r) { + return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); +} +function sign(num) { + return num > 0 ? 1 : num < 0 ? -1 : 0; +} +function intersectsPolygon(a, b) { + let p = a; + do { + if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; + p = p.next; + } while (p !== a); + return false; +} +function locallyInside(a, b) { + return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; +} +function middleInside(a, b) { + let p = a, inside = false; + const px2 = (a.x + b.x) / 2, py2 = (a.y + b.y) / 2; + do { + if (p.y > py2 !== p.next.y > py2 && p.next.y !== p.y && px2 < (p.next.x - p.x) * (py2 - p.y) / (p.next.y - p.y) + p.x) + inside = !inside; + p = p.next; + } while (p !== a); + return inside; +} +function splitPolygon(a, b) { + const a2 = new Node(a.i, a.x, a.y), b2 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev; + a.next = b; + b.prev = a; + a2.next = an; + an.prev = a2; + b2.next = a2; + a2.prev = b2; + bp.next = b2; + b2.prev = bp; + return b2; +} +function insertNode(i, x, y, last) { + const p = new Node(i, x, y); + if (!last) { + p.prev = p; + p.next = p; + } else { + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + } + return p; +} +function removeNode(p) { + p.next.prev = p.prev; + p.prev.next = p.next; + if (p.prevZ) p.prevZ.nextZ = p.nextZ; + if (p.nextZ) p.nextZ.prevZ = p.prevZ; +} +function Node(i, x, y) { + this.i = i; + this.x = x; + this.y = y; + this.prev = null; + this.next = null; + this.z = 0; + this.prevZ = null; + this.nextZ = null; + this.steiner = false; +} +function signedArea(data, start, end, dim) { + let sum = 0; + for (let i = start, j = end - dim; i < end; i += dim) { + sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); + j = i; + } + return sum; +} +var ShapeUtils = class _ShapeUtils { + // calculate area of the contour polygon + static area(contour) { + const n = contour.length; + let a = 0; + for (let p = n - 1, q = 0; q < n; p = q++) { + a += contour[p].x * contour[q].y - contour[q].x * contour[p].y; + } + return a * 0.5; + } + static isClockWise(pts) { + return _ShapeUtils.area(pts) < 0; + } + static triangulateShape(contour, holes) { + const vertices = []; + const holeIndices = []; + const faces = []; + removeDupEndPts(contour); + addContour(vertices, contour); + let holeIndex = contour.length; + holes.forEach(removeDupEndPts); + for (let i = 0; i < holes.length; i++) { + holeIndices.push(holeIndex); + holeIndex += holes[i].length; + addContour(vertices, holes[i]); + } + const triangles = Earcut.triangulate(vertices, holeIndices); + for (let i = 0; i < triangles.length; i += 3) { + faces.push(triangles.slice(i, i + 3)); + } + return faces; + } +}; +function removeDupEndPts(points) { + const l = points.length; + if (l > 2 && points[l - 1].equals(points[0])) { + points.pop(); + } +} +function addContour(vertices, contour) { + for (let i = 0; i < contour.length; i++) { + vertices.push(contour[i].x); + vertices.push(contour[i].y); + } +} +var ExtrudeGeometry = class _ExtrudeGeometry extends BufferGeometry { + constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), options = {}) { + super(); + this.type = "ExtrudeGeometry"; + this.parameters = { + shapes, + options + }; + shapes = Array.isArray(shapes) ? shapes : [shapes]; + const scope = this; + const verticesArray = []; + const uvArray = []; + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + addShape(shape); + } + this.setAttribute("position", new Float32BufferAttribute(verticesArray, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvArray, 2)); + this.computeVertexNormals(); + function addShape(shape) { + const placeholder = []; + const curveSegments = options.curveSegments !== void 0 ? options.curveSegments : 12; + const steps = options.steps !== void 0 ? options.steps : 1; + const depth = options.depth !== void 0 ? options.depth : 1; + let bevelEnabled = options.bevelEnabled !== void 0 ? options.bevelEnabled : true; + let bevelThickness = options.bevelThickness !== void 0 ? options.bevelThickness : 0.2; + let bevelSize = options.bevelSize !== void 0 ? options.bevelSize : bevelThickness - 0.1; + let bevelOffset = options.bevelOffset !== void 0 ? options.bevelOffset : 0; + let bevelSegments = options.bevelSegments !== void 0 ? options.bevelSegments : 3; + const extrudePath = options.extrudePath; + const uvgen = options.UVGenerator !== void 0 ? options.UVGenerator : WorldUVGenerator; + let extrudePts, extrudeByPath = false; + let splineTube, binormal, normal, position2; + if (extrudePath) { + extrudePts = extrudePath.getSpacedPoints(steps); + extrudeByPath = true; + bevelEnabled = false; + splineTube = extrudePath.computeFrenetFrames(steps, false); + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + } + if (!bevelEnabled) { + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + } + const shapePoints = shape.extractPoints(curveSegments); + let vertices = shapePoints.shape; + const holes = shapePoints.holes; + const reverse = !ShapeUtils.isClockWise(vertices); + if (reverse) { + vertices = vertices.reverse(); + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + if (ShapeUtils.isClockWise(ahole)) { + holes[h] = ahole.reverse(); + } + } + } + const faces = ShapeUtils.triangulateShape(vertices, holes); + const contour = vertices; + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + vertices = vertices.concat(ahole); + } + function scalePt2(pt, vec, size) { + if (!vec) console.error("THREE.ExtrudeGeometry: vec does not exist"); + return pt.clone().addScaledVector(vec, size); + } + const vlen = vertices.length, flen = faces.length; + function getBevelVec(inPt, inPrev, inNext) { + let v_trans_x, v_trans_y, shrink_by; + const v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y; + const v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y; + const v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; + const collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x; + if (Math.abs(collinear0) > Number.EPSILON) { + const v_prev_len = Math.sqrt(v_prev_lensq); + const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); + const ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len; + const ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len; + const ptNextShift_x = inNext.x - v_next_y / v_next_len; + const ptNextShift_y = inNext.y + v_next_x / v_next_len; + const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); + v_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x; + v_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; + const v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y; + if (v_trans_lensq <= 2) { + return new Vector2(v_trans_x, v_trans_y); + } else { + shrink_by = Math.sqrt(v_trans_lensq / 2); + } + } else { + let direction_eq = false; + if (v_prev_x > Number.EPSILON) { + if (v_next_x > Number.EPSILON) { + direction_eq = true; + } + } else { + if (v_prev_x < -Number.EPSILON) { + if (v_next_x < -Number.EPSILON) { + direction_eq = true; + } + } else { + if (Math.sign(v_prev_y) === Math.sign(v_next_y)) { + direction_eq = true; + } + } + } + if (direction_eq) { + v_trans_x = -v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt(v_prev_lensq); + } else { + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt(v_prev_lensq / 2); + } + } + return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by); + } + const contourMovements = []; + for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { + if (j === il) j = 0; + if (k === il) k = 0; + contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]); + } + const holesMovements = []; + let oneHoleMovements, verticesMovements = contourMovements.concat(); + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = []; + for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { + if (j === il) j = 0; + if (k === il) k = 0; + oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]); + } + holesMovements.push(oneHoleMovements); + verticesMovements = verticesMovements.concat(oneHoleMovements); + } + for (let b = 0; b < bevelSegments; b++) { + const t = b / bevelSegments; + const z = bevelThickness * Math.cos(t * Math.PI / 2); + const bs2 = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; + for (let i = 0, il = contour.length; i < il; i++) { + const vert = scalePt2(contour[i], contourMovements[i], bs2); + v(vert.x, vert.y, -z); + } + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = holesMovements[h]; + for (let i = 0, il = ahole.length; i < il; i++) { + const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); + v(vert.x, vert.y, -z); + } + } + } + const bs = bevelSize + bevelOffset; + for (let i = 0; i < vlen; i++) { + const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; + if (!extrudeByPath) { + v(vert.x, vert.y, 0); + } else { + normal.copy(splineTube.normals[0]).multiplyScalar(vert.x); + binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y); + position2.copy(extrudePts[0]).add(normal).add(binormal); + v(position2.x, position2.y, position2.z); + } + } + for (let s = 1; s <= steps; s++) { + for (let i = 0; i < vlen; i++) { + const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; + if (!extrudeByPath) { + v(vert.x, vert.y, depth / steps * s); + } else { + normal.copy(splineTube.normals[s]).multiplyScalar(vert.x); + binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y); + position2.copy(extrudePts[s]).add(normal).add(binormal); + v(position2.x, position2.y, position2.z); + } + } + } + for (let b = bevelSegments - 1; b >= 0; b--) { + const t = b / bevelSegments; + const z = bevelThickness * Math.cos(t * Math.PI / 2); + const bs2 = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; + for (let i = 0, il = contour.length; i < il; i++) { + const vert = scalePt2(contour[i], contourMovements[i], bs2); + v(vert.x, vert.y, depth + z); + } + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + oneHoleMovements = holesMovements[h]; + for (let i = 0, il = ahole.length; i < il; i++) { + const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); + if (!extrudeByPath) { + v(vert.x, vert.y, depth + z); + } else { + v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z); + } + } + } + } + buildLidFaces(); + buildSideFaces(); + function buildLidFaces() { + const start = verticesArray.length / 3; + if (bevelEnabled) { + let layer = 0; + let offset = vlen * layer; + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[2] + offset, face[1] + offset, face[0] + offset); + } + layer = steps + bevelSegments * 2; + offset = vlen * layer; + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[0] + offset, face[1] + offset, face[2] + offset); + } + } else { + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[2], face[1], face[0]); + } + for (let i = 0; i < flen; i++) { + const face = faces[i]; + f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps); + } + } + scope.addGroup(start, verticesArray.length / 3 - start, 0); + } + function buildSideFaces() { + const start = verticesArray.length / 3; + let layeroffset = 0; + sidewalls(contour, layeroffset); + layeroffset += contour.length; + for (let h = 0, hl = holes.length; h < hl; h++) { + const ahole = holes[h]; + sidewalls(ahole, layeroffset); + layeroffset += ahole.length; + } + scope.addGroup(start, verticesArray.length / 3 - start, 1); + } + function sidewalls(contour2, layeroffset) { + let i = contour2.length; + while (--i >= 0) { + const j = i; + let k = i - 1; + if (k < 0) k = contour2.length - 1; + for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s++) { + const slen1 = vlen * s; + const slen2 = vlen * (s + 1); + const a = layeroffset + j + slen1, b = layeroffset + k + slen1, c = layeroffset + k + slen2, d = layeroffset + j + slen2; + f4(a, b, c, d); + } + } + } + function v(x, y, z) { + placeholder.push(x); + placeholder.push(y); + placeholder.push(z); + } + function f3(a, b, c) { + addVertex(a); + addVertex(b); + addVertex(c); + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1); + addUV(uvs[0]); + addUV(uvs[1]); + addUV(uvs[2]); + } + function f4(a, b, c, d) { + addVertex(a); + addVertex(b); + addVertex(d); + addVertex(b); + addVertex(c); + addVertex(d); + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1); + addUV(uvs[0]); + addUV(uvs[1]); + addUV(uvs[3]); + addUV(uvs[1]); + addUV(uvs[2]); + addUV(uvs[3]); + } + function addVertex(index) { + verticesArray.push(placeholder[index * 3 + 0]); + verticesArray.push(placeholder[index * 3 + 1]); + verticesArray.push(placeholder[index * 3 + 2]); + } + function addUV(vector2) { + uvArray.push(vector2.x); + uvArray.push(vector2.y); + } + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + const shapes = this.parameters.shapes; + const options = this.parameters.options; + return toJSON$1(shapes, options, data); + } + static fromJSON(data, shapes) { + const geometryShapes = []; + for (let j = 0, jl = data.shapes.length; j < jl; j++) { + const shape = shapes[data.shapes[j]]; + geometryShapes.push(shape); + } + const extrudePath = data.options.extrudePath; + if (extrudePath !== void 0) { + data.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath); + } + return new _ExtrudeGeometry(geometryShapes, data.options); + } +}; +var WorldUVGenerator = { + generateTopUV: function(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new Vector2(a_x, a_y), + new Vector2(b_x, b_y), + new Vector2(c_x, c_y) + ]; + }, + generateSideWallUV: function(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new Vector2(a_x, 1 - a_z), + new Vector2(b_x, 1 - b_z), + new Vector2(c_x, 1 - c_z), + new Vector2(d_x, 1 - d_z) + ]; + } else { + return [ + new Vector2(a_y, 1 - a_z), + new Vector2(b_y, 1 - b_z), + new Vector2(c_y, 1 - c_z), + new Vector2(d_y, 1 - d_z) + ]; + } + } +}; +function toJSON$1(shapes, options, data) { + data.shapes = []; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + data.shapes.push(shape.uuid); + } + } else { + data.shapes.push(shapes.uuid); + } + data.options = Object.assign({}, options); + if (options.extrudePath !== void 0) data.options.extrudePath = options.extrudePath.toJSON(); + return data; +} +var IcosahedronGeometry = class _IcosahedronGeometry extends PolyhedronGeometry { + constructor(radius = 1, detail = 0) { + const t = (1 + Math.sqrt(5)) / 2; + const vertices = [ + -1, + t, + 0, + 1, + t, + 0, + -1, + -t, + 0, + 1, + -t, + 0, + 0, + -1, + t, + 0, + 1, + t, + 0, + -1, + -t, + 0, + 1, + -t, + t, + 0, + -1, + t, + 0, + 1, + -t, + 0, + -1, + -t, + 0, + 1 + ]; + const indices = [ + 0, + 11, + 5, + 0, + 5, + 1, + 0, + 1, + 7, + 0, + 7, + 10, + 0, + 10, + 11, + 1, + 5, + 9, + 5, + 11, + 4, + 11, + 10, + 2, + 10, + 7, + 6, + 7, + 1, + 8, + 3, + 9, + 4, + 3, + 4, + 2, + 3, + 2, + 6, + 3, + 6, + 8, + 3, + 8, + 9, + 4, + 9, + 5, + 2, + 4, + 11, + 6, + 2, + 10, + 8, + 6, + 7, + 9, + 8, + 1 + ]; + super(vertices, indices, radius, detail); + this.type = "IcosahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new _IcosahedronGeometry(data.radius, data.detail); + } +}; +var OctahedronGeometry = class _OctahedronGeometry extends PolyhedronGeometry { + constructor(radius = 1, detail = 0) { + const vertices = [ + 1, + 0, + 0, + -1, + 0, + 0, + 0, + 1, + 0, + 0, + -1, + 0, + 0, + 0, + 1, + 0, + 0, + -1 + ]; + const indices = [ + 0, + 2, + 4, + 0, + 4, + 3, + 0, + 3, + 5, + 0, + 5, + 2, + 1, + 2, + 5, + 1, + 5, + 3, + 1, + 3, + 4, + 1, + 4, + 2 + ]; + super(vertices, indices, radius, detail); + this.type = "OctahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new _OctahedronGeometry(data.radius, data.detail); + } +}; +var RingGeometry = class _RingGeometry extends BufferGeometry { + constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2) { + super(); + this.type = "RingGeometry"; + this.parameters = { + innerRadius, + outerRadius, + thetaSegments, + phiSegments, + thetaStart, + thetaLength + }; + thetaSegments = Math.max(3, thetaSegments); + phiSegments = Math.max(1, phiSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let radius = innerRadius; + const radiusStep = (outerRadius - innerRadius) / phiSegments; + const vertex2 = new Vector3(); + const uv = new Vector2(); + for (let j = 0; j <= phiSegments; j++) { + for (let i = 0; i <= thetaSegments; i++) { + const segment = thetaStart + i / thetaSegments * thetaLength; + vertex2.x = radius * Math.cos(segment); + vertex2.y = radius * Math.sin(segment); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normals.push(0, 0, 1); + uv.x = (vertex2.x / outerRadius + 1) / 2; + uv.y = (vertex2.y / outerRadius + 1) / 2; + uvs.push(uv.x, uv.y); + } + radius += radiusStep; + } + for (let j = 0; j < phiSegments; j++) { + const thetaSegmentLevel = j * (thetaSegments + 1); + for (let i = 0; i < thetaSegments; i++) { + const segment = i + thetaSegmentLevel; + const a = segment; + const b = segment + thetaSegments + 1; + const c = segment + thetaSegments + 2; + const d = segment + 1; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _RingGeometry(data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength); + } +}; +var ShapeGeometry = class _ShapeGeometry extends BufferGeometry { + constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), curveSegments = 12) { + super(); + this.type = "ShapeGeometry"; + this.parameters = { + shapes, + curveSegments + }; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + let groupStart = 0; + let groupCount = 0; + if (Array.isArray(shapes) === false) { + addShape(shapes); + } else { + for (let i = 0; i < shapes.length; i++) { + addShape(shapes[i]); + this.addGroup(groupStart, groupCount, i); + groupStart += groupCount; + groupCount = 0; + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function addShape(shape) { + const indexOffset = vertices.length / 3; + const points = shape.extractPoints(curveSegments); + let shapeVertices = points.shape; + const shapeHoles = points.holes; + if (ShapeUtils.isClockWise(shapeVertices) === false) { + shapeVertices = shapeVertices.reverse(); + } + for (let i = 0, l = shapeHoles.length; i < l; i++) { + const shapeHole = shapeHoles[i]; + if (ShapeUtils.isClockWise(shapeHole) === true) { + shapeHoles[i] = shapeHole.reverse(); + } + } + const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); + for (let i = 0, l = shapeHoles.length; i < l; i++) { + const shapeHole = shapeHoles[i]; + shapeVertices = shapeVertices.concat(shapeHole); + } + for (let i = 0, l = shapeVertices.length; i < l; i++) { + const vertex2 = shapeVertices[i]; + vertices.push(vertex2.x, vertex2.y, 0); + normals.push(0, 0, 1); + uvs.push(vertex2.x, vertex2.y); + } + for (let i = 0, l = faces.length; i < l; i++) { + const face = faces[i]; + const a = face[0] + indexOffset; + const b = face[1] + indexOffset; + const c = face[2] + indexOffset; + indices.push(a, b, c); + groupCount += 3; + } + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + const shapes = this.parameters.shapes; + return toJSON(shapes, data); + } + static fromJSON(data, shapes) { + const geometryShapes = []; + for (let j = 0, jl = data.shapes.length; j < jl; j++) { + const shape = shapes[data.shapes[j]]; + geometryShapes.push(shape); + } + return new _ShapeGeometry(geometryShapes, data.curveSegments); + } +}; +function toJSON(shapes, data) { + data.shapes = []; + if (Array.isArray(shapes)) { + for (let i = 0, l = shapes.length; i < l; i++) { + const shape = shapes[i]; + data.shapes.push(shape.uuid); + } + } else { + data.shapes.push(shapes.uuid); + } + return data; +} +var SphereGeometry = class _SphereGeometry extends BufferGeometry { + constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) { + super(); + this.type = "SphereGeometry"; + this.parameters = { + radius, + widthSegments, + heightSegments, + phiStart, + phiLength, + thetaStart, + thetaLength + }; + widthSegments = Math.max(3, Math.floor(widthSegments)); + heightSegments = Math.max(2, Math.floor(heightSegments)); + const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); + let index = 0; + const grid = []; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + for (let iy = 0; iy <= heightSegments; iy++) { + const verticesRow = []; + const v = iy / heightSegments; + let uOffset = 0; + if (iy === 0 && thetaStart === 0) { + uOffset = 0.5 / widthSegments; + } else if (iy === heightSegments && thetaEnd === Math.PI) { + uOffset = -0.5 / widthSegments; + } + for (let ix = 0; ix <= widthSegments; ix++) { + const u = ix / widthSegments; + vertex2.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); + vertex2.y = radius * Math.cos(thetaStart + v * thetaLength); + vertex2.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.copy(vertex2).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u + uOffset, 1 - v); + verticesRow.push(index++); + } + grid.push(verticesRow); + } + for (let iy = 0; iy < heightSegments; iy++) { + for (let ix = 0; ix < widthSegments; ix++) { + const a = grid[iy][ix + 1]; + const b = grid[iy][ix]; + const c = grid[iy + 1][ix]; + const d = grid[iy + 1][ix + 1]; + if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); + if (iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _SphereGeometry(data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength); + } +}; +var TetrahedronGeometry = class _TetrahedronGeometry extends PolyhedronGeometry { + constructor(radius = 1, detail = 0) { + const vertices = [ + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + -1, + 1, + -1, + -1 + ]; + const indices = [ + 2, + 1, + 0, + 0, + 3, + 2, + 1, + 3, + 0, + 2, + 3, + 1 + ]; + super(vertices, indices, radius, detail); + this.type = "TetrahedronGeometry"; + this.parameters = { + radius, + detail + }; + } + static fromJSON(data) { + return new _TetrahedronGeometry(data.radius, data.detail); + } +}; +var TorusGeometry = class _TorusGeometry extends BufferGeometry { + constructor(radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2) { + super(); + this.type = "TorusGeometry"; + this.parameters = { + radius, + tube, + radialSegments, + tubularSegments, + arc + }; + radialSegments = Math.floor(radialSegments); + tubularSegments = Math.floor(tubularSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const center = new Vector3(); + const vertex2 = new Vector3(); + const normal = new Vector3(); + for (let j = 0; j <= radialSegments; j++) { + for (let i = 0; i <= tubularSegments; i++) { + const u = i / tubularSegments * arc; + const v = j / radialSegments * Math.PI * 2; + vertex2.x = (radius + tube * Math.cos(v)) * Math.cos(u); + vertex2.y = (radius + tube * Math.cos(v)) * Math.sin(u); + vertex2.z = tube * Math.sin(v); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + center.x = radius * Math.cos(u); + center.y = radius * Math.sin(u); + normal.subVectors(vertex2, center).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(i / tubularSegments); + uvs.push(j / radialSegments); + } + } + for (let j = 1; j <= radialSegments; j++) { + for (let i = 1; i <= tubularSegments; i++) { + const a = (tubularSegments + 1) * j + i - 1; + const b = (tubularSegments + 1) * (j - 1) + i - 1; + const c = (tubularSegments + 1) * (j - 1) + i; + const d = (tubularSegments + 1) * j + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _TorusGeometry(data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc); + } +}; +var TorusKnotGeometry = class _TorusKnotGeometry extends BufferGeometry { + constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3) { + super(); + this.type = "TorusKnotGeometry"; + this.parameters = { + radius, + tube, + tubularSegments, + radialSegments, + p, + q + }; + tubularSegments = Math.floor(tubularSegments); + radialSegments = Math.floor(radialSegments); + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const P1 = new Vector3(); + const P2 = new Vector3(); + const B = new Vector3(); + const T = new Vector3(); + const N = new Vector3(); + for (let i = 0; i <= tubularSegments; ++i) { + const u = i / tubularSegments * p * Math.PI * 2; + calculatePositionOnCurve(u, p, q, radius, P1); + calculatePositionOnCurve(u + 0.01, p, q, radius, P2); + T.subVectors(P2, P1); + N.addVectors(P2, P1); + B.crossVectors(T, N); + N.crossVectors(B, T); + B.normalize(); + N.normalize(); + for (let j = 0; j <= radialSegments; ++j) { + const v = j / radialSegments * Math.PI * 2; + const cx = -tube * Math.cos(v); + const cy = tube * Math.sin(v); + vertex2.x = P1.x + (cx * N.x + cy * B.x); + vertex2.y = P1.y + (cx * N.y + cy * B.y); + vertex2.z = P1.z + (cx * N.z + cy * B.z); + vertices.push(vertex2.x, vertex2.y, vertex2.z); + normal.subVectors(vertex2, P1).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(i / tubularSegments); + uvs.push(j / radialSegments); + } + } + for (let j = 1; j <= tubularSegments; j++) { + for (let i = 1; i <= radialSegments; i++) { + const a = (radialSegments + 1) * (j - 1) + (i - 1); + const b = (radialSegments + 1) * j + (i - 1); + const c = (radialSegments + 1) * j + i; + const d = (radialSegments + 1) * (j - 1) + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function calculatePositionOnCurve(u, p2, q2, radius2, position) { + const cu = Math.cos(u); + const su = Math.sin(u); + const quOverP = q2 / p2 * u; + const cs = Math.cos(quOverP); + position.x = radius2 * (2 + cs) * 0.5 * cu; + position.y = radius2 * (2 + cs) * su * 0.5; + position.z = radius2 * Math.sin(quOverP) * 0.5; + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + static fromJSON(data) { + return new _TorusKnotGeometry(data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q); + } +}; +var TubeGeometry = class _TubeGeometry extends BufferGeometry { + constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) { + super(); + this.type = "TubeGeometry"; + this.parameters = { + path, + tubularSegments, + radius, + radialSegments, + closed + }; + const frames = path.computeFrenetFrames(tubularSegments, closed); + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + const vertex2 = new Vector3(); + const normal = new Vector3(); + const uv = new Vector2(); + let P = new Vector3(); + const vertices = []; + const normals = []; + const uvs = []; + const indices = []; + generateBufferData(); + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generateBufferData() { + for (let i = 0; i < tubularSegments; i++) { + generateSegment(i); + } + generateSegment(closed === false ? tubularSegments : 0); + generateUVs(); + generateIndices(); + } + function generateSegment(i) { + P = path.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = cos * N.x + sin * B.x; + normal.y = cos * N.y + sin * B.y; + normal.z = cos * N.z + sin * B.z; + normal.normalize(); + normals.push(normal.x, normal.y, normal.z); + vertex2.x = P.x + radius * normal.x; + vertex2.y = P.y + radius * normal.y; + vertex2.z = P.z + radius * normal.z; + vertices.push(vertex2.x, vertex2.y, vertex2.z); + } + } + function generateIndices() { + for (let j = 1; j <= tubularSegments; j++) { + for (let i = 1; i <= radialSegments; i++) { + const a = (radialSegments + 1) * (j - 1) + (i - 1); + const b = (radialSegments + 1) * j + (i - 1); + const c = (radialSegments + 1) * j + i; + const d = (radialSegments + 1) * (j - 1) + i; + indices.push(a, b, d); + indices.push(b, c, d); + } + } + } + function generateUVs() { + for (let i = 0; i <= tubularSegments; i++) { + for (let j = 0; j <= radialSegments; j++) { + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + uvs.push(uv.x, uv.y); + } + } + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } + toJSON() { + const data = super.toJSON(); + data.path = this.parameters.path.toJSON(); + return data; + } + static fromJSON(data) { + return new _TubeGeometry( + new Curves[data.path.type]().fromJSON(data.path), + data.tubularSegments, + data.radius, + data.radialSegments, + data.closed + ); + } +}; +var WireframeGeometry = class extends BufferGeometry { + constructor(geometry = null) { + super(); + this.type = "WireframeGeometry"; + this.parameters = { + geometry + }; + if (geometry !== null) { + const vertices = []; + const edges = /* @__PURE__ */ new Set(); + const start = new Vector3(); + const end = new Vector3(); + if (geometry.index !== null) { + const position = geometry.attributes.position; + const indices = geometry.index; + let groups = geometry.groups; + if (groups.length === 0) { + groups = [{ start: 0, count: indices.count, materialIndex: 0 }]; + } + for (let o = 0, ol = groups.length; o < ol; ++o) { + const group = groups[o]; + const groupStart = group.start; + const groupCount = group.count; + for (let i = groupStart, l = groupStart + groupCount; i < l; i += 3) { + for (let j = 0; j < 3; j++) { + const index1 = indices.getX(i + j); + const index2 = indices.getX(i + (j + 1) % 3); + start.fromBufferAttribute(position, index1); + end.fromBufferAttribute(position, index2); + if (isUniqueEdge(start, end, edges) === true) { + vertices.push(start.x, start.y, start.z); + vertices.push(end.x, end.y, end.z); + } + } + } + } + } else { + const position = geometry.attributes.position; + for (let i = 0, l = position.count / 3; i < l; i++) { + for (let j = 0; j < 3; j++) { + const index1 = 3 * i + j; + const index2 = 3 * i + (j + 1) % 3; + start.fromBufferAttribute(position, index1); + end.fromBufferAttribute(position, index2); + if (isUniqueEdge(start, end, edges) === true) { + vertices.push(start.x, start.y, start.z); + vertices.push(end.x, end.y, end.z); + } + } + } + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +}; +function isUniqueEdge(start, end, edges) { + const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; + const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; + if (edges.has(hash1) === true || edges.has(hash2) === true) { + return false; + } else { + edges.add(hash1); + edges.add(hash2); + return true; + } +} +var Geometries = Object.freeze({ + __proto__: null, + BoxGeometry, + CapsuleGeometry, + CircleGeometry, + ConeGeometry, + CylinderGeometry, + DodecahedronGeometry, + EdgesGeometry, + ExtrudeGeometry, + IcosahedronGeometry, + LatheGeometry, + OctahedronGeometry, + PlaneGeometry, + PolyhedronGeometry, + RingGeometry, + ShapeGeometry, + SphereGeometry, + TetrahedronGeometry, + TorusGeometry, + TorusKnotGeometry, + TubeGeometry, + WireframeGeometry +}); +var ShadowMaterial = class extends Material { + constructor(parameters) { + super(); + this.isShadowMaterial = true; + this.type = "ShadowMaterial"; + this.color = new Color(0); + this.transparent = true; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.fog = source.fog; + return this; + } +}; +var RawShaderMaterial = class extends ShaderMaterial { + constructor(parameters) { + super(parameters); + this.isRawShaderMaterial = true; + this.type = "RawShaderMaterial"; + } +}; +var MeshStandardMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshStandardMaterial = true; + this.defines = { "STANDARD": "" }; + this.type = "MeshStandardMaterial"; + this.color = new Color(16777215); + this.roughness = 1; + this.metalness = 0; + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.roughnessMap = null; + this.metalnessMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.envMapIntensity = 1; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.defines = { "STANDARD": "" }; + this.color.copy(source.color); + this.roughness = source.roughness; + this.metalness = source.metalness; + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.roughnessMap = source.roughnessMap; + this.metalnessMap = source.metalnessMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.envMapIntensity = source.envMapIntensity; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +}; +var MeshPhysicalMaterial = class extends MeshStandardMaterial { + constructor(parameters) { + super(); + this.isMeshPhysicalMaterial = true; + this.defines = { + "STANDARD": "", + "PHYSICAL": "" + }; + this.type = "MeshPhysicalMaterial"; + this.anisotropyRotation = 0; + this.anisotropyMap = null; + this.clearcoatMap = null; + this.clearcoatRoughness = 0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2(1, 1); + this.clearcoatNormalMap = null; + this.ior = 1.5; + Object.defineProperty(this, "reflectivity", { + get: function() { + return clamp(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1); + }, + set: function(reflectivity) { + this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity); + } + }); + this.iridescenceMap = null; + this.iridescenceIOR = 1.3; + this.iridescenceThicknessRange = [100, 400]; + this.iridescenceThicknessMap = null; + this.sheenColor = new Color(0); + this.sheenColorMap = null; + this.sheenRoughness = 1; + this.sheenRoughnessMap = null; + this.transmissionMap = null; + this.thickness = 0; + this.thicknessMap = null; + this.attenuationDistance = Infinity; + this.attenuationColor = new Color(1, 1, 1); + this.specularIntensity = 1; + this.specularIntensityMap = null; + this.specularColor = new Color(1, 1, 1); + this.specularColorMap = null; + this._anisotropy = 0; + this._clearcoat = 0; + this._dispersion = 0; + this._iridescence = 0; + this._sheen = 0; + this._transmission = 0; + this.setValues(parameters); + } + get anisotropy() { + return this._anisotropy; + } + set anisotropy(value) { + if (this._anisotropy > 0 !== value > 0) { + this.version++; + } + this._anisotropy = value; + } + get clearcoat() { + return this._clearcoat; + } + set clearcoat(value) { + if (this._clearcoat > 0 !== value > 0) { + this.version++; + } + this._clearcoat = value; + } + get iridescence() { + return this._iridescence; + } + set iridescence(value) { + if (this._iridescence > 0 !== value > 0) { + this.version++; + } + this._iridescence = value; + } + get dispersion() { + return this._dispersion; + } + set dispersion(value) { + if (this._dispersion > 0 !== value > 0) { + this.version++; + } + this._dispersion = value; + } + get sheen() { + return this._sheen; + } + set sheen(value) { + if (this._sheen > 0 !== value > 0) { + this.version++; + } + this._sheen = value; + } + get transmission() { + return this._transmission; + } + set transmission(value) { + if (this._transmission > 0 !== value > 0) { + this.version++; + } + this._transmission = value; + } + copy(source) { + super.copy(source); + this.defines = { + "STANDARD": "", + "PHYSICAL": "" + }; + this.anisotropy = source.anisotropy; + this.anisotropyRotation = source.anisotropyRotation; + this.anisotropyMap = source.anisotropyMap; + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy(source.clearcoatNormalScale); + this.dispersion = source.dispersion; + this.ior = source.ior; + this.iridescence = source.iridescence; + this.iridescenceMap = source.iridescenceMap; + this.iridescenceIOR = source.iridescenceIOR; + this.iridescenceThicknessRange = [...source.iridescenceThicknessRange]; + this.iridescenceThicknessMap = source.iridescenceThicknessMap; + this.sheen = source.sheen; + this.sheenColor.copy(source.sheenColor); + this.sheenColorMap = source.sheenColorMap; + this.sheenRoughness = source.sheenRoughness; + this.sheenRoughnessMap = source.sheenRoughnessMap; + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + this.thickness = source.thickness; + this.thicknessMap = source.thicknessMap; + this.attenuationDistance = source.attenuationDistance; + this.attenuationColor.copy(source.attenuationColor); + this.specularIntensity = source.specularIntensity; + this.specularIntensityMap = source.specularIntensityMap; + this.specularColor.copy(source.specularColor); + this.specularColorMap = source.specularColorMap; + return this; + } +}; +var MeshPhongMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshPhongMaterial = true; + this.type = "MeshPhongMaterial"; + this.color = new Color(16777215); + this.specular = new Color(1118481); + this.shininess = 30; + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.specular.copy(source.specular); + this.shininess = source.shininess; + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +}; +var MeshToonMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshToonMaterial = true; + this.defines = { "TOON": "" }; + this.type = "MeshToonMaterial"; + this.color = new Color(16777215); + this.map = null; + this.gradientMap = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.alphaMap = null; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.gradientMap = source.gradientMap; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.alphaMap = source.alphaMap; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.fog = source.fog; + return this; + } +}; +var MeshNormalMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshNormalMaterial = true; + this.type = "MeshNormalMaterial"; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.flatShading = false; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.flatShading = source.flatShading; + return this; + } +}; +var MeshLambertMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshLambertMaterial = true; + this.type = "MeshLambertMaterial"; + this.color = new Color(16777215); + this.map = null; + this.lightMap = null; + this.lightMapIntensity = 1; + this.aoMap = null; + this.aoMapIntensity = 1; + this.emissive = new Color(0); + this.emissiveIntensity = 1; + this.emissiveMap = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.specularMap = null; + this.alphaMap = null; + this.envMap = null; + this.envMapRotation = new Euler(); + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.color.copy(source.color); + this.map = source.map; + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + this.emissive.copy(source.emissive); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.specularMap = source.specularMap; + this.alphaMap = source.alphaMap; + this.envMap = source.envMap; + this.envMapRotation.copy(source.envMapRotation); + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +}; +var MeshMatcapMaterial = class extends Material { + constructor(parameters) { + super(); + this.isMeshMatcapMaterial = true; + this.defines = { "MATCAP": "" }; + this.type = "MeshMatcapMaterial"; + this.color = new Color(16777215); + this.matcap = null; + this.map = null; + this.bumpMap = null; + this.bumpScale = 1; + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2(1, 1); + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + this.alphaMap = null; + this.flatShading = false; + this.fog = true; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.defines = { "MATCAP": "" }; + this.color.copy(source.color); + this.matcap = source.matcap; + this.map = source.map; + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy(source.normalScale); + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + this.alphaMap = source.alphaMap; + this.flatShading = source.flatShading; + this.fog = source.fog; + return this; + } +}; +var LineDashedMaterial = class extends LineBasicMaterial { + constructor(parameters) { + super(); + this.isLineDashedMaterial = true; + this.type = "LineDashedMaterial"; + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + return this; + } +}; +function convertArray(array, type, forceClone) { + if (!array || // let 'undefined' and 'null' pass + !forceClone && array.constructor === type) return array; + if (typeof type.BYTES_PER_ELEMENT === "number") { + return new type(array); + } + return Array.prototype.slice.call(array); +} +function isTypedArray(object) { + return ArrayBuffer.isView(object) && !(object instanceof DataView); +} +function getKeyframeOrder(times) { + function compareTime(i, j) { + return times[i] - times[j]; + } + const n = times.length; + const result = new Array(n); + for (let i = 0; i !== n; ++i) result[i] = i; + result.sort(compareTime); + return result; +} +function sortedArray(values, stride, order) { + const nValues = values.length; + const result = new values.constructor(nValues); + for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) { + const srcOffset = order[i] * stride; + for (let j = 0; j !== stride; ++j) { + result[dstOffset++] = values[srcOffset + j]; + } + } + return result; +} +function flattenJSON(jsonKeys, times, values, valuePropertyName) { + let i = 1, key = jsonKeys[0]; + while (key !== void 0 && key[valuePropertyName] === void 0) { + key = jsonKeys[i++]; + } + if (key === void 0) return; + let value = key[valuePropertyName]; + if (value === void 0) return; + if (Array.isArray(value)) { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + values.push.apply(values, value); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } else if (value.toArray !== void 0) { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + value.toArray(values, values.length); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } else { + do { + value = key[valuePropertyName]; + if (value !== void 0) { + times.push(key.time); + values.push(value); + } + key = jsonKeys[i++]; + } while (key !== void 0); + } +} +function subclip(sourceClip, name, startFrame, endFrame, fps = 30) { + const clip = sourceClip.clone(); + clip.name = name; + const tracks = []; + for (let i = 0; i < clip.tracks.length; ++i) { + const track = clip.tracks[i]; + const valueSize = track.getValueSize(); + const times = []; + const values = []; + for (let j = 0; j < track.times.length; ++j) { + const frame = track.times[j] * fps; + if (frame < startFrame || frame >= endFrame) continue; + times.push(track.times[j]); + for (let k = 0; k < valueSize; ++k) { + values.push(track.values[j * valueSize + k]); + } + } + if (times.length === 0) continue; + track.times = convertArray(times, track.times.constructor); + track.values = convertArray(values, track.values.constructor); + tracks.push(track); + } + clip.tracks = tracks; + let minStartTime = Infinity; + for (let i = 0; i < clip.tracks.length; ++i) { + if (minStartTime > clip.tracks[i].times[0]) { + minStartTime = clip.tracks[i].times[0]; + } + } + for (let i = 0; i < clip.tracks.length; ++i) { + clip.tracks[i].shift(-1 * minStartTime); + } + clip.resetDuration(); + return clip; +} +function makeClipAdditive(targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30) { + if (fps <= 0) fps = 30; + const numTracks = referenceClip.tracks.length; + const referenceTime = referenceFrame / fps; + for (let i = 0; i < numTracks; ++i) { + const referenceTrack = referenceClip.tracks[i]; + const referenceTrackType = referenceTrack.ValueTypeName; + if (referenceTrackType === "bool" || referenceTrackType === "string") continue; + const targetTrack = targetClip.tracks.find(function(track) { + return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; + }); + if (targetTrack === void 0) continue; + let referenceOffset = 0; + const referenceValueSize = referenceTrack.getValueSize(); + if (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + referenceOffset = referenceValueSize / 3; + } + let targetOffset = 0; + const targetValueSize = targetTrack.getValueSize(); + if (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + targetOffset = targetValueSize / 3; + } + const lastIndex = referenceTrack.times.length - 1; + let referenceValue; + if (referenceTime <= referenceTrack.times[0]) { + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + referenceValue = referenceTrack.values.slice(startIndex, endIndex); + } else if (referenceTime >= referenceTrack.times[lastIndex]) { + const startIndex = lastIndex * referenceValueSize + referenceOffset; + const endIndex = startIndex + referenceValueSize - referenceOffset; + referenceValue = referenceTrack.values.slice(startIndex, endIndex); + } else { + const interpolant = referenceTrack.createInterpolant(); + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + interpolant.evaluate(referenceTime); + referenceValue = interpolant.resultBuffer.slice(startIndex, endIndex); + } + if (referenceTrackType === "quaternion") { + const referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate(); + referenceQuat.toArray(referenceValue); + } + const numTimes = targetTrack.times.length; + for (let j = 0; j < numTimes; ++j) { + const valueStart = j * targetValueSize + targetOffset; + if (referenceTrackType === "quaternion") { + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + } else { + const valueEnd = targetValueSize - targetOffset * 2; + for (let k = 0; k < valueEnd; ++k) { + targetTrack.values[valueStart + k] -= referenceValue[k]; + } + } + } + } + targetClip.blendMode = AdditiveAnimationBlendMode; + return targetClip; +} +var AnimationUtils = { + convertArray, + isTypedArray, + getKeyframeOrder, + sortedArray, + flattenJSON, + subclip, + makeClipAdditive +}; +var Interpolant = class { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + this.resultBuffer = resultBuffer !== void 0 ? resultBuffer : new sampleValues.constructor(sampleSize); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + this.settings = null; + this.DefaultSettings_ = {}; + } + evaluate(t) { + const pp = this.parameterPositions; + let i1 = this._cachedIndex, t1 = pp[i1], t0 = pp[i1 - 1]; + validate_interval: { + seek: { + let right; + linear_scan: { + forward_scan: if (!(t < t1)) { + for (let giveUpAt = i1 + 2; ; ) { + if (t1 === void 0) { + if (t < t0) break forward_scan; + i1 = pp.length; + this._cachedIndex = i1; + return this.copySampleValue_(i1 - 1); + } + if (i1 === giveUpAt) break; + t0 = t1; + t1 = pp[++i1]; + if (t < t1) { + break seek; + } + } + right = pp.length; + break linear_scan; + } + if (!(t >= t0)) { + const t1global = pp[1]; + if (t < t1global) { + i1 = 2; + t0 = t1global; + } + for (let giveUpAt = i1 - 2; ; ) { + if (t0 === void 0) { + this._cachedIndex = 0; + return this.copySampleValue_(0); + } + if (i1 === giveUpAt) break; + t1 = t0; + t0 = pp[--i1 - 1]; + if (t >= t0) { + break seek; + } + } + right = i1; + i1 = 0; + break linear_scan; + } + break validate_interval; + } + while (i1 < right) { + const mid = i1 + right >>> 1; + if (t < pp[mid]) { + right = mid; + } else { + i1 = mid + 1; + } + } + t1 = pp[i1]; + t0 = pp[i1 - 1]; + if (t0 === void 0) { + this._cachedIndex = 0; + return this.copySampleValue_(0); + } + if (t1 === void 0) { + i1 = pp.length; + this._cachedIndex = i1; + return this.copySampleValue_(i1 - 1); + } + } + this._cachedIndex = i1; + this.intervalChanged_(i1, t0, t1); + } + return this.interpolate_(i1, t0, t, t1); + } + getSettings_() { + return this.settings || this.DefaultSettings_; + } + copySampleValue_(index) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride; + for (let i = 0; i !== stride; ++i) { + result[i] = values[offset + i]; + } + return result; + } + // Template methods for derived classes: + interpolate_() { + throw new Error("call to abstract method"); + } + intervalChanged_() { + } +}; +var CubicInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + this._weightPrev = -0; + this._offsetPrev = -0; + this._weightNext = -0; + this._offsetNext = -0; + this.DefaultSettings_ = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + } + intervalChanged_(i1, t0, t1) { + const pp = this.parameterPositions; + let iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[iPrev], tNext = pp[iNext]; + if (tPrev === void 0) { + switch (this.getSettings_().endingStart) { + case ZeroSlopeEnding: + iPrev = i1; + tPrev = 2 * t0 - t1; + break; + case WrapAroundEnding: + iPrev = pp.length - 2; + tPrev = t0 + pp[iPrev] - pp[iPrev + 1]; + break; + default: + iPrev = i1; + tPrev = t1; + } + } + if (tNext === void 0) { + switch (this.getSettings_().endingEnd) { + case ZeroSlopeEnding: + iNext = i1; + tNext = 2 * t1 - t0; + break; + case WrapAroundEnding: + iNext = 1; + tNext = t1 + pp[1] - pp[0]; + break; + default: + iNext = i1 - 1; + tNext = t0; + } + } + const halfDt = (t1 - t0) * 0.5, stride = this.valueSize; + this._weightPrev = halfDt / (t0 - tPrev); + this._weightNext = halfDt / (tNext - t1); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + } + interpolate_(i1, t0, t, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = (t - t0) / (t1 - t0), pp = p * p, ppp = pp * p; + const sP = -wP * ppp + 2 * wP * pp - wP * p; + const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1; + const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p; + const sN = wN * ppp - wN * pp; + for (let i = 0; i !== stride; ++i) { + result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i]; + } + return result; + } +}; +var LinearInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1, t0, t, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset1 = i1 * stride, offset0 = offset1 - stride, weight1 = (t - t0) / (t1 - t0), weight0 = 1 - weight1; + for (let i = 0; i !== stride; ++i) { + result[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1; + } + return result; + } +}; +var DiscreteInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1) { + return this.copySampleValue_(i1 - 1); + } +}; +var KeyframeTrack = class { + constructor(name, times, values, interpolation) { + if (name === void 0) throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (times === void 0 || times.length === 0) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + name); + this.name = name; + this.times = convertArray(times, this.TimeBufferType); + this.values = convertArray(values, this.ValueBufferType); + this.setInterpolation(interpolation || this.DefaultInterpolation); + } + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + static toJSON(track) { + const trackType = track.constructor; + let json; + if (trackType.toJSON !== this.toJSON) { + json = trackType.toJSON(track); + } else { + json = { + "name": track.name, + "times": convertArray(track.times, Array), + "values": convertArray(track.values, Array) + }; + const interpolation = track.getInterpolation(); + if (interpolation !== track.DefaultInterpolation) { + json.interpolation = interpolation; + } + } + json.type = track.ValueTypeName; + return json; + } + InterpolantFactoryMethodDiscrete(result) { + return new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result); + } + InterpolantFactoryMethodLinear(result) { + return new LinearInterpolant(this.times, this.values, this.getValueSize(), result); + } + InterpolantFactoryMethodSmooth(result) { + return new CubicInterpolant(this.times, this.values, this.getValueSize(), result); + } + setInterpolation(interpolation) { + let factoryMethod; + switch (interpolation) { + case InterpolateDiscrete: + factoryMethod = this.InterpolantFactoryMethodDiscrete; + break; + case InterpolateLinear: + factoryMethod = this.InterpolantFactoryMethodLinear; + break; + case InterpolateSmooth: + factoryMethod = this.InterpolantFactoryMethodSmooth; + break; + } + if (factoryMethod === void 0) { + const message = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (this.createInterpolant === void 0) { + if (interpolation !== this.DefaultInterpolation) { + this.setInterpolation(this.DefaultInterpolation); + } else { + throw new Error(message); + } + } + console.warn("THREE.KeyframeTrack:", message); + return this; + } + this.createInterpolant = factoryMethod; + return this; + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return InterpolateDiscrete; + case this.InterpolantFactoryMethodLinear: + return InterpolateLinear; + case this.InterpolantFactoryMethodSmooth: + return InterpolateSmooth; + } + } + getValueSize() { + return this.values.length / this.times.length; + } + // move all keyframes either forwards or backwards in time + shift(timeOffset) { + if (timeOffset !== 0) { + const times = this.times; + for (let i = 0, n = times.length; i !== n; ++i) { + times[i] += timeOffset; + } + } + return this; + } + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale(timeScale) { + if (timeScale !== 1) { + const times = this.times; + for (let i = 0, n = times.length; i !== n; ++i) { + times[i] *= timeScale; + } + } + return this; + } + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim(startTime, endTime) { + const times = this.times, nKeys = times.length; + let from = 0, to = nKeys - 1; + while (from !== nKeys && times[from] < startTime) { + ++from; + } + while (to !== -1 && times[to] > endTime) { + --to; + } + ++to; + if (from !== 0 || to !== nKeys) { + if (from >= to) { + to = Math.max(to, 1); + from = to - 1; + } + const stride = this.getValueSize(); + this.times = times.slice(from, to); + this.values = this.values.slice(from * stride, to * stride); + } + return this; + } + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate() { + let valid = true; + const valueSize = this.getValueSize(); + if (valueSize - Math.floor(valueSize) !== 0) { + console.error("THREE.KeyframeTrack: Invalid value size in track.", this); + valid = false; + } + const times = this.times, values = this.values, nKeys = times.length; + if (nKeys === 0) { + console.error("THREE.KeyframeTrack: Track is empty.", this); + valid = false; + } + let prevTime = null; + for (let i = 0; i !== nKeys; i++) { + const currTime = times[i]; + if (typeof currTime === "number" && isNaN(currTime)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, i, currTime); + valid = false; + break; + } + if (prevTime !== null && prevTime > currTime) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, i, currTime, prevTime); + valid = false; + break; + } + prevTime = currTime; + } + if (values !== void 0) { + if (isTypedArray(values)) { + for (let i = 0, n = values.length; i !== n; ++i) { + const value = values[i]; + if (isNaN(value)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, i, value); + valid = false; + break; + } + } + } + } + return valid; + } + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize() { + const times = this.times.slice(), values = this.values.slice(), stride = this.getValueSize(), smoothInterpolation = this.getInterpolation() === InterpolateSmooth, lastIndex = times.length - 1; + let writeIndex = 1; + for (let i = 1; i < lastIndex; ++i) { + let keep = false; + const time = times[i]; + const timeNext = times[i + 1]; + if (time !== timeNext && (i !== 1 || time !== times[0])) { + if (!smoothInterpolation) { + const offset = i * stride, offsetP = offset - stride, offsetN = offset + stride; + for (let j = 0; j !== stride; ++j) { + const value = values[offset + j]; + if (value !== values[offsetP + j] || value !== values[offsetN + j]) { + keep = true; + break; + } + } + } else { + keep = true; + } + } + if (keep) { + if (i !== writeIndex) { + times[writeIndex] = times[i]; + const readOffset = i * stride, writeOffset = writeIndex * stride; + for (let j = 0; j !== stride; ++j) { + values[writeOffset + j] = values[readOffset + j]; + } + } + ++writeIndex; + } + } + if (lastIndex > 0) { + times[writeIndex] = times[lastIndex]; + for (let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++j) { + values[writeOffset + j] = values[readOffset + j]; + } + ++writeIndex; + } + if (writeIndex !== times.length) { + this.times = times.slice(0, writeIndex); + this.values = values.slice(0, writeIndex * stride); + } else { + this.times = times; + this.values = values; + } + return this; + } + clone() { + const times = this.times.slice(); + const values = this.values.slice(); + const TypedKeyframeTrack = this.constructor; + const track = new TypedKeyframeTrack(this.name, times, values); + track.createInterpolant = this.createInterpolant; + return track; + } +}; +KeyframeTrack.prototype.TimeBufferType = Float32Array; +KeyframeTrack.prototype.ValueBufferType = Float32Array; +KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; +var BooleanKeyframeTrack = class extends KeyframeTrack { + // No interpolation parameter because only InterpolateDiscrete is valid. + constructor(name, times, values) { + super(name, times, values); + } +}; +BooleanKeyframeTrack.prototype.ValueTypeName = "bool"; +BooleanKeyframeTrack.prototype.ValueBufferType = Array; +BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +var ColorKeyframeTrack = class extends KeyframeTrack { +}; +ColorKeyframeTrack.prototype.ValueTypeName = "color"; +var NumberKeyframeTrack = class extends KeyframeTrack { +}; +NumberKeyframeTrack.prototype.ValueTypeName = "number"; +var QuaternionLinearInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + interpolate_(i1, t0, t, t1) { + const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, alpha = (t - t0) / (t1 - t0); + let offset = i1 * stride; + for (let end = offset + stride; offset !== end; offset += 4) { + Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha); + } + return result; + } +}; +var QuaternionKeyframeTrack = class extends KeyframeTrack { + InterpolantFactoryMethodLinear(result) { + return new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result); + } +}; +QuaternionKeyframeTrack.prototype.ValueTypeName = "quaternion"; +QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +var StringKeyframeTrack = class extends KeyframeTrack { + // No interpolation parameter because only InterpolateDiscrete is valid. + constructor(name, times, values) { + super(name, times, values); + } +}; +StringKeyframeTrack.prototype.ValueTypeName = "string"; +StringKeyframeTrack.prototype.ValueBufferType = Array; +StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; +StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; +var VectorKeyframeTrack = class extends KeyframeTrack { +}; +VectorKeyframeTrack.prototype.ValueTypeName = "vector"; +var AnimationClip = class { + constructor(name = "", duration = -1, tracks = [], blendMode = NormalAnimationBlendMode) { + this.name = name; + this.tracks = tracks; + this.duration = duration; + this.blendMode = blendMode; + this.uuid = generateUUID(); + if (this.duration < 0) { + this.resetDuration(); + } + } + static parse(json) { + const tracks = [], jsonTracks = json.tracks, frameTime = 1 / (json.fps || 1); + for (let i = 0, n = jsonTracks.length; i !== n; ++i) { + tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime)); + } + const clip = new this(json.name, json.duration, tracks, json.blendMode); + clip.uuid = json.uuid; + return clip; + } + static toJSON(clip) { + const tracks = [], clipTracks = clip.tracks; + const json = { + "name": clip.name, + "duration": clip.duration, + "tracks": tracks, + "uuid": clip.uuid, + "blendMode": clip.blendMode + }; + for (let i = 0, n = clipTracks.length; i !== n; ++i) { + tracks.push(KeyframeTrack.toJSON(clipTracks[i])); + } + return json; + } + static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) { + const numMorphTargets = morphTargetSequence.length; + const tracks = []; + for (let i = 0; i < numMorphTargets; i++) { + let times = []; + let values = []; + times.push( + (i + numMorphTargets - 1) % numMorphTargets, + i, + (i + 1) % numMorphTargets + ); + values.push(0, 1, 0); + const order = getKeyframeOrder(times); + times = sortedArray(times, 1, order); + values = sortedArray(values, 1, order); + if (!noLoop && times[0] === 0) { + times.push(numMorphTargets); + values.push(values[0]); + } + tracks.push( + new NumberKeyframeTrack( + ".morphTargetInfluences[" + morphTargetSequence[i].name + "]", + times, + values + ).scale(1 / fps) + ); + } + return new this(name, -1, tracks); + } + static findByName(objectOrClipArray, name) { + let clipArray = objectOrClipArray; + if (!Array.isArray(objectOrClipArray)) { + const o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + } + for (let i = 0; i < clipArray.length; i++) { + if (clipArray[i].name === name) { + return clipArray[i]; + } + } + return null; + } + static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) { + const animationToMorphTargets = {}; + const pattern = /^([\w-]*?)([\d]+)$/; + for (let i = 0, il = morphTargets.length; i < il; i++) { + const morphTarget = morphTargets[i]; + const parts = morphTarget.name.match(pattern); + if (parts && parts.length > 1) { + const name = parts[1]; + let animationMorphTargets = animationToMorphTargets[name]; + if (!animationMorphTargets) { + animationToMorphTargets[name] = animationMorphTargets = []; + } + animationMorphTargets.push(morphTarget); + } + } + const clips = []; + for (const name in animationToMorphTargets) { + clips.push(this.CreateFromMorphTargetSequence(name, animationToMorphTargets[name], fps, noLoop)); + } + return clips; + } + // parse the animation.hierarchy format + static parseAnimation(animation, bones) { + if (!animation) { + console.error("THREE.AnimationClip: No animation in JSONLoader data."); + return null; + } + const addNonemptyTrack = function(trackType, trackName, animationKeys, propertyName, destTracks) { + if (animationKeys.length !== 0) { + const times = []; + const values = []; + flattenJSON(animationKeys, times, values, propertyName); + if (times.length !== 0) { + destTracks.push(new trackType(trackName, times, values)); + } + } + }; + const tracks = []; + const clipName = animation.name || "default"; + const fps = animation.fps || 30; + const blendMode = animation.blendMode; + let duration = animation.length || -1; + const hierarchyTracks = animation.hierarchy || []; + for (let h = 0; h < hierarchyTracks.length; h++) { + const animationKeys = hierarchyTracks[h].keys; + if (!animationKeys || animationKeys.length === 0) continue; + if (animationKeys[0].morphTargets) { + const morphTargetNames = {}; + let k; + for (k = 0; k < animationKeys.length; k++) { + if (animationKeys[k].morphTargets) { + for (let m = 0; m < animationKeys[k].morphTargets.length; m++) { + morphTargetNames[animationKeys[k].morphTargets[m]] = -1; + } + } + } + for (const morphTargetName in morphTargetNames) { + const times = []; + const values = []; + for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) { + const animationKey = animationKeys[k]; + times.push(animationKey.time); + values.push(animationKey.morphTarget === morphTargetName ? 1 : 0); + } + tracks.push(new NumberKeyframeTrack(".morphTargetInfluence[" + morphTargetName + "]", times, values)); + } + duration = morphTargetNames.length * fps; + } else { + const boneName = ".bones[" + bones[h].name + "]"; + addNonemptyTrack( + VectorKeyframeTrack, + boneName + ".position", + animationKeys, + "pos", + tracks + ); + addNonemptyTrack( + QuaternionKeyframeTrack, + boneName + ".quaternion", + animationKeys, + "rot", + tracks + ); + addNonemptyTrack( + VectorKeyframeTrack, + boneName + ".scale", + animationKeys, + "scl", + tracks + ); + } + } + if (tracks.length === 0) { + return null; + } + const clip = new this(clipName, duration, tracks, blendMode); + return clip; + } + resetDuration() { + const tracks = this.tracks; + let duration = 0; + for (let i = 0, n = tracks.length; i !== n; ++i) { + const track = this.tracks[i]; + duration = Math.max(duration, track.times[track.times.length - 1]); + } + this.duration = duration; + return this; + } + trim() { + for (let i = 0; i < this.tracks.length; i++) { + this.tracks[i].trim(0, this.duration); + } + return this; + } + validate() { + let valid = true; + for (let i = 0; i < this.tracks.length; i++) { + valid = valid && this.tracks[i].validate(); + } + return valid; + } + optimize() { + for (let i = 0; i < this.tracks.length; i++) { + this.tracks[i].optimize(); + } + return this; + } + clone() { + const tracks = []; + for (let i = 0; i < this.tracks.length; i++) { + tracks.push(this.tracks[i].clone()); + } + return new this.constructor(this.name, this.duration, tracks, this.blendMode); + } + toJSON() { + return this.constructor.toJSON(this); + } +}; +function getTrackTypeForValueTypeName(typeName) { + switch (typeName.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return NumberKeyframeTrack; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return VectorKeyframeTrack; + case "color": + return ColorKeyframeTrack; + case "quaternion": + return QuaternionKeyframeTrack; + case "bool": + case "boolean": + return BooleanKeyframeTrack; + case "string": + return StringKeyframeTrack; + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + typeName); +} +function parseKeyframeTrack(json) { + if (json.type === void 0) { + throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + } + const trackType = getTrackTypeForValueTypeName(json.type); + if (json.times === void 0) { + const times = [], values = []; + flattenJSON(json.keys, times, values, "value"); + json.times = times; + json.values = values; + } + if (trackType.parse !== void 0) { + return trackType.parse(json); + } else { + return new trackType(json.name, json.times, json.values, json.interpolation); + } +} +var Cache = { + enabled: false, + files: {}, + add: function(key, file) { + if (this.enabled === false) return; + this.files[key] = file; + }, + get: function(key) { + if (this.enabled === false) return; + return this.files[key]; + }, + remove: function(key) { + delete this.files[key]; + }, + clear: function() { + this.files = {}; + } +}; +var LoadingManager = class { + constructor(onLoad, onProgress, onError) { + const scope = this; + let isLoading = false; + let itemsLoaded = 0; + let itemsTotal = 0; + let urlModifier = void 0; + const handlers = []; + this.onStart = void 0; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + this.itemStart = function(url) { + itemsTotal++; + if (isLoading === false) { + if (scope.onStart !== void 0) { + scope.onStart(url, itemsLoaded, itemsTotal); + } + } + isLoading = true; + }; + this.itemEnd = function(url) { + itemsLoaded++; + if (scope.onProgress !== void 0) { + scope.onProgress(url, itemsLoaded, itemsTotal); + } + if (itemsLoaded === itemsTotal) { + isLoading = false; + if (scope.onLoad !== void 0) { + scope.onLoad(); + } + } + }; + this.itemError = function(url) { + if (scope.onError !== void 0) { + scope.onError(url); + } + }; + this.resolveURL = function(url) { + if (urlModifier) { + return urlModifier(url); + } + return url; + }; + this.setURLModifier = function(transform) { + urlModifier = transform; + return this; + }; + this.addHandler = function(regex, loader) { + handlers.push(regex, loader); + return this; + }; + this.removeHandler = function(regex) { + const index = handlers.indexOf(regex); + if (index !== -1) { + handlers.splice(index, 2); + } + return this; + }; + this.getHandler = function(file) { + for (let i = 0, l = handlers.length; i < l; i += 2) { + const regex = handlers[i]; + const loader = handlers[i + 1]; + if (regex.global) regex.lastIndex = 0; + if (regex.test(file)) { + return loader; + } + } + return null; + }; + } +}; +var DefaultLoadingManager = new LoadingManager(); +var Loader = class { + constructor(manager) { + this.manager = manager !== void 0 ? manager : DefaultLoadingManager; + this.crossOrigin = "anonymous"; + this.withCredentials = false; + this.path = ""; + this.resourcePath = ""; + this.requestHeader = {}; + } + load() { + } + loadAsync(url, onProgress) { + const scope = this; + return new Promise(function(resolve, reject) { + scope.load(url, resolve, onProgress, reject); + }); + } + parse() { + } + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + setWithCredentials(value) { + this.withCredentials = value; + return this; + } + setPath(path) { + this.path = path; + return this; + } + setResourcePath(resourcePath) { + this.resourcePath = resourcePath; + return this; + } + setRequestHeader(requestHeader) { + this.requestHeader = requestHeader; + return this; + } +}; +Loader.DEFAULT_MATERIAL_NAME = "__DEFAULT"; +var loading = {}; +var HttpError = class extends Error { + constructor(message, response) { + super(message); + this.response = response; + } +}; +var FileLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + if (url === void 0) url = ""; + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const cached = Cache.get(url); + if (cached !== void 0) { + this.manager.itemStart(url); + setTimeout(() => { + if (onLoad) onLoad(cached); + this.manager.itemEnd(url); + }, 0); + return cached; + } + if (loading[url] !== void 0) { + loading[url].push({ + onLoad, + onProgress, + onError + }); + return; + } + loading[url] = []; + loading[url].push({ + onLoad, + onProgress, + onError + }); + const req = new Request(url, { + headers: new Headers(this.requestHeader), + credentials: this.withCredentials ? "include" : "same-origin" + // An abort controller could be added within a future PR + }); + const mimeType = this.mimeType; + const responseType = this.responseType; + fetch(req).then((response) => { + if (response.status === 200 || response.status === 0) { + if (response.status === 0) { + console.warn("THREE.FileLoader: HTTP Status 0 received."); + } + if (typeof ReadableStream === "undefined" || response.body === void 0 || response.body.getReader === void 0) { + return response; + } + const callbacks = loading[url]; + const reader = response.body.getReader(); + const contentLength = response.headers.get("X-File-Size") || response.headers.get("Content-Length"); + const total = contentLength ? parseInt(contentLength) : 0; + const lengthComputable = total !== 0; + let loaded = 0; + const stream = new ReadableStream({ + start(controller) { + readData(); + function readData() { + reader.read().then(({ done, value }) => { + if (done) { + controller.close(); + } else { + loaded += value.byteLength; + const event = new ProgressEvent("progress", { lengthComputable, loaded, total }); + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onProgress) callback.onProgress(event); + } + controller.enqueue(value); + readData(); + } + }, (e) => { + controller.error(e); + }); + } + } + }); + return new Response(stream); + } else { + throw new HttpError(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response); + } + }).then((response) => { + switch (responseType) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "document": + return response.text().then((text) => { + const parser = new DOMParser(); + return parser.parseFromString(text, mimeType); + }); + case "json": + return response.json(); + default: + if (mimeType === void 0) { + return response.text(); + } else { + const re = /charset="?([^;"\s]*)"?/i; + const exec = re.exec(mimeType); + const label = exec && exec[1] ? exec[1].toLowerCase() : void 0; + const decoder = new TextDecoder(label); + return response.arrayBuffer().then((ab) => decoder.decode(ab)); + } + } + }).then((data) => { + Cache.add(url, data); + const callbacks = loading[url]; + delete loading[url]; + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onLoad) callback.onLoad(data); + } + }).catch((err) => { + const callbacks = loading[url]; + if (callbacks === void 0) { + this.manager.itemError(url); + throw err; + } + delete loading[url]; + for (let i = 0, il = callbacks.length; i < il; i++) { + const callback = callbacks[i]; + if (callback.onError) callback.onError(err); + } + this.manager.itemError(url); + }).finally(() => { + this.manager.itemEnd(url); + }); + this.manager.itemStart(url); + } + setResponseType(value) { + this.responseType = value; + return this; + } + setMimeType(value) { + this.mimeType = value; + return this; + } +}; +var AnimationLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const animations = []; + for (let i = 0; i < json.length; i++) { + const clip = AnimationClip.parse(json[i]); + animations.push(clip); + } + return animations; + } +}; +var CompressedTextureLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const images = []; + const texture = new CompressedTexture(); + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(scope.withCredentials); + let loaded = 0; + function loadTexture(i) { + loader.load(url[i], function(buffer) { + const texDatas = scope.parse(buffer, true); + images[i] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + loaded += 1; + if (loaded === 6) { + if (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter; + texture.image = images; + texture.format = texDatas.format; + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, onProgress, onError); + } + if (Array.isArray(url)) { + for (let i = 0, il = url.length; i < il; ++i) { + loadTexture(i); + } + } else { + loader.load(url, function(buffer) { + const texDatas = scope.parse(buffer, true); + if (texDatas.isCubemap) { + const faces = texDatas.mipmaps.length / texDatas.mipmapCount; + for (let f = 0; f < faces; f++) { + images[f] = { mipmaps: [] }; + for (let i = 0; i < texDatas.mipmapCount; i++) { + images[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + i]); + images[f].format = texDatas.format; + images[f].width = texDatas.width; + images[f].height = texDatas.height; + } + } + texture.image = images; + } else { + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + } + if (texDatas.mipmapCount === 1) { + texture.minFilter = LinearFilter; + } + texture.format = texDatas.format; + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + }, onProgress, onError); + } + return texture; + } +}; +var ImageLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const scope = this; + const cached = Cache.get(url); + if (cached !== void 0) { + scope.manager.itemStart(url); + setTimeout(function() { + if (onLoad) onLoad(cached); + scope.manager.itemEnd(url); + }, 0); + return cached; + } + const image = createElementNS("img"); + function onImageLoad() { + removeEventListeners(); + Cache.add(url, this); + if (onLoad) onLoad(this); + scope.manager.itemEnd(url); + } + function onImageError(event) { + removeEventListeners(); + if (onError) onError(event); + scope.manager.itemError(url); + scope.manager.itemEnd(url); + } + function removeEventListeners() { + image.removeEventListener("load", onImageLoad, false); + image.removeEventListener("error", onImageError, false); + } + image.addEventListener("load", onImageLoad, false); + image.addEventListener("error", onImageError, false); + if (url.slice(0, 5) !== "data:") { + if (this.crossOrigin !== void 0) image.crossOrigin = this.crossOrigin; + } + scope.manager.itemStart(url); + image.src = url; + return image; + } +}; +var CubeTextureLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + texture.colorSpace = SRGBColorSpace; + const loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + loader.setPath(this.path); + let loaded = 0; + function loadTexture(i) { + loader.load(urls[i], function(image) { + texture.images[i] = image; + loaded++; + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, void 0, onError); + } + for (let i = 0; i < urls.length; ++i) { + loadTexture(i); + } + return texture; + } +}; +var DataTextureLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const texture = new DataTexture(); + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setPath(this.path); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + let texData; + try { + texData = scope.parse(buffer); + } catch (error) { + if (onError !== void 0) { + onError(error); + } else { + console.error(error); + return; + } + } + if (texData.image !== void 0) { + texture.image = texData.image; + } else if (texData.data !== void 0) { + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + } + texture.wrapS = texData.wrapS !== void 0 ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== void 0 ? texData.wrapT : ClampToEdgeWrapping; + texture.magFilter = texData.magFilter !== void 0 ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== void 0 ? texData.minFilter : LinearFilter; + texture.anisotropy = texData.anisotropy !== void 0 ? texData.anisotropy : 1; + if (texData.colorSpace !== void 0) { + texture.colorSpace = texData.colorSpace; + } + if (texData.flipY !== void 0) { + texture.flipY = texData.flipY; + } + if (texData.format !== void 0) { + texture.format = texData.format; + } + if (texData.type !== void 0) { + texture.type = texData.type; + } + if (texData.mipmaps !== void 0) { + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; + } + if (texData.mipmapCount === 1) { + texture.minFilter = LinearFilter; + } + if (texData.generateMipmaps !== void 0) { + texture.generateMipmaps = texData.generateMipmaps; + } + texture.needsUpdate = true; + if (onLoad) onLoad(texture, texData); + }, onProgress, onError); + return texture; + } +}; +var TextureLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const texture = new Texture(); + const loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + loader.setPath(this.path); + loader.load(url, function(image) { + texture.image = image; + texture.needsUpdate = true; + if (onLoad !== void 0) { + onLoad(texture); + } + }, onProgress, onError); + return texture; + } +}; +var Light = class extends Object3D { + constructor(color, intensity = 1) { + super(); + this.isLight = true; + this.type = "Light"; + this.color = new Color(color); + this.intensity = intensity; + } + dispose() { + } + copy(source, recursive) { + super.copy(source, recursive); + this.color.copy(source.color); + this.intensity = source.intensity; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + if (this.groundColor !== void 0) data.object.groundColor = this.groundColor.getHex(); + if (this.distance !== void 0) data.object.distance = this.distance; + if (this.angle !== void 0) data.object.angle = this.angle; + if (this.decay !== void 0) data.object.decay = this.decay; + if (this.penumbra !== void 0) data.object.penumbra = this.penumbra; + if (this.shadow !== void 0) data.object.shadow = this.shadow.toJSON(); + if (this.target !== void 0) data.object.target = this.target.uuid; + return data; + } +}; +var HemisphereLight = class extends Light { + constructor(skyColor, groundColor, intensity) { + super(skyColor, intensity); + this.isHemisphereLight = true; + this.type = "HemisphereLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.groundColor = new Color(groundColor); + } + copy(source, recursive) { + super.copy(source, recursive); + this.groundColor.copy(source.groundColor); + return this; + } +}; +var _projScreenMatrix$1 = new Matrix4(); +var _lightPositionWorld$1 = new Vector3(); +var _lookTarget$1 = new Vector3(); +var LightShadow = class { + constructor(camera) { + this.camera = camera; + this.intensity = 1; + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + this.blurSamples = 8; + this.mapSize = new Vector2(512, 512); + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + this.autoUpdate = true; + this.needsUpdate = false; + this._frustum = new Frustum(); + this._frameExtents = new Vector2(1, 1); + this._viewportCount = 1; + this._viewports = [ + new Vector4(0, 0, 1, 1) + ]; + } + getViewportCount() { + return this._viewportCount; + } + getFrustum() { + return this._frustum; + } + updateMatrices(light) { + const shadowCamera = this.camera; + const shadowMatrix = this.matrix; + _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld); + shadowCamera.position.copy(_lightPositionWorld$1); + _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld); + shadowCamera.lookAt(_lookTarget$1); + shadowCamera.updateMatrixWorld(); + _projScreenMatrix$1.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse); + this._frustum.setFromProjectionMatrix(_projScreenMatrix$1); + shadowMatrix.set( + 0.5, + 0, + 0, + 0.5, + 0, + 0.5, + 0, + 0.5, + 0, + 0, + 0.5, + 0.5, + 0, + 0, + 0, + 1 + ); + shadowMatrix.multiply(_projScreenMatrix$1); + } + getViewport(viewportIndex) { + return this._viewports[viewportIndex]; + } + getFrameExtents() { + return this._frameExtents; + } + dispose() { + if (this.map) { + this.map.dispose(); + } + if (this.mapPass) { + this.mapPass.dispose(); + } + } + copy(source) { + this.camera = source.camera.clone(); + this.intensity = source.intensity; + this.bias = source.bias; + this.radius = source.radius; + this.mapSize.copy(source.mapSize); + return this; + } + clone() { + return new this.constructor().copy(this); + } + toJSON() { + const object = {}; + if (this.intensity !== 1) object.intensity = this.intensity; + if (this.bias !== 0) object.bias = this.bias; + if (this.normalBias !== 0) object.normalBias = this.normalBias; + if (this.radius !== 1) object.radius = this.radius; + if (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray(); + object.camera = this.camera.toJSON(false).object; + delete object.camera.matrix; + return object; + } +}; +var SpotLightShadow = class extends LightShadow { + constructor() { + super(new PerspectiveCamera(50, 1, 0.5, 500)); + this.isSpotLightShadow = true; + this.focus = 1; + } + updateMatrices(light) { + const camera = this.camera; + const fov2 = RAD2DEG * 2 * light.angle * this.focus; + const aspect2 = this.mapSize.width / this.mapSize.height; + const far = light.distance || camera.far; + if (fov2 !== camera.fov || aspect2 !== camera.aspect || far !== camera.far) { + camera.fov = fov2; + camera.aspect = aspect2; + camera.far = far; + camera.updateProjectionMatrix(); + } + super.updateMatrices(light); + } + copy(source) { + super.copy(source); + this.focus = source.focus; + return this; + } +}; +var SpotLight = class extends Light { + constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2) { + super(color, intensity); + this.isSpotLight = true; + this.type = "SpotLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.target = new Object3D(); + this.distance = distance; + this.angle = angle; + this.penumbra = penumbra; + this.decay = decay; + this.map = null; + this.shadow = new SpotLightShadow(); + } + get power() { + return this.intensity * Math.PI; + } + set power(power) { + this.intensity = power / Math.PI; + } + dispose() { + this.shadow.dispose(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + this.target = source.target.clone(); + this.shadow = source.shadow.clone(); + return this; + } +}; +var _projScreenMatrix = new Matrix4(); +var _lightPositionWorld = new Vector3(); +var _lookTarget = new Vector3(); +var PointLightShadow = class extends LightShadow { + constructor() { + super(new PerspectiveCamera(90, 1, 0.5, 500)); + this.isPointLightShadow = true; + this._frameExtents = new Vector2(4, 2); + this._viewportCount = 6; + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + // positive X + new Vector4(2, 1, 1, 1), + // negative X + new Vector4(0, 1, 1, 1), + // positive Z + new Vector4(3, 1, 1, 1), + // negative Z + new Vector4(1, 1, 1, 1), + // positive Y + new Vector4(3, 0, 1, 1), + // negative Y + new Vector4(1, 0, 1, 1) + ]; + this._cubeDirections = [ + new Vector3(1, 0, 0), + new Vector3(-1, 0, 0), + new Vector3(0, 0, 1), + new Vector3(0, 0, -1), + new Vector3(0, 1, 0), + new Vector3(0, -1, 0) + ]; + this._cubeUps = [ + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 1, 0), + new Vector3(0, 0, 1), + new Vector3(0, 0, -1) + ]; + } + updateMatrices(light, viewportIndex = 0) { + const camera = this.camera; + const shadowMatrix = this.matrix; + const far = light.distance || camera.far; + if (far !== camera.far) { + camera.far = far; + camera.updateProjectionMatrix(); + } + _lightPositionWorld.setFromMatrixPosition(light.matrixWorld); + camera.position.copy(_lightPositionWorld); + _lookTarget.copy(camera.position); + _lookTarget.add(this._cubeDirections[viewportIndex]); + camera.up.copy(this._cubeUps[viewportIndex]); + camera.lookAt(_lookTarget); + camera.updateMatrixWorld(); + shadowMatrix.makeTranslation(-_lightPositionWorld.x, -_lightPositionWorld.y, -_lightPositionWorld.z); + _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); + this._frustum.setFromProjectionMatrix(_projScreenMatrix); + } +}; +var PointLight = class extends Light { + constructor(color, intensity, distance = 0, decay = 2) { + super(color, intensity); + this.isPointLight = true; + this.type = "PointLight"; + this.distance = distance; + this.decay = decay; + this.shadow = new PointLightShadow(); + } + get power() { + return this.intensity * 4 * Math.PI; + } + set power(power) { + this.intensity = power / (4 * Math.PI); + } + dispose() { + this.shadow.dispose(); + } + copy(source, recursive) { + super.copy(source, recursive); + this.distance = source.distance; + this.decay = source.decay; + this.shadow = source.shadow.clone(); + return this; + } +}; +var DirectionalLightShadow = class extends LightShadow { + constructor() { + super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500)); + this.isDirectionalLightShadow = true; + } +}; +var DirectionalLight = class extends Light { + constructor(color, intensity) { + super(color, intensity); + this.isDirectionalLight = true; + this.type = "DirectionalLight"; + this.position.copy(Object3D.DEFAULT_UP); + this.updateMatrix(); + this.target = new Object3D(); + this.shadow = new DirectionalLightShadow(); + } + dispose() { + this.shadow.dispose(); + } + copy(source) { + super.copy(source); + this.target = source.target.clone(); + this.shadow = source.shadow.clone(); + return this; + } +}; +var AmbientLight = class extends Light { + constructor(color, intensity) { + super(color, intensity); + this.isAmbientLight = true; + this.type = "AmbientLight"; + } +}; +var RectAreaLight = class extends Light { + constructor(color, intensity, width = 10, height = 10) { + super(color, intensity); + this.isRectAreaLight = true; + this.type = "RectAreaLight"; + this.width = width; + this.height = height; + } + get power() { + return this.intensity * this.width * this.height * Math.PI; + } + set power(power) { + this.intensity = power / (this.width * this.height * Math.PI); + } + copy(source) { + super.copy(source); + this.width = source.width; + this.height = source.height; + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.width = this.width; + data.object.height = this.height; + return data; + } +}; +var SphericalHarmonics3 = class { + constructor() { + this.isSphericalHarmonics3 = true; + this.coefficients = []; + for (let i = 0; i < 9; i++) { + this.coefficients.push(new Vector3()); + } + } + set(coefficients) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].copy(coefficients[i]); + } + return this; + } + zero() { + for (let i = 0; i < 9; i++) { + this.coefficients[i].set(0, 0, 0); + } + return this; + } + // get the radiance in the direction of the normal + // target is a Vector3 + getAt(normal, target) { + const x = normal.x, y = normal.y, z = normal.z; + const coeff = this.coefficients; + target.copy(coeff[0]).multiplyScalar(0.282095); + target.addScaledVector(coeff[1], 0.488603 * y); + target.addScaledVector(coeff[2], 0.488603 * z); + target.addScaledVector(coeff[3], 0.488603 * x); + target.addScaledVector(coeff[4], 1.092548 * (x * y)); + target.addScaledVector(coeff[5], 1.092548 * (y * z)); + target.addScaledVector(coeff[6], 0.315392 * (3 * z * z - 1)); + target.addScaledVector(coeff[7], 1.092548 * (x * z)); + target.addScaledVector(coeff[8], 0.546274 * (x * x - y * y)); + return target; + } + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + getIrradianceAt(normal, target) { + const x = normal.x, y = normal.y, z = normal.z; + const coeff = this.coefficients; + target.copy(coeff[0]).multiplyScalar(0.886227); + target.addScaledVector(coeff[1], 2 * 0.511664 * y); + target.addScaledVector(coeff[2], 2 * 0.511664 * z); + target.addScaledVector(coeff[3], 2 * 0.511664 * x); + target.addScaledVector(coeff[4], 2 * 0.429043 * x * y); + target.addScaledVector(coeff[5], 2 * 0.429043 * y * z); + target.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); + target.addScaledVector(coeff[7], 2 * 0.429043 * x * z); + target.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); + return target; + } + add(sh) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].add(sh.coefficients[i]); + } + return this; + } + addScaledSH(sh, s) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].addScaledVector(sh.coefficients[i], s); + } + return this; + } + scale(s) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].multiplyScalar(s); + } + return this; + } + lerp(sh, alpha) { + for (let i = 0; i < 9; i++) { + this.coefficients[i].lerp(sh.coefficients[i], alpha); + } + return this; + } + equals(sh) { + for (let i = 0; i < 9; i++) { + if (!this.coefficients[i].equals(sh.coefficients[i])) { + return false; + } + } + return true; + } + copy(sh) { + return this.set(sh.coefficients); + } + clone() { + return new this.constructor().copy(this); + } + fromArray(array, offset = 0) { + const coefficients = this.coefficients; + for (let i = 0; i < 9; i++) { + coefficients[i].fromArray(array, offset + i * 3); + } + return this; + } + toArray(array = [], offset = 0) { + const coefficients = this.coefficients; + for (let i = 0; i < 9; i++) { + coefficients[i].toArray(array, offset + i * 3); + } + return array; + } + // evaluate the basis functions + // shBasis is an Array[ 9 ] + static getBasisAt(normal, shBasis) { + const x = normal.x, y = normal.y, z = normal.z; + shBasis[0] = 0.282095; + shBasis[1] = 0.488603 * y; + shBasis[2] = 0.488603 * z; + shBasis[3] = 0.488603 * x; + shBasis[4] = 1.092548 * x * y; + shBasis[5] = 1.092548 * y * z; + shBasis[6] = 0.315392 * (3 * z * z - 1); + shBasis[7] = 1.092548 * x * z; + shBasis[8] = 0.546274 * (x * x - y * y); + } +}; +var LightProbe = class extends Light { + constructor(sh = new SphericalHarmonics3(), intensity = 1) { + super(void 0, intensity); + this.isLightProbe = true; + this.sh = sh; + } + copy(source) { + super.copy(source); + this.sh.copy(source.sh); + return this; + } + fromJSON(json) { + this.intensity = json.intensity; + this.sh.fromArray(json.sh); + return this; + } + toJSON(meta) { + const data = super.toJSON(meta); + data.object.sh = this.sh.toArray(); + return data; + } +}; +var MaterialLoader = class _MaterialLoader extends Loader { + constructor(manager) { + super(manager); + this.textures = {}; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const textures = this.textures; + function getTexture(name) { + if (textures[name] === void 0) { + console.warn("THREE.MaterialLoader: Undefined texture", name); + } + return textures[name]; + } + const material = _MaterialLoader.createMaterialFromType(json.type); + if (json.uuid !== void 0) material.uuid = json.uuid; + if (json.name !== void 0) material.name = json.name; + if (json.color !== void 0 && material.color !== void 0) material.color.setHex(json.color); + if (json.roughness !== void 0) material.roughness = json.roughness; + if (json.metalness !== void 0) material.metalness = json.metalness; + if (json.sheen !== void 0) material.sheen = json.sheen; + if (json.sheenColor !== void 0) material.sheenColor = new Color().setHex(json.sheenColor); + if (json.sheenRoughness !== void 0) material.sheenRoughness = json.sheenRoughness; + if (json.emissive !== void 0 && material.emissive !== void 0) material.emissive.setHex(json.emissive); + if (json.specular !== void 0 && material.specular !== void 0) material.specular.setHex(json.specular); + if (json.specularIntensity !== void 0) material.specularIntensity = json.specularIntensity; + if (json.specularColor !== void 0 && material.specularColor !== void 0) material.specularColor.setHex(json.specularColor); + if (json.shininess !== void 0) material.shininess = json.shininess; + if (json.clearcoat !== void 0) material.clearcoat = json.clearcoat; + if (json.clearcoatRoughness !== void 0) material.clearcoatRoughness = json.clearcoatRoughness; + if (json.dispersion !== void 0) material.dispersion = json.dispersion; + if (json.iridescence !== void 0) material.iridescence = json.iridescence; + if (json.iridescenceIOR !== void 0) material.iridescenceIOR = json.iridescenceIOR; + if (json.iridescenceThicknessRange !== void 0) material.iridescenceThicknessRange = json.iridescenceThicknessRange; + if (json.transmission !== void 0) material.transmission = json.transmission; + if (json.thickness !== void 0) material.thickness = json.thickness; + if (json.attenuationDistance !== void 0) material.attenuationDistance = json.attenuationDistance; + if (json.attenuationColor !== void 0 && material.attenuationColor !== void 0) material.attenuationColor.setHex(json.attenuationColor); + if (json.anisotropy !== void 0) material.anisotropy = json.anisotropy; + if (json.anisotropyRotation !== void 0) material.anisotropyRotation = json.anisotropyRotation; + if (json.fog !== void 0) material.fog = json.fog; + if (json.flatShading !== void 0) material.flatShading = json.flatShading; + if (json.blending !== void 0) material.blending = json.blending; + if (json.combine !== void 0) material.combine = json.combine; + if (json.side !== void 0) material.side = json.side; + if (json.shadowSide !== void 0) material.shadowSide = json.shadowSide; + if (json.opacity !== void 0) material.opacity = json.opacity; + if (json.transparent !== void 0) material.transparent = json.transparent; + if (json.alphaTest !== void 0) material.alphaTest = json.alphaTest; + if (json.alphaHash !== void 0) material.alphaHash = json.alphaHash; + if (json.depthFunc !== void 0) material.depthFunc = json.depthFunc; + if (json.depthTest !== void 0) material.depthTest = json.depthTest; + if (json.depthWrite !== void 0) material.depthWrite = json.depthWrite; + if (json.colorWrite !== void 0) material.colorWrite = json.colorWrite; + if (json.blendSrc !== void 0) material.blendSrc = json.blendSrc; + if (json.blendDst !== void 0) material.blendDst = json.blendDst; + if (json.blendEquation !== void 0) material.blendEquation = json.blendEquation; + if (json.blendSrcAlpha !== void 0) material.blendSrcAlpha = json.blendSrcAlpha; + if (json.blendDstAlpha !== void 0) material.blendDstAlpha = json.blendDstAlpha; + if (json.blendEquationAlpha !== void 0) material.blendEquationAlpha = json.blendEquationAlpha; + if (json.blendColor !== void 0 && material.blendColor !== void 0) material.blendColor.setHex(json.blendColor); + if (json.blendAlpha !== void 0) material.blendAlpha = json.blendAlpha; + if (json.stencilWriteMask !== void 0) material.stencilWriteMask = json.stencilWriteMask; + if (json.stencilFunc !== void 0) material.stencilFunc = json.stencilFunc; + if (json.stencilRef !== void 0) material.stencilRef = json.stencilRef; + if (json.stencilFuncMask !== void 0) material.stencilFuncMask = json.stencilFuncMask; + if (json.stencilFail !== void 0) material.stencilFail = json.stencilFail; + if (json.stencilZFail !== void 0) material.stencilZFail = json.stencilZFail; + if (json.stencilZPass !== void 0) material.stencilZPass = json.stencilZPass; + if (json.stencilWrite !== void 0) material.stencilWrite = json.stencilWrite; + if (json.wireframe !== void 0) material.wireframe = json.wireframe; + if (json.wireframeLinewidth !== void 0) material.wireframeLinewidth = json.wireframeLinewidth; + if (json.wireframeLinecap !== void 0) material.wireframeLinecap = json.wireframeLinecap; + if (json.wireframeLinejoin !== void 0) material.wireframeLinejoin = json.wireframeLinejoin; + if (json.rotation !== void 0) material.rotation = json.rotation; + if (json.linewidth !== void 0) material.linewidth = json.linewidth; + if (json.dashSize !== void 0) material.dashSize = json.dashSize; + if (json.gapSize !== void 0) material.gapSize = json.gapSize; + if (json.scale !== void 0) material.scale = json.scale; + if (json.polygonOffset !== void 0) material.polygonOffset = json.polygonOffset; + if (json.polygonOffsetFactor !== void 0) material.polygonOffsetFactor = json.polygonOffsetFactor; + if (json.polygonOffsetUnits !== void 0) material.polygonOffsetUnits = json.polygonOffsetUnits; + if (json.dithering !== void 0) material.dithering = json.dithering; + if (json.alphaToCoverage !== void 0) material.alphaToCoverage = json.alphaToCoverage; + if (json.premultipliedAlpha !== void 0) material.premultipliedAlpha = json.premultipliedAlpha; + if (json.forceSinglePass !== void 0) material.forceSinglePass = json.forceSinglePass; + if (json.visible !== void 0) material.visible = json.visible; + if (json.toneMapped !== void 0) material.toneMapped = json.toneMapped; + if (json.userData !== void 0) material.userData = json.userData; + if (json.vertexColors !== void 0) { + if (typeof json.vertexColors === "number") { + material.vertexColors = json.vertexColors > 0 ? true : false; + } else { + material.vertexColors = json.vertexColors; + } + } + if (json.uniforms !== void 0) { + for (const name in json.uniforms) { + const uniform = json.uniforms[name]; + material.uniforms[name] = {}; + switch (uniform.type) { + case "t": + material.uniforms[name].value = getTexture(uniform.value); + break; + case "c": + material.uniforms[name].value = new Color().setHex(uniform.value); + break; + case "v2": + material.uniforms[name].value = new Vector2().fromArray(uniform.value); + break; + case "v3": + material.uniforms[name].value = new Vector3().fromArray(uniform.value); + break; + case "v4": + material.uniforms[name].value = new Vector4().fromArray(uniform.value); + break; + case "m3": + material.uniforms[name].value = new Matrix3().fromArray(uniform.value); + break; + case "m4": + material.uniforms[name].value = new Matrix4().fromArray(uniform.value); + break; + default: + material.uniforms[name].value = uniform.value; + } + } + } + if (json.defines !== void 0) material.defines = json.defines; + if (json.vertexShader !== void 0) material.vertexShader = json.vertexShader; + if (json.fragmentShader !== void 0) material.fragmentShader = json.fragmentShader; + if (json.glslVersion !== void 0) material.glslVersion = json.glslVersion; + if (json.extensions !== void 0) { + for (const key in json.extensions) { + material.extensions[key] = json.extensions[key]; + } + } + if (json.lights !== void 0) material.lights = json.lights; + if (json.clipping !== void 0) material.clipping = json.clipping; + if (json.size !== void 0) material.size = json.size; + if (json.sizeAttenuation !== void 0) material.sizeAttenuation = json.sizeAttenuation; + if (json.map !== void 0) material.map = getTexture(json.map); + if (json.matcap !== void 0) material.matcap = getTexture(json.matcap); + if (json.alphaMap !== void 0) material.alphaMap = getTexture(json.alphaMap); + if (json.bumpMap !== void 0) material.bumpMap = getTexture(json.bumpMap); + if (json.bumpScale !== void 0) material.bumpScale = json.bumpScale; + if (json.normalMap !== void 0) material.normalMap = getTexture(json.normalMap); + if (json.normalMapType !== void 0) material.normalMapType = json.normalMapType; + if (json.normalScale !== void 0) { + let normalScale = json.normalScale; + if (Array.isArray(normalScale) === false) { + normalScale = [normalScale, normalScale]; + } + material.normalScale = new Vector2().fromArray(normalScale); + } + if (json.displacementMap !== void 0) material.displacementMap = getTexture(json.displacementMap); + if (json.displacementScale !== void 0) material.displacementScale = json.displacementScale; + if (json.displacementBias !== void 0) material.displacementBias = json.displacementBias; + if (json.roughnessMap !== void 0) material.roughnessMap = getTexture(json.roughnessMap); + if (json.metalnessMap !== void 0) material.metalnessMap = getTexture(json.metalnessMap); + if (json.emissiveMap !== void 0) material.emissiveMap = getTexture(json.emissiveMap); + if (json.emissiveIntensity !== void 0) material.emissiveIntensity = json.emissiveIntensity; + if (json.specularMap !== void 0) material.specularMap = getTexture(json.specularMap); + if (json.specularIntensityMap !== void 0) material.specularIntensityMap = getTexture(json.specularIntensityMap); + if (json.specularColorMap !== void 0) material.specularColorMap = getTexture(json.specularColorMap); + if (json.envMap !== void 0) material.envMap = getTexture(json.envMap); + if (json.envMapRotation !== void 0) material.envMapRotation.fromArray(json.envMapRotation); + if (json.envMapIntensity !== void 0) material.envMapIntensity = json.envMapIntensity; + if (json.reflectivity !== void 0) material.reflectivity = json.reflectivity; + if (json.refractionRatio !== void 0) material.refractionRatio = json.refractionRatio; + if (json.lightMap !== void 0) material.lightMap = getTexture(json.lightMap); + if (json.lightMapIntensity !== void 0) material.lightMapIntensity = json.lightMapIntensity; + if (json.aoMap !== void 0) material.aoMap = getTexture(json.aoMap); + if (json.aoMapIntensity !== void 0) material.aoMapIntensity = json.aoMapIntensity; + if (json.gradientMap !== void 0) material.gradientMap = getTexture(json.gradientMap); + if (json.clearcoatMap !== void 0) material.clearcoatMap = getTexture(json.clearcoatMap); + if (json.clearcoatRoughnessMap !== void 0) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap); + if (json.clearcoatNormalMap !== void 0) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap); + if (json.clearcoatNormalScale !== void 0) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale); + if (json.iridescenceMap !== void 0) material.iridescenceMap = getTexture(json.iridescenceMap); + if (json.iridescenceThicknessMap !== void 0) material.iridescenceThicknessMap = getTexture(json.iridescenceThicknessMap); + if (json.transmissionMap !== void 0) material.transmissionMap = getTexture(json.transmissionMap); + if (json.thicknessMap !== void 0) material.thicknessMap = getTexture(json.thicknessMap); + if (json.anisotropyMap !== void 0) material.anisotropyMap = getTexture(json.anisotropyMap); + if (json.sheenColorMap !== void 0) material.sheenColorMap = getTexture(json.sheenColorMap); + if (json.sheenRoughnessMap !== void 0) material.sheenRoughnessMap = getTexture(json.sheenRoughnessMap); + return material; + } + setTextures(value) { + this.textures = value; + return this; + } + static createMaterialFromType(type) { + const materialLib = { + ShadowMaterial, + SpriteMaterial, + RawShaderMaterial, + ShaderMaterial, + PointsMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MeshPhongMaterial, + MeshToonMaterial, + MeshNormalMaterial, + MeshLambertMaterial, + MeshDepthMaterial, + MeshDistanceMaterial, + MeshBasicMaterial, + MeshMatcapMaterial, + LineDashedMaterial, + LineBasicMaterial, + Material + }; + return new materialLib[type](); + } +}; +var LoaderUtils = class { + static decodeText(array) { + console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."); + if (typeof TextDecoder !== "undefined") { + return new TextDecoder().decode(array); + } + let s = ""; + for (let i = 0, il = array.length; i < il; i++) { + s += String.fromCharCode(array[i]); + } + try { + return decodeURIComponent(escape(s)); + } catch (e) { + return s; + } + } + static extractUrlBase(url) { + const index = url.lastIndexOf("/"); + if (index === -1) return "./"; + return url.slice(0, index + 1); + } + static resolveURL(url, path) { + if (typeof url !== "string" || url === "") return ""; + if (/^https?:\/\//i.test(path) && /^\//.test(url)) { + path = path.replace(/(^https?:\/\/[^\/]+).*/i, "$1"); + } + if (/^(https?:)?\/\//i.test(url)) return url; + if (/^data:.*,.*$/i.test(url)) return url; + if (/^blob:.*$/i.test(url)) return url; + return path + url; + } +}; +var InstancedBufferGeometry = class extends BufferGeometry { + constructor() { + super(); + this.isInstancedBufferGeometry = true; + this.type = "InstancedBufferGeometry"; + this.instanceCount = Infinity; + } + copy(source) { + super.copy(source); + this.instanceCount = source.instanceCount; + return this; + } + toJSON() { + const data = super.toJSON(); + data.instanceCount = this.instanceCount; + data.isInstancedBufferGeometry = true; + return data; + } +}; +var BufferGeometryLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(JSON.parse(text))); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(json) { + const interleavedBufferMap = {}; + const arrayBufferMap = {}; + function getInterleavedBuffer(json2, uuid) { + if (interleavedBufferMap[uuid] !== void 0) return interleavedBufferMap[uuid]; + const interleavedBuffers = json2.interleavedBuffers; + const interleavedBuffer = interleavedBuffers[uuid]; + const buffer = getArrayBuffer(json2, interleavedBuffer.buffer); + const array = getTypedArray(interleavedBuffer.type, buffer); + const ib = new InterleavedBuffer(array, interleavedBuffer.stride); + ib.uuid = interleavedBuffer.uuid; + interleavedBufferMap[uuid] = ib; + return ib; + } + function getArrayBuffer(json2, uuid) { + if (arrayBufferMap[uuid] !== void 0) return arrayBufferMap[uuid]; + const arrayBuffers = json2.arrayBuffers; + const arrayBuffer = arrayBuffers[uuid]; + const ab = new Uint32Array(arrayBuffer).buffer; + arrayBufferMap[uuid] = ab; + return ab; + } + const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + const index = json.data.index; + if (index !== void 0) { + const typedArray = getTypedArray(index.type, index.array); + geometry.setIndex(new BufferAttribute(typedArray, 1)); + } + const attributes = json.data.attributes; + for (const key in attributes) { + const attribute = attributes[key]; + let bufferAttribute; + if (attribute.isInterleavedBufferAttribute) { + const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); + bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); + } else { + const typedArray = getTypedArray(attribute.type, attribute.array); + const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr(typedArray, attribute.itemSize, attribute.normalized); + } + if (attribute.name !== void 0) bufferAttribute.name = attribute.name; + if (attribute.usage !== void 0) bufferAttribute.setUsage(attribute.usage); + geometry.setAttribute(key, bufferAttribute); + } + const morphAttributes = json.data.morphAttributes; + if (morphAttributes) { + for (const key in morphAttributes) { + const attributeArray = morphAttributes[key]; + const array = []; + for (let i = 0, il = attributeArray.length; i < il; i++) { + const attribute = attributeArray[i]; + let bufferAttribute; + if (attribute.isInterleavedBufferAttribute) { + const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); + bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); + } else { + const typedArray = getTypedArray(attribute.type, attribute.array); + bufferAttribute = new BufferAttribute(typedArray, attribute.itemSize, attribute.normalized); + } + if (attribute.name !== void 0) bufferAttribute.name = attribute.name; + array.push(bufferAttribute); + } + geometry.morphAttributes[key] = array; + } + } + const morphTargetsRelative = json.data.morphTargetsRelative; + if (morphTargetsRelative) { + geometry.morphTargetsRelative = true; + } + const groups = json.data.groups || json.data.drawcalls || json.data.offsets; + if (groups !== void 0) { + for (let i = 0, n = groups.length; i !== n; ++i) { + const group = groups[i]; + geometry.addGroup(group.start, group.count, group.materialIndex); + } + } + const boundingSphere = json.data.boundingSphere; + if (boundingSphere !== void 0) { + const center = new Vector3(); + if (boundingSphere.center !== void 0) { + center.fromArray(boundingSphere.center); + } + geometry.boundingSphere = new Sphere(center, boundingSphere.radius); + } + if (json.name) geometry.name = json.name; + if (json.userData) geometry.userData = json.userData; + return geometry; + } +}; +var ObjectLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + this.resourcePath = this.resourcePath || path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text) { + let json = null; + try { + json = JSON.parse(text); + } catch (error) { + if (onError !== void 0) onError(error); + console.error("THREE:ObjectLoader: Can't parse " + url + ".", error.message); + return; + } + const metadata = json.metadata; + if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { + if (onError !== void 0) onError(new Error("THREE.ObjectLoader: Can't load " + url)); + console.error("THREE.ObjectLoader: Can't load " + url); + return; + } + scope.parse(json, onLoad); + }, onProgress, onError); + } + async loadAsync(url, onProgress) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + this.resourcePath = this.resourcePath || path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + const text = await loader.loadAsync(url, onProgress); + const json = JSON.parse(text); + const metadata = json.metadata; + if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { + throw new Error("THREE.ObjectLoader: Can't load " + url); + } + return await scope.parseAsync(json); + } + parse(json, onLoad) { + const animations = this.parseAnimations(json.animations); + const shapes = this.parseShapes(json.shapes); + const geometries = this.parseGeometries(json.geometries, shapes); + const images = this.parseImages(json.images, function() { + if (onLoad !== void 0) onLoad(object); + }); + const textures = this.parseTextures(json.textures, images); + const materials = this.parseMaterials(json.materials, textures); + const object = this.parseObject(json.object, geometries, materials, textures, animations); + const skeletons = this.parseSkeletons(json.skeletons, object); + this.bindSkeletons(object, skeletons); + this.bindLightTargets(object); + if (onLoad !== void 0) { + let hasImages = false; + for (const uuid in images) { + if (images[uuid].data instanceof HTMLImageElement) { + hasImages = true; + break; + } + } + if (hasImages === false) onLoad(object); + } + return object; + } + async parseAsync(json) { + const animations = this.parseAnimations(json.animations); + const shapes = this.parseShapes(json.shapes); + const geometries = this.parseGeometries(json.geometries, shapes); + const images = await this.parseImagesAsync(json.images); + const textures = this.parseTextures(json.textures, images); + const materials = this.parseMaterials(json.materials, textures); + const object = this.parseObject(json.object, geometries, materials, textures, animations); + const skeletons = this.parseSkeletons(json.skeletons, object); + this.bindSkeletons(object, skeletons); + this.bindLightTargets(object); + return object; + } + parseShapes(json) { + const shapes = {}; + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const shape = new Shape().fromJSON(json[i]); + shapes[shape.uuid] = shape; + } + } + return shapes; + } + parseSkeletons(json, object) { + const skeletons = {}; + const bones = {}; + object.traverse(function(child) { + if (child.isBone) bones[child.uuid] = child; + }); + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const skeleton = new Skeleton().fromJSON(json[i], bones); + skeletons[skeleton.uuid] = skeleton; + } + } + return skeletons; + } + parseGeometries(json, shapes) { + const geometries = {}; + if (json !== void 0) { + const bufferGeometryLoader = new BufferGeometryLoader(); + for (let i = 0, l = json.length; i < l; i++) { + let geometry; + const data = json[i]; + switch (data.type) { + case "BufferGeometry": + case "InstancedBufferGeometry": + geometry = bufferGeometryLoader.parse(data); + break; + default: + if (data.type in Geometries) { + geometry = Geometries[data.type].fromJSON(data, shapes); + } else { + console.warn(`THREE.ObjectLoader: Unsupported geometry type "${data.type}"`); + } + } + geometry.uuid = data.uuid; + if (data.name !== void 0) geometry.name = data.name; + if (data.userData !== void 0) geometry.userData = data.userData; + geometries[data.uuid] = geometry; + } + } + return geometries; + } + parseMaterials(json, textures) { + const cache = {}; + const materials = {}; + if (json !== void 0) { + const loader = new MaterialLoader(); + loader.setTextures(textures); + for (let i = 0, l = json.length; i < l; i++) { + const data = json[i]; + if (cache[data.uuid] === void 0) { + cache[data.uuid] = loader.parse(data); + } + materials[data.uuid] = cache[data.uuid]; + } + } + return materials; + } + parseAnimations(json) { + const animations = {}; + if (json !== void 0) { + for (let i = 0; i < json.length; i++) { + const data = json[i]; + const clip = AnimationClip.parse(data); + animations[clip.uuid] = clip; + } + } + return animations; + } + parseImages(json, onLoad) { + const scope = this; + const images = {}; + let loader; + function loadImage(url) { + scope.manager.itemStart(url); + return loader.load(url, function() { + scope.manager.itemEnd(url); + }, void 0, function() { + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }); + } + function deserializeImage(image) { + if (typeof image === "string") { + const url = image; + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; + return loadImage(path); + } else { + if (image.data) { + return { + data: getTypedArray(image.type, image.data), + width: image.width, + height: image.height + }; + } else { + return null; + } + } + } + if (json !== void 0 && json.length > 0) { + const manager = new LoadingManager(onLoad); + loader = new ImageLoader(manager); + loader.setCrossOrigin(this.crossOrigin); + for (let i = 0, il = json.length; i < il; i++) { + const image = json[i]; + const url = image.url; + if (Array.isArray(url)) { + const imageArray = []; + for (let j = 0, jl = url.length; j < jl; j++) { + const currentUrl = url[j]; + const deserializedImage = deserializeImage(currentUrl); + if (deserializedImage !== null) { + if (deserializedImage instanceof HTMLImageElement) { + imageArray.push(deserializedImage); + } else { + imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); + } + } + } + images[image.uuid] = new Source(imageArray); + } else { + const deserializedImage = deserializeImage(image.url); + images[image.uuid] = new Source(deserializedImage); + } + } + } + return images; + } + async parseImagesAsync(json) { + const scope = this; + const images = {}; + let loader; + async function deserializeImage(image) { + if (typeof image === "string") { + const url = image; + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; + return await loader.loadAsync(path); + } else { + if (image.data) { + return { + data: getTypedArray(image.type, image.data), + width: image.width, + height: image.height + }; + } else { + return null; + } + } + } + if (json !== void 0 && json.length > 0) { + loader = new ImageLoader(this.manager); + loader.setCrossOrigin(this.crossOrigin); + for (let i = 0, il = json.length; i < il; i++) { + const image = json[i]; + const url = image.url; + if (Array.isArray(url)) { + const imageArray = []; + for (let j = 0, jl = url.length; j < jl; j++) { + const currentUrl = url[j]; + const deserializedImage = await deserializeImage(currentUrl); + if (deserializedImage !== null) { + if (deserializedImage instanceof HTMLImageElement) { + imageArray.push(deserializedImage); + } else { + imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); + } + } + } + images[image.uuid] = new Source(imageArray); + } else { + const deserializedImage = await deserializeImage(image.url); + images[image.uuid] = new Source(deserializedImage); + } + } + } + return images; + } + parseTextures(json, images) { + function parseConstant(value, type) { + if (typeof value === "number") return value; + console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", value); + return type[value]; + } + const textures = {}; + if (json !== void 0) { + for (let i = 0, l = json.length; i < l; i++) { + const data = json[i]; + if (data.image === void 0) { + console.warn('THREE.ObjectLoader: No "image" specified for', data.uuid); + } + if (images[data.image] === void 0) { + console.warn("THREE.ObjectLoader: Undefined image", data.image); + } + const source = images[data.image]; + const image = source.data; + let texture; + if (Array.isArray(image)) { + texture = new CubeTexture(); + if (image.length === 6) texture.needsUpdate = true; + } else { + if (image && image.data) { + texture = new DataTexture(); + } else { + texture = new Texture(); + } + if (image) texture.needsUpdate = true; + } + texture.source = source; + texture.uuid = data.uuid; + if (data.name !== void 0) texture.name = data.name; + if (data.mapping !== void 0) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING); + if (data.channel !== void 0) texture.channel = data.channel; + if (data.offset !== void 0) texture.offset.fromArray(data.offset); + if (data.repeat !== void 0) texture.repeat.fromArray(data.repeat); + if (data.center !== void 0) texture.center.fromArray(data.center); + if (data.rotation !== void 0) texture.rotation = data.rotation; + if (data.wrap !== void 0) { + texture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING); + texture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING); + } + if (data.format !== void 0) texture.format = data.format; + if (data.internalFormat !== void 0) texture.internalFormat = data.internalFormat; + if (data.type !== void 0) texture.type = data.type; + if (data.colorSpace !== void 0) texture.colorSpace = data.colorSpace; + if (data.minFilter !== void 0) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER); + if (data.magFilter !== void 0) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER); + if (data.anisotropy !== void 0) texture.anisotropy = data.anisotropy; + if (data.flipY !== void 0) texture.flipY = data.flipY; + if (data.generateMipmaps !== void 0) texture.generateMipmaps = data.generateMipmaps; + if (data.premultiplyAlpha !== void 0) texture.premultiplyAlpha = data.premultiplyAlpha; + if (data.unpackAlignment !== void 0) texture.unpackAlignment = data.unpackAlignment; + if (data.compareFunction !== void 0) texture.compareFunction = data.compareFunction; + if (data.userData !== void 0) texture.userData = data.userData; + textures[data.uuid] = texture; + } + } + return textures; + } + parseObject(data, geometries, materials, textures, animations) { + let object; + function getGeometry(name) { + if (geometries[name] === void 0) { + console.warn("THREE.ObjectLoader: Undefined geometry", name); + } + return geometries[name]; + } + function getMaterial(name) { + if (name === void 0) return void 0; + if (Array.isArray(name)) { + const array = []; + for (let i = 0, l = name.length; i < l; i++) { + const uuid = name[i]; + if (materials[uuid] === void 0) { + console.warn("THREE.ObjectLoader: Undefined material", uuid); + } + array.push(materials[uuid]); + } + return array; + } + if (materials[name] === void 0) { + console.warn("THREE.ObjectLoader: Undefined material", name); + } + return materials[name]; + } + function getTexture(uuid) { + if (textures[uuid] === void 0) { + console.warn("THREE.ObjectLoader: Undefined texture", uuid); + } + return textures[uuid]; + } + let geometry, material; + switch (data.type) { + case "Scene": + object = new Scene(); + if (data.background !== void 0) { + if (Number.isInteger(data.background)) { + object.background = new Color(data.background); + } else { + object.background = getTexture(data.background); + } + } + if (data.environment !== void 0) { + object.environment = getTexture(data.environment); + } + if (data.fog !== void 0) { + if (data.fog.type === "Fog") { + object.fog = new Fog(data.fog.color, data.fog.near, data.fog.far); + } else if (data.fog.type === "FogExp2") { + object.fog = new FogExp2(data.fog.color, data.fog.density); + } + if (data.fog.name !== "") { + object.fog.name = data.fog.name; + } + } + if (data.backgroundBlurriness !== void 0) object.backgroundBlurriness = data.backgroundBlurriness; + if (data.backgroundIntensity !== void 0) object.backgroundIntensity = data.backgroundIntensity; + if (data.backgroundRotation !== void 0) object.backgroundRotation.fromArray(data.backgroundRotation); + if (data.environmentIntensity !== void 0) object.environmentIntensity = data.environmentIntensity; + if (data.environmentRotation !== void 0) object.environmentRotation.fromArray(data.environmentRotation); + break; + case "PerspectiveCamera": + object = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far); + if (data.focus !== void 0) object.focus = data.focus; + if (data.zoom !== void 0) object.zoom = data.zoom; + if (data.filmGauge !== void 0) object.filmGauge = data.filmGauge; + if (data.filmOffset !== void 0) object.filmOffset = data.filmOffset; + if (data.view !== void 0) object.view = Object.assign({}, data.view); + break; + case "OrthographicCamera": + object = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far); + if (data.zoom !== void 0) object.zoom = data.zoom; + if (data.view !== void 0) object.view = Object.assign({}, data.view); + break; + case "AmbientLight": + object = new AmbientLight(data.color, data.intensity); + break; + case "DirectionalLight": + object = new DirectionalLight(data.color, data.intensity); + object.target = data.target || ""; + break; + case "PointLight": + object = new PointLight(data.color, data.intensity, data.distance, data.decay); + break; + case "RectAreaLight": + object = new RectAreaLight(data.color, data.intensity, data.width, data.height); + break; + case "SpotLight": + object = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay); + object.target = data.target || ""; + break; + case "HemisphereLight": + object = new HemisphereLight(data.color, data.groundColor, data.intensity); + break; + case "LightProbe": + object = new LightProbe().fromJSON(data); + break; + case "SkinnedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new SkinnedMesh(geometry, material); + if (data.bindMode !== void 0) object.bindMode = data.bindMode; + if (data.bindMatrix !== void 0) object.bindMatrix.fromArray(data.bindMatrix); + if (data.skeleton !== void 0) object.skeleton = data.skeleton; + break; + case "Mesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new Mesh(geometry, material); + break; + case "InstancedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + const count = data.count; + const instanceMatrix = data.instanceMatrix; + const instanceColor = data.instanceColor; + object = new InstancedMesh(geometry, material, count); + object.instanceMatrix = new InstancedBufferAttribute(new Float32Array(instanceMatrix.array), 16); + if (instanceColor !== void 0) object.instanceColor = new InstancedBufferAttribute(new Float32Array(instanceColor.array), instanceColor.itemSize); + break; + case "BatchedMesh": + geometry = getGeometry(data.geometry); + material = getMaterial(data.material); + object = new BatchedMesh(data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material); + object.geometry = geometry; + object.perObjectFrustumCulled = data.perObjectFrustumCulled; + object.sortObjects = data.sortObjects; + object._drawRanges = data.drawRanges; + object._reservedRanges = data.reservedRanges; + object._visibility = data.visibility; + object._active = data.active; + object._bounds = data.bounds.map((bound) => { + const box = new Box3(); + box.min.fromArray(bound.boxMin); + box.max.fromArray(bound.boxMax); + const sphere = new Sphere(); + sphere.radius = bound.sphereRadius; + sphere.center.fromArray(bound.sphereCenter); + return { + boxInitialized: bound.boxInitialized, + box, + sphereInitialized: bound.sphereInitialized, + sphere + }; + }); + object._maxInstanceCount = data.maxInstanceCount; + object._maxVertexCount = data.maxVertexCount; + object._maxIndexCount = data.maxIndexCount; + object._geometryInitialized = data.geometryInitialized; + object._geometryCount = data.geometryCount; + object._matricesTexture = getTexture(data.matricesTexture.uuid); + if (data.colorsTexture !== void 0) object._colorsTexture = getTexture(data.colorsTexture.uuid); + break; + case "LOD": + object = new LOD(); + break; + case "Line": + object = new Line(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "LineLoop": + object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "LineSegments": + object = new LineSegments(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "PointCloud": + case "Points": + object = new Points(getGeometry(data.geometry), getMaterial(data.material)); + break; + case "Sprite": + object = new Sprite(getMaterial(data.material)); + break; + case "Group": + object = new Group(); + break; + case "Bone": + object = new Bone(); + break; + default: + object = new Object3D(); + } + object.uuid = data.uuid; + if (data.name !== void 0) object.name = data.name; + if (data.matrix !== void 0) { + object.matrix.fromArray(data.matrix); + if (data.matrixAutoUpdate !== void 0) object.matrixAutoUpdate = data.matrixAutoUpdate; + if (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale); + } else { + if (data.position !== void 0) object.position.fromArray(data.position); + if (data.rotation !== void 0) object.rotation.fromArray(data.rotation); + if (data.quaternion !== void 0) object.quaternion.fromArray(data.quaternion); + if (data.scale !== void 0) object.scale.fromArray(data.scale); + } + if (data.up !== void 0) object.up.fromArray(data.up); + if (data.castShadow !== void 0) object.castShadow = data.castShadow; + if (data.receiveShadow !== void 0) object.receiveShadow = data.receiveShadow; + if (data.shadow) { + if (data.shadow.intensity !== void 0) object.shadow.intensity = data.shadow.intensity; + if (data.shadow.bias !== void 0) object.shadow.bias = data.shadow.bias; + if (data.shadow.normalBias !== void 0) object.shadow.normalBias = data.shadow.normalBias; + if (data.shadow.radius !== void 0) object.shadow.radius = data.shadow.radius; + if (data.shadow.mapSize !== void 0) object.shadow.mapSize.fromArray(data.shadow.mapSize); + if (data.shadow.camera !== void 0) object.shadow.camera = this.parseObject(data.shadow.camera); + } + if (data.visible !== void 0) object.visible = data.visible; + if (data.frustumCulled !== void 0) object.frustumCulled = data.frustumCulled; + if (data.renderOrder !== void 0) object.renderOrder = data.renderOrder; + if (data.userData !== void 0) object.userData = data.userData; + if (data.layers !== void 0) object.layers.mask = data.layers; + if (data.children !== void 0) { + const children = data.children; + for (let i = 0; i < children.length; i++) { + object.add(this.parseObject(children[i], geometries, materials, textures, animations)); + } + } + if (data.animations !== void 0) { + const objectAnimations = data.animations; + for (let i = 0; i < objectAnimations.length; i++) { + const uuid = objectAnimations[i]; + object.animations.push(animations[uuid]); + } + } + if (data.type === "LOD") { + if (data.autoUpdate !== void 0) object.autoUpdate = data.autoUpdate; + const levels = data.levels; + for (let l = 0; l < levels.length; l++) { + const level = levels[l]; + const child = object.getObjectByProperty("uuid", level.object); + if (child !== void 0) { + object.addLevel(child, level.distance, level.hysteresis); + } + } + } + return object; + } + bindSkeletons(object, skeletons) { + if (Object.keys(skeletons).length === 0) return; + object.traverse(function(child) { + if (child.isSkinnedMesh === true && child.skeleton !== void 0) { + const skeleton = skeletons[child.skeleton]; + if (skeleton === void 0) { + console.warn("THREE.ObjectLoader: No skeleton found with UUID:", child.skeleton); + } else { + child.bind(skeleton, child.bindMatrix); + } + } + }); + } + bindLightTargets(object) { + object.traverse(function(child) { + if (child.isDirectionalLight || child.isSpotLight) { + const uuid = child.target; + const target = object.getObjectByProperty("uuid", uuid); + if (target !== void 0) { + child.target = target; + } else { + child.target = new Object3D(); + } + } + }); + } +}; +var TEXTURE_MAPPING = { + UVMapping, + CubeReflectionMapping, + CubeRefractionMapping, + EquirectangularReflectionMapping, + EquirectangularRefractionMapping, + CubeUVReflectionMapping +}; +var TEXTURE_WRAPPING = { + RepeatWrapping, + ClampToEdgeWrapping, + MirroredRepeatWrapping +}; +var TEXTURE_FILTER = { + NearestFilter, + NearestMipmapNearestFilter, + NearestMipmapLinearFilter, + LinearFilter, + LinearMipmapNearestFilter, + LinearMipmapLinearFilter +}; +var ImageBitmapLoader = class extends Loader { + constructor(manager) { + super(manager); + this.isImageBitmapLoader = true; + if (typeof createImageBitmap === "undefined") { + console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."); + } + if (typeof fetch === "undefined") { + console.warn("THREE.ImageBitmapLoader: fetch() not supported."); + } + this.options = { premultiplyAlpha: "none" }; + } + setOptions(options) { + this.options = options; + return this; + } + load(url, onLoad, onProgress, onError) { + if (url === void 0) url = ""; + if (this.path !== void 0) url = this.path + url; + url = this.manager.resolveURL(url); + const scope = this; + const cached = Cache.get(url); + if (cached !== void 0) { + scope.manager.itemStart(url); + if (cached.then) { + cached.then((imageBitmap) => { + if (onLoad) onLoad(imageBitmap); + scope.manager.itemEnd(url); + }).catch((e) => { + if (onError) onError(e); + }); + return; + } + setTimeout(function() { + if (onLoad) onLoad(cached); + scope.manager.itemEnd(url); + }, 0); + return cached; + } + const fetchOptions = {}; + fetchOptions.credentials = this.crossOrigin === "anonymous" ? "same-origin" : "include"; + fetchOptions.headers = this.requestHeader; + const promise = fetch(url, fetchOptions).then(function(res) { + return res.blob(); + }).then(function(blob) { + return createImageBitmap(blob, Object.assign(scope.options, { colorSpaceConversion: "none" })); + }).then(function(imageBitmap) { + Cache.add(url, imageBitmap); + if (onLoad) onLoad(imageBitmap); + scope.manager.itemEnd(url); + return imageBitmap; + }).catch(function(e) { + if (onError) onError(e); + Cache.remove(url); + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }); + Cache.add(url, promise); + scope.manager.itemStart(url); + } +}; +var _context; +var AudioContext = class { + static getContext() { + if (_context === void 0) { + _context = new (window.AudioContext || window.webkitAudioContext)(); + } + return _context; + } + static setContext(value) { + _context = value; + } +}; +var AudioLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + const bufferCopy = buffer.slice(0); + const context = AudioContext.getContext(); + context.decodeAudioData(bufferCopy, function(audioBuffer) { + onLoad(audioBuffer); + }).catch(handleError); + } catch (e) { + handleError(e); + } + }, onProgress, onError); + function handleError(e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + } +}; +var _eyeRight = new Matrix4(); +var _eyeLeft = new Matrix4(); +var _projectionMatrix = new Matrix4(); +var StereoCamera = class { + constructor() { + this.type = "StereoCamera"; + this.aspect = 1; + this.eyeSep = 0.064; + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable(1); + this.cameraL.matrixAutoUpdate = false; + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable(2); + this.cameraR.matrixAutoUpdate = false; + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + } + update(camera) { + const cache = this._cache; + const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; + if (needsUpdate) { + cache.focus = camera.focus; + cache.fov = camera.fov; + cache.aspect = camera.aspect * this.aspect; + cache.near = camera.near; + cache.far = camera.far; + cache.zoom = camera.zoom; + cache.eyeSep = this.eyeSep; + _projectionMatrix.copy(camera.projectionMatrix); + const eyeSepHalf = cache.eyeSep / 2; + const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + const ymax = cache.near * Math.tan(DEG2RAD * cache.fov * 0.5) / cache.zoom; + let xmin, xmax; + _eyeLeft.elements[12] = -eyeSepHalf; + _eyeRight.elements[12] = eyeSepHalf; + xmin = -ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); + _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); + this.cameraL.projectionMatrix.copy(_projectionMatrix); + xmin = -ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); + _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); + this.cameraR.projectionMatrix.copy(_projectionMatrix); + } + this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft); + this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight); + } +}; +var Clock = class { + constructor(autoStart = true) { + this.autoStart = autoStart; + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + this.running = false; + } + start() { + this.startTime = now(); + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + } + stop() { + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + } + getElapsedTime() { + this.getDelta(); + return this.elapsedTime; + } + getDelta() { + let diff = 0; + if (this.autoStart && !this.running) { + this.start(); + return 0; + } + if (this.running) { + const newTime = now(); + diff = (newTime - this.oldTime) / 1e3; + this.oldTime = newTime; + this.elapsedTime += diff; + } + return diff; + } +}; +function now() { + return (typeof performance === "undefined" ? Date : performance).now(); +} +var _position$1 = new Vector3(); +var _quaternion$1 = new Quaternion(); +var _scale$1 = new Vector3(); +var _orientation$1 = new Vector3(); +var AudioListener = class extends Object3D { + constructor() { + super(); + this.type = "AudioListener"; + this.context = AudioContext.getContext(); + this.gain = this.context.createGain(); + this.gain.connect(this.context.destination); + this.filter = null; + this.timeDelta = 0; + this._clock = new Clock(); + } + getInput() { + return this.gain; + } + removeFilter() { + if (this.filter !== null) { + this.gain.disconnect(this.filter); + this.filter.disconnect(this.context.destination); + this.gain.connect(this.context.destination); + this.filter = null; + } + return this; + } + getFilter() { + return this.filter; + } + setFilter(value) { + if (this.filter !== null) { + this.gain.disconnect(this.filter); + this.filter.disconnect(this.context.destination); + } else { + this.gain.disconnect(this.context.destination); + } + this.filter = value; + this.gain.connect(this.filter); + this.filter.connect(this.context.destination); + return this; + } + getMasterVolume() { + return this.gain.gain.value; + } + setMasterVolume(value) { + this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); + return this; + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + const listener = this.context.listener; + const up = this.up; + this.timeDelta = this._clock.getDelta(); + this.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); + _orientation$1.set(0, 0, -1).applyQuaternion(_quaternion$1); + if (listener.positionX) { + const endTime = this.context.currentTime + this.timeDelta; + listener.positionX.linearRampToValueAtTime(_position$1.x, endTime); + listener.positionY.linearRampToValueAtTime(_position$1.y, endTime); + listener.positionZ.linearRampToValueAtTime(_position$1.z, endTime); + listener.forwardX.linearRampToValueAtTime(_orientation$1.x, endTime); + listener.forwardY.linearRampToValueAtTime(_orientation$1.y, endTime); + listener.forwardZ.linearRampToValueAtTime(_orientation$1.z, endTime); + listener.upX.linearRampToValueAtTime(up.x, endTime); + listener.upY.linearRampToValueAtTime(up.y, endTime); + listener.upZ.linearRampToValueAtTime(up.z, endTime); + } else { + listener.setPosition(_position$1.x, _position$1.y, _position$1.z); + listener.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z); + } + } +}; +var Audio = class extends Object3D { + constructor(listener) { + super(); + this.type = "Audio"; + this.listener = listener; + this.context = listener.context; + this.gain = this.context.createGain(); + this.gain.connect(listener.getInput()); + this.autoplay = false; + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = void 0; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = "empty"; + this._startedAt = 0; + this._progress = 0; + this._connected = false; + this.filters = []; + } + getOutput() { + return this.gain; + } + setNodeSource(audioNode) { + this.hasPlaybackControl = false; + this.sourceType = "audioNode"; + this.source = audioNode; + this.connect(); + return this; + } + setMediaElementSource(mediaElement) { + this.hasPlaybackControl = false; + this.sourceType = "mediaNode"; + this.source = this.context.createMediaElementSource(mediaElement); + this.connect(); + return this; + } + setMediaStreamSource(mediaStream) { + this.hasPlaybackControl = false; + this.sourceType = "mediaStreamNode"; + this.source = this.context.createMediaStreamSource(mediaStream); + this.connect(); + return this; + } + setBuffer(audioBuffer) { + this.buffer = audioBuffer; + this.sourceType = "buffer"; + if (this.autoplay) this.play(); + return this; + } + play(delay = 0) { + if (this.isPlaying === true) { + console.warn("THREE.Audio: Audio is already playing."); + return; + } + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this._startedAt = this.context.currentTime + delay; + const source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind(this); + source.start(this._startedAt, this._progress + this.offset, this.duration); + this.isPlaying = true; + this.source = source; + this.setDetune(this.detune); + this.setPlaybackRate(this.playbackRate); + return this.connect(); + } + pause() { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + if (this.isPlaying === true) { + this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate; + if (this.loop === true) { + this._progress = this._progress % (this.duration || this.buffer.duration); + } + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + } + return this; + } + stop() { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this._progress = 0; + if (this.source !== null) { + this.source.stop(); + this.source.onended = null; + } + this.isPlaying = false; + return this; + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (let i = 1, l = this.filters.length; i < l; i++) { + this.filters[i - 1].connect(this.filters[i]); + } + this.filters[this.filters.length - 1].connect(this.getOutput()); + } else { + this.source.connect(this.getOutput()); + } + this._connected = true; + return this; + } + disconnect() { + if (this._connected === false) { + return; + } + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (let i = 1, l = this.filters.length; i < l; i++) { + this.filters[i - 1].disconnect(this.filters[i]); + } + this.filters[this.filters.length - 1].disconnect(this.getOutput()); + } else { + this.source.disconnect(this.getOutput()); + } + this._connected = false; + return this; + } + getFilters() { + return this.filters; + } + setFilters(value) { + if (!value) value = []; + if (this._connected === true) { + this.disconnect(); + this.filters = value.slice(); + this.connect(); + } else { + this.filters = value.slice(); + } + return this; + } + setDetune(value) { + this.detune = value; + if (this.isPlaying === true && this.source.detune !== void 0) { + this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01); + } + return this; + } + getDetune() { + return this.detune; + } + getFilter() { + return this.getFilters()[0]; + } + setFilter(filter) { + return this.setFilters(filter ? [filter] : []); + } + setPlaybackRate(value) { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this.playbackRate = value; + if (this.isPlaying === true) { + this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01); + } + return this; + } + getPlaybackRate() { + return this.playbackRate; + } + onEnded() { + this.isPlaying = false; + } + getLoop() { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return false; + } + return this.loop; + } + setLoop(value) { + if (this.hasPlaybackControl === false) { + console.warn("THREE.Audio: this Audio has no playback control."); + return; + } + this.loop = value; + if (this.isPlaying === true) { + this.source.loop = this.loop; + } + return this; + } + setLoopStart(value) { + this.loopStart = value; + return this; + } + setLoopEnd(value) { + this.loopEnd = value; + return this; + } + getVolume() { + return this.gain.gain.value; + } + setVolume(value) { + this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); + return this; + } +}; +var _position = new Vector3(); +var _quaternion = new Quaternion(); +var _scale = new Vector3(); +var _orientation = new Vector3(); +var PositionalAudio = class extends Audio { + constructor(listener) { + super(listener); + this.panner = this.context.createPanner(); + this.panner.panningModel = "HRTF"; + this.panner.connect(this.gain); + } + connect() { + super.connect(); + this.panner.connect(this.gain); + } + disconnect() { + super.disconnect(); + this.panner.disconnect(this.gain); + } + getOutput() { + return this.panner; + } + getRefDistance() { + return this.panner.refDistance; + } + setRefDistance(value) { + this.panner.refDistance = value; + return this; + } + getRolloffFactor() { + return this.panner.rolloffFactor; + } + setRolloffFactor(value) { + this.panner.rolloffFactor = value; + return this; + } + getDistanceModel() { + return this.panner.distanceModel; + } + setDistanceModel(value) { + this.panner.distanceModel = value; + return this; + } + getMaxDistance() { + return this.panner.maxDistance; + } + setMaxDistance(value) { + this.panner.maxDistance = value; + return this; + } + setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) { + this.panner.coneInnerAngle = coneInnerAngle; + this.panner.coneOuterAngle = coneOuterAngle; + this.panner.coneOuterGain = coneOuterGain; + return this; + } + updateMatrixWorld(force) { + super.updateMatrixWorld(force); + if (this.hasPlaybackControl === true && this.isPlaying === false) return; + this.matrixWorld.decompose(_position, _quaternion, _scale); + _orientation.set(0, 0, 1).applyQuaternion(_quaternion); + const panner = this.panner; + if (panner.positionX) { + const endTime = this.context.currentTime + this.listener.timeDelta; + panner.positionX.linearRampToValueAtTime(_position.x, endTime); + panner.positionY.linearRampToValueAtTime(_position.y, endTime); + panner.positionZ.linearRampToValueAtTime(_position.z, endTime); + panner.orientationX.linearRampToValueAtTime(_orientation.x, endTime); + panner.orientationY.linearRampToValueAtTime(_orientation.y, endTime); + panner.orientationZ.linearRampToValueAtTime(_orientation.z, endTime); + } else { + panner.setPosition(_position.x, _position.y, _position.z); + panner.setOrientation(_orientation.x, _orientation.y, _orientation.z); + } + } +}; +var AudioAnalyser = class { + constructor(audio, fftSize = 2048) { + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize; + this.data = new Uint8Array(this.analyser.frequencyBinCount); + audio.getOutput().connect(this.analyser); + } + getFrequencyData() { + this.analyser.getByteFrequencyData(this.data); + return this.data; + } + getAverageFrequency() { + let value = 0; + const data = this.getFrequencyData(); + for (let i = 0; i < data.length; i++) { + value += data[i]; + } + return value / data.length; + } +}; +var PropertyMixer = class { + constructor(binding, typeName, valueSize) { + this.binding = binding; + this.valueSize = valueSize; + let mixFunction, mixFunctionAdditive, setIdentity; + switch (typeName) { + case "quaternion": + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + this.buffer = new Float64Array(valueSize * 6); + this._workIndex = 5; + break; + case "string": + case "bool": + mixFunction = this._select; + mixFunctionAdditive = this._select; + setIdentity = this._setAdditiveIdentityOther; + this.buffer = new Array(valueSize * 5); + break; + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + this.buffer = new Float64Array(valueSize * 5); + } + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + this.useCount = 0; + this.referenceCount = 0; + } + // accumulate data in the 'incoming' region into 'accu' + accumulate(accuIndex, weight) { + const buffer = this.buffer, stride = this.valueSize, offset = accuIndex * stride + stride; + let currentWeight = this.cumulativeWeight; + if (currentWeight === 0) { + for (let i = 0; i !== stride; ++i) { + buffer[offset + i] = buffer[i]; + } + currentWeight = weight; + } else { + currentWeight += weight; + const mix = weight / currentWeight; + this._mixBufferRegion(buffer, offset, 0, mix, stride); + } + this.cumulativeWeight = currentWeight; + } + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive(weight) { + const buffer = this.buffer, stride = this.valueSize, offset = stride * this._addIndex; + if (this.cumulativeWeightAdditive === 0) { + this._setIdentity(); + } + this._mixBufferRegionAdditive(buffer, offset, 0, weight, stride); + this.cumulativeWeightAdditive += weight; + } + // apply the state of 'accu' to the binding when accus differ + apply(accuIndex) { + const stride = this.valueSize, buffer = this.buffer, offset = accuIndex * stride + stride, weight = this.cumulativeWeight, weightAdditive = this.cumulativeWeightAdditive, binding = this.binding; + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + if (weight < 1) { + const originalValueOffset = stride * this._origIndex; + this._mixBufferRegion( + buffer, + offset, + originalValueOffset, + 1 - weight, + stride + ); + } + if (weightAdditive > 0) { + this._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride); + } + for (let i = stride, e = stride + stride; i !== e; ++i) { + if (buffer[i] !== buffer[i + stride]) { + binding.setValue(buffer, offset); + break; + } + } + } + // remember the state of the bound property and copy it to both accus + saveOriginalState() { + const binding = this.binding; + const buffer = this.buffer, stride = this.valueSize, originalValueOffset = stride * this._origIndex; + binding.getValue(buffer, originalValueOffset); + for (let i = stride, e = originalValueOffset; i !== e; ++i) { + buffer[i] = buffer[originalValueOffset + i % stride]; + } + this._setIdentity(); + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + } + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState() { + const originalValueOffset = this.valueSize * 3; + this.binding.setValue(this.buffer, originalValueOffset); + } + _setAdditiveIdentityNumeric() { + const startIndex = this._addIndex * this.valueSize; + const endIndex = startIndex + this.valueSize; + for (let i = startIndex; i < endIndex; i++) { + this.buffer[i] = 0; + } + } + _setAdditiveIdentityQuaternion() { + this._setAdditiveIdentityNumeric(); + this.buffer[this._addIndex * this.valueSize + 3] = 1; + } + _setAdditiveIdentityOther() { + const startIndex = this._origIndex * this.valueSize; + const targetIndex = this._addIndex * this.valueSize; + for (let i = 0; i < this.valueSize; i++) { + this.buffer[targetIndex + i] = this.buffer[startIndex + i]; + } + } + // mix functions + _select(buffer, dstOffset, srcOffset, t, stride) { + if (t >= 0.5) { + for (let i = 0; i !== stride; ++i) { + buffer[dstOffset + i] = buffer[srcOffset + i]; + } + } + } + _slerp(buffer, dstOffset, srcOffset, t) { + Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t); + } + _slerpAdditive(buffer, dstOffset, srcOffset, t, stride) { + const workOffset = this._workIndex * stride; + Quaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); + Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t); + } + _lerp(buffer, dstOffset, srcOffset, t, stride) { + const s = 1 - t; + for (let i = 0; i !== stride; ++i) { + const j = dstOffset + i; + buffer[j] = buffer[j] * s + buffer[srcOffset + i] * t; + } + } + _lerpAdditive(buffer, dstOffset, srcOffset, t, stride) { + for (let i = 0; i !== stride; ++i) { + const j = dstOffset + i; + buffer[j] = buffer[j] + buffer[srcOffset + i] * t; + } + } +}; +var _RESERVED_CHARS_RE = "\\[\\]\\.:\\/"; +var _reservedRe = new RegExp("[" + _RESERVED_CHARS_RE + "]", "g"); +var _wordChar = "[^" + _RESERVED_CHARS_RE + "]"; +var _wordCharOrDot = "[^" + _RESERVED_CHARS_RE.replace("\\.", "") + "]"; +var _directoryRe = /((?:WC+[\/:])*)/.source.replace("WC", _wordChar); +var _nodeRe = /(WCOD+)?/.source.replace("WCOD", _wordCharOrDot); +var _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", _wordChar); +var _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", _wordChar); +var _trackRe = new RegExp( + "^" + _directoryRe + _nodeRe + _objectRe + _propertyRe + "$" +); +var _supportedObjectNames = ["material", "materials", "bones", "map"]; +var Composite = class { + constructor(targetGroup, path, optionalParsedPath) { + const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path); + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_(path, parsedPath); + } + getValue(array, offset) { + this.bind(); + const firstValidIndex = this._targetGroup.nCachedObjects_, binding = this._bindings[firstValidIndex]; + if (binding !== void 0) binding.getValue(array, offset); + } + setValue(array, offset) { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].setValue(array, offset); + } + } + bind() { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].bind(); + } + } + unbind() { + const bindings = this._bindings; + for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { + bindings[i].unbind(); + } + } +}; +var PropertyBinding = class _PropertyBinding { + constructor(rootNode, path, parsedPath) { + this.path = path; + this.parsedPath = parsedPath || _PropertyBinding.parseTrackName(path); + this.node = _PropertyBinding.findNode(rootNode, this.parsedPath.nodeName); + this.rootNode = rootNode; + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + } + static create(root, path, parsedPath) { + if (!(root && root.isAnimationObjectGroup)) { + return new _PropertyBinding(root, path, parsedPath); + } else { + return new _PropertyBinding.Composite(root, path, parsedPath); + } + } + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + static sanitizeNodeName(name) { + return name.replace(/\s/g, "_").replace(_reservedRe, ""); + } + static parseTrackName(trackName) { + const matches = _trackRe.exec(trackName); + if (matches === null) { + throw new Error("PropertyBinding: Cannot parse trackName: " + trackName); + } + const results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[2], + objectName: matches[3], + objectIndex: matches[4], + propertyName: matches[5], + // required + propertyIndex: matches[6] + }; + const lastDot = results.nodeName && results.nodeName.lastIndexOf("."); + if (lastDot !== void 0 && lastDot !== -1) { + const objectName = results.nodeName.substring(lastDot + 1); + if (_supportedObjectNames.indexOf(objectName) !== -1) { + results.nodeName = results.nodeName.substring(0, lastDot); + results.objectName = objectName; + } + } + if (results.propertyName === null || results.propertyName.length === 0) { + throw new Error("PropertyBinding: can not parse propertyName from trackName: " + trackName); + } + return results; + } + static findNode(root, nodeName) { + if (nodeName === void 0 || nodeName === "" || nodeName === "." || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) { + return root; + } + if (root.skeleton) { + const bone = root.skeleton.getBoneByName(nodeName); + if (bone !== void 0) { + return bone; + } + } + if (root.children) { + const searchNodeSubtree = function(children) { + for (let i = 0; i < children.length; i++) { + const childNode = children[i]; + if (childNode.name === nodeName || childNode.uuid === nodeName) { + return childNode; + } + const result = searchNodeSubtree(childNode.children); + if (result) return result; + } + return null; + }; + const subTreeNode = searchNodeSubtree(root.children); + if (subTreeNode) { + return subTreeNode; + } + } + return null; + } + // these are used to "bind" a nonexistent property + _getValue_unavailable() { + } + _setValue_unavailable() { + } + // Getters + _getValue_direct(buffer, offset) { + buffer[offset] = this.targetObject[this.propertyName]; + } + _getValue_array(buffer, offset) { + const source = this.resolvedProperty; + for (let i = 0, n = source.length; i !== n; ++i) { + buffer[offset++] = source[i]; + } + } + _getValue_arrayElement(buffer, offset) { + buffer[offset] = this.resolvedProperty[this.propertyIndex]; + } + _getValue_toArray(buffer, offset) { + this.resolvedProperty.toArray(buffer, offset); + } + // Direct + _setValue_direct(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + } + _setValue_direct_setNeedsUpdate(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + this.targetObject.needsUpdate = true; + } + _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) { + this.targetObject[this.propertyName] = buffer[offset]; + this.targetObject.matrixWorldNeedsUpdate = true; + } + // EntireArray + _setValue_array(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + } + _setValue_array_setNeedsUpdate(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + this.targetObject.needsUpdate = true; + } + _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) { + const dest = this.resolvedProperty; + for (let i = 0, n = dest.length; i !== n; ++i) { + dest[i] = buffer[offset++]; + } + this.targetObject.matrixWorldNeedsUpdate = true; + } + // ArrayElement + _setValue_arrayElement(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + } + _setValue_arrayElement_setNeedsUpdate(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + this.targetObject.needsUpdate = true; + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) { + this.resolvedProperty[this.propertyIndex] = buffer[offset]; + this.targetObject.matrixWorldNeedsUpdate = true; + } + // HasToFromArray + _setValue_fromArray(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + } + _setValue_fromArray_setNeedsUpdate(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + this.targetObject.needsUpdate = true; + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) { + this.resolvedProperty.fromArray(buffer, offset); + this.targetObject.matrixWorldNeedsUpdate = true; + } + _getValue_unbound(targetArray, offset) { + this.bind(); + this.getValue(targetArray, offset); + } + _setValue_unbound(sourceArray, offset) { + this.bind(); + this.setValue(sourceArray, offset); + } + // create getter / setter pair for a property in the scene graph + bind() { + let targetObject = this.node; + const parsedPath = this.parsedPath; + const objectName = parsedPath.objectName; + const propertyName = parsedPath.propertyName; + let propertyIndex = parsedPath.propertyIndex; + if (!targetObject) { + targetObject = _PropertyBinding.findNode(this.rootNode, parsedPath.nodeName); + this.node = targetObject; + } + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + if (!targetObject) { + console.warn("THREE.PropertyBinding: No target node found for track: " + this.path + "."); + return; + } + if (objectName) { + let objectIndex = parsedPath.objectIndex; + switch (objectName) { + case "materials": + if (!targetObject.material) { + console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + return; + } + if (!targetObject.material.materials) { + console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + return; + } + targetObject = targetObject.material.materials; + break; + case "bones": + if (!targetObject.skeleton) { + console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + return; + } + targetObject = targetObject.skeleton.bones; + for (let i = 0; i < targetObject.length; i++) { + if (targetObject[i].name === objectIndex) { + objectIndex = i; + break; + } + } + break; + case "map": + if ("map" in targetObject) { + targetObject = targetObject.map; + break; + } + if (!targetObject.material) { + console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + return; + } + if (!targetObject.material.map) { + console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.", this); + return; + } + targetObject = targetObject.material.map; + break; + default: + if (targetObject[objectName] === void 0) { + console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + return; + } + targetObject = targetObject[objectName]; + } + if (objectIndex !== void 0) { + if (targetObject[objectIndex] === void 0) { + console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, targetObject); + return; + } + targetObject = targetObject[objectIndex]; + } + } + const nodeProperty = targetObject[propertyName]; + if (nodeProperty === void 0) { + const nodeName = parsedPath.nodeName; + console.error("THREE.PropertyBinding: Trying to update property for track: " + nodeName + "." + propertyName + " but it wasn't found.", targetObject); + return; + } + let versioning = this.Versioning.None; + this.targetObject = targetObject; + if (targetObject.needsUpdate !== void 0) { + versioning = this.Versioning.NeedsUpdate; + } else if (targetObject.matrixWorldNeedsUpdate !== void 0) { + versioning = this.Versioning.MatrixWorldNeedsUpdate; + } + let bindingType = this.BindingType.Direct; + if (propertyIndex !== void 0) { + if (propertyName === "morphTargetInfluences") { + if (!targetObject.geometry) { + console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + return; + } + if (!targetObject.geometry.morphAttributes) { + console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + return; + } + if (targetObject.morphTargetDictionary[propertyIndex] !== void 0) { + propertyIndex = targetObject.morphTargetDictionary[propertyIndex]; + } + } + bindingType = this.BindingType.ArrayElement; + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + } else if (nodeProperty.fromArray !== void 0 && nodeProperty.toArray !== void 0) { + bindingType = this.BindingType.HasFromToArray; + this.resolvedProperty = nodeProperty; + } else if (Array.isArray(nodeProperty)) { + bindingType = this.BindingType.EntireArray; + this.resolvedProperty = nodeProperty; + } else { + this.propertyName = propertyName; + } + this.getValue = this.GetterByBindingType[bindingType]; + this.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning]; + } + unbind() { + this.node = null; + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + } +}; +PropertyBinding.Composite = Composite; +PropertyBinding.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 +}; +PropertyBinding.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 +}; +PropertyBinding.prototype.GetterByBindingType = [ + PropertyBinding.prototype._getValue_direct, + PropertyBinding.prototype._getValue_array, + PropertyBinding.prototype._getValue_arrayElement, + PropertyBinding.prototype._getValue_toArray +]; +PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ + [ + // Direct + PropertyBinding.prototype._setValue_direct, + PropertyBinding.prototype._setValue_direct_setNeedsUpdate, + PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate + ], + [ + // EntireArray + PropertyBinding.prototype._setValue_array, + PropertyBinding.prototype._setValue_array_setNeedsUpdate, + PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate + ], + [ + // ArrayElement + PropertyBinding.prototype._setValue_arrayElement, + PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, + PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate + ], + [ + // HasToFromArray + PropertyBinding.prototype._setValue_fromArray, + PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, + PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate + ] +]; +var AnimationObjectGroup = class { + constructor() { + this.isAnimationObjectGroup = true; + this.uuid = generateUUID(); + this._objects = Array.prototype.slice.call(arguments); + this.nCachedObjects_ = 0; + const indices = {}; + this._indicesByUUID = indices; + for (let i = 0, n = arguments.length; i !== n; ++i) { + indices[arguments[i].uuid] = i; + } + this._paths = []; + this._parsedPaths = []; + this._bindings = []; + this._bindingsIndicesByPath = {}; + const scope = this; + this.stats = { + objects: { + get total() { + return scope._objects.length; + }, + get inUse() { + return this.total - scope.nCachedObjects_; + } + }, + get bindingsPerObject() { + return scope._bindings.length; + } + }; + } + add() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length; + let knownObject = void 0, nObjects = objects.length, nCachedObjects = this.nCachedObjects_; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid; + let index = indicesByUUID[uuid]; + if (index === void 0) { + index = nObjects++; + indicesByUUID[uuid] = index; + objects.push(object); + for (let j = 0, m = nBindings; j !== m; ++j) { + bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j])); + } + } else if (index < nCachedObjects) { + knownObject = objects[index]; + const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex]; + indicesByUUID[lastCachedObject.uuid] = index; + objects[index] = lastCachedObject; + indicesByUUID[uuid] = firstActiveIndex; + objects[firstActiveIndex] = object; + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex]; + let binding = bindingsForPath[index]; + bindingsForPath[index] = lastCached; + if (binding === void 0) { + binding = new PropertyBinding(object, paths[j], parsedPaths[j]); + } + bindingsForPath[firstActiveIndex] = binding; + } + } else if (objects[index] !== knownObject) { + console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes."); + } + } + this.nCachedObjects_ = nCachedObjects; + } + remove() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; + let nCachedObjects = this.nCachedObjects_; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; + if (index !== void 0 && index >= nCachedObjects) { + const lastCachedIndex = nCachedObjects++, firstActiveObject = objects[lastCachedIndex]; + indicesByUUID[firstActiveObject.uuid] = index; + objects[index] = firstActiveObject; + indicesByUUID[uuid] = lastCachedIndex; + objects[lastCachedIndex] = object; + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], firstActive = bindingsForPath[lastCachedIndex], binding = bindingsForPath[index]; + bindingsForPath[index] = firstActive; + bindingsForPath[lastCachedIndex] = binding; + } + } + } + this.nCachedObjects_ = nCachedObjects; + } + // remove & forget + uncache() { + const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; + let nCachedObjects = this.nCachedObjects_, nObjects = objects.length; + for (let i = 0, n = arguments.length; i !== n; ++i) { + const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; + if (index !== void 0) { + delete indicesByUUID[uuid]; + if (index < nCachedObjects) { + const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex], lastIndex = --nObjects, lastObject = objects[lastIndex]; + indicesByUUID[lastCachedObject.uuid] = index; + objects[index] = lastCachedObject; + indicesByUUID[lastObject.uuid] = firstActiveIndex; + objects[firstActiveIndex] = lastObject; + objects.pop(); + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex], last = bindingsForPath[lastIndex]; + bindingsForPath[index] = lastCached; + bindingsForPath[firstActiveIndex] = last; + bindingsForPath.pop(); + } + } else { + const lastIndex = --nObjects, lastObject = objects[lastIndex]; + if (lastIndex > 0) { + indicesByUUID[lastObject.uuid] = index; + } + objects[index] = lastObject; + objects.pop(); + for (let j = 0, m = nBindings; j !== m; ++j) { + const bindingsForPath = bindings[j]; + bindingsForPath[index] = bindingsForPath[lastIndex]; + bindingsForPath.pop(); + } + } + } + } + this.nCachedObjects_ = nCachedObjects; + } + // Internal interface used by befriended PropertyBinding.Composite: + subscribe_(path, parsedPath) { + const indicesByPath = this._bindingsIndicesByPath; + let index = indicesByPath[path]; + const bindings = this._bindings; + if (index !== void 0) return bindings[index]; + const paths = this._paths, parsedPaths = this._parsedPaths, objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, bindingsForPath = new Array(nObjects); + index = bindings.length; + indicesByPath[path] = index; + paths.push(path); + parsedPaths.push(parsedPath); + bindings.push(bindingsForPath); + for (let i = nCachedObjects, n = objects.length; i !== n; ++i) { + const object = objects[i]; + bindingsForPath[i] = new PropertyBinding(object, path, parsedPath); + } + return bindingsForPath; + } + unsubscribe_(path) { + const indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[path]; + if (index !== void 0) { + const paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, lastBindingsIndex = bindings.length - 1, lastBindings = bindings[lastBindingsIndex], lastBindingsPath = path[lastBindingsIndex]; + indicesByPath[lastBindingsPath] = index; + bindings[index] = lastBindings; + bindings.pop(); + parsedPaths[index] = parsedPaths[lastBindingsIndex]; + parsedPaths.pop(); + paths[index] = paths[lastBindingsIndex]; + paths.pop(); + } + } +}; +var AnimationAction = class { + constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) { + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot; + this.blendMode = blendMode; + const tracks = clip.tracks, nTracks = tracks.length, interpolants = new Array(nTracks); + const interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + for (let i = 0; i !== nTracks; ++i) { + const interpolant = tracks[i].createInterpolant(null); + interpolants[i] = interpolant; + interpolant.settings = interpolantSettings; + } + this._interpolantSettings = interpolantSettings; + this._interpolants = interpolants; + this._propertyBindings = new Array(nTracks); + this._cacheIndex = null; + this._byClipCacheIndex = null; + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + this.loop = LoopRepeat; + this._loopCount = -1; + this._startTime = null; + this.time = 0; + this.timeScale = 1; + this._effectiveTimeScale = 1; + this.weight = 1; + this._effectiveWeight = 1; + this.repetitions = Infinity; + this.paused = false; + this.enabled = true; + this.clampWhenFinished = false; + this.zeroSlopeAtStart = true; + this.zeroSlopeAtEnd = true; + } + // State & Scheduling + play() { + this._mixer._activateAction(this); + return this; + } + stop() { + this._mixer._deactivateAction(this); + return this.reset(); + } + reset() { + this.paused = false; + this.enabled = true; + this.time = 0; + this._loopCount = -1; + this._startTime = null; + return this.stopFading().stopWarping(); + } + isRunning() { + return this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this); + } + // return true when play has been called + isScheduled() { + return this._mixer._isActiveAction(this); + } + startAt(time) { + this._startTime = time; + return this; + } + setLoop(mode, repetitions) { + this.loop = mode; + this.repetitions = repetitions; + return this; + } + // Weight + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight(weight) { + this.weight = weight; + this._effectiveWeight = this.enabled ? weight : 0; + return this.stopFading(); + } + // return the weight considering fading and .enabled + getEffectiveWeight() { + return this._effectiveWeight; + } + fadeIn(duration) { + return this._scheduleFading(duration, 0, 1); + } + fadeOut(duration) { + return this._scheduleFading(duration, 1, 0); + } + crossFadeFrom(fadeOutAction, duration, warp) { + fadeOutAction.fadeOut(duration); + this.fadeIn(duration); + if (warp) { + const fadeInDuration = this._clip.duration, fadeOutDuration = fadeOutAction._clip.duration, startEndRatio = fadeOutDuration / fadeInDuration, endStartRatio = fadeInDuration / fadeOutDuration; + fadeOutAction.warp(1, startEndRatio, duration); + this.warp(endStartRatio, 1, duration); + } + return this; + } + crossFadeTo(fadeInAction, duration, warp) { + return fadeInAction.crossFadeFrom(this, duration, warp); + } + stopFading() { + const weightInterpolant = this._weightInterpolant; + if (weightInterpolant !== null) { + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant(weightInterpolant); + } + return this; + } + // Time Scale Control + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale(timeScale) { + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + return this.stopWarping(); + } + // return the time scale considering warping and .paused + getEffectiveTimeScale() { + return this._effectiveTimeScale; + } + setDuration(duration) { + this.timeScale = this._clip.duration / duration; + return this.stopWarping(); + } + syncWith(action) { + this.time = action.time; + this.timeScale = action.timeScale; + return this.stopWarping(); + } + halt(duration) { + return this.warp(this._effectiveTimeScale, 0, duration); + } + warp(startTimeScale, endTimeScale, duration) { + const mixer = this._mixer, now2 = mixer.time, timeScale = this.timeScale; + let interpolant = this._timeScaleInterpolant; + if (interpolant === null) { + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + } + const times = interpolant.parameterPositions, values = interpolant.sampleValues; + times[0] = now2; + times[1] = now2 + duration; + values[0] = startTimeScale / timeScale; + values[1] = endTimeScale / timeScale; + return this; + } + stopWarping() { + const timeScaleInterpolant = this._timeScaleInterpolant; + if (timeScaleInterpolant !== null) { + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant(timeScaleInterpolant); + } + return this; + } + // Object Accessors + getMixer() { + return this._mixer; + } + getClip() { + return this._clip; + } + getRoot() { + return this._localRoot || this._mixer._root; + } + // Interna + _update(time, deltaTime, timeDirection, accuIndex) { + if (!this.enabled) { + this._updateWeight(time); + return; + } + const startTime = this._startTime; + if (startTime !== null) { + const timeRunning = (time - startTime) * timeDirection; + if (timeRunning < 0 || timeDirection === 0) { + deltaTime = 0; + } else { + this._startTime = null; + deltaTime = timeDirection * timeRunning; + } + } + deltaTime *= this._updateTimeScale(time); + const clipTime = this._updateTime(deltaTime); + const weight = this._updateWeight(time); + if (weight > 0) { + const interpolants = this._interpolants; + const propertyMixers = this._propertyBindings; + switch (this.blendMode) { + case AdditiveAnimationBlendMode: + for (let j = 0, m = interpolants.length; j !== m; ++j) { + interpolants[j].evaluate(clipTime); + propertyMixers[j].accumulateAdditive(weight); + } + break; + case NormalAnimationBlendMode: + default: + for (let j = 0, m = interpolants.length; j !== m; ++j) { + interpolants[j].evaluate(clipTime); + propertyMixers[j].accumulate(accuIndex, weight); + } + } + } + } + _updateWeight(time) { + let weight = 0; + if (this.enabled) { + weight = this.weight; + const interpolant = this._weightInterpolant; + if (interpolant !== null) { + const interpolantValue = interpolant.evaluate(time)[0]; + weight *= interpolantValue; + if (time > interpolant.parameterPositions[1]) { + this.stopFading(); + if (interpolantValue === 0) { + this.enabled = false; + } + } + } + } + this._effectiveWeight = weight; + return weight; + } + _updateTimeScale(time) { + let timeScale = 0; + if (!this.paused) { + timeScale = this.timeScale; + const interpolant = this._timeScaleInterpolant; + if (interpolant !== null) { + const interpolantValue = interpolant.evaluate(time)[0]; + timeScale *= interpolantValue; + if (time > interpolant.parameterPositions[1]) { + this.stopWarping(); + if (timeScale === 0) { + this.paused = true; + } else { + this.timeScale = timeScale; + } + } + } + } + this._effectiveTimeScale = timeScale; + return timeScale; + } + _updateTime(deltaTime) { + const duration = this._clip.duration; + const loop = this.loop; + let time = this.time + deltaTime; + let loopCount = this._loopCount; + const pingPong = loop === LoopPingPong; + if (deltaTime === 0) { + if (loopCount === -1) return time; + return pingPong && (loopCount & 1) === 1 ? duration - time : time; + } + if (loop === LoopOnce) { + if (loopCount === -1) { + this._loopCount = 0; + this._setEndings(true, true, false); + } + handle_stop: { + if (time >= duration) { + time = duration; + } else if (time < 0) { + time = 0; + } else { + this.time = time; + break handle_stop; + } + if (this.clampWhenFinished) this.paused = true; + else this.enabled = false; + this.time = time; + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: deltaTime < 0 ? -1 : 1 + }); + } + } else { + if (loopCount === -1) { + if (deltaTime >= 0) { + loopCount = 0; + this._setEndings(true, this.repetitions === 0, pingPong); + } else { + this._setEndings(this.repetitions === 0, true, pingPong); + } + } + if (time >= duration || time < 0) { + const loopDelta = Math.floor(time / duration); + time -= duration * loopDelta; + loopCount += Math.abs(loopDelta); + const pending = this.repetitions - loopCount; + if (pending <= 0) { + if (this.clampWhenFinished) this.paused = true; + else this.enabled = false; + time = deltaTime > 0 ? duration : 0; + this.time = time; + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: deltaTime > 0 ? 1 : -1 + }); + } else { + if (pending === 1) { + const atStart = deltaTime < 0; + this._setEndings(atStart, !atStart, pingPong); + } else { + this._setEndings(false, false, pingPong); + } + this._loopCount = loopCount; + this.time = time; + this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta + }); + } + } else { + this.time = time; + } + if (pingPong && (loopCount & 1) === 1) { + return duration - time; + } + } + return time; + } + _setEndings(atStart, atEnd, pingPong) { + const settings = this._interpolantSettings; + if (pingPong) { + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + } else { + if (atStart) { + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + } else { + settings.endingStart = WrapAroundEnding; + } + if (atEnd) { + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + } else { + settings.endingEnd = WrapAroundEnding; + } + } + } + _scheduleFading(duration, weightNow, weightThen) { + const mixer = this._mixer, now2 = mixer.time; + let interpolant = this._weightInterpolant; + if (interpolant === null) { + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + } + const times = interpolant.parameterPositions, values = interpolant.sampleValues; + times[0] = now2; + values[0] = weightNow; + times[1] = now2 + duration; + values[1] = weightThen; + return this; + } +}; +var _controlInterpolantsResultBuffer = new Float32Array(1); +var AnimationMixer = class extends EventDispatcher { + constructor(root) { + super(); + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + this.time = 0; + this.timeScale = 1; + } + _bindAction(action, prototypeAction) { + const root = action._localRoot || this._root, tracks = action._clip.tracks, nTracks = tracks.length, bindings = action._propertyBindings, interpolants = action._interpolants, rootUuid = root.uuid, bindingsByRoot = this._bindingsByRootAndName; + let bindingsByName = bindingsByRoot[rootUuid]; + if (bindingsByName === void 0) { + bindingsByName = {}; + bindingsByRoot[rootUuid] = bindingsByName; + } + for (let i = 0; i !== nTracks; ++i) { + const track = tracks[i], trackName = track.name; + let binding = bindingsByName[trackName]; + if (binding !== void 0) { + ++binding.referenceCount; + bindings[i] = binding; + } else { + binding = bindings[i]; + if (binding !== void 0) { + if (binding._cacheIndex === null) { + ++binding.referenceCount; + this._addInactiveBinding(binding, rootUuid, trackName); + } + continue; + } + const path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath; + binding = new PropertyMixer( + PropertyBinding.create(root, trackName, path), + track.ValueTypeName, + track.getValueSize() + ); + ++binding.referenceCount; + this._addInactiveBinding(binding, rootUuid, trackName); + bindings[i] = binding; + } + interpolants[i].resultBuffer = binding.buffer; + } + } + _activateAction(action) { + if (!this._isActiveAction(action)) { + if (action._cacheIndex === null) { + const rootUuid = (action._localRoot || this._root).uuid, clipUuid = action._clip.uuid, actionsForClip = this._actionsByClip[clipUuid]; + this._bindAction( + action, + actionsForClip && actionsForClip.knownActions[0] + ); + this._addInactiveAction(action, clipUuid, rootUuid); + } + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (binding.useCount++ === 0) { + this._lendBinding(binding); + binding.saveOriginalState(); + } + } + this._lendAction(action); + } + } + _deactivateAction(action) { + if (this._isActiveAction(action)) { + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (--binding.useCount === 0) { + binding.restoreOriginalState(); + this._takeBackBinding(binding); + } + } + this._takeBackAction(action); + } + } + // Memory manager + _initMemoryManager() { + this._actions = []; + this._nActiveActions = 0; + this._actionsByClip = {}; + this._bindings = []; + this._nActiveBindings = 0; + this._bindingsByRootAndName = {}; + this._controlInterpolants = []; + this._nActiveControlInterpolants = 0; + const scope = this; + this.stats = { + actions: { + get total() { + return scope._actions.length; + }, + get inUse() { + return scope._nActiveActions; + } + }, + bindings: { + get total() { + return scope._bindings.length; + }, + get inUse() { + return scope._nActiveBindings; + } + }, + controlInterpolants: { + get total() { + return scope._controlInterpolants.length; + }, + get inUse() { + return scope._nActiveControlInterpolants; + } + } + }; + } + // Memory management for AnimationAction objects + _isActiveAction(action) { + const index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + } + _addInactiveAction(action, clipUuid, rootUuid) { + const actions = this._actions, actionsByClip = this._actionsByClip; + let actionsForClip = actionsByClip[clipUuid]; + if (actionsForClip === void 0) { + actionsForClip = { + knownActions: [action], + actionByRoot: {} + }; + action._byClipCacheIndex = 0; + actionsByClip[clipUuid] = actionsForClip; + } else { + const knownActions = actionsForClip.knownActions; + action._byClipCacheIndex = knownActions.length; + knownActions.push(action); + } + action._cacheIndex = actions.length; + actions.push(action); + actionsForClip.actionByRoot[rootUuid] = action; + } + _removeInactiveAction(action) { + const actions = this._actions, lastInactiveAction = actions[actions.length - 1], cacheIndex = action._cacheIndex; + lastInactiveAction._cacheIndex = cacheIndex; + actions[cacheIndex] = lastInactiveAction; + actions.pop(); + action._cacheIndex = null; + const clipUuid = action._clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid], knownActionsForClip = actionsForClip.knownActions, lastKnownAction = knownActionsForClip[knownActionsForClip.length - 1], byClipCacheIndex = action._byClipCacheIndex; + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[byClipCacheIndex] = lastKnownAction; + knownActionsForClip.pop(); + action._byClipCacheIndex = null; + const actionByRoot = actionsForClip.actionByRoot, rootUuid = (action._localRoot || this._root).uuid; + delete actionByRoot[rootUuid]; + if (knownActionsForClip.length === 0) { + delete actionsByClip[clipUuid]; + } + this._removeInactiveBindingsForAction(action); + } + _removeInactiveBindingsForAction(action) { + const bindings = action._propertyBindings; + for (let i = 0, n = bindings.length; i !== n; ++i) { + const binding = bindings[i]; + if (--binding.referenceCount === 0) { + this._removeInactiveBinding(binding); + } + } + } + _lendAction(action) { + const actions = this._actions, prevIndex = action._cacheIndex, lastActiveIndex = this._nActiveActions++, firstInactiveAction = actions[lastActiveIndex]; + action._cacheIndex = lastActiveIndex; + actions[lastActiveIndex] = action; + firstInactiveAction._cacheIndex = prevIndex; + actions[prevIndex] = firstInactiveAction; + } + _takeBackAction(action) { + const actions = this._actions, prevIndex = action._cacheIndex, firstInactiveIndex = --this._nActiveActions, lastActiveAction = actions[firstInactiveIndex]; + action._cacheIndex = firstInactiveIndex; + actions[firstInactiveIndex] = action; + lastActiveAction._cacheIndex = prevIndex; + actions[prevIndex] = lastActiveAction; + } + // Memory management for PropertyMixer objects + _addInactiveBinding(binding, rootUuid, trackName) { + const bindingsByRoot = this._bindingsByRootAndName, bindings = this._bindings; + let bindingByName = bindingsByRoot[rootUuid]; + if (bindingByName === void 0) { + bindingByName = {}; + bindingsByRoot[rootUuid] = bindingByName; + } + bindingByName[trackName] = binding; + binding._cacheIndex = bindings.length; + bindings.push(binding); + } + _removeInactiveBinding(binding) { + const bindings = this._bindings, propBinding = binding.binding, rootUuid = propBinding.rootNode.uuid, trackName = propBinding.path, bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid], lastInactiveBinding = bindings[bindings.length - 1], cacheIndex = binding._cacheIndex; + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[cacheIndex] = lastInactiveBinding; + bindings.pop(); + delete bindingByName[trackName]; + if (Object.keys(bindingByName).length === 0) { + delete bindingsByRoot[rootUuid]; + } + } + _lendBinding(binding) { + const bindings = this._bindings, prevIndex = binding._cacheIndex, lastActiveIndex = this._nActiveBindings++, firstInactiveBinding = bindings[lastActiveIndex]; + binding._cacheIndex = lastActiveIndex; + bindings[lastActiveIndex] = binding; + firstInactiveBinding._cacheIndex = prevIndex; + bindings[prevIndex] = firstInactiveBinding; + } + _takeBackBinding(binding) { + const bindings = this._bindings, prevIndex = binding._cacheIndex, firstInactiveIndex = --this._nActiveBindings, lastActiveBinding = bindings[firstInactiveIndex]; + binding._cacheIndex = firstInactiveIndex; + bindings[firstInactiveIndex] = binding; + lastActiveBinding._cacheIndex = prevIndex; + bindings[prevIndex] = lastActiveBinding; + } + // Memory management of Interpolants for weight and time scale + _lendControlInterpolant() { + const interpolants = this._controlInterpolants, lastActiveIndex = this._nActiveControlInterpolants++; + let interpolant = interpolants[lastActiveIndex]; + if (interpolant === void 0) { + interpolant = new LinearInterpolant( + new Float32Array(2), + new Float32Array(2), + 1, + _controlInterpolantsResultBuffer + ); + interpolant.__cacheIndex = lastActiveIndex; + interpolants[lastActiveIndex] = interpolant; + } + return interpolant; + } + _takeBackControlInterpolant(interpolant) { + const interpolants = this._controlInterpolants, prevIndex = interpolant.__cacheIndex, firstInactiveIndex = --this._nActiveControlInterpolants, lastActiveInterpolant = interpolants[firstInactiveIndex]; + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[firstInactiveIndex] = interpolant; + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[prevIndex] = lastActiveInterpolant; + } + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction(clip, optionalRoot, blendMode) { + const root = optionalRoot || this._root, rootUuid = root.uuid; + let clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip; + const clipUuid = clipObject !== null ? clipObject.uuid : clip; + const actionsForClip = this._actionsByClip[clipUuid]; + let prototypeAction = null; + if (blendMode === void 0) { + if (clipObject !== null) { + blendMode = clipObject.blendMode; + } else { + blendMode = NormalAnimationBlendMode; + } + } + if (actionsForClip !== void 0) { + const existingAction = actionsForClip.actionByRoot[rootUuid]; + if (existingAction !== void 0 && existingAction.blendMode === blendMode) { + return existingAction; + } + prototypeAction = actionsForClip.knownActions[0]; + if (clipObject === null) + clipObject = prototypeAction._clip; + } + if (clipObject === null) return null; + const newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode); + this._bindAction(newAction, prototypeAction); + this._addInactiveAction(newAction, clipUuid, rootUuid); + return newAction; + } + // get an existing action + existingAction(clip, optionalRoot) { + const root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip, clipUuid = clipObject ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[clipUuid]; + if (actionsForClip !== void 0) { + return actionsForClip.actionByRoot[rootUuid] || null; + } + return null; + } + // deactivates all previously scheduled actions + stopAllAction() { + const actions = this._actions, nActions = this._nActiveActions; + for (let i = nActions - 1; i >= 0; --i) { + actions[i].stop(); + } + return this; + } + // advance the time and update apply the animation + update(deltaTime) { + deltaTime *= this.timeScale; + const actions = this._actions, nActions = this._nActiveActions, time = this.time += deltaTime, timeDirection = Math.sign(deltaTime), accuIndex = this._accuIndex ^= 1; + for (let i = 0; i !== nActions; ++i) { + const action = actions[i]; + action._update(time, deltaTime, timeDirection, accuIndex); + } + const bindings = this._bindings, nBindings = this._nActiveBindings; + for (let i = 0; i !== nBindings; ++i) { + bindings[i].apply(accuIndex); + } + return this; + } + // Allows you to seek to a specific time in an animation. + setTime(timeInSeconds) { + this.time = 0; + for (let i = 0; i < this._actions.length; i++) { + this._actions[i].time = 0; + } + return this.update(timeInSeconds); + } + // return this mixer's root target object + getRoot() { + return this._root; + } + // free all resources specific to a particular clip + uncacheClip(clip) { + const actions = this._actions, clipUuid = clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid]; + if (actionsForClip !== void 0) { + const actionsToRemove = actionsForClip.knownActions; + for (let i = 0, n = actionsToRemove.length; i !== n; ++i) { + const action = actionsToRemove[i]; + this._deactivateAction(action); + const cacheIndex = action._cacheIndex, lastInactiveAction = actions[actions.length - 1]; + action._cacheIndex = null; + action._byClipCacheIndex = null; + lastInactiveAction._cacheIndex = cacheIndex; + actions[cacheIndex] = lastInactiveAction; + actions.pop(); + this._removeInactiveBindingsForAction(action); + } + delete actionsByClip[clipUuid]; + } + } + // free all resources specific to a particular root target object + uncacheRoot(root) { + const rootUuid = root.uuid, actionsByClip = this._actionsByClip; + for (const clipUuid in actionsByClip) { + const actionByRoot = actionsByClip[clipUuid].actionByRoot, action = actionByRoot[rootUuid]; + if (action !== void 0) { + this._deactivateAction(action); + this._removeInactiveAction(action); + } + } + const bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid]; + if (bindingByName !== void 0) { + for (const trackName in bindingByName) { + const binding = bindingByName[trackName]; + binding.restoreOriginalState(); + this._removeInactiveBinding(binding); + } + } + } + // remove a targeted clip from the cache + uncacheAction(clip, optionalRoot) { + const action = this.existingAction(clip, optionalRoot); + if (action !== null) { + this._deactivateAction(action); + this._removeInactiveAction(action); + } + } +}; +var Uniform = class _Uniform { + constructor(value) { + this.value = value; + } + clone() { + return new _Uniform(this.value.clone === void 0 ? this.value : this.value.clone()); + } +}; +var _id = 0; +var UniformsGroup = class extends EventDispatcher { + constructor() { + super(); + this.isUniformsGroup = true; + Object.defineProperty(this, "id", { value: _id++ }); + this.name = ""; + this.usage = StaticDrawUsage; + this.uniforms = []; + } + add(uniform) { + this.uniforms.push(uniform); + return this; + } + remove(uniform) { + const index = this.uniforms.indexOf(uniform); + if (index !== -1) this.uniforms.splice(index, 1); + return this; + } + setName(name) { + this.name = name; + return this; + } + setUsage(value) { + this.usage = value; + return this; + } + dispose() { + this.dispatchEvent({ type: "dispose" }); + return this; + } + copy(source) { + this.name = source.name; + this.usage = source.usage; + const uniformsSource = source.uniforms; + this.uniforms.length = 0; + for (let i = 0, l = uniformsSource.length; i < l; i++) { + const uniforms = Array.isArray(uniformsSource[i]) ? uniformsSource[i] : [uniformsSource[i]]; + for (let j = 0; j < uniforms.length; j++) { + this.uniforms.push(uniforms[j].clone()); + } + } + return this; + } + clone() { + return new this.constructor().copy(this); + } +}; +var InstancedInterleavedBuffer = class extends InterleavedBuffer { + constructor(array, stride, meshPerAttribute = 1) { + super(array, stride); + this.isInstancedInterleavedBuffer = true; + this.meshPerAttribute = meshPerAttribute; + } + copy(source) { + super.copy(source); + this.meshPerAttribute = source.meshPerAttribute; + return this; + } + clone(data) { + const ib = super.clone(data); + ib.meshPerAttribute = this.meshPerAttribute; + return ib; + } + toJSON(data) { + const json = super.toJSON(data); + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + return json; + } +}; +var GLBufferAttribute = class { + constructor(buffer, type, itemSize, elementSize, count) { + this.isGLBufferAttribute = true; + this.name = ""; + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + this.version = 0; + } + set needsUpdate(value) { + if (value === true) this.version++; + } + setBuffer(buffer) { + this.buffer = buffer; + return this; + } + setType(type, elementSize) { + this.type = type; + this.elementSize = elementSize; + return this; + } + setItemSize(itemSize) { + this.itemSize = itemSize; + return this; + } + setCount(count) { + this.count = count; + return this; + } +}; +var _matrix = new Matrix4(); +var Raycaster = class { + constructor(origin, direction, near = 0, far = Infinity) { + this.ray = new Ray(origin, direction); + this.near = near; + this.far = far; + this.camera = null; + this.layers = new Layers(); + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + } + set(origin, direction) { + this.ray.set(origin, direction); + } + setFromCamera(coords, camera) { + if (camera.isPerspectiveCamera) { + this.ray.origin.setFromMatrixPosition(camera.matrixWorld); + this.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize(); + this.camera = camera; + } else if (camera.isOrthographicCamera) { + this.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); + this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld); + this.camera = camera; + } else { + console.error("THREE.Raycaster: Unsupported camera type: " + camera.type); + } + } + setFromXRController(controller) { + _matrix.identity().extractRotation(controller.matrixWorld); + this.ray.origin.setFromMatrixPosition(controller.matrixWorld); + this.ray.direction.set(0, 0, -1).applyMatrix4(_matrix); + return this; + } + intersectObject(object, recursive = true, intersects2 = []) { + intersect(object, this, intersects2, recursive); + intersects2.sort(ascSort); + return intersects2; + } + intersectObjects(objects, recursive = true, intersects2 = []) { + for (let i = 0, l = objects.length; i < l; i++) { + intersect(objects[i], this, intersects2, recursive); + } + intersects2.sort(ascSort); + return intersects2; + } +}; +function ascSort(a, b) { + return a.distance - b.distance; +} +function intersect(object, raycaster, intersects2, recursive) { + let propagate = true; + if (object.layers.test(raycaster.layers)) { + const result = object.raycast(raycaster, intersects2); + if (result === false) propagate = false; + } + if (propagate === true && recursive === true) { + const children = object.children; + for (let i = 0, l = children.length; i < l; i++) { + intersect(children[i], raycaster, intersects2, true); + } + } +} +var Spherical = class { + constructor(radius = 1, phi = 0, theta = 0) { + this.radius = radius; + this.phi = phi; + this.theta = theta; + return this; + } + set(radius, phi, theta) { + this.radius = radius; + this.phi = phi; + this.theta = theta; + return this; + } + copy(other) { + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + return this; + } + // restrict phi to be between EPS and PI-EPS + makeSafe() { + const EPS = 1e-6; + this.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi)); + return this; + } + setFromVector3(v) { + return this.setFromCartesianCoords(v.x, v.y, v.z); + } + setFromCartesianCoords(x, y, z) { + this.radius = Math.sqrt(x * x + y * y + z * z); + if (this.radius === 0) { + this.theta = 0; + this.phi = 0; + } else { + this.theta = Math.atan2(x, z); + this.phi = Math.acos(clamp(y / this.radius, -1, 1)); + } + return this; + } + clone() { + return new this.constructor().copy(this); + } +}; +var Cylindrical = class { + constructor(radius = 1, theta = 0, y = 0) { + this.radius = radius; + this.theta = theta; + this.y = y; + return this; + } + set(radius, theta, y) { + this.radius = radius; + this.theta = theta; + this.y = y; + return this; + } + copy(other) { + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + return this; + } + setFromVector3(v) { + return this.setFromCartesianCoords(v.x, v.y, v.z); + } + setFromCartesianCoords(x, y, z) { + this.radius = Math.sqrt(x * x + z * z); + this.theta = Math.atan2(x, z); + this.y = y; + return this; + } + clone() { + return new this.constructor().copy(this); + } +}; +var Matrix2 = class _Matrix2 { + constructor(n11, n12, n21, n22) { + _Matrix2.prototype.isMatrix2 = true; + this.elements = [ + 1, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n21, n22); + } + } + identity() { + this.set( + 1, + 0, + 0, + 1 + ); + return this; + } + fromArray(array, offset = 0) { + for (let i = 0; i < 4; i++) { + this.elements[i] = array[i + offset]; + } + return this; + } + set(n11, n12, n21, n22) { + const te = this.elements; + te[0] = n11; + te[2] = n12; + te[1] = n21; + te[3] = n22; + return this; + } +}; +var _vector$4 = new Vector2(); +var Box2 = class { + constructor(min = new Vector2(Infinity, Infinity), max = new Vector2(-Infinity, -Infinity)) { + this.isBox2 = true; + this.min = min; + this.max = max; + } + set(min, max) { + this.min.copy(min); + this.max.copy(max); + return this; + } + setFromPoints(points) { + this.makeEmpty(); + for (let i = 0, il = points.length; i < il; i++) { + this.expandByPoint(points[i]); + } + return this; + } + setFromCenterAndSize(center, size) { + const halfSize = _vector$4.copy(size).multiplyScalar(0.5); + this.min.copy(center).sub(halfSize); + this.max.copy(center).add(halfSize); + return this; + } + clone() { + return new this.constructor().copy(this); + } + copy(box) { + this.min.copy(box.min); + this.max.copy(box.max); + return this; + } + makeEmpty() { + this.min.x = this.min.y = Infinity; + this.max.x = this.max.y = -Infinity; + return this; + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y; + } + getCenter(target) { + return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); + } + getSize(target) { + return this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min); + } + expandByPoint(point) { + this.min.min(point); + this.max.max(point); + return this; + } + expandByVector(vector) { + this.min.sub(vector); + this.max.add(vector); + return this; + } + expandByScalar(scalar) { + this.min.addScalar(-scalar); + this.max.addScalar(scalar); + return this; + } + containsPoint(point) { + return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y; + } + containsBox(box) { + return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; + } + getParameter(point, target) { + return target.set( + (point.x - this.min.x) / (this.max.x - this.min.x), + (point.y - this.min.y) / (this.max.y - this.min.y) + ); + } + intersectsBox(box) { + return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y; + } + clampPoint(point, target) { + return target.copy(point).clamp(this.min, this.max); + } + distanceToPoint(point) { + return this.clampPoint(point, _vector$4).distanceTo(point); + } + intersect(box) { + this.min.max(box.min); + this.max.min(box.max); + if (this.isEmpty()) this.makeEmpty(); + return this; + } + union(box) { + this.min.min(box.min); + this.max.max(box.max); + return this; + } + translate(offset) { + this.min.add(offset); + this.max.add(offset); + return this; + } + equals(box) { + return box.min.equals(this.min) && box.max.equals(this.max); + } +}; +var _startP = new Vector3(); +var _startEnd = new Vector3(); +var Line3 = class { + constructor(start = new Vector3(), end = new Vector3()) { + this.start = start; + this.end = end; + } + set(start, end) { + this.start.copy(start); + this.end.copy(end); + return this; + } + copy(line) { + this.start.copy(line.start); + this.end.copy(line.end); + return this; + } + getCenter(target) { + return target.addVectors(this.start, this.end).multiplyScalar(0.5); + } + delta(target) { + return target.subVectors(this.end, this.start); + } + distanceSq() { + return this.start.distanceToSquared(this.end); + } + distance() { + return this.start.distanceTo(this.end); + } + at(t, target) { + return this.delta(target).multiplyScalar(t).add(this.start); + } + closestPointToPointParameter(point, clampToLine) { + _startP.subVectors(point, this.start); + _startEnd.subVectors(this.end, this.start); + const startEnd2 = _startEnd.dot(_startEnd); + const startEnd_startP = _startEnd.dot(_startP); + let t = startEnd_startP / startEnd2; + if (clampToLine) { + t = clamp(t, 0, 1); + } + return t; + } + closestPointToPoint(point, clampToLine, target) { + const t = this.closestPointToPointParameter(point, clampToLine); + return this.delta(target).multiplyScalar(t).add(this.start); + } + applyMatrix4(matrix) { + this.start.applyMatrix4(matrix); + this.end.applyMatrix4(matrix); + return this; + } + equals(line) { + return line.start.equals(this.start) && line.end.equals(this.end); + } + clone() { + return new this.constructor().copy(this); + } +}; +var _vector$3 = new Vector3(); +var SpotLightHelper = class extends Object3D { + constructor(light, color) { + super(); + this.light = light; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "SpotLightHelper"; + const geometry = new BufferGeometry(); + const positions = [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + -1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + -1, + 1 + ]; + for (let i = 0, j = 1, l = 32; i < l; i++, j++) { + const p1 = i / l * Math.PI * 2; + const p2 = j / l * Math.PI * 2; + positions.push( + Math.cos(p1), + Math.sin(p1), + 1, + Math.cos(p2), + Math.sin(p2), + 1 + ); + } + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + const material = new LineBasicMaterial({ fog: false, toneMapped: false }); + this.cone = new LineSegments(geometry, material); + this.add(this.cone); + this.update(); + } + dispose() { + this.cone.geometry.dispose(); + this.cone.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + this.light.target.updateWorldMatrix(true, false); + if (this.parent) { + this.parent.updateWorldMatrix(true); + this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld); + } else { + this.matrix.copy(this.light.matrixWorld); + } + this.matrixWorld.copy(this.light.matrixWorld); + const coneLength = this.light.distance ? this.light.distance : 1e3; + const coneWidth = coneLength * Math.tan(this.light.angle); + this.cone.scale.set(coneWidth, coneWidth, coneLength); + _vector$3.setFromMatrixPosition(this.light.target.matrixWorld); + this.cone.lookAt(_vector$3); + if (this.color !== void 0) { + this.cone.material.color.set(this.color); + } else { + this.cone.material.color.copy(this.light.color); + } + } +}; +var _vector$2 = new Vector3(); +var _boneMatrix = new Matrix4(); +var _matrixWorldInv = new Matrix4(); +var SkeletonHelper = class extends LineSegments { + constructor(object) { + const bones = getBoneList(object); + const geometry = new BufferGeometry(); + const vertices = []; + const colors = []; + const color1 = new Color(0, 0, 1); + const color2 = new Color(0, 1, 0); + for (let i = 0; i < bones.length; i++) { + const bone = bones[i]; + if (bone.parent && bone.parent.isBone) { + vertices.push(0, 0, 0); + vertices.push(0, 0, 0); + colors.push(color1.r, color1.g, color1.b); + colors.push(color2.r, color2.g, color2.b); + } + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true }); + super(geometry, material); + this.isSkeletonHelper = true; + this.type = "SkeletonHelper"; + this.root = object; + this.bones = bones; + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + } + updateMatrixWorld(force) { + const bones = this.bones; + const geometry = this.geometry; + const position = geometry.getAttribute("position"); + _matrixWorldInv.copy(this.root.matrixWorld).invert(); + for (let i = 0, j = 0; i < bones.length; i++) { + const bone = bones[i]; + if (bone.parent && bone.parent.isBone) { + _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld); + _vector$2.setFromMatrixPosition(_boneMatrix); + position.setXYZ(j, _vector$2.x, _vector$2.y, _vector$2.z); + _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld); + _vector$2.setFromMatrixPosition(_boneMatrix); + position.setXYZ(j + 1, _vector$2.x, _vector$2.y, _vector$2.z); + j += 2; + } + } + geometry.getAttribute("position").needsUpdate = true; + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +function getBoneList(object) { + const boneList = []; + if (object.isBone === true) { + boneList.push(object); + } + for (let i = 0; i < object.children.length; i++) { + boneList.push.apply(boneList, getBoneList(object.children[i])); + } + return boneList; +} +var PointLightHelper = class extends Mesh { + constructor(light, sphereSize, color) { + const geometry = new SphereGeometry(sphereSize, 4, 2); + const material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); + super(geometry, material); + this.light = light; + this.color = color; + this.type = "PointLightHelper"; + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + this.update(); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + if (this.color !== void 0) { + this.material.color.set(this.color); + } else { + this.material.color.copy(this.light.color); + } + } +}; +var _vector$1 = new Vector3(); +var _color1 = new Color(); +var _color2 = new Color(); +var HemisphereLightHelper = class extends Object3D { + constructor(light, size, color) { + super(); + this.light = light; + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "HemisphereLightHelper"; + const geometry = new OctahedronGeometry(size); + geometry.rotateY(Math.PI * 0.5); + this.material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); + if (this.color === void 0) this.material.vertexColors = true; + const position = geometry.getAttribute("position"); + const colors = new Float32Array(position.count * 3); + geometry.setAttribute("color", new BufferAttribute(colors, 3)); + this.add(new Mesh(geometry, this.material)); + this.update(); + } + dispose() { + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } + update() { + const mesh = this.children[0]; + if (this.color !== void 0) { + this.material.color.set(this.color); + } else { + const colors = mesh.geometry.getAttribute("color"); + _color1.copy(this.light.color); + _color2.copy(this.light.groundColor); + for (let i = 0, l = colors.count; i < l; i++) { + const color = i < l / 2 ? _color1 : _color2; + colors.setXYZ(i, color.r, color.g, color.b); + } + colors.needsUpdate = true; + } + this.light.updateWorldMatrix(true, false); + mesh.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate()); + } +}; +var GridHelper = class extends LineSegments { + constructor(size = 10, divisions = 10, color1 = 4473924, color2 = 8947848) { + color1 = new Color(color1); + color2 = new Color(color2); + const center = divisions / 2; + const step = size / divisions; + const halfSize = size / 2; + const vertices = [], colors = []; + for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) { + vertices.push(-halfSize, 0, k, halfSize, 0, k); + vertices.push(k, 0, -halfSize, k, 0, halfSize); + const color = i === center ? color1 : color2; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + color.toArray(colors, j); + j += 3; + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "GridHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +var PolarGridHelper = class extends LineSegments { + constructor(radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 4473924, color2 = 8947848) { + color1 = new Color(color1); + color2 = new Color(color2); + const vertices = []; + const colors = []; + if (sectors > 1) { + for (let i = 0; i < sectors; i++) { + const v = i / sectors * (Math.PI * 2); + const x = Math.sin(v) * radius; + const z = Math.cos(v) * radius; + vertices.push(0, 0, 0); + vertices.push(x, 0, z); + const color = i & 1 ? color1 : color2; + colors.push(color.r, color.g, color.b); + colors.push(color.r, color.g, color.b); + } + } + for (let i = 0; i < rings; i++) { + const color = i & 1 ? color1 : color2; + const r = radius - radius / rings * i; + for (let j = 0; j < divisions; j++) { + let v = j / divisions * (Math.PI * 2); + let x = Math.sin(v) * r; + let z = Math.cos(v) * r; + vertices.push(x, 0, z); + colors.push(color.r, color.g, color.b); + v = (j + 1) / divisions * (Math.PI * 2); + x = Math.sin(v) * r; + z = Math.cos(v) * r; + vertices.push(x, 0, z); + colors.push(color.r, color.g, color.b); + } + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "PolarGridHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +var _v1 = new Vector3(); +var _v2 = new Vector3(); +var _v3 = new Vector3(); +var DirectionalLightHelper = class extends Object3D { + constructor(light, size, color) { + super(); + this.light = light; + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + this.color = color; + this.type = "DirectionalLightHelper"; + if (size === void 0) size = 1; + let geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([ + -size, + size, + 0, + size, + size, + 0, + size, + -size, + 0, + -size, + -size, + 0, + -size, + size, + 0 + ], 3)); + const material = new LineBasicMaterial({ fog: false, toneMapped: false }); + this.lightPlane = new Line(geometry, material); + this.add(this.lightPlane); + geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); + this.targetLine = new Line(geometry, material); + this.add(this.targetLine); + this.update(); + } + dispose() { + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + } + update() { + this.light.updateWorldMatrix(true, false); + this.light.target.updateWorldMatrix(true, false); + _v1.setFromMatrixPosition(this.light.matrixWorld); + _v2.setFromMatrixPosition(this.light.target.matrixWorld); + _v3.subVectors(_v2, _v1); + this.lightPlane.lookAt(_v2); + if (this.color !== void 0) { + this.lightPlane.material.color.set(this.color); + this.targetLine.material.color.set(this.color); + } else { + this.lightPlane.material.color.copy(this.light.color); + this.targetLine.material.color.copy(this.light.color); + } + this.targetLine.lookAt(_v2); + this.targetLine.scale.z = _v3.length(); + } +}; +var _vector = new Vector3(); +var _camera = new Camera(); +var CameraHelper = class extends LineSegments { + constructor(camera) { + const geometry = new BufferGeometry(); + const material = new LineBasicMaterial({ color: 16777215, vertexColors: true, toneMapped: false }); + const vertices = []; + const colors = []; + const pointMap = {}; + addLine("n1", "n2"); + addLine("n2", "n4"); + addLine("n4", "n3"); + addLine("n3", "n1"); + addLine("f1", "f2"); + addLine("f2", "f4"); + addLine("f4", "f3"); + addLine("f3", "f1"); + addLine("n1", "f1"); + addLine("n2", "f2"); + addLine("n3", "f3"); + addLine("n4", "f4"); + addLine("p", "n1"); + addLine("p", "n2"); + addLine("p", "n3"); + addLine("p", "n4"); + addLine("u1", "u2"); + addLine("u2", "u3"); + addLine("u3", "u1"); + addLine("c", "t"); + addLine("p", "c"); + addLine("cn1", "cn2"); + addLine("cn3", "cn4"); + addLine("cf1", "cf2"); + addLine("cf3", "cf4"); + function addLine(a, b) { + addPoint(a); + addPoint(b); + } + function addPoint(id) { + vertices.push(0, 0, 0); + colors.push(0, 0, 0); + if (pointMap[id] === void 0) { + pointMap[id] = []; + } + pointMap[id].push(vertices.length / 3 - 1); + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + super(geometry, material); + this.type = "CameraHelper"; + this.camera = camera; + if (this.camera.updateProjectionMatrix) this.camera.updateProjectionMatrix(); + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + this.pointMap = pointMap; + this.update(); + const colorFrustum = new Color(16755200); + const colorCone = new Color(16711680); + const colorUp = new Color(43775); + const colorTarget = new Color(16777215); + const colorCross = new Color(3355443); + this.setColors(colorFrustum, colorCone, colorUp, colorTarget, colorCross); + } + setColors(frustum, cone, up, target, cross) { + const geometry = this.geometry; + const colorAttribute = geometry.getAttribute("color"); + colorAttribute.setXYZ(0, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(1, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(2, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(3, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(4, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(5, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(6, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(7, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(8, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(9, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(10, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(11, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(12, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(13, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(14, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(15, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(16, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(17, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(18, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(19, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(20, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(21, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(22, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(23, frustum.r, frustum.g, frustum.b); + colorAttribute.setXYZ(24, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(25, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(26, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(27, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(28, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(29, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(30, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(31, cone.r, cone.g, cone.b); + colorAttribute.setXYZ(32, up.r, up.g, up.b); + colorAttribute.setXYZ(33, up.r, up.g, up.b); + colorAttribute.setXYZ(34, up.r, up.g, up.b); + colorAttribute.setXYZ(35, up.r, up.g, up.b); + colorAttribute.setXYZ(36, up.r, up.g, up.b); + colorAttribute.setXYZ(37, up.r, up.g, up.b); + colorAttribute.setXYZ(38, target.r, target.g, target.b); + colorAttribute.setXYZ(39, target.r, target.g, target.b); + colorAttribute.setXYZ(40, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(41, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(42, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(43, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(44, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(45, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(46, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(47, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(48, cross.r, cross.g, cross.b); + colorAttribute.setXYZ(49, cross.r, cross.g, cross.b); + colorAttribute.needsUpdate = true; + } + update() { + const geometry = this.geometry; + const pointMap = this.pointMap; + const w = 1, h = 1; + _camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); + setPoint("c", pointMap, geometry, _camera, 0, 0, -1); + setPoint("t", pointMap, geometry, _camera, 0, 0, 1); + setPoint("n1", pointMap, geometry, _camera, -w, -h, -1); + setPoint("n2", pointMap, geometry, _camera, w, -h, -1); + setPoint("n3", pointMap, geometry, _camera, -w, h, -1); + setPoint("n4", pointMap, geometry, _camera, w, h, -1); + setPoint("f1", pointMap, geometry, _camera, -w, -h, 1); + setPoint("f2", pointMap, geometry, _camera, w, -h, 1); + setPoint("f3", pointMap, geometry, _camera, -w, h, 1); + setPoint("f4", pointMap, geometry, _camera, w, h, 1); + setPoint("u1", pointMap, geometry, _camera, w * 0.7, h * 1.1, -1); + setPoint("u2", pointMap, geometry, _camera, -w * 0.7, h * 1.1, -1); + setPoint("u3", pointMap, geometry, _camera, 0, h * 2, -1); + setPoint("cf1", pointMap, geometry, _camera, -w, 0, 1); + setPoint("cf2", pointMap, geometry, _camera, w, 0, 1); + setPoint("cf3", pointMap, geometry, _camera, 0, -h, 1); + setPoint("cf4", pointMap, geometry, _camera, 0, h, 1); + setPoint("cn1", pointMap, geometry, _camera, -w, 0, -1); + setPoint("cn2", pointMap, geometry, _camera, w, 0, -1); + setPoint("cn3", pointMap, geometry, _camera, 0, -h, -1); + setPoint("cn4", pointMap, geometry, _camera, 0, h, -1); + geometry.getAttribute("position").needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +function setPoint(point, pointMap, geometry, camera, x, y, z) { + _vector.set(x, y, z).unproject(camera); + const points = pointMap[point]; + if (points !== void 0) { + const position = geometry.getAttribute("position"); + for (let i = 0, l = points.length; i < l; i++) { + position.setXYZ(points[i], _vector.x, _vector.y, _vector.z); + } + } +} +var _box = new Box3(); +var BoxHelper = class extends LineSegments { + constructor(object, color = 16776960) { + const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); + const positions = new Float32Array(8 * 3); + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute("position", new BufferAttribute(positions, 3)); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.type = "BoxHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update(object) { + if (object !== void 0) { + console.warn("THREE.BoxHelper: .update() has no longer arguments."); + } + if (this.object !== void 0) { + _box.setFromObject(this.object); + } + if (_box.isEmpty()) return; + const min = _box.min; + const max = _box.max; + const position = this.geometry.attributes.position; + const array = position.array; + array[0] = max.x; + array[1] = max.y; + array[2] = max.z; + array[3] = min.x; + array[4] = max.y; + array[5] = max.z; + array[6] = min.x; + array[7] = min.y; + array[8] = max.z; + array[9] = max.x; + array[10] = min.y; + array[11] = max.z; + array[12] = max.x; + array[13] = max.y; + array[14] = min.z; + array[15] = min.x; + array[16] = max.y; + array[17] = min.z; + array[18] = min.x; + array[19] = min.y; + array[20] = min.z; + array[21] = max.x; + array[22] = min.y; + array[23] = min.z; + position.needsUpdate = true; + this.geometry.computeBoundingSphere(); + } + setFromObject(object) { + this.object = object; + this.update(); + return this; + } + copy(source, recursive) { + super.copy(source, recursive); + this.object = source.object; + return this; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +var Box3Helper = class extends LineSegments { + constructor(box, color = 16776960) { + const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); + const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]; + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.box = box; + this.type = "Box3Helper"; + this.geometry.computeBoundingSphere(); + } + updateMatrixWorld(force) { + const box = this.box; + if (box.isEmpty()) return; + box.getCenter(this.position); + box.getSize(this.scale); + this.scale.multiplyScalar(0.5); + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +var PlaneHelper = class extends Line { + constructor(plane, size = 1, hex = 16776960) { + const color = hex; + const positions = [1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.computeBoundingSphere(); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.type = "PlaneHelper"; + this.plane = plane; + this.size = size; + const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; + const geometry2 = new BufferGeometry(); + geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); + geometry2.computeBoundingSphere(); + this.add(new Mesh(geometry2, new MeshBasicMaterial({ color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false }))); + } + updateMatrixWorld(force) { + this.position.set(0, 0, 0); + this.scale.set(0.5 * this.size, 0.5 * this.size, 1); + this.lookAt(this.plane.normal); + this.translateZ(-this.plane.constant); + super.updateMatrixWorld(force); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } +}; +var _axis = new Vector3(); +var _lineGeometry; +var _coneGeometry; +var ArrowHelper = class extends Object3D { + // dir is assumed to be normalized + constructor(dir = new Vector3(0, 0, 1), origin = new Vector3(0, 0, 0), length = 1, color = 16776960, headLength = length * 0.2, headWidth = headLength * 0.2) { + super(); + this.type = "ArrowHelper"; + if (_lineGeometry === void 0) { + _lineGeometry = new BufferGeometry(); + _lineGeometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3)); + _coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1); + _coneGeometry.translate(0, -0.5, 0); + } + this.position.copy(origin); + this.line = new Line(_lineGeometry, new LineBasicMaterial({ color, toneMapped: false })); + this.line.matrixAutoUpdate = false; + this.add(this.line); + this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ color, toneMapped: false })); + this.cone.matrixAutoUpdate = false; + this.add(this.cone); + this.setDirection(dir); + this.setLength(length, headLength, headWidth); + } + setDirection(dir) { + if (dir.y > 0.99999) { + this.quaternion.set(0, 0, 0, 1); + } else if (dir.y < -0.99999) { + this.quaternion.set(1, 0, 0, 0); + } else { + _axis.set(dir.z, 0, -dir.x).normalize(); + const radians = Math.acos(dir.y); + this.quaternion.setFromAxisAngle(_axis, radians); + } + } + setLength(length, headLength = length * 0.2, headWidth = headLength * 0.2) { + this.line.scale.set(1, Math.max(1e-4, length - headLength), 1); + this.line.updateMatrix(); + this.cone.scale.set(headWidth, headLength, headWidth); + this.cone.position.y = length; + this.cone.updateMatrix(); + } + setColor(color) { + this.line.material.color.set(color); + this.cone.material.color.set(color); + } + copy(source) { + super.copy(source, false); + this.line.copy(source.line); + this.cone.copy(source.cone); + return this; + } + dispose() { + this.line.geometry.dispose(); + this.line.material.dispose(); + this.cone.geometry.dispose(); + this.cone.material.dispose(); + } +}; +var AxesHelper = class extends LineSegments { + constructor(size = 1) { + const vertices = [ + 0, + 0, + 0, + size, + 0, + 0, + 0, + 0, + 0, + 0, + size, + 0, + 0, + 0, + 0, + 0, + 0, + size + ]; + const colors = [ + 1, + 0, + 0, + 1, + 0.6, + 0, + 0, + 1, + 0, + 0.6, + 1, + 0, + 0, + 0, + 1, + 0, + 0.6, + 1 + ]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); + super(geometry, material); + this.type = "AxesHelper"; + } + setColors(xAxisColor, yAxisColor, zAxisColor) { + const color = new Color(); + const array = this.geometry.attributes.color.array; + color.set(xAxisColor); + color.toArray(array, 0); + color.toArray(array, 3); + color.set(yAxisColor); + color.toArray(array, 6); + color.toArray(array, 9); + color.set(zAxisColor); + color.toArray(array, 12); + color.toArray(array, 15); + this.geometry.attributes.color.needsUpdate = true; + return this; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +var ShapePath = class { + constructor() { + this.type = "ShapePath"; + this.color = new Color(); + this.subPaths = []; + this.currentPath = null; + } + moveTo(x, y) { + this.currentPath = new Path(); + this.subPaths.push(this.currentPath); + this.currentPath.moveTo(x, y); + return this; + } + lineTo(x, y) { + this.currentPath.lineTo(x, y); + return this; + } + quadraticCurveTo(aCPx, aCPy, aX, aY) { + this.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY); + return this; + } + bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { + this.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY); + return this; + } + splineThru(pts) { + this.currentPath.splineThru(pts); + return this; + } + toShapes(isCCW) { + function toShapesNoHoles(inSubpaths) { + const shapes2 = []; + for (let i = 0, l = inSubpaths.length; i < l; i++) { + const tmpPath2 = inSubpaths[i]; + const tmpShape2 = new Shape(); + tmpShape2.curves = tmpPath2.curves; + shapes2.push(tmpShape2); + } + return shapes2; + } + function isPointInsidePolygon(inPt, inPolygon) { + const polyLen = inPolygon.length; + let inside = false; + for (let p = polyLen - 1, q = 0; q < polyLen; p = q++) { + let edgeLowPt = inPolygon[p]; + let edgeHighPt = inPolygon[q]; + let edgeDx = edgeHighPt.x - edgeLowPt.x; + let edgeDy = edgeHighPt.y - edgeLowPt.y; + if (Math.abs(edgeDy) > Number.EPSILON) { + if (edgeDy < 0) { + edgeLowPt = inPolygon[q]; + edgeDx = -edgeDx; + edgeHighPt = inPolygon[p]; + edgeDy = -edgeDy; + } + if (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue; + if (inPt.y === edgeLowPt.y) { + if (inPt.x === edgeLowPt.x) return true; + } else { + const perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y); + if (perpEdge === 0) return true; + if (perpEdge < 0) continue; + inside = !inside; + } + } else { + if (inPt.y !== edgeLowPt.y) continue; + if (edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x || edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x) return true; + } + } + return inside; + } + const isClockWise = ShapeUtils.isClockWise; + const subPaths = this.subPaths; + if (subPaths.length === 0) return []; + let solid, tmpPath, tmpShape; + const shapes = []; + if (subPaths.length === 1) { + tmpPath = subPaths[0]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push(tmpShape); + return shapes; + } + let holesFirst = !isClockWise(subPaths[0].getPoints()); + holesFirst = isCCW ? !holesFirst : holesFirst; + const betterShapeHoles = []; + const newShapes = []; + let newShapeHoles = []; + let mainIdx = 0; + let tmpPoints; + newShapes[mainIdx] = void 0; + newShapeHoles[mainIdx] = []; + for (let i = 0, l = subPaths.length; i < l; i++) { + tmpPath = subPaths[i]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise(tmpPoints); + solid = isCCW ? !solid : solid; + if (solid) { + if (!holesFirst && newShapes[mainIdx]) mainIdx++; + newShapes[mainIdx] = { s: new Shape(), p: tmpPoints }; + newShapes[mainIdx].s.curves = tmpPath.curves; + if (holesFirst) mainIdx++; + newShapeHoles[mainIdx] = []; + } else { + newShapeHoles[mainIdx].push({ h: tmpPath, p: tmpPoints[0] }); + } + } + if (!newShapes[0]) return toShapesNoHoles(subPaths); + if (newShapes.length > 1) { + let ambiguous = false; + let toChange = 0; + for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { + betterShapeHoles[sIdx] = []; + } + for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { + const sho = newShapeHoles[sIdx]; + for (let hIdx = 0; hIdx < sho.length; hIdx++) { + const ho = sho[hIdx]; + let hole_unassigned = true; + for (let s2Idx = 0; s2Idx < newShapes.length; s2Idx++) { + if (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) { + if (sIdx !== s2Idx) toChange++; + if (hole_unassigned) { + hole_unassigned = false; + betterShapeHoles[s2Idx].push(ho); + } else { + ambiguous = true; + } + } + } + if (hole_unassigned) { + betterShapeHoles[sIdx].push(ho); + } + } + } + if (toChange > 0 && ambiguous === false) { + newShapeHoles = betterShapeHoles; + } + } + let tmpHoles; + for (let i = 0, il = newShapes.length; i < il; i++) { + tmpShape = newShapes[i].s; + shapes.push(tmpShape); + tmpHoles = newShapeHoles[i]; + for (let j = 0, jl = tmpHoles.length; j < jl; j++) { + tmpShape.holes.push(tmpHoles[j].h); + } + } + return shapes; + } +}; +var WebGLMultipleRenderTargets = class extends WebGLRenderTarget { + // @deprecated, r162 + constructor(width = 1, height = 1, count = 1, options = {}) { + console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'); + super(width, height, { ...options, count }); + this.isWebGLMultipleRenderTargets = true; + } + get texture() { + return this.textures; + } +}; +if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: { + revision: REVISION + } })); +} +if (typeof window !== "undefined") { + if (window.__THREE__) { + console.warn("WARNING: Multiple instances of Three.js being imported."); + } else { + window.__THREE__ = REVISION; + } +} + +export { + __export, + REVISION, + MOUSE, + TOUCH, + CullFaceNone, + CullFaceBack, + CullFaceFront, + CullFaceFrontBack, + BasicShadowMap, + PCFShadowMap, + PCFSoftShadowMap, + VSMShadowMap, + FrontSide, + BackSide, + DoubleSide, + NoBlending, + NormalBlending, + AdditiveBlending, + SubtractiveBlending, + MultiplyBlending, + CustomBlending, + AddEquation, + SubtractEquation, + ReverseSubtractEquation, + MinEquation, + MaxEquation, + ZeroFactor, + OneFactor, + SrcColorFactor, + OneMinusSrcColorFactor, + SrcAlphaFactor, + OneMinusSrcAlphaFactor, + DstAlphaFactor, + OneMinusDstAlphaFactor, + DstColorFactor, + OneMinusDstColorFactor, + SrcAlphaSaturateFactor, + ConstantColorFactor, + OneMinusConstantColorFactor, + ConstantAlphaFactor, + OneMinusConstantAlphaFactor, + NeverDepth, + AlwaysDepth, + LessDepth, + LessEqualDepth, + EqualDepth, + GreaterEqualDepth, + GreaterDepth, + NotEqualDepth, + MultiplyOperation, + MixOperation, + AddOperation, + NoToneMapping, + LinearToneMapping, + ReinhardToneMapping, + CineonToneMapping, + ACESFilmicToneMapping, + CustomToneMapping, + AgXToneMapping, + NeutralToneMapping, + AttachedBindMode, + DetachedBindMode, + UVMapping, + CubeReflectionMapping, + CubeRefractionMapping, + EquirectangularReflectionMapping, + EquirectangularRefractionMapping, + CubeUVReflectionMapping, + RepeatWrapping, + ClampToEdgeWrapping, + MirroredRepeatWrapping, + NearestFilter, + NearestMipmapNearestFilter, + NearestMipMapNearestFilter, + NearestMipmapLinearFilter, + NearestMipMapLinearFilter, + LinearFilter, + LinearMipmapNearestFilter, + LinearMipMapNearestFilter, + LinearMipmapLinearFilter, + LinearMipMapLinearFilter, + UnsignedByteType, + ByteType, + ShortType, + UnsignedShortType, + IntType, + UnsignedIntType, + FloatType, + HalfFloatType, + UnsignedShort4444Type, + UnsignedShort5551Type, + UnsignedInt248Type, + UnsignedInt5999Type, + AlphaFormat, + RGBFormat, + RGBAFormat, + LuminanceFormat, + LuminanceAlphaFormat, + DepthFormat, + DepthStencilFormat, + RedFormat, + RedIntegerFormat, + RGFormat, + RGIntegerFormat, + RGBIntegerFormat, + RGBAIntegerFormat, + RGB_S3TC_DXT1_Format, + RGBA_S3TC_DXT1_Format, + RGBA_S3TC_DXT3_Format, + RGBA_S3TC_DXT5_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_PVRTC_2BPPV1_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_PVRTC_2BPPV1_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGBA_ETC2_EAC_Format, + RGBA_ASTC_4x4_Format, + RGBA_ASTC_5x4_Format, + RGBA_ASTC_5x5_Format, + RGBA_ASTC_6x5_Format, + RGBA_ASTC_6x6_Format, + RGBA_ASTC_8x5_Format, + RGBA_ASTC_8x6_Format, + RGBA_ASTC_8x8_Format, + RGBA_ASTC_10x5_Format, + RGBA_ASTC_10x6_Format, + RGBA_ASTC_10x8_Format, + RGBA_ASTC_10x10_Format, + RGBA_ASTC_12x10_Format, + RGBA_ASTC_12x12_Format, + RGBA_BPTC_Format, + RGB_BPTC_SIGNED_Format, + RGB_BPTC_UNSIGNED_Format, + RED_RGTC1_Format, + SIGNED_RED_RGTC1_Format, + RED_GREEN_RGTC2_Format, + SIGNED_RED_GREEN_RGTC2_Format, + LoopOnce, + LoopRepeat, + LoopPingPong, + InterpolateDiscrete, + InterpolateLinear, + InterpolateSmooth, + ZeroCurvatureEnding, + ZeroSlopeEnding, + WrapAroundEnding, + NormalAnimationBlendMode, + AdditiveAnimationBlendMode, + TrianglesDrawMode, + TriangleStripDrawMode, + TriangleFanDrawMode, + BasicDepthPacking, + RGBADepthPacking, + RGBDepthPacking, + RGDepthPacking, + TangentSpaceNormalMap, + ObjectSpaceNormalMap, + NoColorSpace, + SRGBColorSpace, + LinearSRGBColorSpace, + DisplayP3ColorSpace, + LinearDisplayP3ColorSpace, + LinearTransfer, + SRGBTransfer, + Rec709Primaries, + P3Primaries, + ZeroStencilOp, + KeepStencilOp, + ReplaceStencilOp, + IncrementStencilOp, + DecrementStencilOp, + IncrementWrapStencilOp, + DecrementWrapStencilOp, + InvertStencilOp, + NeverStencilFunc, + LessStencilFunc, + EqualStencilFunc, + LessEqualStencilFunc, + GreaterStencilFunc, + NotEqualStencilFunc, + GreaterEqualStencilFunc, + AlwaysStencilFunc, + NeverCompare, + LessCompare, + EqualCompare, + LessEqualCompare, + GreaterCompare, + NotEqualCompare, + GreaterEqualCompare, + AlwaysCompare, + StaticDrawUsage, + DynamicDrawUsage, + StreamDrawUsage, + StaticReadUsage, + DynamicReadUsage, + StreamReadUsage, + StaticCopyUsage, + DynamicCopyUsage, + StreamCopyUsage, + GLSL1, + GLSL3, + WebGLCoordinateSystem, + WebGPUCoordinateSystem, + EventDispatcher, + MathUtils, + Vector2, + Matrix3, + createCanvasElement, + ColorManagement, + ImageUtils, + Source, + Texture, + Vector4, + RenderTarget, + WebGLRenderTarget, + DataArrayTexture, + WebGLArrayRenderTarget, + Data3DTexture, + WebGL3DRenderTarget, + Quaternion, + Vector3, + Box3, + Sphere, + Ray, + Matrix4, + Euler, + Layers, + Object3D, + Triangle, + Color, + Material, + MeshBasicMaterial, + DataUtils, + BufferAttribute, + Int8BufferAttribute, + Uint8BufferAttribute, + Uint8ClampedBufferAttribute, + Int16BufferAttribute, + Uint16BufferAttribute, + Int32BufferAttribute, + Uint32BufferAttribute, + Float16BufferAttribute, + Float32BufferAttribute, + BufferGeometry, + Mesh, + BoxGeometry, + UniformsUtils, + ShaderMaterial, + Camera, + PerspectiveCamera, + CubeCamera, + CubeTexture, + WebGLCubeRenderTarget, + Plane, + Frustum, + PlaneGeometry, + ShaderChunk, + UniformsLib, + ShaderLib, + OrthographicCamera, + PMREMGenerator, + DepthTexture, + MeshDepthMaterial, + MeshDistanceMaterial, + TextureUtils, + WebGLUtils, + ArrayCamera, + Group, + WebGLRenderer, + FogExp2, + Fog, + Scene, + InterleavedBuffer, + InterleavedBufferAttribute, + SpriteMaterial, + Sprite, + LOD, + SkinnedMesh, + Bone, + DataTexture, + Skeleton, + InstancedBufferAttribute, + InstancedMesh, + BatchedMesh, + LineBasicMaterial, + Line, + LineSegments, + LineLoop, + PointsMaterial, + Points, + VideoTexture, + FramebufferTexture, + CompressedTexture, + CompressedArrayTexture, + CompressedCubeTexture, + CanvasTexture, + Curve, + EllipseCurve, + ArcCurve, + CatmullRomCurve3, + CubicBezierCurve, + CubicBezierCurve3, + LineCurve, + LineCurve3, + QuadraticBezierCurve, + QuadraticBezierCurve3, + SplineCurve, + CurvePath, + Path, + LatheGeometry, + CapsuleGeometry, + CircleGeometry, + CylinderGeometry, + ConeGeometry, + PolyhedronGeometry, + DodecahedronGeometry, + EdgesGeometry, + Shape, + ShapeUtils, + ExtrudeGeometry, + IcosahedronGeometry, + OctahedronGeometry, + RingGeometry, + ShapeGeometry, + SphereGeometry, + TetrahedronGeometry, + TorusGeometry, + TorusKnotGeometry, + TubeGeometry, + WireframeGeometry, + ShadowMaterial, + RawShaderMaterial, + MeshStandardMaterial, + MeshPhysicalMaterial, + MeshPhongMaterial, + MeshToonMaterial, + MeshNormalMaterial, + MeshLambertMaterial, + MeshMatcapMaterial, + LineDashedMaterial, + AnimationUtils, + Interpolant, + CubicInterpolant, + LinearInterpolant, + DiscreteInterpolant, + KeyframeTrack, + BooleanKeyframeTrack, + ColorKeyframeTrack, + NumberKeyframeTrack, + QuaternionLinearInterpolant, + QuaternionKeyframeTrack, + StringKeyframeTrack, + VectorKeyframeTrack, + AnimationClip, + Cache, + LoadingManager, + DefaultLoadingManager, + Loader, + FileLoader, + AnimationLoader, + CompressedTextureLoader, + ImageLoader, + CubeTextureLoader, + DataTextureLoader, + TextureLoader, + Light, + HemisphereLight, + SpotLight, + PointLight, + DirectionalLight, + AmbientLight, + RectAreaLight, + SphericalHarmonics3, + LightProbe, + MaterialLoader, + LoaderUtils, + InstancedBufferGeometry, + BufferGeometryLoader, + ObjectLoader, + ImageBitmapLoader, + AudioContext, + AudioLoader, + StereoCamera, + Clock, + AudioListener, + Audio, + PositionalAudio, + AudioAnalyser, + PropertyMixer, + PropertyBinding, + AnimationObjectGroup, + AnimationAction, + AnimationMixer, + Uniform, + UniformsGroup, + InstancedInterleavedBuffer, + GLBufferAttribute, + Raycaster, + Spherical, + Cylindrical, + Matrix2, + Box2, + Line3, + SpotLightHelper, + SkeletonHelper, + PointLightHelper, + HemisphereLightHelper, + GridHelper, + PolarGridHelper, + DirectionalLightHelper, + CameraHelper, + BoxHelper, + Box3Helper, + PlaneHelper, + ArrowHelper, + AxesHelper, + ShapePath, + WebGLMultipleRenderTargets +}; +/*! Bundled license information: + +three/build/three.module.js: + (** + * @license + * Copyright 2010-2024 Three.js Authors + * SPDX-License-Identifier: MIT + *) +*/ +//# sourceMappingURL=chunk-33KXLYU5.js.map diff --git a/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js.map b/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js.map new file mode 100644 index 0000000..371ccb7 --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/chunk-33KXLYU5.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../three/build/three.module.js"], + "sourcesContent": ["/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '167';\n\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst ConstantColorFactor = 211;\nconst OneMinusConstantColorFactor = 212;\nconst ConstantAlphaFactor = 213;\nconst OneMinusConstantAlphaFactor = 214;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\nconst AgXToneMapping = 6;\nconst NeutralToneMapping = 7;\nconst AttachedBindMode = 'attached';\nconst DetachedBindMode = 'detached';\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst UnsignedInt5999Type = 35902;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RGB_BPTC_SIGNED_Format = 36494;\nconst RGB_BPTC_UNSIGNED_Format = 36495;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst RGBDepthPacking = 3202;\nconst RGDepthPacking = 3203;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\nconst LinearDisplayP3ColorSpace = 'display-p3-linear';\n\nconst LinearTransfer = 'linear';\nconst SRGBTransfer = 'srgb';\n\nconst Rec709Primaries = 'rec709';\nconst P3Primaries = 'p3';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst NeverCompare = 512;\nconst LessCompare = 513;\nconst EqualCompare = 514;\nconst LessEqualCompare = 515;\nconst GreaterCompare = 516;\nconst NotEqualCompare = 517;\nconst GreaterEqualCompare = 518;\nconst AlwaysCompare = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(\n\t0.8224621, 0.177538, 0.0,\n\t0.0331941, 0.9668058, 0.0,\n\t0.0170827, 0.0723974, 0.9105199,\n);\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(\n\t1.2249401, - 0.2249404, 0.0,\n\t- 0.0420569, 1.0420571, 0.0,\n\t- 0.0196376, - 0.0786361, 1.0982735\n);\n\n/**\n * Defines supported color spaces by transfer function and primaries,\n * and provides conversions to/from the Linear-sRGB reference space.\n */\nconst COLOR_SPACES = {\n\t[ LinearSRGBColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color,\n\t\tfromReference: ( color ) => color,\n\t},\n\t[ SRGBColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear(),\n\t\tfromReference: ( color ) => color.convertLinearToSRGB(),\n\t},\n\t[ LinearDisplayP3ColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),\n\t},\n\t[ DisplayP3ColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),\n\t},\n};\n\nconst SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\t_workingColorSpace: LinearSRGBColorSpace,\n\n\tget workingColorSpace() {\n\n\t\treturn this._workingColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tif ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {\n\n\t\t\tthrow new Error( `Unsupported working color space, \"${ colorSpace }\".` );\n\n\t\t}\n\n\t\tthis._workingColorSpace = colorSpace;\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;\n\t\tconst targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;\n\n\t\treturn targetFromReference( sourceToReference( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this._workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this._workingColorSpace );\n\n\t},\n\n\tgetPrimaries: function ( colorSpace ) {\n\n\t\treturn COLOR_SPACES[ colorSpace ].primaries;\n\n\t},\n\n\tgetTransfer: function ( colorSpace ) {\n\n\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\treturn COLOR_SPACES[ colorSpace ].transfer;\n\n\t},\n\n\tgetLuminanceCoefficients: function ( target, colorSpace = this._workingColorSpace ) {\n\n\t\treturn target.fromArray( COLOR_SPACES[ colorSpace ].luminanceCoefficients );\n\n\t},\n\n};\n\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\t\tthis.dataReady = true;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tthis.colorSpace = colorSpace;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass RenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1\n\t\t}, options );\n\n\t\tconst texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\ttexture.flipY = false;\n\t\ttexture.generateMipmaps = options.generateMipmaps;\n\t\ttexture.internalFormat = options.internalFormat;\n\n\t\tthis.textures = [];\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\tthis.depthBuffer = options.depthBuffer;\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\tthis.samples = options.samples;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass WebGLRenderTarget extends RenderTarget {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// sets this quaternion to a uniform random unit quaternnion\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$3.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$3 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$3, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$3 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.isSphere = true;\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$4.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$4.elements[ 0 ] *= invSX;\n\t\t_m1$4.elements[ 1 ] *= invSX;\n\t\t_m1$4.elements[ 2 ] *= invSX;\n\n\t\t_m1$4.elements[ 4 ] *= invSY;\n\t\t_m1$4.elements[ 5 ] *= invSY;\n\t\t_m1$4.elements[ 6 ] *= invSY;\n\n\t\t_m1$4.elements[ 8 ] *= invSZ;\n\t\t_m1$4.elements[ 9 ] *= invSZ;\n\t\t_m1$4.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$4 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$4 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$3 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nconst _childaddedEvent = { type: 'childadded', child: null };\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$3.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$3.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$3 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$3.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$3 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$3.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$3.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$3 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.visibility = this._visibility;\n\t\t\tobject.active = this._active;\n\t\t\tobject.bounds = this._bounds.map( bound => ( {\n\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\tboxMin: bound.box.min.toArray(),\n\t\t\t\tboxMax: bound.box.max.toArray(),\n\n\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\tsphereRadius: bound.sphere.radius,\n\t\t\t\tsphereCenter: bound.sphere.center.toArray()\n\t\t\t} ) );\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) object.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = {\n\t\t\t\t\tcenter: object.boundingSphere.center.toArray(),\n\t\t\t\t\tradius: object.boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = {\n\t\t\t\t\tmin: object.boundingBox.min.toArray(),\n\t\t\t\t\tmax: object.boundingBox.max.toArray()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$3 );\n\t\tconst dot02 = _v0$2.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$2.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nlet _materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\t\tthis.blendAlpha = 0;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {\n\n\t\tconsole.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {\n\n\t\tconsole.warn( 'Material: onBeforeRender() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1$2.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _normalA = /*@__PURE__*/ new Vector3();\nconst _normalB = /*@__PURE__*/ new Vector3();\nconst _normalC = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv1, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv1, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\tconsole.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.forceSinglePass = true;\n\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Copies the result into the target Vector2, where x is width and y is height.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\t\tthis.coordinateSystem = null;\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\t\tcameraPX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$5.center.set( 0, 0, 0 );\n\t\t_sphere$5.radius = 0.7071067811865476;\n\t\t_sphere$5.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute._updateRange; // @deprecated, r159\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 && updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t}\n\n\t\tif ( updateRanges.length !== 0 ) {\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\t// @deprecated, r159\n\t\tif ( updateRange.count !== - 1 ) {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec3 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n\\tvColor.xyz *= batchingColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"\\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\\n\\tvec3( 0.8224621, 0.177538, 0.0 ),\\n\\tvec3( 0.0331941, 0.9668058, 0.0 ),\\n\\tvec3( 0.0170827, 0.0723974, 0.9105199 )\\n);\\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.2249401, - 0.2249404, 0.0 ),\\n\\tvec3( - 0.0420569, 1.0420571, 0.0 ),\\n\\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\\n);\\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\\n}\\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\\n}\\nvec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\t\\n\\t\\tfloat lightToPositionLength = length( lightToPosition );\\n\\t\\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t\\n\\t\\t#else\\n\\t\\t\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _e1$1 = /*@__PURE__*/ new Euler();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\t_e1$1.copy( scene.backgroundRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1$1.x *= - 1; _e1$1.y *= - 1; _e1$1.z *= - 1;\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1$1.y *= - 1;\n\t\t\t\t_e1$1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) );\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ], counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported equirectangular image size is 64 x 32.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported cube size is 16 x 16.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\t\tconst n = this._lodPlanes.length;\n\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tconst array = geometry.morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.remove( array[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else if ( geometryPosition !== undefined ) {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = LessEqualCompare; // #28670\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\tconst encodingPrimaries = ColorManagement.getPrimaries( colorSpace );\n\n\tlet gamutMapping;\n\n\tif ( workingPrimaries === encodingPrimaries ) {\n\n\t\tgamutMapping = '';\n\n\t} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {\n\n\t\tgamutMapping = 'LinearDisplayP3ToLinearSRGB';\n\n\t} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {\n\n\t\tgamutMapping = 'LinearSRGBToLinearDisplayP3';\n\n\t}\n\n\tswitch ( colorSpace ) {\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase LinearDisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t\tcase SRGBColorSpace:\n\t\tcase DisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\treturn `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase AgXToneMapping:\n\t\t\ttoneMappingName = 'AgX';\n\t\t\tbreak;\n\n\t\tcase NeutralToneMapping:\n\t\t\ttoneMappingName = 'Neutral';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0$1 );\n\n\tconst r = _v0$1.x.toFixed( 4 );\n\tconst g = _v0$1.y.toFixed( 4 );\n\tconst b = _v0$1.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id$1 = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id$1 ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\tsupportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading === true,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 19 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1,\n\n\t\t\tnumLightProbes: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {}\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );\n\t\tconst fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null || toVSM === true || fromVSM === true ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\trenderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n\n\n/**\n * Given the width, height, format, and type of a texture. Determines how many\n * bytes must be used to represent the texture.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceAlphaFormat:\n\t\t\treturn width * height * 2;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\nconst TextureUtils = {\n\tcontain,\n\tcover,\n\tfill,\n\tgetByteLength\n};\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\tconsole.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\tconst isUseMultisampledRTT = useMultisampledRTT( renderTarget );\n\t\t\tif ( isUseMultisampledRTT ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\nclass WebXRDepthSensing {\n\n\tconstructor() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t\tthis.depthNear = 0;\n\t\tthis.depthFar = 0;\n\n\t}\n\n\tinit( renderer, depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst texProps = renderer.properties.get( texture );\n\t\t\ttexProps.__webglTexture = depthData.texture;\n\n\t\t\tif ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\t\tcameraXR.layers.enable( 1 );\n\t\tcameraXR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tcamera.near = depthSensing.depthNear;\n\t\t\t\tcamera.far = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t\tcameraL.near = _currentDepthNear;\n\t\t\t\tcameraL.far = _currentDepthFar;\n\t\t\t\tcameraR.near = _currentDepthNear;\n\t\t\t\tcameraR.far = _currentDepthFar;\n\n\t\t\t\tcameraL.updateProjectionMatrix();\n\t\t\t\tcameraR.updateProjectionMatrix();\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\n\t\t\t\tif ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( renderer, depthData, session.renderState );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _e1 = /*@__PURE__*/ new Euler();\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t_e1.copy( envMapRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1.y *= - 1;\n\t\t\t\t_e1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass WebGLRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t} = parameters;\n\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.shadowMap = shadowMap;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = targetFormat === RGBAIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RGIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RedIntegerFormat;\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = targetType === UnsignedByteType ||\n\t\t\t\t\t\ttargetType === UnsignedIntType ||\n\t\t\t\t\t\ttargetType === UnsignedShortType ||\n\t\t\t\t\t\ttargetType === UnsignedInt248Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort4444Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort5551Type;\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tcubeuvmaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( object._multiDrawInstances !== null ) {\n\n\t\t\t\t\trenderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\trenderStateStack.pop();\n\t\t\tcurrentRenderState = null;\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: 4,\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst object = renderItem.object;\n\t\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\t\tconst material = renderItem.material;\n\t\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );\n\t\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet useDefaultFramebuffer = true;\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\t\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound && useDefaultFramebuffer ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\t\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\t\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\n\t\t\t\t\t\t} finally {\n\n\t\t\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn buffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\t// support previous signature with position first\n\t\t\tif ( texture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );\n\n\t\t\t\tposition = arguments[ 0 ] || null;\n\t\t\t\ttexture = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with dstPosition first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );\n\n\t\t\t\tdstPosition = arguments[ 0 ] || null;\n\t\t\t\tsrcTexture = arguments[ 1 ];\n\t\t\t\tdstTexture = arguments[ 2 ];\n\t\t\t\tlevel = arguments[ 3 ] || 0;\n\t\t\t\tsrcRegion = null;\n\n\t\t\t}\n\n\t\t\tlet width, height, minX, minY;\n\t\t\tlet dstX, dstY;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\n\t\t\t} else {\n\n\t\t\t\twidth = srcTexture.image.width;\n\t\t\t\theight = srcTexture.image.height;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t\t// As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with source box first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );\n\n\t\t\t\tsrcRegion = arguments[ 0 ] || null;\n\t\t\t\tdstPosition = arguments[ 1 ] || null;\n\t\t\t\tsrcTexture = arguments[ 2 ];\n\t\t\t\tdstTexture = arguments[ 3 ];\n\t\t\t\tlevel = arguments[ 4 ] || 0;\n\n\t\t\t}\n\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.max.z - srcRegion.min.z;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.min.z;\n\n\t\t\t} else {\n\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tdepth = image.depth;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\t\tgl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\n\t}\n\n}\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\t\tthis.backgroundRotation = new Euler();\n\n\t\tthis.environmentIntensity = 1;\n\t\tthis.environmentRotation = new Euler();\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material;\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = AttachedBindMode;\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix$1 = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix$1;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\t\tthis.morphTexture = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$3 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( drawRange, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: - 1,\n\t\t\t\tcount: - 1,\n\t\t\t\tz: - 1,\n\t\t\t\tindex: - 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = drawRange.start;\n\t\titem.count = drawRange.count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _invMatrixWorld = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _projScreenMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// @TODO: SkinnedMesh support?\n// @TODO: geometry.groups support?\n// @TODO: geometry.drawRange support?\n// @TODO: geometry.morphAttributes support?\n// @TODO: Support uniform parameter per geometry\n// @TODO: Add an \"optimize\" function to pack geometry and remove data gaps\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\nclass BatchedMesh extends Mesh {\n\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\tthis.isBatchedMesh = true;\n\t\tthis.perObjectFrustumCulled = true;\n\t\tthis.sortObjects = true;\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per object\n\t\tthis._drawInfo = [];\n\n\t\t// geometry information\n\t\tthis._drawRanges = [];\n\t\tthis._reservedRanges = [];\n\t\tthis._bounds = [];\n\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tthis._geometryInitialized = false;\n\t\tthis._geometryCount = 0;\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\t\tthis._multiDrawInstances = null;\n\t\tthis._visibilityChanged = true;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxIndexCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst geometryCount = this._geometryCount;\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\taddInstance( geometryId ) {\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tthis._drawInfo.push( {\n\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\n\t\t} );\n\n\t\t// initialize the matrix\n\t\tconst drawId = this._drawInfo.length - 1;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = matricesTexture.image.data;\n\t\t_identityMatrix.toArray( matricesArray, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\treturn drawId;\n\n\t}\n\n\taddGeometry( geometry, vertexCount = - 1, indexCount = - 1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\t// get the necessary range fo the geometry\n\t\tconst reservedRange = {\n\t\t\tvertexStart: - 1,\n\t\t\tvertexCount: - 1,\n\t\t\tindexStart: - 1,\n\t\t\tindexCount: - 1,\n\t\t};\n\n\t\tlet lastRange = null;\n\t\tconst reservedRanges = this._reservedRanges;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst bounds = this._bounds;\n\t\tif ( this._geometryCount !== 0 ) {\n\n\t\t\tlastRange = reservedRanges[ reservedRanges.length - 1 ];\n\n\t\t}\n\n\t\tif ( vertexCount === - 1 ) {\n\n\t\t\treservedRange.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexCount = vertexCount;\n\n\t\t}\n\n\t\tif ( lastRange === null ) {\n\n\t\t\treservedRange.vertexStart = 0;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount;\n\n\t\t}\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tif ( indexCount\t=== - 1 ) {\n\n\t\t\t\treservedRange.indexCount = index.count;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexCount = indexCount;\n\n\t\t\t}\n\n\t\t\tif ( lastRange === null ) {\n\n\t\t\t\treservedRange.indexStart = 0;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexStart = lastRange.indexStart + lastRange.indexCount;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (\n\t\t\treservedRange.indexStart !== - 1 &&\n\t\t\treservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount ||\n\t\t\treservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tconst geometryId = this._geometryCount;\n\t\tthis._geometryCount ++;\n\n\t\t// add the reserved range and draw range objects\n\t\treservedRanges.push( reservedRange );\n\t\tdrawRanges.push( {\n\t\t\tstart: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart,\n\t\t\tcount: - 1\n\t\t} );\n\t\tbounds.push( {\n\t\t\tboxInitialized: false,\n\t\t\tbox: new Box3(),\n\n\t\t\tsphereInitialized: false,\n\t\t\tsphere: new Sphere()\n\t\t} );\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\treturn geometryId;\n\n\t}\n\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst reservedRange = this._reservedRanges[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > reservedRange.indexCount ||\n\t\t\tgeometry.attributes.position.count > reservedRange.vertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry over\n\t\tconst vertexStart = reservedRange.vertexStart;\n\t\tconst vertexCount = reservedRange.vertexCount;\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = vertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, vertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = reservedRange.indexStart;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedRange.indexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, reservedRange.indexCount );\n\n\t\t}\n\n\t\t// store the bounding boxes\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbound.box.copy( geometry.boundingBox );\n\t\t\tbound.boxInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.boxInitialized = false;\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbound.sphere.copy( geometry.boundingSphere );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.sphereInitialized = false;\n\n\t\t}\n\n\t\t// set drawRange count\n\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\tconst posAttr = geometry.getAttribute( 'position' );\n\t\tdrawRange.count = hasIndex ? srcIndex.count : posAttr.count;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn geometryId;\n\n\t}\n\n\t/*\n\tdeleteGeometry( geometryId ) {\n\n\t\t// TODO: delete geometry and associated instances\n\n\t}\n\t*/\n\n\t/*\n\tdeleteInstance( instanceId ) {\n\n\t\t// Note: User needs to call optimize() afterward to pack the data.\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].active = false;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\t*/\n\n\t// get bounding box and compute it if it doesn't exist\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst box = bound.box;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.boxInitialized === false ) {\n\n\t\t\tbox.makeEmpty();\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tbound.boxInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( box );\n\t\treturn target;\n\n\t}\n\n\t// get bounding sphere and compute it if it doesn't exist\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst sphere = bound.sphere;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.sphereInitialized === false ) {\n\n\t\t\tsphere.makeEmpty();\n\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( sphere );\n\t\treturn target;\n\n\t}\n\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\t// @TODO: Map geometryId to index of the arrays because\n\t\t// optimize() can make geometryId mismatch the index\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn matrix.fromArray( matricesArray, instanceId * 16 );\n\n\t}\n\n\tsetColorAt( instanceId, color ) {\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\t// @TODO: Map id to index of the arrays because\n\t\t// optimize() can make id mismatch the index\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcolor.toArray( colorsArray, instanceId * 4 );\n\t\tcolorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( instanceId, color ) {\n\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn color.fromArray( colorsArray, instanceId * 4 );\n\n\t}\n\n\tsetVisibleAt( instanceId, value ) {\n\n\t\t// if the geometry is out of range, not active, or visibility state\n\t\t// does not change then return early\n\t\tconst drawInfo = this._drawInfo;\n\t\tif (\n\t\t\tinstanceId >= drawInfo.length ||\n\t\t\tdrawInfo[ instanceId ].active === false ||\n\t\t\tdrawInfo[ instanceId ].visible === value\n\t\t) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].visible = value;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetVisibleAt( instanceId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn drawInfo[ instanceId ].visible;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! drawInfo[ i ].visible || ! drawInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t// ge the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._drawRanges = source._drawRanges.map( range => ( { ...range } ) );\n\t\tthis._reservedRanges = source._reservedRanges.map( range => ( { ...range } ) );\n\n\t\tthis._drawInfo = source._drawInfo.map( inf => ( { ...inf } ) );\n\t\tthis._bounds = source._bounds.map( bound => ( {\n\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\tbox: bound.box.clone(),\n\n\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\tsphere: bound.sphere.clone()\n\t\t} ) );\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._geometryCount = source._geometryCount;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tconst bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t_projScreenMatrix$2\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$2,\n\t\t\t\trenderer.coordinateSystem\n\t\t\t);\n\n\t\t}\n\n\t\tlet count = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_invMatrixWorld.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _invMatrixWorld );\n\t\t\t_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _invMatrixWorld );\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward );\n\t\t\t\t\t\t_renderList.push( drawRanges[ geometryId ], z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ count ] = item.start * bytesPerElement;\n\t\t\t\tmultiDrawCounts[ count ] = item.count;\n\t\t\t\tindirectArray[ count ] = item.index;\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst range = drawRanges[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ count ] = range.start * bytesPerElement;\n\t\t\t\t\t\tmultiDrawCounts[ count ] = range.count;\n\t\t\t\t\t\tindirectArray[ count ] = i;\n\t\t\t\t\t\tcount ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = count;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: a,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass CompressedCubeTexture extends CompressedTexture {\n\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\tthis.isCompressedCubeTexture = true;\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tlength: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( error );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\t\tif ( this.target !== undefined ) data.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.intensity = 1;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) { // @deprecated, r165\n\n\t\tconsole.warn( 'THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.' );\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._visibility = data.visibility;\n\t\t\t\tobject._active = data.active;\n\t\t\t\tobject._bounds = data.bounds.map( bound => {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tbox.min.fromArray( bound.boxMin );\n\t\t\t\t\tbox.max.fromArray( bound.boxMax );\n\n\t\t\t\t\tconst sphere = new Sphere();\n\t\t\t\t\tsphere.radius = bound.sphereRadius;\n\t\t\t\t\tsphere.center.fromArray( bound.sphereCenter );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\t\t\tbox: box,\n\n\t\t\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\t\t\tsphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\t\t\t\tif ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} ).catch( e => {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t} );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t\treturn imageBitmap;\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tCache.remove( url );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( url, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} ).catch( handleError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, - 1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.\n * theta (the azimuthal angle) is measured from the positive z-axis.\n */\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix2 {\n\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tconsole.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the \"count\" parameter to enable MRT.' );\n\n\t\tsuper( width, height, { ...options, count } );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures;\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, createCanvasElement };\n"], + "mappings": "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", + "names": ["tmp", "sign", "data", "tmp2", "indices", "intersects", "intersect", "width", "height", "depth", "fov", "aspect", "renderer", "scene", "alpha", "attributes", "precision", "x", "fill", "self", "_frustum", "drawBuffers", "scissor", "viewport", "_canvas", "texture", "i", "cameraL", "cameraR", "cameras", "cameraXR", "info", "chunkOffset", "_projScreenMatrix", "_vector3", "stencil", "drawCount", "materials", "currentRenderList", "parameters", "framebuffer", "l", "vertex", "detail", "radius", "azimuth", "px", "py", "bs", "contour", "p", "q", "json", "now", "shapes", "tmpPath", "tmpShape"] +} diff --git a/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js b/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js new file mode 100644 index 0000000..785fc46 --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js @@ -0,0 +1,3334 @@ +import { + AnimationClip, + Bone, + Box3, + BufferAttribute, + BufferGeometry, + ClampToEdgeWrapping, + Color, + ColorManagement, + DirectionalLight, + DoubleSide, + FileLoader, + Float32BufferAttribute, + FrontSide, + Group, + ImageBitmapLoader, + InstancedBufferAttribute, + InstancedMesh, + InterleavedBuffer, + InterleavedBufferAttribute, + Interpolant, + InterpolateDiscrete, + InterpolateLinear, + Line, + LineBasicMaterial, + LineLoop, + LineSegments, + LinearFilter, + LinearMipmapLinearFilter, + LinearMipmapNearestFilter, + LinearSRGBColorSpace, + Loader, + LoaderUtils, + Material, + MathUtils, + Matrix4, + Mesh, + MeshBasicMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MirroredRepeatWrapping, + NearestFilter, + NearestMipmapLinearFilter, + NearestMipmapNearestFilter, + NumberKeyframeTrack, + Object3D, + OrthographicCamera, + PerspectiveCamera, + PointLight, + Points, + PointsMaterial, + PropertyBinding, + Quaternion, + QuaternionKeyframeTrack, + RepeatWrapping, + SRGBColorSpace, + Skeleton, + SkinnedMesh, + Sphere, + SpotLight, + Texture, + TextureLoader, + TriangleFanDrawMode, + TriangleStripDrawMode, + TrianglesDrawMode, + Vector2, + Vector3, + VectorKeyframeTrack, + __export +} from "./chunk-33KXLYU5.js"; + +// node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +var BufferGeometryUtils_exports = {}; +__export(BufferGeometryUtils_exports, { + computeMikkTSpaceTangents: () => computeMikkTSpaceTangents, + computeMorphedAttributes: () => computeMorphedAttributes, + deepCloneAttribute: () => deepCloneAttribute, + deinterleaveAttribute: () => deinterleaveAttribute, + deinterleaveGeometry: () => deinterleaveGeometry, + estimateBytesUsed: () => estimateBytesUsed, + interleaveAttributes: () => interleaveAttributes, + mergeAttributes: () => mergeAttributes, + mergeGeometries: () => mergeGeometries, + mergeGroups: () => mergeGroups, + mergeVertices: () => mergeVertices, + toCreasedNormals: () => toCreasedNormals, + toTrianglesDrawMode: () => toTrianglesDrawMode +}); +function computeMikkTSpaceTangents(geometry, MikkTSpace, negateSign = true) { + if (!MikkTSpace || !MikkTSpace.isReady) { + throw new Error("BufferGeometryUtils: Initialized MikkTSpace library required."); + } + if (!geometry.hasAttribute("position") || !geometry.hasAttribute("normal") || !geometry.hasAttribute("uv")) { + throw new Error('BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.'); + } + function getAttributeArray(attribute) { + if (attribute.normalized || attribute.isInterleavedBufferAttribute) { + const dstArray = new Float32Array(attribute.count * attribute.itemSize); + for (let i = 0, j = 0; i < attribute.count; i++) { + dstArray[j++] = attribute.getX(i); + dstArray[j++] = attribute.getY(i); + if (attribute.itemSize > 2) { + dstArray[j++] = attribute.getZ(i); + } + } + return dstArray; + } + if (attribute.array instanceof Float32Array) { + return attribute.array; + } + return new Float32Array(attribute.array); + } + const _geometry = geometry.index ? geometry.toNonIndexed() : geometry; + const tangents = MikkTSpace.generateTangents( + getAttributeArray(_geometry.attributes.position), + getAttributeArray(_geometry.attributes.normal), + getAttributeArray(_geometry.attributes.uv) + ); + if (negateSign) { + for (let i = 3; i < tangents.length; i += 4) { + tangents[i] *= -1; + } + } + _geometry.setAttribute("tangent", new BufferAttribute(tangents, 4)); + if (geometry !== _geometry) { + geometry.copy(_geometry); + } + return geometry; +} +function mergeGeometries(geometries, useGroups = false) { + const isIndexed = geometries[0].index !== null; + const attributesUsed = new Set(Object.keys(geometries[0].attributes)); + const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes)); + const attributes = {}; + const morphAttributes = {}; + const morphTargetsRelative = geometries[0].morphTargetsRelative; + const mergedGeometry = new BufferGeometry(); + let offset = 0; + for (let i = 0; i < geometries.length; ++i) { + const geometry = geometries[i]; + let attributesCount = 0; + if (isIndexed !== (geometry.index !== null)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."); + return null; + } + for (const name in geometry.attributes) { + if (!attributesUsed.has(name)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + '. All geometries must have compatible attributes; make sure "' + name + '" attribute exists among all geometries, or in none of them.'); + return null; + } + if (attributes[name] === void 0) attributes[name] = []; + attributes[name].push(geometry.attributes[name]); + attributesCount++; + } + if (attributesCount !== attributesUsed.size) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". Make sure all geometries have the same number of attributes."); + return null; + } + if (morphTargetsRelative !== geometry.morphTargetsRelative) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphTargetsRelative must be consistent throughout all geometries."); + return null; + } + for (const name in geometry.morphAttributes) { + if (!morphAttributesUsed.has(name)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphAttributes must be consistent throughout all geometries."); + return null; + } + if (morphAttributes[name] === void 0) morphAttributes[name] = []; + morphAttributes[name].push(geometry.morphAttributes[name]); + } + if (useGroups) { + let count; + if (isIndexed) { + count = geometry.index.count; + } else if (geometry.attributes.position !== void 0) { + count = geometry.attributes.position.count; + } else { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". The geometry must have either an index or a position attribute"); + return null; + } + mergedGeometry.addGroup(offset, count, i); + offset += count; + } + } + if (isIndexed) { + let indexOffset = 0; + const mergedIndex = []; + for (let i = 0; i < geometries.length; ++i) { + const index = geometries[i].index; + for (let j = 0; j < index.count; ++j) { + mergedIndex.push(index.getX(j) + indexOffset); + } + indexOffset += geometries[i].attributes.position.count; + } + mergedGeometry.setIndex(mergedIndex); + } + for (const name in attributes) { + const mergedAttribute = mergeAttributes(attributes[name]); + if (!mergedAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name + " attribute."); + return null; + } + mergedGeometry.setAttribute(name, mergedAttribute); + } + for (const name in morphAttributes) { + const numMorphTargets = morphAttributes[name][0].length; + if (numMorphTargets === 0) break; + mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {}; + mergedGeometry.morphAttributes[name] = []; + for (let i = 0; i < numMorphTargets; ++i) { + const morphAttributesToMerge = []; + for (let j = 0; j < morphAttributes[name].length; ++j) { + morphAttributesToMerge.push(morphAttributes[name][j][i]); + } + const mergedMorphAttribute = mergeAttributes(morphAttributesToMerge); + if (!mergedMorphAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name + " morphAttribute."); + return null; + } + mergedGeometry.morphAttributes[name].push(mergedMorphAttribute); + } + } + return mergedGeometry; +} +function mergeAttributes(attributes) { + let TypedArray; + let itemSize; + let normalized; + let gpuType = -1; + let arrayLength = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."); + return null; + } + if (itemSize === void 0) itemSize = attribute.itemSize; + if (itemSize !== attribute.itemSize) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."); + return null; + } + if (normalized === void 0) normalized = attribute.normalized; + if (normalized !== attribute.normalized) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."); + return null; + } + if (gpuType === -1) gpuType = attribute.gpuType; + if (gpuType !== attribute.gpuType) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."); + return null; + } + arrayLength += attribute.count * itemSize; + } + const array = new TypedArray(arrayLength); + const result = new BufferAttribute(array, itemSize, normalized); + let offset = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (attribute.isInterleavedBufferAttribute) { + const tupleOffset = offset / itemSize; + for (let j = 0, l = attribute.count; j < l; j++) { + for (let c = 0; c < itemSize; c++) { + const value = attribute.getComponent(j, c); + result.setComponent(j + tupleOffset, c, value); + } + } + } else { + array.set(attribute.array, offset); + } + offset += attribute.count * itemSize; + } + if (gpuType !== void 0) { + result.gpuType = gpuType; + } + return result; +} +function deepCloneAttribute(attribute) { + if (attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute) { + return deinterleaveAttribute(attribute); + } + if (attribute.isInstancedBufferAttribute) { + return new InstancedBufferAttribute().copy(attribute); + } + return new BufferAttribute().copy(attribute); +} +function interleaveAttributes(attributes) { + let TypedArray; + let arrayLength = 0; + let stride = 0; + for (let i = 0, l = attributes.length; i < l; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("AttributeBuffers of different types cannot be interleaved"); + return null; + } + arrayLength += attribute.array.length; + stride += attribute.itemSize; + } + const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride); + let offset = 0; + const res = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let j = 0, l = attributes.length; j < l; j++) { + const attribute = attributes[j]; + const itemSize = attribute.itemSize; + const count = attribute.count; + const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized); + res.push(iba); + offset += itemSize; + for (let c = 0; c < count; c++) { + for (let k = 0; k < itemSize; k++) { + iba[setters[k]](c, attribute[getters[k]](c)); + } + } + } + return res; +} +function deinterleaveAttribute(attribute) { + const cons = attribute.data.array.constructor; + const count = attribute.count; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + const array = new cons(count * itemSize); + let newAttribute; + if (attribute.isInstancedInterleavedBufferAttribute) { + newAttribute = new InstancedBufferAttribute(array, itemSize, normalized, attribute.meshPerAttribute); + } else { + newAttribute = new BufferAttribute(array, itemSize, normalized); + } + for (let i = 0; i < count; i++) { + newAttribute.setX(i, attribute.getX(i)); + if (itemSize >= 2) { + newAttribute.setY(i, attribute.getY(i)); + } + if (itemSize >= 3) { + newAttribute.setZ(i, attribute.getZ(i)); + } + if (itemSize >= 4) { + newAttribute.setW(i, attribute.getW(i)); + } + } + return newAttribute; +} +function deinterleaveGeometry(geometry) { + const attributes = geometry.attributes; + const morphTargets = geometry.morphTargets; + const attrMap = /* @__PURE__ */ new Map(); + for (const key in attributes) { + const attr = attributes[key]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + attributes[key] = attrMap.get(attr); + } + } + for (const key in morphTargets) { + const attr = morphTargets[key]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + morphTargets[key] = attrMap.get(attr); + } + } +} +function estimateBytesUsed(geometry) { + let mem = 0; + for (const name in geometry.attributes) { + const attr = geometry.getAttribute(name); + mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT; + } + const indices = geometry.getIndex(); + mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0; + return mem; +} +function mergeVertices(geometry, tolerance = 1e-4) { + tolerance = Math.max(tolerance, Number.EPSILON); + const hashToIndex = {}; + const indices = geometry.getIndex(); + const positions = geometry.getAttribute("position"); + const vertexCount = indices ? indices.count : positions.count; + let nextIndex = 0; + const attributeNames = Object.keys(geometry.attributes); + const tmpAttributes = {}; + const tmpMorphAttributes = {}; + const newIndices = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let i = 0, l = attributeNames.length; i < l; i++) { + const name = attributeNames[i]; + const attr = geometry.attributes[name]; + tmpAttributes[name] = new attr.constructor( + new attr.array.constructor(attr.count * attr.itemSize), + attr.itemSize, + attr.normalized + ); + const morphAttributes = geometry.morphAttributes[name]; + if (morphAttributes) { + if (!tmpMorphAttributes[name]) tmpMorphAttributes[name] = []; + morphAttributes.forEach((morphAttr, i2) => { + const array = new morphAttr.array.constructor(morphAttr.count * morphAttr.itemSize); + tmpMorphAttributes[name][i2] = new morphAttr.constructor(array, morphAttr.itemSize, morphAttr.normalized); + }); + } + } + const halfTolerance = tolerance * 0.5; + const exponent = Math.log10(1 / tolerance); + const hashMultiplier = Math.pow(10, exponent); + const hashAdditive = halfTolerance * hashMultiplier; + for (let i = 0; i < vertexCount; i++) { + const index = indices ? indices.getX(i) : i; + let hash = ""; + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const itemSize = attribute.itemSize; + for (let k = 0; k < itemSize; k++) { + hash += `${~~(attribute[getters[k]](index) * hashMultiplier + hashAdditive)},`; + } + } + if (hash in hashToIndex) { + newIndices.push(hashToIndex[hash]); + } else { + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const morphAttributes = geometry.morphAttributes[name]; + const itemSize = attribute.itemSize; + const newArray = tmpAttributes[name]; + const newMorphArrays = tmpMorphAttributes[name]; + for (let k = 0; k < itemSize; k++) { + const getterFunc = getters[k]; + const setterFunc = setters[k]; + newArray[setterFunc](nextIndex, attribute[getterFunc](index)); + if (morphAttributes) { + for (let m = 0, ml = morphAttributes.length; m < ml; m++) { + newMorphArrays[m][setterFunc](nextIndex, morphAttributes[m][getterFunc](index)); + } + } + } + } + hashToIndex[hash] = nextIndex; + newIndices.push(nextIndex); + nextIndex++; + } + } + const result = geometry.clone(); + for (const name in geometry.attributes) { + const tmpAttribute = tmpAttributes[name]; + result.setAttribute(name, new tmpAttribute.constructor( + tmpAttribute.array.slice(0, nextIndex * tmpAttribute.itemSize), + tmpAttribute.itemSize, + tmpAttribute.normalized + )); + if (!(name in tmpMorphAttributes)) continue; + for (let j = 0; j < tmpMorphAttributes[name].length; j++) { + const tmpMorphAttribute = tmpMorphAttributes[name][j]; + result.morphAttributes[name][j] = new tmpMorphAttribute.constructor( + tmpMorphAttribute.array.slice(0, nextIndex * tmpMorphAttribute.itemSize), + tmpMorphAttribute.itemSize, + tmpMorphAttribute.normalized + ); + } + } + result.setIndex(newIndices); + return result; +} +function toTrianglesDrawMode(geometry, drawMode) { + if (drawMode === TrianglesDrawMode) { + console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); + return geometry; + } + if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) { + let index = geometry.getIndex(); + if (index === null) { + const indices = []; + const position = geometry.getAttribute("position"); + if (position !== void 0) { + for (let i = 0; i < position.count; i++) { + indices.push(i); + } + geometry.setIndex(indices); + index = geometry.getIndex(); + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); + return geometry; + } + } + const numberOfTriangles = index.count - 2; + const newIndices = []; + if (drawMode === TriangleFanDrawMode) { + for (let i = 1; i <= numberOfTriangles; i++) { + newIndices.push(index.getX(0)); + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + } + } else { + for (let i = 0; i < numberOfTriangles; i++) { + if (i % 2 === 0) { + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i + 2)); + } else { + newIndices.push(index.getX(i + 2)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i)); + } + } + } + if (newIndices.length / 3 !== numberOfTriangles) { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + } + const newGeometry = geometry.clone(); + newGeometry.setIndex(newIndices); + newGeometry.clearGroups(); + return newGeometry; + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); + return geometry; + } +} +function computeMorphedAttributes(object) { + const _vA = new Vector3(); + const _vB = new Vector3(); + const _vC = new Vector3(); + const _tempA = new Vector3(); + const _tempB = new Vector3(); + const _tempC = new Vector3(); + const _morphA = new Vector3(); + const _morphB = new Vector3(); + const _morphC = new Vector3(); + function _calculateMorphedAttributeData(object2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) { + _vA.fromBufferAttribute(attribute, a2); + _vB.fromBufferAttribute(attribute, b2); + _vC.fromBufferAttribute(attribute, c2); + const morphInfluences = object2.morphTargetInfluences; + if (morphAttribute && morphInfluences) { + _morphA.set(0, 0, 0); + _morphB.set(0, 0, 0); + _morphC.set(0, 0, 0); + for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) { + const influence = morphInfluences[i2]; + const morph = morphAttribute[i2]; + if (influence === 0) continue; + _tempA.fromBufferAttribute(morph, a2); + _tempB.fromBufferAttribute(morph, b2); + _tempC.fromBufferAttribute(morph, c2); + if (morphTargetsRelative2) { + _morphA.addScaledVector(_tempA, influence); + _morphB.addScaledVector(_tempB, influence); + _morphC.addScaledVector(_tempC, influence); + } else { + _morphA.addScaledVector(_tempA.sub(_vA), influence); + _morphB.addScaledVector(_tempB.sub(_vB), influence); + _morphC.addScaledVector(_tempC.sub(_vC), influence); + } + } + _vA.add(_morphA); + _vB.add(_morphB); + _vC.add(_morphC); + } + if (object2.isSkinnedMesh) { + object2.applyBoneTransform(a2, _vA); + object2.applyBoneTransform(b2, _vB); + object2.applyBoneTransform(c2, _vC); + } + modifiedAttributeArray[a2 * 3 + 0] = _vA.x; + modifiedAttributeArray[a2 * 3 + 1] = _vA.y; + modifiedAttributeArray[a2 * 3 + 2] = _vA.z; + modifiedAttributeArray[b2 * 3 + 0] = _vB.x; + modifiedAttributeArray[b2 * 3 + 1] = _vB.y; + modifiedAttributeArray[b2 * 3 + 2] = _vB.z; + modifiedAttributeArray[c2 * 3 + 0] = _vC.x; + modifiedAttributeArray[c2 * 3 + 1] = _vC.y; + modifiedAttributeArray[c2 * 3 + 2] = _vC.z; + } + const geometry = object.geometry; + const material = object.material; + let a, b, c; + const index = geometry.index; + const positionAttribute = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const normalAttribute = geometry.attributes.normal; + const morphNormal = geometry.morphAttributes.position; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + let i, j, il, jl; + let group; + let start, end; + const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize); + const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize); + if (index !== null) { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a = index.getX(j); + b = index.getX(j + 1); + c = index.getX(j + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(index.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a = index.getX(i); + b = index.getX(i + 1); + c = index.getX(i + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a = j; + b = j + 1; + c = j + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a = i; + b = i + 1; + c = i + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a, + b, + c, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a, + b, + c, + modifiedNormal + ); + } + } + } + const morphedPositionAttribute = new Float32BufferAttribute(modifiedPosition, 3); + const morphedNormalAttribute = new Float32BufferAttribute(modifiedNormal, 3); + return { + positionAttribute, + normalAttribute, + morphedPositionAttribute, + morphedNormalAttribute + }; +} +function mergeGroups(geometry) { + if (geometry.groups.length === 0) { + console.warn("THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge."); + return geometry; + } + let groups = geometry.groups; + groups = groups.sort((a, b) => { + if (a.materialIndex !== b.materialIndex) return a.materialIndex - b.materialIndex; + return a.start - b.start; + }); + if (geometry.getIndex() === null) { + const positionAttribute = geometry.getAttribute("position"); + const indices = []; + for (let i = 0; i < positionAttribute.count; i += 3) { + indices.push(i, i + 1, i + 2); + } + geometry.setIndex(indices); + } + const index = geometry.getIndex(); + const newIndices = []; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + const groupStart = group.start; + const groupLength = groupStart + group.count; + for (let j = groupStart; j < groupLength; j++) { + newIndices.push(index.getX(j)); + } + } + geometry.dispose(); + geometry.setIndex(newIndices); + let start = 0; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + group.start = start; + start += group.count; + } + let currentGroup = groups[0]; + geometry.groups = [currentGroup]; + for (let i = 1; i < groups.length; i++) { + const group = groups[i]; + if (currentGroup.materialIndex === group.materialIndex) { + currentGroup.count += group.count; + } else { + currentGroup = group; + geometry.groups.push(currentGroup); + } + } + return geometry; +} +function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) { + const creaseDot = Math.cos(creaseAngle); + const hashMultiplier = (1 + 1e-10) * 100; + const verts = [new Vector3(), new Vector3(), new Vector3()]; + const tempVec1 = new Vector3(); + const tempVec2 = new Vector3(); + const tempNorm = new Vector3(); + const tempNorm2 = new Vector3(); + function hashVertex(v) { + const x = ~~(v.x * hashMultiplier); + const y = ~~(v.y * hashMultiplier); + const z = ~~(v.z * hashMultiplier); + return `${x},${y},${z}`; + } + const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry; + const posAttr = resultGeometry.attributes.position; + const vertexMap = {}; + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const hash = hashVertex(vert); + if (!(hash in vertexMap)) { + vertexMap[hash] = []; + } + vertexMap[hash].push(normal); + } + } + const normalArray = new Float32Array(posAttr.count * 3); + const normAttr = new BufferAttribute(normalArray, 3, false); + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + tempNorm.crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const hash = hashVertex(vert); + const otherNormals = vertexMap[hash]; + tempNorm2.set(0, 0, 0); + for (let k = 0, lk = otherNormals.length; k < lk; k++) { + const otherNorm = otherNormals[k]; + if (tempNorm.dot(otherNorm) > creaseDot) { + tempNorm2.add(otherNorm); + } + } + tempNorm2.normalize(); + normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z); + } + } + resultGeometry.setAttribute("normal", normAttr); + return resultGeometry; +} + +// node_modules/three/examples/jsm/loaders/GLTFLoader.js +var GLTFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.dracoLoader = null; + this.ktx2Loader = null; + this.meshoptDecoder = null; + this.pluginCallbacks = []; + this.register(function(parser) { + return new GLTFMaterialsClearcoatExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsDispersionExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureBasisUExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureWebPExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureAVIFExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSheenExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsTransmissionExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsVolumeExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIorExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsEmissiveStrengthExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSpecularExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIridescenceExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsAnisotropyExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsBumpExtension(parser); + }); + this.register(function(parser) { + return new GLTFLightsExtension(parser); + }); + this.register(function(parser) { + return new GLTFMeshoptCompression(parser); + }); + this.register(function(parser) { + return new GLTFMeshGpuInstancing(parser); + }); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + let resourcePath; + if (this.resourcePath !== "") { + resourcePath = this.resourcePath; + } else if (this.path !== "") { + const relativeUrl = LoaderUtils.extractUrlBase(url); + resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); + } else { + resourcePath = LoaderUtils.extractUrlBase(url); + } + this.manager.itemStart(url); + const _onError = function(e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data) { + try { + scope.parse(data, resourcePath, function(gltf) { + onLoad(gltf); + scope.manager.itemEnd(url); + }, _onError); + } catch (e) { + _onError(e); + } + }, onProgress, _onError); + } + setDRACOLoader(dracoLoader) { + this.dracoLoader = dracoLoader; + return this; + } + setDDSLoader() { + throw new Error( + 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".' + ); + } + setKTX2Loader(ktx2Loader) { + this.ktx2Loader = ktx2Loader; + return this; + } + setMeshoptDecoder(meshoptDecoder) { + this.meshoptDecoder = meshoptDecoder; + return this; + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) { + this.pluginCallbacks.push(callback); + } + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) { + this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + } + return this; + } + parse(data, path, onLoad, onError) { + let json; + const extensions = {}; + const plugins = {}; + const textDecoder = new TextDecoder(); + if (typeof data === "string") { + json = JSON.parse(data); + } else if (data instanceof ArrayBuffer) { + const magic = textDecoder.decode(new Uint8Array(data, 0, 4)); + if (magic === BINARY_EXTENSION_HEADER_MAGIC) { + try { + extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data); + } catch (error) { + if (onError) onError(error); + return; + } + json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); + } else { + json = JSON.parse(textDecoder.decode(data)); + } + } else { + json = data; + } + if (json.asset === void 0 || json.asset.version[0] < 2) { + if (onError) onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + return; + } + const parser = new GLTFParser(json, { + path: path || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + parser.fileLoader.setRequestHeader(this.requestHeader); + for (let i = 0; i < this.pluginCallbacks.length; i++) { + const plugin = this.pluginCallbacks[i](parser); + if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); + plugins[plugin.name] = plugin; + extensions[plugin.name] = true; + } + if (json.extensionsUsed) { + for (let i = 0; i < json.extensionsUsed.length; ++i) { + const extensionName = json.extensionsUsed[i]; + const extensionsRequired = json.extensionsRequired || []; + switch (extensionName) { + case EXTENSIONS.KHR_MATERIALS_UNLIT: + extensions[extensionName] = new GLTFMaterialsUnlitExtension(); + break; + case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: + extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); + break; + case EXTENSIONS.KHR_TEXTURE_TRANSFORM: + extensions[extensionName] = new GLTFTextureTransformExtension(); + break; + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[extensionName] = new GLTFMeshQuantizationExtension(); + break; + default: + if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) { + console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".'); + } + } + } + } + parser.setExtensions(extensions); + parser.setPlugins(plugins); + parser.parse(onLoad, onError); + } + parseAsync(data, path) { + const scope = this; + return new Promise(function(resolve, reject) { + scope.parse(data, path, resolve, reject); + }); + } +}; +function GLTFRegistry() { + let objects = {}; + return { + get: function(key) { + return objects[key]; + }, + add: function(key, object) { + objects[key] = object; + }, + remove: function(key) { + delete objects[key]; + }, + removeAll: function() { + objects = {}; + } + }; +} +var EXTENSIONS = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" +}; +var GLTFLightsExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; + this.cache = { refs: {}, uses: {} }; + } + _markDefs() { + const parser = this.parser; + const nodeDefs = this.parser.json.nodes || []; + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) { + parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); + } + } + } + _loadLight(lightIndex) { + const parser = this.parser; + const cacheKey = "light:" + lightIndex; + let dependency = parser.cache.get(cacheKey); + if (dependency) return dependency; + const json = parser.json; + const extensions = json.extensions && json.extensions[this.name] || {}; + const lightDefs = extensions.lights || []; + const lightDef = lightDefs[lightIndex]; + let lightNode; + const color = new Color(16777215); + if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace); + const range = lightDef.range !== void 0 ? lightDef.range : 0; + switch (lightDef.type) { + case "directional": + lightNode = new DirectionalLight(color); + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + case "point": + lightNode = new PointLight(color); + lightNode.distance = range; + break; + case "spot": + lightNode = new SpotLight(color); + lightNode.distance = range; + lightDef.spot = lightDef.spot || {}; + lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; + lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; + lightNode.angle = lightDef.spot.outerConeAngle; + lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); + } + lightNode.position.set(0, 0, 0); + lightNode.decay = 2; + assignExtrasToUserData(lightNode, lightDef); + if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; + lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); + dependency = Promise.resolve(lightNode); + parser.cache.add(cacheKey, dependency); + return dependency; + } + getDependency(type, index) { + if (type !== "light") return; + return this._loadLight(index); + } + createNodeAttachment(nodeIndex) { + const self2 = this; + const parser = this.parser; + const json = parser.json; + const nodeDef = json.nodes[nodeIndex]; + const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {}; + const lightIndex = lightDef.light; + if (lightIndex === void 0) return null; + return this._loadLight(lightIndex).then(function(light) { + return parser._getNodeRef(self2.cache, lightIndex, light); + }); + } +}; +var GLTFMaterialsUnlitExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; + } + getMaterialType() { + return MeshBasicMaterial; + } + extendParams(materialParams, materialDef, parser) { + const pending = []; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + const metallicRoughness = materialDef.pbrMetallicRoughness; + if (metallicRoughness) { + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + } + return Promise.all(pending); + } +}; +var GLTFMaterialsEmissiveStrengthExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; + if (emissiveStrength !== void 0) { + materialParams.emissiveIntensity = emissiveStrength; + } + return Promise.resolve(); + } +}; +var GLTFMaterialsClearcoatExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.clearcoatFactor !== void 0) { + materialParams.clearcoat = extension.clearcoatFactor; + } + if (extension.clearcoatTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); + } + if (extension.clearcoatRoughnessFactor !== void 0) { + materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; + } + if (extension.clearcoatRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); + } + if (extension.clearcoatNormalTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); + if (extension.clearcoatNormalTexture.scale !== void 0) { + const scale = extension.clearcoatNormalTexture.scale; + materialParams.clearcoatNormalScale = new Vector2(scale, scale); + } + } + return Promise.all(pending); + } +}; +var GLTFMaterialsDispersionExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; + return Promise.resolve(); + } +}; +var GLTFMaterialsIridescenceExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.iridescenceFactor !== void 0) { + materialParams.iridescence = extension.iridescenceFactor; + } + if (extension.iridescenceTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); + } + if (extension.iridescenceIor !== void 0) { + materialParams.iridescenceIOR = extension.iridescenceIor; + } + if (materialParams.iridescenceThicknessRange === void 0) { + materialParams.iridescenceThicknessRange = [100, 400]; + } + if (extension.iridescenceThicknessMinimum !== void 0) { + materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; + } + if (extension.iridescenceThicknessMaximum !== void 0) { + materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; + } + if (extension.iridescenceThicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsSheenExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + materialParams.sheenColor = new Color(0, 0, 0); + materialParams.sheenRoughness = 0; + materialParams.sheen = 1; + const extension = materialDef.extensions[this.name]; + if (extension.sheenColorFactor !== void 0) { + const colorFactor = extension.sheenColorFactor; + materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace); + } + if (extension.sheenRoughnessFactor !== void 0) { + materialParams.sheenRoughness = extension.sheenRoughnessFactor; + } + if (extension.sheenColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace)); + } + if (extension.sheenRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsTransmissionExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.transmissionFactor !== void 0) { + materialParams.transmission = extension.transmissionFactor; + } + if (extension.transmissionTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsVolumeExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; + if (extension.thicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); + } + materialParams.attenuationDistance = extension.attenuationDistance || Infinity; + const colorArray = extension.attenuationColor || [1, 1, 1]; + materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + return Promise.all(pending); + } +}; +var GLTFMaterialsIorExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IOR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; + return Promise.resolve(); + } +}; +var GLTFMaterialsSpecularExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; + if (extension.specularTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); + } + const colorArray = extension.specularColorFactor || [1, 1, 1]; + materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + if (extension.specularColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsBumpExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_MATERIALS_BUMP; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; + if (extension.bumpTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsAnisotropyExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.anisotropyStrength !== void 0) { + materialParams.anisotropy = extension.anisotropyStrength; + } + if (extension.anisotropyRotation !== void 0) { + materialParams.anisotropyRotation = extension.anisotropyRotation; + } + if (extension.anisotropyTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); + } + return Promise.all(pending); + } +}; +var GLTFTextureBasisUExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_TEXTURE_BASISU; + } + loadTexture(textureIndex) { + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[this.name]) { + return null; + } + const extension = textureDef.extensions[this.name]; + const loader = parser.options.ktx2Loader; + if (!loader) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + } else { + return null; + } + } + return parser.loadTextureImage(textureIndex, extension.source, loader); + } +}; +var GLTFTextureWebPExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_WEBP; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) { + return null; + } + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { + throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +}; +var GLTFTextureAVIFExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_AVIF; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) { + return null; + } + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { + throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +}; +var GLTFMeshoptCompression = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; + this.parser = parser; + } + loadBufferView(index) { + const json = this.parser.json; + const bufferView = json.bufferViews[index]; + if (bufferView.extensions && bufferView.extensions[this.name]) { + const extensionDef = bufferView.extensions[this.name]; + const buffer = this.parser.getDependency("buffer", extensionDef.buffer); + const decoder = this.parser.options.meshoptDecoder; + if (!decoder || !decoder.supported) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + } else { + return null; + } + } + return buffer.then(function(res) { + const byteOffset = extensionDef.byteOffset || 0; + const byteLength = extensionDef.byteLength || 0; + const count = extensionDef.count; + const stride = extensionDef.byteStride; + const source = new Uint8Array(res, byteOffset, byteLength); + if (decoder.decodeGltfBufferAsync) { + return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { + return res2.buffer; + }); + } else { + return decoder.ready.then(function() { + const result = new ArrayBuffer(count * stride); + decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); + return result; + }); + } + }); + } else { + return null; + } + } +}; +var GLTFMeshGpuInstancing = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; + this.parser = parser; + } + createNodeMesh(nodeIndex) { + const json = this.parser.json; + const nodeDef = json.nodes[nodeIndex]; + if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) { + return null; + } + const meshDef = json.meshes[nodeDef.mesh]; + for (const primitive of meshDef.primitives) { + if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) { + return null; + } + } + const extensionDef = nodeDef.extensions[this.name]; + const attributesDef = extensionDef.attributes; + const pending = []; + const attributes = {}; + for (const key in attributesDef) { + pending.push(this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => { + attributes[key] = accessor; + return attributes[key]; + })); + } + if (pending.length < 1) { + return null; + } + pending.push(this.parser.createNodeMesh(nodeIndex)); + return Promise.all(pending).then((results) => { + const nodeObject = results.pop(); + const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; + const count = results[0].count; + const instancedMeshes = []; + for (const mesh of meshes) { + const m = new Matrix4(); + const p = new Vector3(); + const q = new Quaternion(); + const s = new Vector3(1, 1, 1); + const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); + for (let i = 0; i < count; i++) { + if (attributes.TRANSLATION) { + p.fromBufferAttribute(attributes.TRANSLATION, i); + } + if (attributes.ROTATION) { + q.fromBufferAttribute(attributes.ROTATION, i); + } + if (attributes.SCALE) { + s.fromBufferAttribute(attributes.SCALE, i); + } + instancedMesh.setMatrixAt(i, m.compose(p, q, s)); + } + for (const attributeName in attributes) { + if (attributeName === "_COLOR_0") { + const attr = attributes[attributeName]; + instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); + } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") { + mesh.geometry.setAttribute(attributeName, attributes[attributeName]); + } + } + Object3D.prototype.copy.call(instancedMesh, mesh); + this.parser.assignFinalMaterial(instancedMesh); + instancedMeshes.push(instancedMesh); + } + if (nodeObject.isGroup) { + nodeObject.clear(); + nodeObject.add(...instancedMeshes); + return nodeObject; + } + return instancedMeshes[0]; + }); + } +}; +var BINARY_EXTENSION_HEADER_MAGIC = "glTF"; +var BINARY_EXTENSION_HEADER_LENGTH = 12; +var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 }; +var GLTFBinaryExtension = class { + constructor(data) { + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH); + const textDecoder = new TextDecoder(); + this.header = { + magic: textDecoder.decode(new Uint8Array(data.slice(0, 4))), + version: headerView.getUint32(4, true), + length: headerView.getUint32(8, true) + }; + if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) { + throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + } else if (this.header.version < 2) { + throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + } + const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; + const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH); + let chunkIndex = 0; + while (chunkIndex < chunkContentsLength) { + const chunkLength = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + const chunkType = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { + const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); + this.content = textDecoder.decode(contentArray); + } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { + const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice(byteOffset, byteOffset + chunkLength); + } + chunkIndex += chunkLength; + } + if (this.content === null) { + throw new Error("THREE.GLTFLoader: JSON content not found."); + } + } +}; +var GLTFDracoMeshCompressionExtension = class { + constructor(json, dracoLoader) { + if (!dracoLoader) { + throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + } + this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; + this.json = json; + this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); + } + decodePrimitive(primitive, parser) { + const json = this.json; + const dracoLoader = this.dracoLoader; + const bufferViewIndex = primitive.extensions[this.name].bufferView; + const gltfAttributeMap = primitive.extensions[this.name].attributes; + const threeAttributeMap = {}; + const attributeNormalizedMap = {}; + const attributeTypeMap = {}; + for (const attributeName in gltfAttributeMap) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; + } + for (const attributeName in primitive.attributes) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + if (gltfAttributeMap[attributeName] !== void 0) { + const accessorDef = json.accessors[primitive.attributes[attributeName]]; + const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + attributeTypeMap[threeAttributeName] = componentType.name; + attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; + } + } + return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { + return new Promise(function(resolve, reject) { + dracoLoader.decodeDracoFile(bufferView, function(geometry) { + for (const attributeName in geometry.attributes) { + const attribute = geometry.attributes[attributeName]; + const normalized = attributeNormalizedMap[attributeName]; + if (normalized !== void 0) attribute.normalized = normalized; + } + resolve(geometry); + }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject); + }); + }); + } +}; +var GLTFTextureTransformExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; + } + extendTexture(texture, transform) { + if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) { + return texture; + } + texture = texture.clone(); + if (transform.texCoord !== void 0) { + texture.channel = transform.texCoord; + } + if (transform.offset !== void 0) { + texture.offset.fromArray(transform.offset); + } + if (transform.rotation !== void 0) { + texture.rotation = transform.rotation; + } + if (transform.scale !== void 0) { + texture.repeat.fromArray(transform.scale); + } + texture.needsUpdate = true; + return texture; + } +}; +var GLTFMeshQuantizationExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + } +}; +var GLTFCubicSplineInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + copySampleValue_(index) { + const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; + for (let i = 0; i !== valueSize; i++) { + result[i] = values[offset + i]; + } + return result; + } + interpolate_(i1, t0, t, t1) { + const result = this.resultBuffer; + const values = this.sampleValues; + const stride = this.valueSize; + const stride2 = stride * 2; + const stride3 = stride * 3; + const td = t1 - t0; + const p = (t - t0) / td; + const pp = p * p; + const ppp = pp * p; + const offset1 = i1 * stride3; + const offset0 = offset1 - stride3; + const s2 = -2 * ppp + 3 * pp; + const s3 = ppp - pp; + const s0 = 1 - s2; + const s1 = s3 - pp + p; + for (let i = 0; i !== stride; i++) { + const p0 = values[offset0 + i + stride]; + const m0 = values[offset0 + i + stride2] * td; + const p1 = values[offset1 + i + stride]; + const m1 = values[offset1 + i] * td; + result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; + } + return result; + } +}; +var _q = new Quaternion(); +var GLTFCubicSplineQuaternionInterpolant = class extends GLTFCubicSplineInterpolant { + interpolate_(i1, t0, t, t1) { + const result = super.interpolate_(i1, t0, t, t1); + _q.fromArray(result).normalize().toArray(result); + return result; + } +}; +var WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 +}; +var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array +}; +var WEBGL_FILTERS = { + 9728: NearestFilter, + 9729: LinearFilter, + 9984: NearestMipmapNearestFilter, + 9985: LinearMipmapNearestFilter, + 9986: NearestMipmapLinearFilter, + 9987: LinearMipmapLinearFilter +}; +var WEBGL_WRAPPINGS = { + 33071: ClampToEdgeWrapping, + 33648: MirroredRepeatWrapping, + 10497: RepeatWrapping +}; +var WEBGL_TYPE_SIZES = { + "SCALAR": 1, + "VEC2": 2, + "VEC3": 3, + "VEC4": 4, + "MAT2": 4, + "MAT3": 9, + "MAT4": 16 +}; +var ATTRIBUTES = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" +}; +var PATH_PROPERTIES = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" +}; +var INTERPOLATION = { + CUBICSPLINE: void 0, + // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each + // keyframe track will be initialized with a default interpolation type, then modified. + LINEAR: InterpolateLinear, + STEP: InterpolateDiscrete +}; +var ALPHA_MODES = { + OPAQUE: "OPAQUE", + MASK: "MASK", + BLEND: "BLEND" +}; +function createDefaultMaterial(cache) { + if (cache["DefaultMaterial"] === void 0) { + cache["DefaultMaterial"] = new MeshStandardMaterial({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: FrontSide + }); + } + return cache["DefaultMaterial"]; +} +function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { + for (const name in objectDef.extensions) { + if (knownExtensions[name] === void 0) { + object.userData.gltfExtensions = object.userData.gltfExtensions || {}; + object.userData.gltfExtensions[name] = objectDef.extensions[name]; + } + } +} +function assignExtrasToUserData(object, gltfDef) { + if (gltfDef.extras !== void 0) { + if (typeof gltfDef.extras === "object") { + Object.assign(object.userData, gltfDef.extras); + } else { + console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); + } + } +} +function addMorphTargets(geometry, targets, parser) { + let hasMorphPosition = false; + let hasMorphNormal = false; + let hasMorphColor = false; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) hasMorphPosition = true; + if (target.NORMAL !== void 0) hasMorphNormal = true; + if (target.COLOR_0 !== void 0) hasMorphColor = true; + if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; + } + if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); + const pendingPositionAccessors = []; + const pendingNormalAccessors = []; + const pendingColorAccessors = []; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (hasMorphPosition) { + const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; + pendingPositionAccessors.push(pendingAccessor); + } + if (hasMorphNormal) { + const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; + pendingNormalAccessors.push(pendingAccessor); + } + if (hasMorphColor) { + const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; + pendingColorAccessors.push(pendingAccessor); + } + } + return Promise.all([ + Promise.all(pendingPositionAccessors), + Promise.all(pendingNormalAccessors), + Promise.all(pendingColorAccessors) + ]).then(function(accessors) { + const morphPositions = accessors[0]; + const morphNormals = accessors[1]; + const morphColors = accessors[2]; + if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; + if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; + if (hasMorphColor) geometry.morphAttributes.color = morphColors; + geometry.morphTargetsRelative = true; + return geometry; + }); +} +function updateMorphTargets(mesh, meshDef) { + mesh.updateMorphTargets(); + if (meshDef.weights !== void 0) { + for (let i = 0, il = meshDef.weights.length; i < il; i++) { + mesh.morphTargetInfluences[i] = meshDef.weights[i]; + } + } + if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { + const targetNames = meshDef.extras.targetNames; + if (mesh.morphTargetInfluences.length === targetNames.length) { + mesh.morphTargetDictionary = {}; + for (let i = 0, il = targetNames.length; i < il; i++) { + mesh.morphTargetDictionary[targetNames[i]] = i; + } + } else { + console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); + } + } +} +function createPrimitiveKey(primitiveDef) { + let geometryKey; + const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; + if (dracoExtension) { + geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); + } else { + geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; + } + if (primitiveDef.targets !== void 0) { + for (let i = 0, il = primitiveDef.targets.length; i < il; i++) { + geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); + } + } + return geometryKey; +} +function createAttributesKey(attributes) { + let attributesKey = ""; + const keys = Object.keys(attributes).sort(); + for (let i = 0, il = keys.length; i < il; i++) { + attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"; + } + return attributesKey; +} +function getNormalizedComponentScale(constructor) { + switch (constructor) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); + } +} +function getImageURIMimeType(uri) { + if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; + if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; + return "image/png"; +} +var _identityMatrix = new Matrix4(); +var GLTFParser = class { + constructor(json = {}, options = {}) { + this.json = json; + this.extensions = {}; + this.plugins = {}; + this.options = options; + this.cache = new GLTFRegistry(); + this.associations = /* @__PURE__ */ new Map(); + this.primitiveCache = {}; + this.nodeCache = {}; + this.meshCache = { refs: {}, uses: {} }; + this.cameraCache = { refs: {}, uses: {} }; + this.lightCache = { refs: {}, uses: {} }; + this.sourceCache = {}; + this.textureCache = {}; + this.nodeNamesUsed = {}; + let isSafari = false; + let safariVersion = -1; + let isFirefox = false; + let firefoxVersion = -1; + if (typeof navigator !== "undefined") { + const userAgent = navigator.userAgent; + isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) === true; + const safariMatch = userAgent.match(/Version\/(\d+)/); + safariVersion = isSafari && safariMatch ? parseInt(safariMatch[1], 10) : -1; + isFirefox = userAgent.indexOf("Firefox") > -1; + firefoxVersion = isFirefox ? userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; + } + if (typeof createImageBitmap === "undefined" || isSafari && safariVersion < 17 || isFirefox && firefoxVersion < 98) { + this.textureLoader = new TextureLoader(this.options.manager); + } else { + this.textureLoader = new ImageBitmapLoader(this.options.manager); + } + this.textureLoader.setCrossOrigin(this.options.crossOrigin); + this.textureLoader.setRequestHeader(this.options.requestHeader); + this.fileLoader = new FileLoader(this.options.manager); + this.fileLoader.setResponseType("arraybuffer"); + if (this.options.crossOrigin === "use-credentials") { + this.fileLoader.setWithCredentials(true); + } + } + setExtensions(extensions) { + this.extensions = extensions; + } + setPlugins(plugins) { + this.plugins = plugins; + } + parse(onLoad, onError) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + this.cache.removeAll(); + this.nodeCache = {}; + this._invokeAll(function(ext) { + return ext._markDefs && ext._markDefs(); + }); + Promise.all(this._invokeAll(function(ext) { + return ext.beforeRoot && ext.beforeRoot(); + })).then(function() { + return Promise.all([ + parser.getDependencies("scene"), + parser.getDependencies("animation"), + parser.getDependencies("camera") + ]); + }).then(function(dependencies) { + const result = { + scene: dependencies[0][json.scene || 0], + scenes: dependencies[0], + animations: dependencies[1], + cameras: dependencies[2], + asset: json.asset, + parser, + userData: {} + }; + addUnknownExtensionsToUserData(extensions, result, json); + assignExtrasToUserData(result, json); + return Promise.all(parser._invokeAll(function(ext) { + return ext.afterRoot && ext.afterRoot(result); + })).then(function() { + for (const scene of result.scenes) { + scene.updateMatrixWorld(); + } + onLoad(result); + }); + }).catch(onError); + } + /** + * Marks the special nodes/meshes in json for efficient parse. + */ + _markDefs() { + const nodeDefs = this.json.nodes || []; + const skinDefs = this.json.skins || []; + const meshDefs = this.json.meshes || []; + for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { + const joints = skinDefs[skinIndex].joints; + for (let i = 0, il = joints.length; i < il; i++) { + nodeDefs[joints[i]].isBone = true; + } + } + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.mesh !== void 0) { + this._addNodeRef(this.meshCache, nodeDef.mesh); + if (nodeDef.skin !== void 0) { + meshDefs[nodeDef.mesh].isSkinnedMesh = true; + } + } + if (nodeDef.camera !== void 0) { + this._addNodeRef(this.cameraCache, nodeDef.camera); + } + } + } + /** + * Counts references to shared node / Object3D resources. These resources + * can be reused, or "instantiated", at multiple nodes in the scene + * hierarchy. Mesh, Camera, and Light instances are instantiated and must + * be marked. Non-scenegraph resources (like Materials, Geometries, and + * Textures) can be reused directly and are not marked here. + * + * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. + */ + _addNodeRef(cache, index) { + if (index === void 0) return; + if (cache.refs[index] === void 0) { + cache.refs[index] = cache.uses[index] = 0; + } + cache.refs[index]++; + } + /** Returns a reference to a shared resource, cloning it if necessary. */ + _getNodeRef(cache, index, object) { + if (cache.refs[index] <= 1) return object; + const ref = object.clone(); + const updateMappings = (original, clone) => { + const mappings = this.associations.get(original); + if (mappings != null) { + this.associations.set(clone, mappings); + } + for (const [i, child] of original.children.entries()) { + updateMappings(child, clone.children[i]); + } + }; + updateMappings(object, ref); + ref.name += "_instance_" + cache.uses[index]++; + return ref; + } + _invokeOne(func) { + const extensions = Object.values(this.plugins); + extensions.push(this); + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) return result; + } + return null; + } + _invokeAll(func) { + const extensions = Object.values(this.plugins); + extensions.unshift(this); + const pending = []; + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) pending.push(result); + } + return pending; + } + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + getDependency(type, index) { + const cacheKey = type + ":" + index; + let dependency = this.cache.get(cacheKey); + if (!dependency) { + switch (type) { + case "scene": + dependency = this.loadScene(index); + break; + case "node": + dependency = this._invokeOne(function(ext) { + return ext.loadNode && ext.loadNode(index); + }); + break; + case "mesh": + dependency = this._invokeOne(function(ext) { + return ext.loadMesh && ext.loadMesh(index); + }); + break; + case "accessor": + dependency = this.loadAccessor(index); + break; + case "bufferView": + dependency = this._invokeOne(function(ext) { + return ext.loadBufferView && ext.loadBufferView(index); + }); + break; + case "buffer": + dependency = this.loadBuffer(index); + break; + case "material": + dependency = this._invokeOne(function(ext) { + return ext.loadMaterial && ext.loadMaterial(index); + }); + break; + case "texture": + dependency = this._invokeOne(function(ext) { + return ext.loadTexture && ext.loadTexture(index); + }); + break; + case "skin": + dependency = this.loadSkin(index); + break; + case "animation": + dependency = this._invokeOne(function(ext) { + return ext.loadAnimation && ext.loadAnimation(index); + }); + break; + case "camera": + dependency = this.loadCamera(index); + break; + default: + dependency = this._invokeOne(function(ext) { + return ext != this && ext.getDependency && ext.getDependency(type, index); + }); + if (!dependency) { + throw new Error("Unknown type: " + type); + } + break; + } + this.cache.add(cacheKey, dependency); + } + return dependency; + } + /** + * Requests all dependencies of the specified type asynchronously, with caching. + * @param {string} type + * @return {Promise>} + */ + getDependencies(type) { + let dependencies = this.cache.get(type); + if (!dependencies) { + const parser = this; + const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; + dependencies = Promise.all(defs.map(function(def, index) { + return parser.getDependency(type, index); + })); + this.cache.add(type, dependencies); + } + return dependencies; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + loadBuffer(bufferIndex) { + const bufferDef = this.json.buffers[bufferIndex]; + const loader = this.fileLoader; + if (bufferDef.type && bufferDef.type !== "arraybuffer") { + throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); + } + if (bufferDef.uri === void 0 && bufferIndex === 0) { + return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); + } + const options = this.options; + return new Promise(function(resolve, reject) { + loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { + reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".')); + }); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + loadBufferView(bufferViewIndex) { + const bufferViewDef = this.json.bufferViews[bufferViewIndex]; + return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { + const byteLength = bufferViewDef.byteLength || 0; + const byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice(byteOffset, byteOffset + byteLength); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors + * @param {number} accessorIndex + * @return {Promise} + */ + loadAccessor(accessorIndex) { + const parser = this; + const json = this.json; + const accessorDef = this.json.accessors[accessorIndex]; + if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const normalized = accessorDef.normalized === true; + const array = new TypedArray(accessorDef.count * itemSize); + return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); + } + const pendingBufferViews = []; + if (accessorDef.bufferView !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); + } else { + pendingBufferViews.push(null); + } + if (accessorDef.sparse !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); + } + return Promise.all(pendingBufferViews).then(function(bufferViews) { + const bufferView = bufferViews[0]; + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const elementBytes = TypedArray.BYTES_PER_ELEMENT; + const itemBytes = elementBytes * itemSize; + const byteOffset = accessorDef.byteOffset || 0; + const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; + const normalized = accessorDef.normalized === true; + let array, bufferAttribute; + if (byteStride && byteStride !== itemBytes) { + const ibSlice = Math.floor(byteOffset / byteStride); + const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; + let ib = parser.cache.get(ibCacheKey); + if (!ib) { + array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); + ib = new InterleavedBuffer(array, byteStride / elementBytes); + parser.cache.add(ibCacheKey, ib); + } + bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); + } else { + if (bufferView === null) { + array = new TypedArray(accessorDef.count * itemSize); + } else { + array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); + } + bufferAttribute = new BufferAttribute(array, itemSize, normalized); + } + if (accessorDef.sparse !== void 0) { + const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; + const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; + const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; + const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; + const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); + const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); + if (bufferView !== null) { + bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); + } + for (let i = 0, il = sparseIndices.length; i < il; i++) { + const index = sparseIndices[i]; + bufferAttribute.setX(index, sparseValues[i * itemSize]); + if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]); + if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]); + if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]); + if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); + } + } + return bufferAttribute; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + loadTexture(textureIndex) { + const json = this.json; + const options = this.options; + const textureDef = json.textures[textureIndex]; + const sourceIndex = textureDef.source; + const sourceDef = json.images[sourceIndex]; + let loader = this.textureLoader; + if (sourceDef.uri) { + const handler = options.manager.getHandler(sourceDef.uri); + if (handler !== null) loader = handler; + } + return this.loadTextureImage(textureIndex, sourceIndex, loader); + } + loadTextureImage(textureIndex, sourceIndex, loader) { + const parser = this; + const json = this.json; + const textureDef = json.textures[textureIndex]; + const sourceDef = json.images[sourceIndex]; + const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; + if (this.textureCache[cacheKey]) { + return this.textureCache[cacheKey]; + } + const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { + texture.flipY = false; + texture.name = textureDef.name || sourceDef.name || ""; + if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) { + texture.name = sourceDef.uri; + } + const samplers = json.samplers || {}; + const sampler = samplers[textureDef.sampler] || {}; + texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter; + texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping; + parser.associations.set(texture, { textures: textureIndex }); + return texture; + }).catch(function() { + return null; + }); + this.textureCache[cacheKey] = promise; + return promise; + } + loadImageSource(sourceIndex, loader) { + const parser = this; + const json = this.json; + const options = this.options; + if (this.sourceCache[sourceIndex] !== void 0) { + return this.sourceCache[sourceIndex].then((texture) => texture.clone()); + } + const sourceDef = json.images[sourceIndex]; + const URL = self.URL || self.webkitURL; + let sourceURI = sourceDef.uri || ""; + let isObjectURL = false; + if (sourceDef.bufferView !== void 0) { + sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { + isObjectURL = true; + const blob = new Blob([bufferView], { type: sourceDef.mimeType }); + sourceURI = URL.createObjectURL(blob); + return sourceURI; + }); + } else if (sourceDef.uri === void 0) { + throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); + } + const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { + return new Promise(function(resolve, reject) { + let onLoad = resolve; + if (loader.isImageBitmapLoader === true) { + onLoad = function(imageBitmap) { + const texture = new Texture(imageBitmap); + texture.needsUpdate = true; + resolve(texture); + }; + } + loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject); + }); + }).then(function(texture) { + if (isObjectURL === true) { + URL.revokeObjectURL(sourceURI); + } + assignExtrasToUserData(texture, sourceDef); + texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); + return texture; + }).catch(function(error) { + console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); + throw error; + }); + this.sourceCache[sourceIndex] = promise; + return promise; + } + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} mapName + * @param {Object} mapDef + * @return {Promise} + */ + assignTexture(materialParams, mapName, mapDef, colorSpace) { + const parser = this; + return this.getDependency("texture", mapDef.index).then(function(texture) { + if (!texture) return null; + if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { + texture = texture.clone(); + texture.channel = mapDef.texCoord; + } + if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { + const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; + if (transform) { + const gltfReference = parser.associations.get(texture); + texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform); + parser.associations.set(texture, gltfReference); + } + } + if (colorSpace !== void 0) { + texture.colorSpace = colorSpace; + } + materialParams[mapName] = texture; + return texture; + }); + } + /** + * Assigns final material to a Mesh, Line, or Points instance. The instance + * already has a material (generated from the glTF material options alone) + * but reuse of the same glTF material may require multiple threejs materials + * to accommodate different primitive types, defines, etc. New materials will + * be created if necessary, and reused from a cache. + * @param {Object3D} mesh Mesh, Line, or Points instance. + */ + assignFinalMaterial(mesh) { + const geometry = mesh.geometry; + let material = mesh.material; + const useDerivativeTangents = geometry.attributes.tangent === void 0; + const useVertexColors = geometry.attributes.color !== void 0; + const useFlatShading = geometry.attributes.normal === void 0; + if (mesh.isPoints) { + const cacheKey = "PointsMaterial:" + material.uuid; + let pointsMaterial = this.cache.get(cacheKey); + if (!pointsMaterial) { + pointsMaterial = new PointsMaterial(); + Material.prototype.copy.call(pointsMaterial, material); + pointsMaterial.color.copy(material.color); + pointsMaterial.map = material.map; + pointsMaterial.sizeAttenuation = false; + this.cache.add(cacheKey, pointsMaterial); + } + material = pointsMaterial; + } else if (mesh.isLine) { + const cacheKey = "LineBasicMaterial:" + material.uuid; + let lineMaterial = this.cache.get(cacheKey); + if (!lineMaterial) { + lineMaterial = new LineBasicMaterial(); + Material.prototype.copy.call(lineMaterial, material); + lineMaterial.color.copy(material.color); + lineMaterial.map = material.map; + this.cache.add(cacheKey, lineMaterial); + } + material = lineMaterial; + } + if (useDerivativeTangents || useVertexColors || useFlatShading) { + let cacheKey = "ClonedMaterial:" + material.uuid + ":"; + if (useDerivativeTangents) cacheKey += "derivative-tangents:"; + if (useVertexColors) cacheKey += "vertex-colors:"; + if (useFlatShading) cacheKey += "flat-shading:"; + let cachedMaterial = this.cache.get(cacheKey); + if (!cachedMaterial) { + cachedMaterial = material.clone(); + if (useVertexColors) cachedMaterial.vertexColors = true; + if (useFlatShading) cachedMaterial.flatShading = true; + if (useDerivativeTangents) { + if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; + if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; + } + this.cache.add(cacheKey, cachedMaterial); + this.associations.set(cachedMaterial, this.associations.get(material)); + } + material = cachedMaterial; + } + mesh.material = material; + } + getMaterialType() { + return MeshStandardMaterial; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @param {number} materialIndex + * @return {Promise} + */ + loadMaterial(materialIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const materialDef = json.materials[materialIndex]; + let materialType; + const materialParams = {}; + const materialExtensions = materialDef.extensions || {}; + const pending = []; + if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { + const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; + materialType = kmuExtension.getMaterialType(); + pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); + } else { + const metallicRoughness = materialDef.pbrMetallicRoughness || {}; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; + materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; + if (metallicRoughness.metallicRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); + pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); + } + materialType = this._invokeOne(function(ext) { + return ext.getMaterialType && ext.getMaterialType(materialIndex); + }); + pending.push(Promise.all(this._invokeAll(function(ext) { + return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams); + }))); + } + if (materialDef.doubleSided === true) { + materialParams.side = DoubleSide; + } + const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; + if (alphaMode === ALPHA_MODES.BLEND) { + materialParams.transparent = true; + materialParams.depthWrite = false; + } else { + materialParams.transparent = false; + if (alphaMode === ALPHA_MODES.MASK) { + materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5; + } + } + if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); + materialParams.normalScale = new Vector2(1, 1); + if (materialDef.normalTexture.scale !== void 0) { + const scale = materialDef.normalTexture.scale; + materialParams.normalScale.set(scale, scale); + } + } + if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); + if (materialDef.occlusionTexture.strength !== void 0) { + materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; + } + } + if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { + const emissiveFactor = materialDef.emissiveFactor; + materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace); + } + if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace)); + } + return Promise.all(pending).then(function() { + const material = new materialType(materialParams); + if (materialDef.name) material.name = materialDef.name; + assignExtrasToUserData(material, materialDef); + parser.associations.set(material, { materials: materialIndex }); + if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); + return material; + }); + } + /** When Object3D instances are targeted by animation, they need unique names. */ + createUniqueName(originalName) { + const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); + if (sanitizedName in this.nodeNamesUsed) { + return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; + } else { + this.nodeNamesUsed[sanitizedName] = 0; + return sanitizedName; + } + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry + * + * Creates BufferGeometries from primitives. + * + * @param {Array} primitives + * @return {Promise>} + */ + loadGeometries(primitives) { + const parser = this; + const extensions = this.extensions; + const cache = this.primitiveCache; + function createDracoPrimitive(primitive) { + return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { + return addPrimitiveAttributes(geometry, primitive, parser); + }); + } + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const primitive = primitives[i]; + const cacheKey = createPrimitiveKey(primitive); + const cached = cache[cacheKey]; + if (cached) { + pending.push(cached.promise); + } else { + let geometryPromise; + if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) { + geometryPromise = createDracoPrimitive(primitive); + } else { + geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); + } + cache[cacheKey] = { primitive, promise: geometryPromise }; + pending.push(geometryPromise); + } + } + return Promise.all(pending); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + * @param {number} meshIndex + * @return {Promise} + */ + loadMesh(meshIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const meshDef = json.meshes[meshIndex]; + const primitives = meshDef.primitives; + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); + pending.push(material); + } + pending.push(parser.loadGeometries(primitives)); + return Promise.all(pending).then(function(results) { + const materials = results.slice(0, results.length - 1); + const geometries = results[results.length - 1]; + const meshes = []; + for (let i = 0, il = geometries.length; i < il; i++) { + const geometry = geometries[i]; + const primitive = primitives[i]; + let mesh; + const material = materials[i]; + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) { + mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); + if (mesh.isSkinnedMesh === true) { + mesh.normalizeSkinWeights(); + } + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode); + } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode); + } + } else if (primitive.mode === WEBGL_CONSTANTS.LINES) { + mesh = new LineSegments(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) { + mesh = new Line(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) { + mesh = new LineLoop(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) { + mesh = new Points(geometry, material); + } else { + throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); + } + if (Object.keys(mesh.geometry.morphAttributes).length > 0) { + updateMorphTargets(mesh, meshDef); + } + mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); + assignExtrasToUserData(mesh, meshDef); + if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); + parser.assignFinalMaterial(mesh); + meshes.push(mesh); + } + for (let i = 0, il = meshes.length; i < il; i++) { + parser.associations.set(meshes[i], { + meshes: meshIndex, + primitives: i + }); + } + if (meshes.length === 1) { + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); + return meshes[0]; + } + const group = new Group(); + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); + parser.associations.set(group, { meshes: meshIndex }); + for (let i = 0, il = meshes.length; i < il; i++) { + group.add(meshes[i]); + } + return group; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + * @param {number} cameraIndex + * @return {Promise} + */ + loadCamera(cameraIndex) { + let camera; + const cameraDef = this.json.cameras[cameraIndex]; + const params = cameraDef[cameraDef.type]; + if (!params) { + console.warn("THREE.GLTFLoader: Missing camera parameters."); + return; + } + if (cameraDef.type === "perspective") { + camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); + } else if (cameraDef.type === "orthographic") { + camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); + } + if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); + assignExtrasToUserData(camera, cameraDef); + return Promise.resolve(camera); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins + * @param {number} skinIndex + * @return {Promise} + */ + loadSkin(skinIndex) { + const skinDef = this.json.skins[skinIndex]; + const pending = []; + for (let i = 0, il = skinDef.joints.length; i < il; i++) { + pending.push(this._loadNodeShallow(skinDef.joints[i])); + } + if (skinDef.inverseBindMatrices !== void 0) { + pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); + } else { + pending.push(null); + } + return Promise.all(pending).then(function(results) { + const inverseBindMatrices = results.pop(); + const jointNodes = results; + const bones = []; + const boneInverses = []; + for (let i = 0, il = jointNodes.length; i < il; i++) { + const jointNode = jointNodes[i]; + if (jointNode) { + bones.push(jointNode); + const mat = new Matrix4(); + if (inverseBindMatrices !== null) { + mat.fromArray(inverseBindMatrices.array, i * 16); + } + boneInverses.push(mat); + } else { + console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]); + } + } + return new Skeleton(bones, boneInverses); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations + * @param {number} animationIndex + * @return {Promise} + */ + loadAnimation(animationIndex) { + const json = this.json; + const parser = this; + const animationDef = json.animations[animationIndex]; + const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; + const pendingNodes = []; + const pendingInputAccessors = []; + const pendingOutputAccessors = []; + const pendingSamplers = []; + const pendingTargets = []; + for (let i = 0, il = animationDef.channels.length; i < il; i++) { + const channel = animationDef.channels[i]; + const sampler = animationDef.samplers[channel.sampler]; + const target = channel.target; + const name = target.node; + const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; + const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; + if (target.node === void 0) continue; + pendingNodes.push(this.getDependency("node", name)); + pendingInputAccessors.push(this.getDependency("accessor", input)); + pendingOutputAccessors.push(this.getDependency("accessor", output)); + pendingSamplers.push(sampler); + pendingTargets.push(target); + } + return Promise.all([ + Promise.all(pendingNodes), + Promise.all(pendingInputAccessors), + Promise.all(pendingOutputAccessors), + Promise.all(pendingSamplers), + Promise.all(pendingTargets) + ]).then(function(dependencies) { + const nodes = dependencies[0]; + const inputAccessors = dependencies[1]; + const outputAccessors = dependencies[2]; + const samplers = dependencies[3]; + const targets = dependencies[4]; + const tracks = []; + for (let i = 0, il = nodes.length; i < il; i++) { + const node = nodes[i]; + const inputAccessor = inputAccessors[i]; + const outputAccessor = outputAccessors[i]; + const sampler = samplers[i]; + const target = targets[i]; + if (node === void 0) continue; + if (node.updateMatrix) { + node.updateMatrix(); + } + const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); + if (createdTracks) { + for (let k = 0; k < createdTracks.length; k++) { + tracks.push(createdTracks[k]); + } + } + } + return new AnimationClip(animationName, void 0, tracks); + }); + } + createNodeMesh(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + if (nodeDef.mesh === void 0) return null; + return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { + const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); + if (nodeDef.weights !== void 0) { + node.traverse(function(o) { + if (!o.isMesh) return; + for (let i = 0, il = nodeDef.weights.length; i < il; i++) { + o.morphTargetInfluences[i] = nodeDef.weights[i]; + } + }); + } + return node; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy + * @param {number} nodeIndex + * @return {Promise} + */ + loadNode(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + const nodePending = parser._loadNodeShallow(nodeIndex); + const childPending = []; + const childrenDef = nodeDef.children || []; + for (let i = 0, il = childrenDef.length; i < il; i++) { + childPending.push(parser.getDependency("node", childrenDef[i])); + } + const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); + return Promise.all([ + nodePending, + Promise.all(childPending), + skeletonPending + ]).then(function(results) { + const node = results[0]; + const children = results[1]; + const skeleton = results[2]; + if (skeleton !== null) { + node.traverse(function(mesh) { + if (!mesh.isSkinnedMesh) return; + mesh.bind(skeleton, _identityMatrix); + }); + } + for (let i = 0, il = children.length; i < il; i++) { + node.add(children[i]); + } + return node; + }); + } + // ._loadNodeShallow() parses a single node. + // skin and child nodes are created and added in .loadNode() (no '_' prefix). + _loadNodeShallow(nodeIndex) { + const json = this.json; + const extensions = this.extensions; + const parser = this; + if (this.nodeCache[nodeIndex] !== void 0) { + return this.nodeCache[nodeIndex]; + } + const nodeDef = json.nodes[nodeIndex]; + const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; + const pending = []; + const meshPromise = parser._invokeOne(function(ext) { + return ext.createNodeMesh && ext.createNodeMesh(nodeIndex); + }); + if (meshPromise) { + pending.push(meshPromise); + } + if (nodeDef.camera !== void 0) { + pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { + return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); + })); + } + parser._invokeAll(function(ext) { + return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex); + }).forEach(function(promise) { + pending.push(promise); + }); + this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { + let node; + if (nodeDef.isBone === true) { + node = new Bone(); + } else if (objects.length > 1) { + node = new Group(); + } else if (objects.length === 1) { + node = objects[0]; + } else { + node = new Object3D(); + } + if (node !== objects[0]) { + for (let i = 0, il = objects.length; i < il; i++) { + node.add(objects[i]); + } + } + if (nodeDef.name) { + node.userData.name = nodeDef.name; + node.name = nodeName; + } + assignExtrasToUserData(node, nodeDef); + if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); + if (nodeDef.matrix !== void 0) { + const matrix = new Matrix4(); + matrix.fromArray(nodeDef.matrix); + node.applyMatrix4(matrix); + } else { + if (nodeDef.translation !== void 0) { + node.position.fromArray(nodeDef.translation); + } + if (nodeDef.rotation !== void 0) { + node.quaternion.fromArray(nodeDef.rotation); + } + if (nodeDef.scale !== void 0) { + node.scale.fromArray(nodeDef.scale); + } + } + if (!parser.associations.has(node)) { + parser.associations.set(node, {}); + } + parser.associations.get(node).nodes = nodeIndex; + return node; + }); + return this.nodeCache[nodeIndex]; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes + * @param {number} sceneIndex + * @return {Promise} + */ + loadScene(sceneIndex) { + const extensions = this.extensions; + const sceneDef = this.json.scenes[sceneIndex]; + const parser = this; + const scene = new Group(); + if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); + assignExtrasToUserData(scene, sceneDef); + if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); + const nodeIds = sceneDef.nodes || []; + const pending = []; + for (let i = 0, il = nodeIds.length; i < il; i++) { + pending.push(parser.getDependency("node", nodeIds[i])); + } + return Promise.all(pending).then(function(nodes) { + for (let i = 0, il = nodes.length; i < il; i++) { + scene.add(nodes[i]); + } + const reduceAssociations = (node) => { + const reducedAssociations = /* @__PURE__ */ new Map(); + for (const [key, value] of parser.associations) { + if (key instanceof Material || key instanceof Texture) { + reducedAssociations.set(key, value); + } + } + node.traverse((node2) => { + const mappings = parser.associations.get(node2); + if (mappings != null) { + reducedAssociations.set(node2, mappings); + } + }); + return reducedAssociations; + }; + parser.associations = reduceAssociations(scene); + return scene; + }); + } + _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { + const tracks = []; + const targetName = node.name ? node.name : node.uuid; + const targetNames = []; + if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) { + node.traverse(function(object) { + if (object.morphTargetInfluences) { + targetNames.push(object.name ? object.name : object.uuid); + } + }); + } else { + targetNames.push(targetName); + } + let TypedKeyframeTrack; + switch (PATH_PROPERTIES[target.path]) { + case PATH_PROPERTIES.weights: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case PATH_PROPERTIES.rotation: + TypedKeyframeTrack = QuaternionKeyframeTrack; + break; + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + default: + switch (outputAccessor.itemSize) { + case 1: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case 2: + case 3: + default: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + } + break; + } + const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; + const outputArray = this._getArrayFromAccessor(outputAccessor); + for (let j = 0, jl = targetNames.length; j < jl; j++) { + const track = new TypedKeyframeTrack( + targetNames[j] + "." + PATH_PROPERTIES[target.path], + inputAccessor.array, + outputArray, + interpolation + ); + if (sampler.interpolation === "CUBICSPLINE") { + this._createCubicSplineTrackInterpolant(track); + } + tracks.push(track); + } + return tracks; + } + _getArrayFromAccessor(accessor) { + let outputArray = accessor.array; + if (accessor.normalized) { + const scale = getNormalizedComponentScale(outputArray.constructor); + const scaled = new Float32Array(outputArray.length); + for (let j = 0, jl = outputArray.length; j < jl; j++) { + scaled[j] = outputArray[j] * scale; + } + outputArray = scaled; + } + return outputArray; + } + _createCubicSplineTrackInterpolant(track) { + track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) { + const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant; + return new interpolantType(this.times, this.values, this.getValueSize() / 3, result); + }; + track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; + } +}; +function computeBounds(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const box = new Box3(); + if (attributes.POSITION !== void 0) { + const accessor = parser.json.accessors[attributes.POSITION]; + const min = accessor.min; + const max = accessor.max; + if (min !== void 0 && max !== void 0) { + box.set( + new Vector3(min[0], min[1], min[2]), + new Vector3(max[0], max[1], max[2]) + ); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + box.min.multiplyScalar(boxScale); + box.max.multiplyScalar(boxScale); + } + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + return; + } + } else { + return; + } + const targets = primitiveDef.targets; + if (targets !== void 0) { + const maxDisplacement = new Vector3(); + const vector = new Vector3(); + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) { + const accessor = parser.json.accessors[target.POSITION]; + const min = accessor.min; + const max = accessor.max; + if (min !== void 0 && max !== void 0) { + vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0]))); + vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1]))); + vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2]))); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + vector.multiplyScalar(boxScale); + } + maxDisplacement.max(vector); + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + } + } + } + box.expandByVector(maxDisplacement); + } + geometry.boundingBox = box; + const sphere = new Sphere(); + box.getCenter(sphere.center); + sphere.radius = box.min.distanceTo(box.max) / 2; + geometry.boundingSphere = sphere; +} +function addPrimitiveAttributes(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const pending = []; + function assignAttributeAccessor(accessorIndex, attributeName) { + return parser.getDependency("accessor", accessorIndex).then(function(accessor) { + geometry.setAttribute(attributeName, accessor); + }); + } + for (const gltfAttributeName in attributes) { + const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); + if (threeAttributeName in geometry.attributes) continue; + pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); + } + if (primitiveDef.indices !== void 0 && !geometry.index) { + const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { + geometry.setIndex(accessor2); + }); + pending.push(accessor); + } + if (ColorManagement.workingColorSpace !== LinearSRGBColorSpace && "COLOR_0" in attributes) { + console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.`); + } + assignExtrasToUserData(geometry, primitiveDef); + computeBounds(geometry, primitiveDef, parser); + return Promise.all(pending).then(function() { + return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; + }); +} + +export { + mergeGeometries, + deepCloneAttribute, + mergeVertices, + mergeGroups, + BufferGeometryUtils_exports, + GLTFLoader +}; +//# sourceMappingURL=chunk-LBH6F3OL.js.map diff --git a/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js.map b/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js.map new file mode 100644 index 0000000..4121c2b --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/chunk-LBH6F3OL.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../three/examples/jsm/utils/BufferGeometryUtils.js", "../../three/examples/jsm/loaders/GLTFLoader.js"], + "sourcesContent": ["import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n", "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n"], + "mappings": "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", + "names": ["i", "object", "morphTargetsRelative", "a", "b", "c", "il", "self", "res", "sourceURI", "node", "accessor"] +} diff --git a/site/interface/site/node_modules/.vite/deps/three.js b/site/interface/site/node_modules/.vite/deps/three.js index 9516402..6f744c1 100644 --- a/site/interface/site/node_modules/.vite/deps/three.js +++ b/site/interface/site/node_modules/.vite/deps/three.js @@ -1,30707 +1,423 @@ -// node_modules/three/build/three.module.js -var REVISION = "167"; -var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; -var TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; -var CullFaceNone = 0; -var CullFaceBack = 1; -var CullFaceFront = 2; -var CullFaceFrontBack = 3; -var BasicShadowMap = 0; -var PCFShadowMap = 1; -var PCFSoftShadowMap = 2; -var VSMShadowMap = 3; -var FrontSide = 0; -var BackSide = 1; -var DoubleSide = 2; -var NoBlending = 0; -var NormalBlending = 1; -var AdditiveBlending = 2; -var SubtractiveBlending = 3; -var MultiplyBlending = 4; -var CustomBlending = 5; -var AddEquation = 100; -var SubtractEquation = 101; -var ReverseSubtractEquation = 102; -var MinEquation = 103; -var MaxEquation = 104; -var ZeroFactor = 200; -var OneFactor = 201; -var SrcColorFactor = 202; -var OneMinusSrcColorFactor = 203; -var SrcAlphaFactor = 204; -var OneMinusSrcAlphaFactor = 205; -var DstAlphaFactor = 206; -var OneMinusDstAlphaFactor = 207; -var DstColorFactor = 208; -var OneMinusDstColorFactor = 209; -var SrcAlphaSaturateFactor = 210; -var ConstantColorFactor = 211; -var OneMinusConstantColorFactor = 212; -var ConstantAlphaFactor = 213; -var OneMinusConstantAlphaFactor = 214; -var NeverDepth = 0; -var AlwaysDepth = 1; -var LessDepth = 2; -var LessEqualDepth = 3; -var EqualDepth = 4; -var GreaterEqualDepth = 5; -var GreaterDepth = 6; -var NotEqualDepth = 7; -var MultiplyOperation = 0; -var MixOperation = 1; -var AddOperation = 2; -var NoToneMapping = 0; -var LinearToneMapping = 1; -var ReinhardToneMapping = 2; -var CineonToneMapping = 3; -var ACESFilmicToneMapping = 4; -var CustomToneMapping = 5; -var AgXToneMapping = 6; -var NeutralToneMapping = 7; -var AttachedBindMode = "attached"; -var DetachedBindMode = "detached"; -var UVMapping = 300; -var CubeReflectionMapping = 301; -var CubeRefractionMapping = 302; -var EquirectangularReflectionMapping = 303; -var EquirectangularRefractionMapping = 304; -var CubeUVReflectionMapping = 306; -var RepeatWrapping = 1e3; -var ClampToEdgeWrapping = 1001; -var MirroredRepeatWrapping = 1002; -var NearestFilter = 1003; -var NearestMipmapNearestFilter = 1004; -var NearestMipMapNearestFilter = 1004; -var NearestMipmapLinearFilter = 1005; -var NearestMipMapLinearFilter = 1005; -var LinearFilter = 1006; -var LinearMipmapNearestFilter = 1007; -var LinearMipMapNearestFilter = 1007; -var LinearMipmapLinearFilter = 1008; -var LinearMipMapLinearFilter = 1008; -var UnsignedByteType = 1009; -var ByteType = 1010; -var ShortType = 1011; -var UnsignedShortType = 1012; -var IntType = 1013; -var UnsignedIntType = 1014; -var FloatType = 1015; -var HalfFloatType = 1016; -var UnsignedShort4444Type = 1017; -var UnsignedShort5551Type = 1018; -var UnsignedInt248Type = 1020; -var UnsignedInt5999Type = 35902; -var AlphaFormat = 1021; -var RGBFormat = 1022; -var RGBAFormat = 1023; -var LuminanceFormat = 1024; -var LuminanceAlphaFormat = 1025; -var DepthFormat = 1026; -var DepthStencilFormat = 1027; -var RedFormat = 1028; -var RedIntegerFormat = 1029; -var RGFormat = 1030; -var RGIntegerFormat = 1031; -var RGBIntegerFormat = 1032; -var RGBAIntegerFormat = 1033; -var RGB_S3TC_DXT1_Format = 33776; -var RGBA_S3TC_DXT1_Format = 33777; -var RGBA_S3TC_DXT3_Format = 33778; -var RGBA_S3TC_DXT5_Format = 33779; -var RGB_PVRTC_4BPPV1_Format = 35840; -var RGB_PVRTC_2BPPV1_Format = 35841; -var RGBA_PVRTC_4BPPV1_Format = 35842; -var RGBA_PVRTC_2BPPV1_Format = 35843; -var RGB_ETC1_Format = 36196; -var RGB_ETC2_Format = 37492; -var RGBA_ETC2_EAC_Format = 37496; -var RGBA_ASTC_4x4_Format = 37808; -var RGBA_ASTC_5x4_Format = 37809; -var RGBA_ASTC_5x5_Format = 37810; -var RGBA_ASTC_6x5_Format = 37811; -var RGBA_ASTC_6x6_Format = 37812; -var RGBA_ASTC_8x5_Format = 37813; -var RGBA_ASTC_8x6_Format = 37814; -var RGBA_ASTC_8x8_Format = 37815; -var RGBA_ASTC_10x5_Format = 37816; -var RGBA_ASTC_10x6_Format = 37817; -var RGBA_ASTC_10x8_Format = 37818; -var RGBA_ASTC_10x10_Format = 37819; -var RGBA_ASTC_12x10_Format = 37820; -var RGBA_ASTC_12x12_Format = 37821; -var RGBA_BPTC_Format = 36492; -var RGB_BPTC_SIGNED_Format = 36494; -var RGB_BPTC_UNSIGNED_Format = 36495; -var RED_RGTC1_Format = 36283; -var SIGNED_RED_RGTC1_Format = 36284; -var RED_GREEN_RGTC2_Format = 36285; -var SIGNED_RED_GREEN_RGTC2_Format = 36286; -var LoopOnce = 2200; -var LoopRepeat = 2201; -var LoopPingPong = 2202; -var InterpolateDiscrete = 2300; -var InterpolateLinear = 2301; -var InterpolateSmooth = 2302; -var ZeroCurvatureEnding = 2400; -var ZeroSlopeEnding = 2401; -var WrapAroundEnding = 2402; -var NormalAnimationBlendMode = 2500; -var AdditiveAnimationBlendMode = 2501; -var TrianglesDrawMode = 0; -var TriangleStripDrawMode = 1; -var TriangleFanDrawMode = 2; -var BasicDepthPacking = 3200; -var RGBADepthPacking = 3201; -var RGBDepthPacking = 3202; -var RGDepthPacking = 3203; -var TangentSpaceNormalMap = 0; -var ObjectSpaceNormalMap = 1; -var NoColorSpace = ""; -var SRGBColorSpace = "srgb"; -var LinearSRGBColorSpace = "srgb-linear"; -var DisplayP3ColorSpace = "display-p3"; -var LinearDisplayP3ColorSpace = "display-p3-linear"; -var LinearTransfer = "linear"; -var SRGBTransfer = "srgb"; -var Rec709Primaries = "rec709"; -var P3Primaries = "p3"; -var ZeroStencilOp = 0; -var KeepStencilOp = 7680; -var ReplaceStencilOp = 7681; -var IncrementStencilOp = 7682; -var DecrementStencilOp = 7683; -var IncrementWrapStencilOp = 34055; -var DecrementWrapStencilOp = 34056; -var InvertStencilOp = 5386; -var NeverStencilFunc = 512; -var LessStencilFunc = 513; -var EqualStencilFunc = 514; -var LessEqualStencilFunc = 515; -var GreaterStencilFunc = 516; -var NotEqualStencilFunc = 517; -var GreaterEqualStencilFunc = 518; -var AlwaysStencilFunc = 519; -var NeverCompare = 512; -var LessCompare = 513; -var EqualCompare = 514; -var LessEqualCompare = 515; -var GreaterCompare = 516; -var NotEqualCompare = 517; -var GreaterEqualCompare = 518; -var AlwaysCompare = 519; -var StaticDrawUsage = 35044; -var DynamicDrawUsage = 35048; -var StreamDrawUsage = 35040; -var StaticReadUsage = 35045; -var DynamicReadUsage = 35049; -var StreamReadUsage = 35041; -var StaticCopyUsage = 35046; -var DynamicCopyUsage = 35050; -var StreamCopyUsage = 35042; -var GLSL1 = "100"; -var GLSL3 = "300 es"; -var WebGLCoordinateSystem = 2e3; -var WebGPUCoordinateSystem = 2001; -var EventDispatcher = class { - addEventListener(type, listener) { - if (this._listeners === void 0) this._listeners = {}; - const listeners = this._listeners; - if (listeners[type] === void 0) { - listeners[type] = []; - } - if (listeners[type].indexOf(listener) === -1) { - listeners[type].push(listener); - } - } - hasEventListener(type, listener) { - if (this._listeners === void 0) return false; - const listeners = this._listeners; - return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1; - } - removeEventListener(type, listener) { - if (this._listeners === void 0) return; - const listeners = this._listeners; - const listenerArray = listeners[type]; - if (listenerArray !== void 0) { - const index = listenerArray.indexOf(listener); - if (index !== -1) { - listenerArray.splice(index, 1); - } - } - } - dispatchEvent(event) { - if (this._listeners === void 0) return; - const listeners = this._listeners; - const listenerArray = listeners[event.type]; - if (listenerArray !== void 0) { - event.target = this; - const array = listenerArray.slice(0); - for (let i = 0, l = array.length; i < l; i++) { - array[i].call(this, event); - } - event.target = null; - } - } -}; -var _lut = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"]; -var _seed = 1234567; -var DEG2RAD = Math.PI / 180; -var RAD2DEG = 180 / Math.PI; -function generateUUID() { - const d0 = Math.random() * 4294967295 | 0; - const d1 = Math.random() * 4294967295 | 0; - const d2 = Math.random() * 4294967295 | 0; - const d3 = Math.random() * 4294967295 | 0; - const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255]; - return uuid.toLowerCase(); -} -function clamp(value, min, max) { - return Math.max(min, Math.min(max, value)); -} -function euclideanModulo(n, m) { - return (n % m + m) % m; -} -function mapLinear(x, a1, a2, b1, b2) { - return b1 + (x - a1) * (b2 - b1) / (a2 - a1); -} -function inverseLerp(x, y, value) { - if (x !== y) { - return (value - x) / (y - x); - } else { - return 0; - } -} -function lerp(x, y, t) { - return (1 - t) * x + t * y; -} -function damp(x, y, lambda, dt) { - return lerp(x, y, 1 - Math.exp(-lambda * dt)); -} -function pingpong(x, length = 1) { - return length - Math.abs(euclideanModulo(x, length * 2) - length); -} -function smoothstep(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - x = (x - min) / (max - min); - return x * x * (3 - 2 * x); -} -function smootherstep(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - x = (x - min) / (max - min); - return x * x * x * (x * (x * 6 - 15) + 10); -} -function randInt(low, high) { - return low + Math.floor(Math.random() * (high - low + 1)); -} -function randFloat(low, high) { - return low + Math.random() * (high - low); -} -function randFloatSpread(range) { - return range * (0.5 - Math.random()); -} -function seededRandom(s) { - if (s !== void 0) _seed = s; - let t = _seed += 1831565813; - t = Math.imul(t ^ t >>> 15, t | 1); - t ^= t + Math.imul(t ^ t >>> 7, t | 61); - return ((t ^ t >>> 14) >>> 0) / 4294967296; -} -function degToRad(degrees) { - return degrees * DEG2RAD; -} -function radToDeg(radians) { - return radians * RAD2DEG; -} -function isPowerOfTwo(value) { - return (value & value - 1) === 0 && value !== 0; -} -function ceilPowerOfTwo(value) { - return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2)); -} -function floorPowerOfTwo(value) { - return Math.pow(2, Math.floor(Math.log(value) / Math.LN2)); -} -function setQuaternionFromProperEuler(q, a, b, c, order) { - const cos = Math.cos; - const sin = Math.sin; - const c2 = cos(b / 2); - const s2 = sin(b / 2); - const c13 = cos((a + c) / 2); - const s13 = sin((a + c) / 2); - const c1_3 = cos((a - c) / 2); - const s1_3 = sin((a - c) / 2); - const c3_1 = cos((c - a) / 2); - const s3_1 = sin((c - a) / 2); - switch (order) { - case "XYX": - q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13); - break; - case "YZY": - q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13); - break; - case "ZXZ": - q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13); - break; - case "XZX": - q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13); - break; - case "YXY": - q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13); - break; - case "ZYZ": - q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13); - break; - default: - console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + order); - } -} -function denormalize(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - case Uint32Array: - return value / 4294967295; - case Uint16Array: - return value / 65535; - case Uint8Array: - return value / 255; - case Int32Array: - return Math.max(value / 2147483647, -1); - case Int16Array: - return Math.max(value / 32767, -1); - case Int8Array: - return Math.max(value / 127, -1); - default: - throw new Error("Invalid component type."); - } -} -function normalize(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - case Uint32Array: - return Math.round(value * 4294967295); - case Uint16Array: - return Math.round(value * 65535); - case Uint8Array: - return Math.round(value * 255); - case Int32Array: - return Math.round(value * 2147483647); - case Int16Array: - return Math.round(value * 32767); - case Int8Array: - return Math.round(value * 127); - default: - throw new Error("Invalid component type."); - } -} -var MathUtils = { - DEG2RAD, - RAD2DEG, - generateUUID, - clamp, - euclideanModulo, - mapLinear, - inverseLerp, - lerp, - damp, - pingpong, - smoothstep, - smootherstep, - randInt, - randFloat, - randFloatSpread, - seededRandom, - degToRad, - radToDeg, - isPowerOfTwo, - ceilPowerOfTwo, - floorPowerOfTwo, - setQuaternionFromProperEuler, - normalize, - denormalize -}; -var Vector2 = class _Vector2 { - constructor(x = 0, y = 0) { - _Vector2.prototype.isVector2 = true; - this.x = x; - this.y = y; - } - get width() { - return this.x; - } - set width(value) { - this.x = value; - } - get height() { - return this.y; - } - set height(value) { - this.y = value; - } - set(x, y) { - this.x = x; - this.y = y; - return this; - } - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - return this; - } - setX(x) { - this.x = x; - return this; - } - setY(y) { - this.y = y; - return this; - } - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - default: - throw new Error("index is out of range: " + index); - } - return this; - } - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - default: - throw new Error("index is out of range: " + index); - } - } - clone() { - return new this.constructor(this.x, this.y); - } - copy(v) { - this.x = v.x; - this.y = v.y; - return this; - } - add(v) { - this.x += v.x; - this.y += v.y; - return this; - } - addScalar(s) { - this.x += s; - this.y += s; - return this; - } - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - return this; - } - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - return this; - } - sub(v) { - this.x -= v.x; - this.y -= v.y; - return this; - } - subScalar(s) { - this.x -= s; - this.y -= s; - return this; - } - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - return this; - } - divide(v) { - this.x /= v.x; - this.y /= v.y; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - applyMatrix3(m) { - const x = this.x, y = this.y; - const e = m.elements; - this.x = e[0] * x + e[3] * y + e[6]; - this.y = e[1] * x + e[4] * y + e[7]; - return this; - } - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - return this; - } - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - return this; - } - clamp(min, max) { - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - return this; - } - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - return this; - } - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - return this; - } - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - return this; - } - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - return this; - } - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - return this; - } - negate() { - this.x = -this.x; - this.y = -this.y; - return this; - } - dot(v) { - return this.x * v.x + this.y * v.y; - } - cross(v) { - return this.x * v.y - this.y * v.x; - } - lengthSq() { - return this.x * this.x + this.y * this.y; - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y); - } - normalize() { - return this.divideScalar(this.length() || 1); - } - angle() { - const angle = Math.atan2(-this.y, -this.x) + Math.PI; - return angle; - } - angleTo(v) { - const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); - if (denominator === 0) return Math.PI / 2; - const theta = this.dot(v) / denominator; - return Math.acos(clamp(theta, -1, 1)); - } - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - distanceToSquared(v) { - const dx = this.x - v.x, dy = this.y - v.y; - return dx * dx + dy * dy; - } - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y); - } - setLength(length) { - return this.normalize().multiplyScalar(length); - } - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - return this; - } - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y; - } - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - return array; - } - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - return this; - } - rotateAround(center, angle) { - const c = Math.cos(angle), s = Math.sin(angle); - const x = this.x - center.x; - const y = this.y - center.y; - this.x = x * c - y * s + center.x; - this.y = x * s + y * c + center.y; - return this; - } - random() { - this.x = Math.random(); - this.y = Math.random(); - return this; - } - *[Symbol.iterator]() { - yield this.x; - yield this.y; - } -}; -var Matrix3 = class _Matrix3 { - constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) { - _Matrix3.prototype.isMatrix3 = true; - this.elements = [ - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1 - ]; - if (n11 !== void 0) { - this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33); - } - } - set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { - const te = this.elements; - te[0] = n11; - te[1] = n21; - te[2] = n31; - te[3] = n12; - te[4] = n22; - te[5] = n32; - te[6] = n13; - te[7] = n23; - te[8] = n33; - return this; - } - identity() { - this.set( - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1 - ); - return this; - } - copy(m) { - const te = this.elements; - const me = m.elements; - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - return this; - } - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrix3Column(this, 0); - yAxis.setFromMatrix3Column(this, 1); - zAxis.setFromMatrix3Column(this, 2); - return this; - } - setFromMatrix4(m) { - const me = m.elements; - this.set( - me[0], - me[4], - me[8], - me[1], - me[5], - me[9], - me[2], - me[6], - me[10] - ); - return this; - } - multiply(m) { - return this.multiplyMatrices(this, m); - } - premultiply(m) { - return this.multiplyMatrices(m, this); - } - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - const a11 = ae[0], a12 = ae[3], a13 = ae[6]; - const a21 = ae[1], a22 = ae[4], a23 = ae[7]; - const a31 = ae[2], a32 = ae[5], a33 = ae[8]; - const b11 = be[0], b12 = be[3], b13 = be[6]; - const b21 = be[1], b22 = be[4], b23 = be[7]; - const b31 = be[2], b32 = be[5], b33 = be[8]; - te[0] = a11 * b11 + a12 * b21 + a13 * b31; - te[3] = a11 * b12 + a12 * b22 + a13 * b32; - te[6] = a11 * b13 + a12 * b23 + a13 * b33; - te[1] = a21 * b11 + a22 * b21 + a23 * b31; - te[4] = a21 * b12 + a22 * b22 + a23 * b32; - te[7] = a21 * b13 + a22 * b23 + a23 * b33; - te[2] = a31 * b11 + a32 * b21 + a33 * b31; - te[5] = a31 * b12 + a32 * b22 + a33 * b32; - te[8] = a31 * b13 + a32 * b23 + a33 * b33; - return this; - } - multiplyScalar(s) { - const te = this.elements; - te[0] *= s; - te[3] *= s; - te[6] *= s; - te[1] *= s; - te[4] *= s; - te[7] *= s; - te[2] *= s; - te[5] *= s; - te[8] *= s; - return this; - } - determinant() { - const te = this.elements; - const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i = te[8]; - return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; - } - invert() { - const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); - const detInv = 1 / det; - te[0] = t11 * detInv; - te[1] = (n31 * n23 - n33 * n21) * detInv; - te[2] = (n32 * n21 - n31 * n22) * detInv; - te[3] = t12 * detInv; - te[4] = (n33 * n11 - n31 * n13) * detInv; - te[5] = (n31 * n12 - n32 * n11) * detInv; - te[6] = t13 * detInv; - te[7] = (n21 * n13 - n23 * n11) * detInv; - te[8] = (n22 * n11 - n21 * n12) * detInv; - return this; - } - transpose() { - let tmp2; - const m = this.elements; - tmp2 = m[1]; - m[1] = m[3]; - m[3] = tmp2; - tmp2 = m[2]; - m[2] = m[6]; - m[6] = tmp2; - tmp2 = m[5]; - m[5] = m[7]; - m[7] = tmp2; - return this; - } - getNormalMatrix(matrix4) { - return this.setFromMatrix4(matrix4).invert().transpose(); - } - transposeIntoArray(r) { - const m = this.elements; - r[0] = m[0]; - r[1] = m[3]; - r[2] = m[6]; - r[3] = m[1]; - r[4] = m[4]; - r[5] = m[7]; - r[6] = m[2]; - r[7] = m[5]; - r[8] = m[8]; - return this; - } - setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { - const c = Math.cos(rotation); - const s = Math.sin(rotation); - this.set( - sx * c, - sx * s, - -sx * (c * cx + s * cy) + cx + tx, - -sy * s, - sy * c, - -sy * (-s * cx + c * cy) + cy + ty, - 0, - 0, - 1 - ); - return this; - } - // - scale(sx, sy) { - this.premultiply(_m3.makeScale(sx, sy)); - return this; - } - rotate(theta) { - this.premultiply(_m3.makeRotation(-theta)); - return this; - } - translate(tx, ty) { - this.premultiply(_m3.makeTranslation(tx, ty)); - return this; - } - // for 2D Transforms - makeTranslation(x, y) { - if (x.isVector2) { - this.set( - 1, - 0, - x.x, - 0, - 1, - x.y, - 0, - 0, - 1 - ); - } else { - this.set( - 1, - 0, - x, - 0, - 1, - y, - 0, - 0, - 1 - ); - } - return this; - } - makeRotation(theta) { - const c = Math.cos(theta); - const s = Math.sin(theta); - this.set( - c, - -s, - 0, - s, - c, - 0, - 0, - 0, - 1 - ); - return this; - } - makeScale(x, y) { - this.set( - x, - 0, - 0, - 0, - y, - 0, - 0, - 0, - 1 - ); - return this; - } - // - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - for (let i = 0; i < 9; i++) { - if (te[i] !== me[i]) return false; - } - return true; - } - fromArray(array, offset = 0) { - for (let i = 0; i < 9; i++) { - this.elements[i] = array[i + offset]; - } - return this; - } - toArray(array = [], offset = 0) { - const te = this.elements; - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - array[offset + 3] = te[3]; - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - array[offset + 8] = te[8]; - return array; - } - clone() { - return new this.constructor().fromArray(this.elements); - } -}; -var _m3 = new Matrix3(); -function arrayNeedsUint32(array) { - for (let i = array.length - 1; i >= 0; --i) { - if (array[i] >= 65535) return true; - } - return false; -} -var TYPED_ARRAYS = { - Int8Array, - Uint8Array, - Uint8ClampedArray, - Int16Array, - Uint16Array, - Int32Array, - Uint32Array, - Float32Array, - Float64Array -}; -function getTypedArray(type, buffer) { - return new TYPED_ARRAYS[type](buffer); -} -function createElementNS(name) { - return document.createElementNS("http://www.w3.org/1999/xhtml", name); -} -function createCanvasElement() { - const canvas = createElementNS("canvas"); - canvas.style.display = "block"; - return canvas; -} -var _cache = {}; -function warnOnce(message) { - if (message in _cache) return; - _cache[message] = true; - console.warn(message); -} -function probeAsync(gl, sync, interval) { - return new Promise(function(resolve, reject) { - function probe() { - switch (gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0)) { - case gl.WAIT_FAILED: - reject(); - break; - case gl.TIMEOUT_EXPIRED: - setTimeout(probe, interval); - break; - default: - resolve(); - } - } - setTimeout(probe, interval); - }); -} -var LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = new Matrix3().set( - 0.8224621, - 0.177538, - 0, - 0.0331941, - 0.9668058, - 0, - 0.0170827, - 0.0723974, - 0.9105199 -); -var LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = new Matrix3().set( - 1.2249401, - -0.2249404, - 0, - -0.0420569, - 1.0420571, - 0, - -0.0196376, - -0.0786361, - 1.0982735 -); -var COLOR_SPACES = { - [LinearSRGBColorSpace]: { - transfer: LinearTransfer, - primaries: Rec709Primaries, - luminanceCoefficients: [0.2126, 0.7152, 0.0722], - toReference: (color) => color, - fromReference: (color) => color - }, - [SRGBColorSpace]: { - transfer: SRGBTransfer, - primaries: Rec709Primaries, - luminanceCoefficients: [0.2126, 0.7152, 0.0722], - toReference: (color) => color.convertSRGBToLinear(), - fromReference: (color) => color.convertLinearToSRGB() - }, - [LinearDisplayP3ColorSpace]: { - transfer: LinearTransfer, - primaries: P3Primaries, - luminanceCoefficients: [0.2289, 0.6917, 0.0793], - toReference: (color) => color.applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), - fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3) - }, - [DisplayP3ColorSpace]: { - transfer: SRGBTransfer, - primaries: P3Primaries, - luminanceCoefficients: [0.2289, 0.6917, 0.0793], - toReference: (color) => color.convertSRGBToLinear().applyMatrix3(LINEAR_DISPLAY_P3_TO_LINEAR_SRGB), - fromReference: (color) => color.applyMatrix3(LINEAR_SRGB_TO_LINEAR_DISPLAY_P3).convertLinearToSRGB() - } -}; -var SUPPORTED_WORKING_COLOR_SPACES = /* @__PURE__ */ new Set([LinearSRGBColorSpace, LinearDisplayP3ColorSpace]); -var ColorManagement = { - enabled: true, - _workingColorSpace: LinearSRGBColorSpace, - get workingColorSpace() { - return this._workingColorSpace; - }, - set workingColorSpace(colorSpace) { - if (!SUPPORTED_WORKING_COLOR_SPACES.has(colorSpace)) { - throw new Error(`Unsupported working color space, "${colorSpace}".`); - } - this._workingColorSpace = colorSpace; - }, - convert: function(color, sourceColorSpace, targetColorSpace) { - if (this.enabled === false || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) { - return color; - } - const sourceToReference = COLOR_SPACES[sourceColorSpace].toReference; - const targetFromReference = COLOR_SPACES[targetColorSpace].fromReference; - return targetFromReference(sourceToReference(color)); - }, - fromWorkingColorSpace: function(color, targetColorSpace) { - return this.convert(color, this._workingColorSpace, targetColorSpace); - }, - toWorkingColorSpace: function(color, sourceColorSpace) { - return this.convert(color, sourceColorSpace, this._workingColorSpace); - }, - getPrimaries: function(colorSpace) { - return COLOR_SPACES[colorSpace].primaries; - }, - getTransfer: function(colorSpace) { - if (colorSpace === NoColorSpace) return LinearTransfer; - return COLOR_SPACES[colorSpace].transfer; - }, - getLuminanceCoefficients: function(target, colorSpace = this._workingColorSpace) { - return target.fromArray(COLOR_SPACES[colorSpace].luminanceCoefficients); - } -}; -function SRGBToLinear(c) { - return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4); -} -function LinearToSRGB(c) { - return c < 31308e-7 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055; -} -var _canvas; -var ImageUtils = class { - static getDataURL(image) { - if (/^data:/i.test(image.src)) { - return image.src; - } - if (typeof HTMLCanvasElement === "undefined") { - return image.src; - } - let canvas; - if (image instanceof HTMLCanvasElement) { - canvas = image; - } else { - if (_canvas === void 0) _canvas = createElementNS("canvas"); - _canvas.width = image.width; - _canvas.height = image.height; - const context = _canvas.getContext("2d"); - if (image instanceof ImageData) { - context.putImageData(image, 0, 0); - } else { - context.drawImage(image, 0, 0, image.width, image.height); - } - canvas = _canvas; - } - if (canvas.width > 2048 || canvas.height > 2048) { - console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons", image); - return canvas.toDataURL("image/jpeg", 0.6); - } else { - return canvas.toDataURL("image/png"); - } - } - static sRGBToLinear(image) { - if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { - const canvas = createElementNS("canvas"); - canvas.width = image.width; - canvas.height = image.height; - const context = canvas.getContext("2d"); - context.drawImage(image, 0, 0, image.width, image.height); - const imageData = context.getImageData(0, 0, image.width, image.height); - const data = imageData.data; - for (let i = 0; i < data.length; i++) { - data[i] = SRGBToLinear(data[i] / 255) * 255; - } - context.putImageData(imageData, 0, 0); - return canvas; - } else if (image.data) { - const data = image.data.slice(0); - for (let i = 0; i < data.length; i++) { - if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) { - data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255); - } else { - data[i] = SRGBToLinear(data[i]); - } - } - return { - data, - width: image.width, - height: image.height - }; - } else { - console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."); - return image; - } - } -}; -var _sourceId = 0; -var Source = class { - constructor(data = null) { - this.isSource = true; - Object.defineProperty(this, "id", { value: _sourceId++ }); - this.uuid = generateUUID(); - this.data = data; - this.dataReady = true; - this.version = 0; - } - set needsUpdate(value) { - if (value === true) this.version++; - } - toJSON(meta) { - const isRootObject = meta === void 0 || typeof meta === "string"; - if (!isRootObject && meta.images[this.uuid] !== void 0) { - return meta.images[this.uuid]; - } - const output = { - uuid: this.uuid, - url: "" - }; - const data = this.data; - if (data !== null) { - let url; - if (Array.isArray(data)) { - url = []; - for (let i = 0, l = data.length; i < l; i++) { - if (data[i].isDataTexture) { - url.push(serializeImage(data[i].image)); - } else { - url.push(serializeImage(data[i])); - } - } - } else { - url = serializeImage(data); - } - output.url = url; - } - if (!isRootObject) { - meta.images[this.uuid] = output; - } - return output; - } -}; -function serializeImage(image) { - if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { - return ImageUtils.getDataURL(image); - } else { - if (image.data) { - return { - data: Array.from(image.data), - width: image.width, - height: image.height, - type: image.data.constructor.name - }; - } else { - console.warn("THREE.Texture: Unable to serialize Texture."); - return {}; - } - } -} -var _textureId = 0; -var Texture = class _Texture extends EventDispatcher { - constructor(image = _Texture.DEFAULT_IMAGE, mapping = _Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = _Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace) { - super(); - this.isTexture = true; - Object.defineProperty(this, "id", { value: _textureId++ }); - this.uuid = generateUUID(); - this.name = ""; - this.source = new Source(image); - this.mipmaps = []; - this.mapping = mapping; - this.channel = 0; - this.wrapS = wrapS; - this.wrapT = wrapT; - this.magFilter = magFilter; - this.minFilter = minFilter; - this.anisotropy = anisotropy; - this.format = format; - this.internalFormat = null; - this.type = type; - this.offset = new Vector2(0, 0); - this.repeat = new Vector2(1, 1); - this.center = new Vector2(0, 0); - this.rotation = 0; - this.matrixAutoUpdate = true; - this.matrix = new Matrix3(); - this.generateMipmaps = true; - this.premultiplyAlpha = false; - this.flipY = true; - this.unpackAlignment = 4; - this.colorSpace = colorSpace; - this.userData = {}; - this.version = 0; - this.onUpdate = null; - this.isRenderTargetTexture = false; - this.pmremVersion = 0; - } - get image() { - return this.source.data; - } - set image(value = null) { - this.source.data = value; - } - updateMatrix() { - this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y); - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.name = source.name; - this.source = source.source; - this.mipmaps = source.mipmaps.slice(0); - this.mapping = source.mapping; - this.channel = source.channel; - this.wrapS = source.wrapS; - this.wrapT = source.wrapT; - this.magFilter = source.magFilter; - this.minFilter = source.minFilter; - this.anisotropy = source.anisotropy; - this.format = source.format; - this.internalFormat = source.internalFormat; - this.type = source.type; - this.offset.copy(source.offset); - this.repeat.copy(source.repeat); - this.center.copy(source.center); - this.rotation = source.rotation; - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrix.copy(source.matrix); - this.generateMipmaps = source.generateMipmaps; - this.premultiplyAlpha = source.premultiplyAlpha; - this.flipY = source.flipY; - this.unpackAlignment = source.unpackAlignment; - this.colorSpace = source.colorSpace; - this.userData = JSON.parse(JSON.stringify(source.userData)); - this.needsUpdate = true; - return this; - } - toJSON(meta) { - const isRootObject = meta === void 0 || typeof meta === "string"; - if (!isRootObject && meta.textures[this.uuid] !== void 0) { - return meta.textures[this.uuid]; - } - const output = { - metadata: { - version: 4.6, - type: "Texture", - generator: "Texture.toJSON" - }, - uuid: this.uuid, - name: this.name, - image: this.source.toJSON(meta).uuid, - mapping: this.mapping, - channel: this.channel, - repeat: [this.repeat.x, this.repeat.y], - offset: [this.offset.x, this.offset.y], - center: [this.center.x, this.center.y], - rotation: this.rotation, - wrap: [this.wrapS, this.wrapT], - format: this.format, - internalFormat: this.internalFormat, - type: this.type, - colorSpace: this.colorSpace, - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - flipY: this.flipY, - generateMipmaps: this.generateMipmaps, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - }; - if (Object.keys(this.userData).length > 0) output.userData = this.userData; - if (!isRootObject) { - meta.textures[this.uuid] = output; - } - return output; - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - } - transformUv(uv) { - if (this.mapping !== UVMapping) return uv; - uv.applyMatrix3(this.matrix); - if (uv.x < 0 || uv.x > 1) { - switch (this.wrapS) { - case RepeatWrapping: - uv.x = uv.x - Math.floor(uv.x); - break; - case ClampToEdgeWrapping: - uv.x = uv.x < 0 ? 0 : 1; - break; - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.x) % 2) === 1) { - uv.x = Math.ceil(uv.x) - uv.x; - } else { - uv.x = uv.x - Math.floor(uv.x); - } - break; - } - } - if (uv.y < 0 || uv.y > 1) { - switch (this.wrapT) { - case RepeatWrapping: - uv.y = uv.y - Math.floor(uv.y); - break; - case ClampToEdgeWrapping: - uv.y = uv.y < 0 ? 0 : 1; - break; - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.y) % 2) === 1) { - uv.y = Math.ceil(uv.y) - uv.y; - } else { - uv.y = uv.y - Math.floor(uv.y); - } - break; - } - } - if (this.flipY) { - uv.y = 1 - uv.y; - } - return uv; - } - set needsUpdate(value) { - if (value === true) { - this.version++; - this.source.needsUpdate = true; - } - } - set needsPMREMUpdate(value) { - if (value === true) { - this.pmremVersion++; - } - } -}; -Texture.DEFAULT_IMAGE = null; -Texture.DEFAULT_MAPPING = UVMapping; -Texture.DEFAULT_ANISOTROPY = 1; -var Vector4 = class _Vector4 { - constructor(x = 0, y = 0, z = 0, w = 1) { - _Vector4.prototype.isVector4 = true; - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - get width() { - return this.z; - } - set width(value) { - this.z = value; - } - get height() { - return this.w; - } - set height(value) { - this.w = value; - } - set(x, y, z, w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - return this; - } - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - this.w = scalar; - return this; - } - setX(x) { - this.x = x; - return this; - } - setY(y) { - this.y = y; - return this; - } - setZ(z) { - this.z = z; - return this; - } - setW(w) { - this.w = w; - return this; - } - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - case 2: - this.z = value; - break; - case 3: - this.w = value; - break; - default: - throw new Error("index is out of range: " + index); - } - return this; - } - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - case 3: - return this.w; - default: - throw new Error("index is out of range: " + index); - } - } - clone() { - return new this.constructor(this.x, this.y, this.z, this.w); - } - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - this.w = v.w !== void 0 ? v.w : 1; - return this; - } - add(v) { - this.x += v.x; - this.y += v.y; - this.z += v.z; - this.w += v.w; - return this; - } - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - this.w += s; - return this; - } - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - this.w = a.w + b.w; - return this; - } - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - this.w += v.w * s; - return this; - } - sub(v) { - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - this.w -= v.w; - return this; - } - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - this.w -= s; - return this; - } - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - this.w = a.w - b.w; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - this.w *= v.w; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - this.w *= scalar; - return this; - } - applyMatrix4(m) { - const x = this.x, y = this.y, z = this.z, w = this.w; - const e = m.elements; - this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w; - this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w; - this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w; - this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - setAxisAngleFromQuaternion(q) { - this.w = 2 * Math.acos(q.w); - const s = Math.sqrt(1 - q.w * q.w); - if (s < 1e-4) { - this.x = 1; - this.y = 0; - this.z = 0; - } else { - this.x = q.x / s; - this.y = q.y / s; - this.z = q.z / s; - } - return this; - } - setAxisAngleFromRotationMatrix(m) { - let angle, x, y, z; - const epsilon = 0.01, epsilon2 = 0.1, te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10]; - if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) { - if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) { - this.set(1, 0, 0, 0); - return this; - } - angle = Math.PI; - const xx = (m11 + 1) / 2; - const yy = (m22 + 1) / 2; - const zz = (m33 + 1) / 2; - const xy = (m12 + m21) / 4; - const xz = (m13 + m31) / 4; - const yz = (m23 + m32) / 4; - if (xx > yy && xx > zz) { - if (xx < epsilon) { - x = 0; - y = 0.707106781; - z = 0.707106781; - } else { - x = Math.sqrt(xx); - y = xy / x; - z = xz / x; - } - } else if (yy > zz) { - if (yy < epsilon) { - x = 0.707106781; - y = 0; - z = 0.707106781; - } else { - y = Math.sqrt(yy); - x = xy / y; - z = yz / y; - } - } else { - if (zz < epsilon) { - x = 0.707106781; - y = 0.707106781; - z = 0; - } else { - z = Math.sqrt(zz); - x = xz / z; - y = yz / z; - } - } - this.set(x, y, z, angle); - return this; - } - let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); - if (Math.abs(s) < 1e-3) s = 1; - this.x = (m32 - m23) / s; - this.y = (m13 - m31) / s; - this.z = (m21 - m12) / s; - this.w = Math.acos((m11 + m22 + m33 - 1) / 2); - return this; - } - setFromMatrixPosition(m) { - const e = m.elements; - this.x = e[12]; - this.y = e[13]; - this.z = e[14]; - this.w = e[15]; - return this; - } - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - this.w = Math.min(this.w, v.w); - return this; - } - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - this.w = Math.max(this.w, v.w); - return this; - } - clamp(min, max) { - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - this.w = Math.max(min.w, Math.min(max.w, this.w)); - return this; - } - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - this.w = Math.max(minVal, Math.min(maxVal, this.w)); - return this; - } - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - this.w = Math.floor(this.w); - return this; - } - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - this.w = Math.ceil(this.w); - return this; - } - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - this.w = Math.round(this.w); - return this; - } - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - this.z = Math.trunc(this.z); - this.w = Math.trunc(this.w); - return this; - } - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - this.w = -this.w; - return this; - } - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; - } - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w); - } - normalize() { - return this.divideScalar(this.length() || 1); - } - setLength(length) { - return this.normalize().multiplyScalar(length); - } - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - this.w += (v.w - this.w) * alpha; - return this; - } - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - this.w = v1.w + (v2.w - v1.w) * alpha; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w; - } - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - this.w = array[offset + 3]; - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - array[offset + 3] = this.w; - return array; - } - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - this.w = attribute.getW(index); - return this; - } - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - this.w = Math.random(); - return this; - } - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - yield this.w; - } -}; -var RenderTarget = class extends EventDispatcher { - constructor(width = 1, height = 1, options = {}) { - super(); - this.isRenderTarget = true; - this.width = width; - this.height = height; - this.depth = 1; - this.scissor = new Vector4(0, 0, width, height); - this.scissorTest = false; - this.viewport = new Vector4(0, 0, width, height); - const image = { width, height, depth: 1 }; - options = Object.assign({ - generateMipmaps: false, - internalFormat: null, - minFilter: LinearFilter, - depthBuffer: true, - stencilBuffer: false, - resolveDepthBuffer: true, - resolveStencilBuffer: true, - depthTexture: null, - samples: 0, - count: 1 - }, options); - const texture = new Texture(image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); - texture.flipY = false; - texture.generateMipmaps = options.generateMipmaps; - texture.internalFormat = options.internalFormat; - this.textures = []; - const count = options.count; - for (let i = 0; i < count; i++) { - this.textures[i] = texture.clone(); - this.textures[i].isRenderTargetTexture = true; - } - this.depthBuffer = options.depthBuffer; - this.stencilBuffer = options.stencilBuffer; - this.resolveDepthBuffer = options.resolveDepthBuffer; - this.resolveStencilBuffer = options.resolveStencilBuffer; - this.depthTexture = options.depthTexture; - this.samples = options.samples; - } - get texture() { - return this.textures[0]; - } - set texture(value) { - this.textures[0] = value; - } - setSize(width, height, depth = 1) { - if (this.width !== width || this.height !== height || this.depth !== depth) { - this.width = width; - this.height = height; - this.depth = depth; - for (let i = 0, il = this.textures.length; i < il; i++) { - this.textures[i].image.width = width; - this.textures[i].image.height = height; - this.textures[i].image.depth = depth; - } - this.dispose(); - } - this.viewport.set(0, 0, width, height); - this.scissor.set(0, 0, width, height); - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - this.scissor.copy(source.scissor); - this.scissorTest = source.scissorTest; - this.viewport.copy(source.viewport); - this.textures.length = 0; - for (let i = 0, il = source.textures.length; i < il; i++) { - this.textures[i] = source.textures[i].clone(); - this.textures[i].isRenderTargetTexture = true; - } - const image = Object.assign({}, source.texture.image); - this.texture.source = new Source(image); - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - this.resolveDepthBuffer = source.resolveDepthBuffer; - this.resolveStencilBuffer = source.resolveStencilBuffer; - if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); - this.samples = source.samples; - return this; - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - } -}; -var WebGLRenderTarget = class extends RenderTarget { - constructor(width = 1, height = 1, options = {}) { - super(width, height, options); - this.isWebGLRenderTarget = true; - } -}; -var DataArrayTexture = class extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - super(null); - this.isDataArrayTexture = true; - this.image = { data, width, height, depth }; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.wrapR = ClampToEdgeWrapping; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - this.layerUpdates = /* @__PURE__ */ new Set(); - } - addLayerUpdate(layerIndex) { - this.layerUpdates.add(layerIndex); - } - clearLayerUpdates() { - this.layerUpdates.clear(); - } -}; -var WebGLArrayRenderTarget = class extends WebGLRenderTarget { - constructor(width = 1, height = 1, depth = 1, options = {}) { - super(width, height, options); - this.isWebGLArrayRenderTarget = true; - this.depth = depth; - this.texture = new DataArrayTexture(null, width, height, depth); - this.texture.isRenderTargetTexture = true; - } -}; -var Data3DTexture = class extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - super(null); - this.isData3DTexture = true; - this.image = { data, width, height, depth }; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.wrapR = ClampToEdgeWrapping; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } -}; -var WebGL3DRenderTarget = class extends WebGLRenderTarget { - constructor(width = 1, height = 1, depth = 1, options = {}) { - super(width, height, options); - this.isWebGL3DRenderTarget = true; - this.depth = depth; - this.texture = new Data3DTexture(null, width, height, depth); - this.texture.isRenderTargetTexture = true; - } -}; -var Quaternion = class { - constructor(x = 0, y = 0, z = 0, w = 1) { - this.isQuaternion = true; - this._x = x; - this._y = y; - this._z = z; - this._w = w; - } - static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) { - let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3]; - const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3]; - if (t === 0) { - dst[dstOffset + 0] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - return; - } - if (t === 1) { - dst[dstOffset + 0] = x1; - dst[dstOffset + 1] = y1; - dst[dstOffset + 2] = z1; - dst[dstOffset + 3] = w1; - return; - } - if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { - let s = 1 - t; - const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos; - if (sqrSin > Number.EPSILON) { - const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir); - s = Math.sin(s * len) / sin; - t = Math.sin(t * len) / sin; - } - const tDir = t * dir; - x0 = x0 * s + x1 * tDir; - y0 = y0 * s + y1 * tDir; - z0 = z0 * s + z1 * tDir; - w0 = w0 * s + w1 * tDir; - if (s === 1 - t) { - const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); - x0 *= f; - y0 *= f; - z0 *= f; - w0 *= f; - } - } - dst[dstOffset] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - } - static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { - const x0 = src0[srcOffset0]; - const y0 = src0[srcOffset0 + 1]; - const z0 = src0[srcOffset0 + 2]; - const w0 = src0[srcOffset0 + 3]; - const x1 = src1[srcOffset1]; - const y1 = src1[srcOffset1 + 1]; - const z1 = src1[srcOffset1 + 2]; - const w1 = src1[srcOffset1 + 3]; - dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; - dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; - dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; - dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; - return dst; - } - get x() { - return this._x; - } - set x(value) { - this._x = value; - this._onChangeCallback(); - } - get y() { - return this._y; - } - set y(value) { - this._y = value; - this._onChangeCallback(); - } - get z() { - return this._z; - } - set z(value) { - this._z = value; - this._onChangeCallback(); - } - get w() { - return this._w; - } - set w(value) { - this._w = value; - this._onChangeCallback(); - } - set(x, y, z, w) { - this._x = x; - this._y = y; - this._z = z; - this._w = w; - this._onChangeCallback(); - return this; - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._w); - } - copy(quaternion) { - this._x = quaternion.x; - this._y = quaternion.y; - this._z = quaternion.z; - this._w = quaternion.w; - this._onChangeCallback(); - return this; - } - setFromEuler(euler, update = true) { - const x = euler._x, y = euler._y, z = euler._z, order = euler._order; - const cos = Math.cos; - const sin = Math.sin; - const c1 = cos(x / 2); - const c2 = cos(y / 2); - const c3 = cos(z / 2); - const s1 = sin(x / 2); - const s2 = sin(y / 2); - const s3 = sin(z / 2); - switch (order) { - case "XYZ": - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - case "YXZ": - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - case "ZXY": - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - case "ZYX": - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - case "YZX": - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - case "XZY": - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - default: - console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order); - } - if (update === true) this._onChangeCallback(); - return this; - } - setFromAxisAngle(axis, angle) { - const halfAngle = angle / 2, s = Math.sin(halfAngle); - this._x = axis.x * s; - this._y = axis.y * s; - this._z = axis.z * s; - this._w = Math.cos(halfAngle); - this._onChangeCallback(); - return this; - } - setFromRotationMatrix(m) { - const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33; - if (trace > 0) { - const s = 0.5 / Math.sqrt(trace + 1); - this._w = 0.25 / s; - this._x = (m32 - m23) * s; - this._y = (m13 - m31) * s; - this._z = (m21 - m12) * s; - } else if (m11 > m22 && m11 > m33) { - const s = 2 * Math.sqrt(1 + m11 - m22 - m33); - this._w = (m32 - m23) / s; - this._x = 0.25 * s; - this._y = (m12 + m21) / s; - this._z = (m13 + m31) / s; - } else if (m22 > m33) { - const s = 2 * Math.sqrt(1 + m22 - m11 - m33); - this._w = (m13 - m31) / s; - this._x = (m12 + m21) / s; - this._y = 0.25 * s; - this._z = (m23 + m32) / s; - } else { - const s = 2 * Math.sqrt(1 + m33 - m11 - m22); - this._w = (m21 - m12) / s; - this._x = (m13 + m31) / s; - this._y = (m23 + m32) / s; - this._z = 0.25 * s; - } - this._onChangeCallback(); - return this; - } - setFromUnitVectors(vFrom, vTo) { - let r = vFrom.dot(vTo) + 1; - if (r < Number.EPSILON) { - r = 0; - if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { - this._x = -vFrom.y; - this._y = vFrom.x; - this._z = 0; - this._w = r; - } else { - this._x = 0; - this._y = -vFrom.z; - this._z = vFrom.y; - this._w = r; - } - } else { - this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; - this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; - this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; - this._w = r; - } - return this.normalize(); - } - angleTo(q) { - return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1))); - } - rotateTowards(q, step) { - const angle = this.angleTo(q); - if (angle === 0) return this; - const t = Math.min(1, step / angle); - this.slerp(q, t); - return this; - } - identity() { - return this.set(0, 0, 0, 1); - } - invert() { - return this.conjugate(); - } - conjugate() { - this._x *= -1; - this._y *= -1; - this._z *= -1; - this._onChangeCallback(); - return this; - } - dot(v) { - return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; - } - lengthSq() { - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; - } - length() { - return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); - } - normalize() { - let l = this.length(); - if (l === 0) { - this._x = 0; - this._y = 0; - this._z = 0; - this._w = 1; - } else { - l = 1 / l; - this._x = this._x * l; - this._y = this._y * l; - this._z = this._z * l; - this._w = this._w * l; - } - this._onChangeCallback(); - return this; - } - multiply(q) { - return this.multiplyQuaternions(this, q); - } - premultiply(q) { - return this.multiplyQuaternions(q, this); - } - multiplyQuaternions(a, b) { - const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; - const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; - this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; - this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; - this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; - this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; - this._onChangeCallback(); - return this; - } - slerp(qb, t) { - if (t === 0) return this; - if (t === 1) return this.copy(qb); - const x = this._x, y = this._y, z = this._z, w = this._w; - let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; - if (cosHalfTheta < 0) { - this._w = -qb._w; - this._x = -qb._x; - this._y = -qb._y; - this._z = -qb._z; - cosHalfTheta = -cosHalfTheta; - } else { - this.copy(qb); - } - if (cosHalfTheta >= 1) { - this._w = w; - this._x = x; - this._y = y; - this._z = z; - return this; - } - const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta; - if (sqrSinHalfTheta <= Number.EPSILON) { - const s = 1 - t; - this._w = s * w + t * this._w; - this._x = s * x + t * this._x; - this._y = s * y + t * this._y; - this._z = s * z + t * this._z; - this.normalize(); - return this; - } - const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); - const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); - const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta; - this._w = w * ratioA + this._w * ratioB; - this._x = x * ratioA + this._x * ratioB; - this._y = y * ratioA + this._y * ratioB; - this._z = z * ratioA + this._z * ratioB; - this._onChangeCallback(); - return this; - } - slerpQuaternions(qa, qb, t) { - return this.copy(qa).slerp(qb, t); - } - random() { - const theta1 = 2 * Math.PI * Math.random(); - const theta2 = 2 * Math.PI * Math.random(); - const x0 = Math.random(); - const r1 = Math.sqrt(1 - x0); - const r2 = Math.sqrt(x0); - return this.set( - r1 * Math.sin(theta1), - r1 * Math.cos(theta1), - r2 * Math.sin(theta2), - r2 * Math.cos(theta2) - ); - } - equals(quaternion) { - return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; - } - fromArray(array, offset = 0) { - this._x = array[offset]; - this._y = array[offset + 1]; - this._z = array[offset + 2]; - this._w = array[offset + 3]; - this._onChangeCallback(); - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._w; - return array; - } - fromBufferAttribute(attribute, index) { - this._x = attribute.getX(index); - this._y = attribute.getY(index); - this._z = attribute.getZ(index); - this._w = attribute.getW(index); - this._onChangeCallback(); - return this; - } - toJSON() { - return this.toArray(); - } - _onChange(callback) { - this._onChangeCallback = callback; - return this; - } - _onChangeCallback() { - } - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._w; - } -}; -var Vector3 = class _Vector3 { - constructor(x = 0, y = 0, z = 0) { - _Vector3.prototype.isVector3 = true; - this.x = x; - this.y = y; - this.z = z; - } - set(x, y, z) { - if (z === void 0) z = this.z; - this.x = x; - this.y = y; - this.z = z; - return this; - } - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - return this; - } - setX(x) { - this.x = x; - return this; - } - setY(y) { - this.y = y; - return this; - } - setZ(z) { - this.z = z; - return this; - } - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - case 1: - this.y = value; - break; - case 2: - this.z = value; - break; - default: - throw new Error("index is out of range: " + index); - } - return this; - } - getComponent(index) { - switch (index) { - case 0: - return this.x; - case 1: - return this.y; - case 2: - return this.z; - default: - throw new Error("index is out of range: " + index); - } - } - clone() { - return new this.constructor(this.x, this.y, this.z); - } - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - return this; - } - add(v) { - this.x += v.x; - this.y += v.y; - this.z += v.z; - return this; - } - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - return this; - } - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - return this; - } - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - return this; - } - sub(v) { - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - return this; - } - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - return this; - } - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - return this; - } - multiply(v) { - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - return this; - } - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - return this; - } - multiplyVectors(a, b) { - this.x = a.x * b.x; - this.y = a.y * b.y; - this.z = a.z * b.z; - return this; - } - applyEuler(euler) { - return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); - } - applyAxisAngle(axis, angle) { - return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle)); - } - applyMatrix3(m) { - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - this.x = e[0] * x + e[3] * y + e[6] * z; - this.y = e[1] * x + e[4] * y + e[7] * z; - this.z = e[2] * x + e[5] * y + e[8] * z; - return this; - } - applyNormalMatrix(m) { - return this.applyMatrix3(m).normalize(); - } - applyMatrix4(m) { - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); - this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; - this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; - this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; - return this; - } - applyQuaternion(q) { - const vx = this.x, vy = this.y, vz = this.z; - const qx = q.x, qy = q.y, qz = q.z, qw = q.w; - const tx = 2 * (qy * vz - qz * vy); - const ty = 2 * (qz * vx - qx * vz); - const tz = 2 * (qx * vy - qy * vx); - this.x = vx + qw * tx + qy * tz - qz * ty; - this.y = vy + qw * ty + qz * tx - qx * tz; - this.z = vz + qw * tz + qx * ty - qy * tx; - return this; - } - project(camera) { - return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); - } - unproject(camera) { - return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); - } - transformDirection(m) { - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - this.x = e[0] * x + e[4] * y + e[8] * z; - this.y = e[1] * x + e[5] * y + e[9] * z; - this.z = e[2] * x + e[6] * y + e[10] * z; - return this.normalize(); - } - divide(v) { - this.x /= v.x; - this.y /= v.y; - this.z /= v.z; - return this; - } - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - return this; - } - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - return this; - } - clamp(min, max) { - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - return this; - } - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - return this; - } - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - return this; - } - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - return this; - } - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - return this; - } - roundToZero() { - this.x = Math.trunc(this.x); - this.y = Math.trunc(this.y); - this.z = Math.trunc(this.z); - return this; - } - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; - } - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z; - } - // TODO lengthSquared? - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z; - } - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); - } - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); - } - normalize() { - return this.divideScalar(this.length() || 1); - } - setLength(length) { - return this.normalize().multiplyScalar(length); - } - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - return this; - } - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - return this; - } - cross(v) { - return this.crossVectors(this, v); - } - crossVectors(a, b) { - const ax = a.x, ay = a.y, az = a.z; - const bx = b.x, by = b.y, bz = b.z; - this.x = ay * bz - az * by; - this.y = az * bx - ax * bz; - this.z = ax * by - ay * bx; - return this; - } - projectOnVector(v) { - const denominator = v.lengthSq(); - if (denominator === 0) return this.set(0, 0, 0); - const scalar = v.dot(this) / denominator; - return this.copy(v).multiplyScalar(scalar); - } - projectOnPlane(planeNormal) { - _vector$c.copy(this).projectOnVector(planeNormal); - return this.sub(_vector$c); - } - reflect(normal) { - return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal))); - } - angleTo(v) { - const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); - if (denominator === 0) return Math.PI / 2; - const theta = this.dot(v) / denominator; - return Math.acos(clamp(theta, -1, 1)); - } - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - distanceToSquared(v) { - const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; - return dx * dx + dy * dy + dz * dz; - } - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); - } - setFromSpherical(s) { - return this.setFromSphericalCoords(s.radius, s.phi, s.theta); - } - setFromSphericalCoords(radius, phi, theta) { - const sinPhiRadius = Math.sin(phi) * radius; - this.x = sinPhiRadius * Math.sin(theta); - this.y = Math.cos(phi) * radius; - this.z = sinPhiRadius * Math.cos(theta); - return this; - } - setFromCylindrical(c) { - return this.setFromCylindricalCoords(c.radius, c.theta, c.y); - } - setFromCylindricalCoords(radius, theta, y) { - this.x = radius * Math.sin(theta); - this.y = y; - this.z = radius * Math.cos(theta); - return this; - } - setFromMatrixPosition(m) { - const e = m.elements; - this.x = e[12]; - this.y = e[13]; - this.z = e[14]; - return this; - } - setFromMatrixScale(m) { - const sx = this.setFromMatrixColumn(m, 0).length(); - const sy = this.setFromMatrixColumn(m, 1).length(); - const sz = this.setFromMatrixColumn(m, 2).length(); - this.x = sx; - this.y = sy; - this.z = sz; - return this; - } - setFromMatrixColumn(m, index) { - return this.fromArray(m.elements, index * 4); - } - setFromMatrix3Column(m, index) { - return this.fromArray(m.elements, index * 3); - } - setFromEuler(e) { - this.x = e._x; - this.y = e._y; - this.z = e._z; - return this; - } - setFromColor(c) { - this.x = c.r; - this.y = c.g; - this.z = c.b; - return this; - } - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z; - } - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - return array; - } - fromBufferAttribute(attribute, index) { - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - return this; - } - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - return this; - } - randomDirection() { - const theta = Math.random() * Math.PI * 2; - const u = Math.random() * 2 - 1; - const c = Math.sqrt(1 - u * u); - this.x = c * Math.cos(theta); - this.y = u; - this.z = c * Math.sin(theta); - return this; - } - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - } -}; -var _vector$c = new Vector3(); -var _quaternion$4 = new Quaternion(); -var Box3 = class { - constructor(min = new Vector3(Infinity, Infinity, Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) { - this.isBox3 = true; - this.min = min; - this.max = max; - } - set(min, max) { - this.min.copy(min); - this.max.copy(max); - return this; - } - setFromArray(array) { - this.makeEmpty(); - for (let i = 0, il = array.length; i < il; i += 3) { - this.expandByPoint(_vector$b.fromArray(array, i)); - } - return this; - } - setFromBufferAttribute(attribute) { - this.makeEmpty(); - for (let i = 0, il = attribute.count; i < il; i++) { - this.expandByPoint(_vector$b.fromBufferAttribute(attribute, i)); - } - return this; - } - setFromPoints(points) { - this.makeEmpty(); - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - return this; - } - setFromCenterAndSize(center, size) { - const halfSize = _vector$b.copy(size).multiplyScalar(0.5); - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - return this; - } - setFromObject(object, precise = false) { - this.makeEmpty(); - return this.expandByObject(object, precise); - } - clone() { - return new this.constructor().copy(this); - } - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - return this; - } - makeEmpty() { - this.min.x = this.min.y = this.min.z = Infinity; - this.max.x = this.max.y = this.max.z = -Infinity; - return this; - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z; - } - getCenter(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - getSize(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min); - } - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - return this; - } - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - return this; - } - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - return this; - } - expandByObject(object, precise = false) { - object.updateWorldMatrix(false, false); - const geometry = object.geometry; - if (geometry !== void 0) { - const positionAttribute = geometry.getAttribute("position"); - if (precise === true && positionAttribute !== void 0 && object.isInstancedMesh !== true) { - for (let i = 0, l = positionAttribute.count; i < l; i++) { - if (object.isMesh === true) { - object.getVertexPosition(i, _vector$b); - } else { - _vector$b.fromBufferAttribute(positionAttribute, i); - } - _vector$b.applyMatrix4(object.matrixWorld); - this.expandByPoint(_vector$b); - } - } else { - if (object.boundingBox !== void 0) { - if (object.boundingBox === null) { - object.computeBoundingBox(); - } - _box$4.copy(object.boundingBox); - } else { - if (geometry.boundingBox === null) { - geometry.computeBoundingBox(); - } - _box$4.copy(geometry.boundingBox); - } - _box$4.applyMatrix4(object.matrixWorld); - this.union(_box$4); - } - } - const children = object.children; - for (let i = 0, l = children.length; i < l; i++) { - this.expandByObject(children[i], precise); - } - return this; - } - containsPoint(point) { - return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y && point.z >= this.min.z && point.z <= this.max.z; - } - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; - } - getParameter(point, target) { - return target.set( - (point.x - this.min.x) / (this.max.x - this.min.x), - (point.y - this.min.y) / (this.max.y - this.min.y), - (point.z - this.min.z) / (this.max.z - this.min.z) - ); - } - intersectsBox(box) { - return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y && box.max.z >= this.min.z && box.min.z <= this.max.z; - } - intersectsSphere(sphere) { - this.clampPoint(sphere.center, _vector$b); - return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; - } - intersectsPlane(plane) { - let min, max; - if (plane.normal.x > 0) { - min = plane.normal.x * this.min.x; - max = plane.normal.x * this.max.x; - } else { - min = plane.normal.x * this.max.x; - max = plane.normal.x * this.min.x; - } - if (plane.normal.y > 0) { - min += plane.normal.y * this.min.y; - max += plane.normal.y * this.max.y; - } else { - min += plane.normal.y * this.max.y; - max += plane.normal.y * this.min.y; - } - if (plane.normal.z > 0) { - min += plane.normal.z * this.min.z; - max += plane.normal.z * this.max.z; - } else { - min += plane.normal.z * this.max.z; - max += plane.normal.z * this.min.z; - } - return min <= -plane.constant && max >= -plane.constant; - } - intersectsTriangle(triangle) { - if (this.isEmpty()) { - return false; - } - this.getCenter(_center); - _extents.subVectors(this.max, _center); - _v0$3.subVectors(triangle.a, _center); - _v1$7.subVectors(triangle.b, _center); - _v2$4.subVectors(triangle.c, _center); - _f0.subVectors(_v1$7, _v0$3); - _f1.subVectors(_v2$4, _v1$7); - _f2.subVectors(_v0$3, _v2$4); - let axes = [ - 0, - -_f0.z, - _f0.y, - 0, - -_f1.z, - _f1.y, - 0, - -_f2.z, - _f2.y, - _f0.z, - 0, - -_f0.x, - _f1.z, - 0, - -_f1.x, - _f2.z, - 0, - -_f2.x, - -_f0.y, - _f0.x, - 0, - -_f1.y, - _f1.x, - 0, - -_f2.y, - _f2.x, - 0 - ]; - if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { - return false; - } - axes = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (!satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents)) { - return false; - } - _triangleNormal.crossVectors(_f0, _f1); - axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z]; - return satForAxes(axes, _v0$3, _v1$7, _v2$4, _extents); - } - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - distanceToPoint(point) { - return this.clampPoint(point, _vector$b).distanceTo(point); - } - getBoundingSphere(target) { - if (this.isEmpty()) { - target.makeEmpty(); - } else { - this.getCenter(target.center); - target.radius = this.getSize(_vector$b).length() * 0.5; - } - return target; - } - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); - if (this.isEmpty()) this.makeEmpty(); - return this; - } - union(box) { - this.min.min(box.min); - this.max.max(box.max); - return this; - } - applyMatrix4(matrix) { - if (this.isEmpty()) return this; - _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); - _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); - _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); - _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); - _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); - _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); - _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); - _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); - this.setFromPoints(_points); - return this; - } - translate(offset) { - this.min.add(offset); - this.max.add(offset); - return this; - } - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } -}; -var _points = [ - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3() -]; -var _vector$b = new Vector3(); -var _box$4 = new Box3(); -var _v0$3 = new Vector3(); -var _v1$7 = new Vector3(); -var _v2$4 = new Vector3(); -var _f0 = new Vector3(); -var _f1 = new Vector3(); -var _f2 = new Vector3(); -var _center = new Vector3(); -var _extents = new Vector3(); -var _triangleNormal = new Vector3(); -var _testAxis = new Vector3(); -function satForAxes(axes, v0, v1, v2, extents) { - for (let i = 0, j = axes.length - 3; i <= j; i += 3) { - _testAxis.fromArray(axes, i); - const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); - const p0 = v0.dot(_testAxis); - const p1 = v1.dot(_testAxis); - const p2 = v2.dot(_testAxis); - if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) { - return false; - } - } - return true; -} -var _box$3 = new Box3(); -var _v1$6 = new Vector3(); -var _v2$3 = new Vector3(); -var Sphere = class { - constructor(center = new Vector3(), radius = -1) { - this.isSphere = true; - this.center = center; - this.radius = radius; - } - set(center, radius) { - this.center.copy(center); - this.radius = radius; - return this; - } - setFromPoints(points, optionalCenter) { - const center = this.center; - if (optionalCenter !== void 0) { - center.copy(optionalCenter); - } else { - _box$3.setFromPoints(points).getCenter(center); - } - let maxRadiusSq = 0; - for (let i = 0, il = points.length; i < il; i++) { - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i])); - } - this.radius = Math.sqrt(maxRadiusSq); - return this; - } - copy(sphere) { - this.center.copy(sphere.center); - this.radius = sphere.radius; - return this; - } - isEmpty() { - return this.radius < 0; - } - makeEmpty() { - this.center.set(0, 0, 0); - this.radius = -1; - return this; - } - containsPoint(point) { - return point.distanceToSquared(this.center) <= this.radius * this.radius; - } - distanceToPoint(point) { - return point.distanceTo(this.center) - this.radius; - } - intersectsSphere(sphere) { - const radiusSum = this.radius + sphere.radius; - return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum; - } - intersectsBox(box) { - return box.intersectsSphere(this); - } - intersectsPlane(plane) { - return Math.abs(plane.distanceToPoint(this.center)) <= this.radius; - } - clampPoint(point, target) { - const deltaLengthSq = this.center.distanceToSquared(point); - target.copy(point); - if (deltaLengthSq > this.radius * this.radius) { - target.sub(this.center).normalize(); - target.multiplyScalar(this.radius).add(this.center); - } - return target; - } - getBoundingBox(target) { - if (this.isEmpty()) { - target.makeEmpty(); - return target; - } - target.set(this.center, this.center); - target.expandByScalar(this.radius); - return target; - } - applyMatrix4(matrix) { - this.center.applyMatrix4(matrix); - this.radius = this.radius * matrix.getMaxScaleOnAxis(); - return this; - } - translate(offset) { - this.center.add(offset); - return this; - } - expandByPoint(point) { - if (this.isEmpty()) { - this.center.copy(point); - this.radius = 0; - return this; - } - _v1$6.subVectors(point, this.center); - const lengthSq = _v1$6.lengthSq(); - if (lengthSq > this.radius * this.radius) { - const length = Math.sqrt(lengthSq); - const delta = (length - this.radius) * 0.5; - this.center.addScaledVector(_v1$6, delta / length); - this.radius += delta; - } - return this; - } - union(sphere) { - if (sphere.isEmpty()) { - return this; - } - if (this.isEmpty()) { - this.copy(sphere); - return this; - } - if (this.center.equals(sphere.center) === true) { - this.radius = Math.max(this.radius, sphere.radius); - } else { - _v2$3.subVectors(sphere.center, this.center).setLength(sphere.radius); - this.expandByPoint(_v1$6.copy(sphere.center).add(_v2$3)); - this.expandByPoint(_v1$6.copy(sphere.center).sub(_v2$3)); - } - return this; - } - equals(sphere) { - return sphere.center.equals(this.center) && sphere.radius === this.radius; - } - clone() { - return new this.constructor().copy(this); - } -}; -var _vector$a = new Vector3(); -var _segCenter = new Vector3(); -var _segDir = new Vector3(); -var _diff = new Vector3(); -var _edge1 = new Vector3(); -var _edge2 = new Vector3(); -var _normal$1 = new Vector3(); -var Ray = class { - constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) { - this.origin = origin; - this.direction = direction; - } - set(origin, direction) { - this.origin.copy(origin); - this.direction.copy(direction); - return this; - } - copy(ray) { - this.origin.copy(ray.origin); - this.direction.copy(ray.direction); - return this; - } - at(t, target) { - return target.copy(this.origin).addScaledVector(this.direction, t); - } - lookAt(v) { - this.direction.copy(v).sub(this.origin).normalize(); - return this; - } - recast(t) { - this.origin.copy(this.at(t, _vector$a)); - return this; - } - closestPointToPoint(point, target) { - target.subVectors(point, this.origin); - const directionDistance = target.dot(this.direction); - if (directionDistance < 0) { - return target.copy(this.origin); - } - return target.copy(this.origin).addScaledVector(this.direction, directionDistance); - } - distanceToPoint(point) { - return Math.sqrt(this.distanceSqToPoint(point)); - } - distanceSqToPoint(point) { - const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); - if (directionDistance < 0) { - return this.origin.distanceToSquared(point); - } - _vector$a.copy(this.origin).addScaledVector(this.direction, directionDistance); - return _vector$a.distanceToSquared(point); - } - distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) { - _segCenter.copy(v0).add(v1).multiplyScalar(0.5); - _segDir.copy(v1).sub(v0).normalize(); - _diff.copy(this.origin).sub(_segCenter); - const segExtent = v0.distanceTo(v1) * 0.5; - const a01 = -this.direction.dot(_segDir); - const b0 = _diff.dot(this.direction); - const b1 = -_diff.dot(_segDir); - const c = _diff.lengthSq(); - const det = Math.abs(1 - a01 * a01); - let s0, s1, sqrDist, extDet; - if (det > 0) { - s0 = a01 * b1 - b0; - s1 = a01 * b0 - b1; - extDet = segExtent * det; - if (s0 >= 0) { - if (s1 >= -extDet) { - if (s1 <= extDet) { - const invDet = 1 / det; - s0 *= invDet; - s1 *= invDet; - sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c; - } else { - s1 = segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - s1 = -segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - if (s1 <= -extDet) { - s0 = Math.max(0, -(-a01 * segExtent + b0)); - s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } else if (s1 <= extDet) { - s0 = 0; - s1 = Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = s1 * (s1 + 2 * b1) + c; - } else { - s0 = Math.max(0, -(a01 * segExtent + b0)); - s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } - } else { - s1 = a01 > 0 ? -segExtent : segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - if (optionalPointOnRay) { - optionalPointOnRay.copy(this.origin).addScaledVector(this.direction, s0); - } - if (optionalPointOnSegment) { - optionalPointOnSegment.copy(_segCenter).addScaledVector(_segDir, s1); - } - return sqrDist; - } - intersectSphere(sphere, target) { - _vector$a.subVectors(sphere.center, this.origin); - const tca = _vector$a.dot(this.direction); - const d2 = _vector$a.dot(_vector$a) - tca * tca; - const radius2 = sphere.radius * sphere.radius; - if (d2 > radius2) return null; - const thc = Math.sqrt(radius2 - d2); - const t0 = tca - thc; - const t1 = tca + thc; - if (t1 < 0) return null; - if (t0 < 0) return this.at(t1, target); - return this.at(t0, target); - } - intersectsSphere(sphere) { - return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius; - } - distanceToPlane(plane) { - const denominator = plane.normal.dot(this.direction); - if (denominator === 0) { - if (plane.distanceToPoint(this.origin) === 0) { - return 0; - } - return null; - } - const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; - return t >= 0 ? t : null; - } - intersectPlane(plane, target) { - const t = this.distanceToPlane(plane); - if (t === null) { - return null; - } - return this.at(t, target); - } - intersectsPlane(plane) { - const distToPoint = plane.distanceToPoint(this.origin); - if (distToPoint === 0) { - return true; - } - const denominator = plane.normal.dot(this.direction); - if (denominator * distToPoint < 0) { - return true; - } - return false; - } - intersectBox(box, target) { - let tmin, tmax, tymin, tymax, tzmin, tzmax; - const invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z; - const origin = this.origin; - if (invdirx >= 0) { - tmin = (box.min.x - origin.x) * invdirx; - tmax = (box.max.x - origin.x) * invdirx; - } else { - tmin = (box.max.x - origin.x) * invdirx; - tmax = (box.min.x - origin.x) * invdirx; - } - if (invdiry >= 0) { - tymin = (box.min.y - origin.y) * invdiry; - tymax = (box.max.y - origin.y) * invdiry; - } else { - tymin = (box.max.y - origin.y) * invdiry; - tymax = (box.min.y - origin.y) * invdiry; - } - if (tmin > tymax || tymin > tmax) return null; - if (tymin > tmin || isNaN(tmin)) tmin = tymin; - if (tymax < tmax || isNaN(tmax)) tmax = tymax; - if (invdirz >= 0) { - tzmin = (box.min.z - origin.z) * invdirz; - tzmax = (box.max.z - origin.z) * invdirz; - } else { - tzmin = (box.max.z - origin.z) * invdirz; - tzmax = (box.min.z - origin.z) * invdirz; - } - if (tmin > tzmax || tzmin > tmax) return null; - if (tzmin > tmin || tmin !== tmin) tmin = tzmin; - if (tzmax < tmax || tmax !== tmax) tmax = tzmax; - if (tmax < 0) return null; - return this.at(tmin >= 0 ? tmin : tmax, target); - } - intersectsBox(box) { - return this.intersectBox(box, _vector$a) !== null; - } - intersectTriangle(a, b, c, backfaceCulling, target) { - _edge1.subVectors(b, a); - _edge2.subVectors(c, a); - _normal$1.crossVectors(_edge1, _edge2); - let DdN = this.direction.dot(_normal$1); - let sign2; - if (DdN > 0) { - if (backfaceCulling) return null; - sign2 = 1; - } else if (DdN < 0) { - sign2 = -1; - DdN = -DdN; - } else { - return null; - } - _diff.subVectors(this.origin, a); - const DdQxE2 = sign2 * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); - if (DdQxE2 < 0) { - return null; - } - const DdE1xQ = sign2 * this.direction.dot(_edge1.cross(_diff)); - if (DdE1xQ < 0) { - return null; - } - if (DdQxE2 + DdE1xQ > DdN) { - return null; - } - const QdN = -sign2 * _diff.dot(_normal$1); - if (QdN < 0) { - return null; - } - return this.at(QdN / DdN, target); - } - applyMatrix4(matrix4) { - this.origin.applyMatrix4(matrix4); - this.direction.transformDirection(matrix4); - return this; - } - equals(ray) { - return ray.origin.equals(this.origin) && ray.direction.equals(this.direction); - } - clone() { - return new this.constructor().copy(this); - } -}; -var Matrix4 = class _Matrix4 { - constructor(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { - _Matrix4.prototype.isMatrix4 = true; - this.elements = [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ]; - if (n11 !== void 0) { - this.set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44); - } - } - set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { - const te = this.elements; - te[0] = n11; - te[4] = n12; - te[8] = n13; - te[12] = n14; - te[1] = n21; - te[5] = n22; - te[9] = n23; - te[13] = n24; - te[2] = n31; - te[6] = n32; - te[10] = n33; - te[14] = n34; - te[3] = n41; - te[7] = n42; - te[11] = n43; - te[15] = n44; - return this; - } - identity() { - this.set( - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - clone() { - return new _Matrix4().fromArray(this.elements); - } - copy(m) { - const te = this.elements; - const me = m.elements; - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - te[9] = me[9]; - te[10] = me[10]; - te[11] = me[11]; - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - te[15] = me[15]; - return this; - } - copyPosition(m) { - const te = this.elements, me = m.elements; - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - return this; - } - setFromMatrix3(m) { - const me = m.elements; - this.set( - me[0], - me[3], - me[6], - 0, - me[1], - me[4], - me[7], - 0, - me[2], - me[5], - me[8], - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrixColumn(this, 0); - yAxis.setFromMatrixColumn(this, 1); - zAxis.setFromMatrixColumn(this, 2); - return this; - } - makeBasis(xAxis, yAxis, zAxis) { - this.set( - xAxis.x, - yAxis.x, - zAxis.x, - 0, - xAxis.y, - yAxis.y, - zAxis.y, - 0, - xAxis.z, - yAxis.z, - zAxis.z, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - extractRotation(m) { - const te = this.elements; - const me = m.elements; - const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length(); - const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length(); - const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length(); - te[0] = me[0] * scaleX; - te[1] = me[1] * scaleX; - te[2] = me[2] * scaleX; - te[3] = 0; - te[4] = me[4] * scaleY; - te[5] = me[5] * scaleY; - te[6] = me[6] * scaleY; - te[7] = 0; - te[8] = me[8] * scaleZ; - te[9] = me[9] * scaleZ; - te[10] = me[10] * scaleZ; - te[11] = 0; - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - return this; - } - makeRotationFromEuler(euler) { - const te = this.elements; - const x = euler.x, y = euler.y, z = euler.z; - const a = Math.cos(x), b = Math.sin(x); - const c = Math.cos(y), d = Math.sin(y); - const e = Math.cos(z), f = Math.sin(z); - if (euler.order === "XYZ") { - const ae = a * e, af = a * f, be = b * e, bf = b * f; - te[0] = c * e; - te[4] = -c * f; - te[8] = d; - te[1] = af + be * d; - te[5] = ae - bf * d; - te[9] = -b * c; - te[2] = bf - ae * d; - te[6] = be + af * d; - te[10] = a * c; - } else if (euler.order === "YXZ") { - const ce = c * e, cf = c * f, de = d * e, df = d * f; - te[0] = ce + df * b; - te[4] = de * b - cf; - te[8] = a * d; - te[1] = a * f; - te[5] = a * e; - te[9] = -b; - te[2] = cf * b - de; - te[6] = df + ce * b; - te[10] = a * c; - } else if (euler.order === "ZXY") { - const ce = c * e, cf = c * f, de = d * e, df = d * f; - te[0] = ce - df * b; - te[4] = -a * f; - te[8] = de + cf * b; - te[1] = cf + de * b; - te[5] = a * e; - te[9] = df - ce * b; - te[2] = -a * d; - te[6] = b; - te[10] = a * c; - } else if (euler.order === "ZYX") { - const ae = a * e, af = a * f, be = b * e, bf = b * f; - te[0] = c * e; - te[4] = be * d - af; - te[8] = ae * d + bf; - te[1] = c * f; - te[5] = bf * d + ae; - te[9] = af * d - be; - te[2] = -d; - te[6] = b * c; - te[10] = a * c; - } else if (euler.order === "YZX") { - const ac = a * c, ad = a * d, bc = b * c, bd = b * d; - te[0] = c * e; - te[4] = bd - ac * f; - te[8] = bc * f + ad; - te[1] = f; - te[5] = a * e; - te[9] = -b * e; - te[2] = -d * e; - te[6] = ad * f + bc; - te[10] = ac - bd * f; - } else if (euler.order === "XZY") { - const ac = a * c, ad = a * d, bc = b * c, bd = b * d; - te[0] = c * e; - te[4] = -f; - te[8] = d * e; - te[1] = ac * f + bd; - te[5] = a * e; - te[9] = ad * f - bc; - te[2] = bc * f - ad; - te[6] = b * e; - te[10] = bd * f + ac; - } - te[3] = 0; - te[7] = 0; - te[11] = 0; - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - return this; - } - makeRotationFromQuaternion(q) { - return this.compose(_zero, q, _one); - } - lookAt(eye, target, up) { - const te = this.elements; - _z.subVectors(eye, target); - if (_z.lengthSq() === 0) { - _z.z = 1; - } - _z.normalize(); - _x.crossVectors(up, _z); - if (_x.lengthSq() === 0) { - if (Math.abs(up.z) === 1) { - _z.x += 1e-4; - } else { - _z.z += 1e-4; - } - _z.normalize(); - _x.crossVectors(up, _z); - } - _x.normalize(); - _y.crossVectors(_z, _x); - te[0] = _x.x; - te[4] = _y.x; - te[8] = _z.x; - te[1] = _x.y; - te[5] = _y.y; - te[9] = _z.y; - te[2] = _x.z; - te[6] = _y.z; - te[10] = _z.z; - return this; - } - multiply(m) { - return this.multiplyMatrices(this, m); - } - premultiply(m) { - return this.multiplyMatrices(m, this); - } - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - const a11 = ae[0], a12 = ae[4], a13 = ae[8], a14 = ae[12]; - const a21 = ae[1], a22 = ae[5], a23 = ae[9], a24 = ae[13]; - const a31 = ae[2], a32 = ae[6], a33 = ae[10], a34 = ae[14]; - const a41 = ae[3], a42 = ae[7], a43 = ae[11], a44 = ae[15]; - const b11 = be[0], b12 = be[4], b13 = be[8], b14 = be[12]; - const b21 = be[1], b22 = be[5], b23 = be[9], b24 = be[13]; - const b31 = be[2], b32 = be[6], b33 = be[10], b34 = be[14]; - const b41 = be[3], b42 = be[7], b43 = be[11], b44 = be[15]; - te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; - te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; - te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; - te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; - te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; - te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; - te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; - te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; - te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; - te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; - te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; - te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; - te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; - te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; - te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; - te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; - return this; - } - multiplyScalar(s) { - const te = this.elements; - te[0] *= s; - te[4] *= s; - te[8] *= s; - te[12] *= s; - te[1] *= s; - te[5] *= s; - te[9] *= s; - te[13] *= s; - te[2] *= s; - te[6] *= s; - te[10] *= s; - te[14] *= s; - te[3] *= s; - te[7] *= s; - te[11] *= s; - te[15] *= s; - return this; - } - determinant() { - const te = this.elements; - const n11 = te[0], n12 = te[4], n13 = te[8], n14 = te[12]; - const n21 = te[1], n22 = te[5], n23 = te[9], n24 = te[13]; - const n31 = te[2], n32 = te[6], n33 = te[10], n34 = te[14]; - const n41 = te[3], n42 = te[7], n43 = te[11], n44 = te[15]; - return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31); - } - transpose() { - const te = this.elements; - let tmp2; - tmp2 = te[1]; - te[1] = te[4]; - te[4] = tmp2; - tmp2 = te[2]; - te[2] = te[8]; - te[8] = tmp2; - tmp2 = te[6]; - te[6] = te[9]; - te[9] = tmp2; - tmp2 = te[3]; - te[3] = te[12]; - te[12] = tmp2; - tmp2 = te[7]; - te[7] = te[13]; - te[13] = tmp2; - tmp2 = te[11]; - te[11] = te[14]; - te[14] = tmp2; - return this; - } - setPosition(x, y, z) { - const te = this.elements; - if (x.isVector3) { - te[12] = x.x; - te[13] = x.y; - te[14] = x.z; - } else { - te[12] = x; - te[13] = y; - te[14] = z; - } - return this; - } - invert() { - const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n41 = te[3], n12 = te[4], n22 = te[5], n32 = te[6], n42 = te[7], n13 = te[8], n23 = te[9], n33 = te[10], n43 = te[11], n14 = te[12], n24 = te[13], n34 = te[14], n44 = te[15], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - const detInv = 1 / det; - te[0] = t11 * detInv; - te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv; - te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv; - te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv; - te[4] = t12 * detInv; - te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv; - te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv; - te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv; - te[8] = t13 * detInv; - te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv; - te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv; - te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv; - te[12] = t14 * detInv; - te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv; - te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv; - te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv; - return this; - } - scale(v) { - const te = this.elements; - const x = v.x, y = v.y, z = v.z; - te[0] *= x; - te[4] *= y; - te[8] *= z; - te[1] *= x; - te[5] *= y; - te[9] *= z; - te[2] *= x; - te[6] *= y; - te[10] *= z; - te[3] *= x; - te[7] *= y; - te[11] *= z; - return this; - } - getMaxScaleOnAxis() { - const te = this.elements; - const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]; - const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]; - const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]; - return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq)); - } - makeTranslation(x, y, z) { - if (x.isVector3) { - this.set( - 1, - 0, - 0, - x.x, - 0, - 1, - 0, - x.y, - 0, - 0, - 1, - x.z, - 0, - 0, - 0, - 1 - ); - } else { - this.set( - 1, - 0, - 0, - x, - 0, - 1, - 0, - y, - 0, - 0, - 1, - z, - 0, - 0, - 0, - 1 - ); - } - return this; - } - makeRotationX(theta) { - const c = Math.cos(theta), s = Math.sin(theta); - this.set( - 1, - 0, - 0, - 0, - 0, - c, - -s, - 0, - 0, - s, - c, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - makeRotationY(theta) { - const c = Math.cos(theta), s = Math.sin(theta); - this.set( - c, - 0, - s, - 0, - 0, - 1, - 0, - 0, - -s, - 0, - c, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - makeRotationZ(theta) { - const c = Math.cos(theta), s = Math.sin(theta); - this.set( - c, - -s, - 0, - 0, - s, - c, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - makeRotationAxis(axis, angle) { - const c = Math.cos(angle); - const s = Math.sin(angle); - const t = 1 - c; - const x = axis.x, y = axis.y, z = axis.z; - const tx = t * x, ty = t * y; - this.set( - tx * x + c, - tx * y - s * z, - tx * z + s * y, - 0, - tx * y + s * z, - ty * y + c, - ty * z - s * x, - 0, - tx * z - s * y, - ty * z + s * x, - t * z * z + c, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - makeScale(x, y, z) { - this.set( - x, - 0, - 0, - 0, - 0, - y, - 0, - 0, - 0, - 0, - z, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - makeShear(xy, xz, yx, yz, zx, zy) { - this.set( - 1, - yx, - zx, - 0, - xy, - 1, - zy, - 0, - xz, - yz, - 1, - 0, - 0, - 0, - 0, - 1 - ); - return this; - } - compose(position, quaternion, scale) { - const te = this.elements; - const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; - const x2 = x + x, y2 = y + y, z2 = z + z; - const xx = x * x2, xy = x * y2, xz = x * z2; - const yy = y * y2, yz = y * z2, zz = z * z2; - const wx = w * x2, wy = w * y2, wz = w * z2; - const sx = scale.x, sy = scale.y, sz = scale.z; - te[0] = (1 - (yy + zz)) * sx; - te[1] = (xy + wz) * sx; - te[2] = (xz - wy) * sx; - te[3] = 0; - te[4] = (xy - wz) * sy; - te[5] = (1 - (xx + zz)) * sy; - te[6] = (yz + wx) * sy; - te[7] = 0; - te[8] = (xz + wy) * sz; - te[9] = (yz - wx) * sz; - te[10] = (1 - (xx + yy)) * sz; - te[11] = 0; - te[12] = position.x; - te[13] = position.y; - te[14] = position.z; - te[15] = 1; - return this; - } - decompose(position, quaternion, scale) { - const te = this.elements; - let sx = _v1$5.set(te[0], te[1], te[2]).length(); - const sy = _v1$5.set(te[4], te[5], te[6]).length(); - const sz = _v1$5.set(te[8], te[9], te[10]).length(); - const det = this.determinant(); - if (det < 0) sx = -sx; - position.x = te[12]; - position.y = te[13]; - position.z = te[14]; - _m1$4.copy(this); - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - _m1$4.elements[0] *= invSX; - _m1$4.elements[1] *= invSX; - _m1$4.elements[2] *= invSX; - _m1$4.elements[4] *= invSY; - _m1$4.elements[5] *= invSY; - _m1$4.elements[6] *= invSY; - _m1$4.elements[8] *= invSZ; - _m1$4.elements[9] *= invSZ; - _m1$4.elements[10] *= invSZ; - quaternion.setFromRotationMatrix(_m1$4); - scale.x = sx; - scale.y = sy; - scale.z = sz; - return this; - } - makePerspective(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { - const te = this.elements; - const x = 2 * near / (right - left); - const y = 2 * near / (top - bottom); - const a = (right + left) / (right - left); - const b = (top + bottom) / (top - bottom); - let c, d; - if (coordinateSystem === WebGLCoordinateSystem) { - c = -(far + near) / (far - near); - d = -2 * far * near / (far - near); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - c = -far / (far - near); - d = -far * near / (far - near); - } else { - throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: " + coordinateSystem); - } - te[0] = x; - te[4] = 0; - te[8] = a; - te[12] = 0; - te[1] = 0; - te[5] = y; - te[9] = b; - te[13] = 0; - te[2] = 0; - te[6] = 0; - te[10] = c; - te[14] = d; - te[3] = 0; - te[7] = 0; - te[11] = -1; - te[15] = 0; - return this; - } - makeOrthographic(left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem) { - const te = this.elements; - const w = 1 / (right - left); - const h = 1 / (top - bottom); - const p = 1 / (far - near); - const x = (right + left) * w; - const y = (top + bottom) * h; - let z, zInv; - if (coordinateSystem === WebGLCoordinateSystem) { - z = (far + near) * p; - zInv = -2 * p; - } else if (coordinateSystem === WebGPUCoordinateSystem) { - z = near * p; - zInv = -1 * p; - } else { - throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + coordinateSystem); - } - te[0] = 2 * w; - te[4] = 0; - te[8] = 0; - te[12] = -x; - te[1] = 0; - te[5] = 2 * h; - te[9] = 0; - te[13] = -y; - te[2] = 0; - te[6] = 0; - te[10] = zInv; - te[14] = -z; - te[3] = 0; - te[7] = 0; - te[11] = 0; - te[15] = 1; - return this; - } - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - for (let i = 0; i < 16; i++) { - if (te[i] !== me[i]) return false; - } - return true; - } - fromArray(array, offset = 0) { - for (let i = 0; i < 16; i++) { - this.elements[i] = array[i + offset]; - } - return this; - } - toArray(array = [], offset = 0) { - const te = this.elements; - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - array[offset + 3] = te[3]; - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - array[offset + 8] = te[8]; - array[offset + 9] = te[9]; - array[offset + 10] = te[10]; - array[offset + 11] = te[11]; - array[offset + 12] = te[12]; - array[offset + 13] = te[13]; - array[offset + 14] = te[14]; - array[offset + 15] = te[15]; - return array; - } -}; -var _v1$5 = new Vector3(); -var _m1$4 = new Matrix4(); -var _zero = new Vector3(0, 0, 0); -var _one = new Vector3(1, 1, 1); -var _x = new Vector3(); -var _y = new Vector3(); -var _z = new Vector3(); -var _matrix$2 = new Matrix4(); -var _quaternion$3 = new Quaternion(); -var Euler = class _Euler { - constructor(x = 0, y = 0, z = 0, order = _Euler.DEFAULT_ORDER) { - this.isEuler = true; - this._x = x; - this._y = y; - this._z = z; - this._order = order; - } - get x() { - return this._x; - } - set x(value) { - this._x = value; - this._onChangeCallback(); - } - get y() { - return this._y; - } - set y(value) { - this._y = value; - this._onChangeCallback(); - } - get z() { - return this._z; - } - set z(value) { - this._z = value; - this._onChangeCallback(); - } - get order() { - return this._order; - } - set order(value) { - this._order = value; - this._onChangeCallback(); - } - set(x, y, z, order = this._order) { - this._x = x; - this._y = y; - this._z = z; - this._order = order; - this._onChangeCallback(); - return this; - } - clone() { - return new this.constructor(this._x, this._y, this._z, this._order); - } - copy(euler) { - this._x = euler._x; - this._y = euler._y; - this._z = euler._z; - this._order = euler._order; - this._onChangeCallback(); - return this; - } - setFromRotationMatrix(m, order = this._order, update = true) { - const te = m.elements; - const m11 = te[0], m12 = te[4], m13 = te[8]; - const m21 = te[1], m22 = te[5], m23 = te[9]; - const m31 = te[2], m32 = te[6], m33 = te[10]; - switch (order) { - case "XYZ": - this._y = Math.asin(clamp(m13, -1, 1)); - if (Math.abs(m13) < 0.9999999) { - this._x = Math.atan2(-m23, m33); - this._z = Math.atan2(-m12, m11); - } else { - this._x = Math.atan2(m32, m22); - this._z = 0; - } - break; - case "YXZ": - this._x = Math.asin(-clamp(m23, -1, 1)); - if (Math.abs(m23) < 0.9999999) { - this._y = Math.atan2(m13, m33); - this._z = Math.atan2(m21, m22); - } else { - this._y = Math.atan2(-m31, m11); - this._z = 0; - } - break; - case "ZXY": - this._x = Math.asin(clamp(m32, -1, 1)); - if (Math.abs(m32) < 0.9999999) { - this._y = Math.atan2(-m31, m33); - this._z = Math.atan2(-m12, m22); - } else { - this._y = 0; - this._z = Math.atan2(m21, m11); - } - break; - case "ZYX": - this._y = Math.asin(-clamp(m31, -1, 1)); - if (Math.abs(m31) < 0.9999999) { - this._x = Math.atan2(m32, m33); - this._z = Math.atan2(m21, m11); - } else { - this._x = 0; - this._z = Math.atan2(-m12, m22); - } - break; - case "YZX": - this._z = Math.asin(clamp(m21, -1, 1)); - if (Math.abs(m21) < 0.9999999) { - this._x = Math.atan2(-m23, m22); - this._y = Math.atan2(-m31, m11); - } else { - this._x = 0; - this._y = Math.atan2(m13, m33); - } - break; - case "XZY": - this._z = Math.asin(-clamp(m12, -1, 1)); - if (Math.abs(m12) < 0.9999999) { - this._x = Math.atan2(m32, m22); - this._y = Math.atan2(m13, m11); - } else { - this._x = Math.atan2(-m23, m33); - this._y = 0; - } - break; - default: - console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + order); - } - this._order = order; - if (update === true) this._onChangeCallback(); - return this; - } - setFromQuaternion(q, order, update) { - _matrix$2.makeRotationFromQuaternion(q); - return this.setFromRotationMatrix(_matrix$2, order, update); - } - setFromVector3(v, order = this._order) { - return this.set(v.x, v.y, v.z, order); - } - reorder(newOrder) { - _quaternion$3.setFromEuler(this); - return this.setFromQuaternion(_quaternion$3, newOrder); - } - equals(euler) { - return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order; - } - fromArray(array) { - this._x = array[0]; - this._y = array[1]; - this._z = array[2]; - if (array[3] !== void 0) this._order = array[3]; - this._onChangeCallback(); - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._order; - return array; - } - _onChange(callback) { - this._onChangeCallback = callback; - return this; - } - _onChangeCallback() { - } - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._order; - } -}; -Euler.DEFAULT_ORDER = "XYZ"; -var Layers = class { - constructor() { - this.mask = 1 | 0; - } - set(channel) { - this.mask = (1 << channel | 0) >>> 0; - } - enable(channel) { - this.mask |= 1 << channel | 0; - } - enableAll() { - this.mask = 4294967295 | 0; - } - toggle(channel) { - this.mask ^= 1 << channel | 0; - } - disable(channel) { - this.mask &= ~(1 << channel | 0); - } - disableAll() { - this.mask = 0; - } - test(layers) { - return (this.mask & layers.mask) !== 0; - } - isEnabled(channel) { - return (this.mask & (1 << channel | 0)) !== 0; - } -}; -var _object3DId = 0; -var _v1$4 = new Vector3(); -var _q1 = new Quaternion(); -var _m1$3 = new Matrix4(); -var _target = new Vector3(); -var _position$3 = new Vector3(); -var _scale$2 = new Vector3(); -var _quaternion$2 = new Quaternion(); -var _xAxis = new Vector3(1, 0, 0); -var _yAxis = new Vector3(0, 1, 0); -var _zAxis = new Vector3(0, 0, 1); -var _addedEvent = { type: "added" }; -var _removedEvent = { type: "removed" }; -var _childaddedEvent = { type: "childadded", child: null }; -var _childremovedEvent = { type: "childremoved", child: null }; -var Object3D = class _Object3D extends EventDispatcher { - constructor() { - super(); - this.isObject3D = true; - Object.defineProperty(this, "id", { value: _object3DId++ }); - this.uuid = generateUUID(); - this.name = ""; - this.type = "Object3D"; - this.parent = null; - this.children = []; - this.up = _Object3D.DEFAULT_UP.clone(); - const position = new Vector3(); - const rotation = new Euler(); - const quaternion = new Quaternion(); - const scale = new Vector3(1, 1, 1); - function onRotationChange() { - quaternion.setFromEuler(rotation, false); - } - function onQuaternionChange() { - rotation.setFromQuaternion(quaternion, void 0, false); - } - rotation._onChange(onRotationChange); - quaternion._onChange(onQuaternionChange); - Object.defineProperties(this, { - position: { - configurable: true, - enumerable: true, - value: position - }, - rotation: { - configurable: true, - enumerable: true, - value: rotation - }, - quaternion: { - configurable: true, - enumerable: true, - value: quaternion - }, - scale: { - configurable: true, - enumerable: true, - value: scale - }, - modelViewMatrix: { - value: new Matrix4() - }, - normalMatrix: { - value: new Matrix3() - } - }); - this.matrix = new Matrix4(); - this.matrixWorld = new Matrix4(); - this.matrixAutoUpdate = _Object3D.DEFAULT_MATRIX_AUTO_UPDATE; - this.matrixWorldAutoUpdate = _Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; - this.matrixWorldNeedsUpdate = false; - this.layers = new Layers(); - this.visible = true; - this.castShadow = false; - this.receiveShadow = false; - this.frustumCulled = true; - this.renderOrder = 0; - this.animations = []; - this.userData = {}; - } - onBeforeShadow() { - } - onAfterShadow() { - } - onBeforeRender() { - } - onAfterRender() { - } - applyMatrix4(matrix) { - if (this.matrixAutoUpdate) this.updateMatrix(); - this.matrix.premultiply(matrix); - this.matrix.decompose(this.position, this.quaternion, this.scale); - } - applyQuaternion(q) { - this.quaternion.premultiply(q); - return this; - } - setRotationFromAxisAngle(axis, angle) { - this.quaternion.setFromAxisAngle(axis, angle); - } - setRotationFromEuler(euler) { - this.quaternion.setFromEuler(euler, true); - } - setRotationFromMatrix(m) { - this.quaternion.setFromRotationMatrix(m); - } - setRotationFromQuaternion(q) { - this.quaternion.copy(q); - } - rotateOnAxis(axis, angle) { - _q1.setFromAxisAngle(axis, angle); - this.quaternion.multiply(_q1); - return this; - } - rotateOnWorldAxis(axis, angle) { - _q1.setFromAxisAngle(axis, angle); - this.quaternion.premultiply(_q1); - return this; - } - rotateX(angle) { - return this.rotateOnAxis(_xAxis, angle); - } - rotateY(angle) { - return this.rotateOnAxis(_yAxis, angle); - } - rotateZ(angle) { - return this.rotateOnAxis(_zAxis, angle); - } - translateOnAxis(axis, distance) { - _v1$4.copy(axis).applyQuaternion(this.quaternion); - this.position.add(_v1$4.multiplyScalar(distance)); - return this; - } - translateX(distance) { - return this.translateOnAxis(_xAxis, distance); - } - translateY(distance) { - return this.translateOnAxis(_yAxis, distance); - } - translateZ(distance) { - return this.translateOnAxis(_zAxis, distance); - } - localToWorld(vector) { - this.updateWorldMatrix(true, false); - return vector.applyMatrix4(this.matrixWorld); - } - worldToLocal(vector) { - this.updateWorldMatrix(true, false); - return vector.applyMatrix4(_m1$3.copy(this.matrixWorld).invert()); - } - lookAt(x, y, z) { - if (x.isVector3) { - _target.copy(x); - } else { - _target.set(x, y, z); - } - const parent = this.parent; - this.updateWorldMatrix(true, false); - _position$3.setFromMatrixPosition(this.matrixWorld); - if (this.isCamera || this.isLight) { - _m1$3.lookAt(_position$3, _target, this.up); - } else { - _m1$3.lookAt(_target, _position$3, this.up); - } - this.quaternion.setFromRotationMatrix(_m1$3); - if (parent) { - _m1$3.extractRotation(parent.matrixWorld); - _q1.setFromRotationMatrix(_m1$3); - this.quaternion.premultiply(_q1.invert()); - } - } - add(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.add(arguments[i]); - } - return this; - } - if (object === this) { - console.error("THREE.Object3D.add: object can't be added as a child of itself.", object); - return this; - } - if (object && object.isObject3D) { - object.removeFromParent(); - object.parent = this; - this.children.push(object); - object.dispatchEvent(_addedEvent); - _childaddedEvent.child = object; - this.dispatchEvent(_childaddedEvent); - _childaddedEvent.child = null; - } else { - console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", object); - } - return this; - } - remove(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.remove(arguments[i]); - } - return this; - } - const index = this.children.indexOf(object); - if (index !== -1) { - object.parent = null; - this.children.splice(index, 1); - object.dispatchEvent(_removedEvent); - _childremovedEvent.child = object; - this.dispatchEvent(_childremovedEvent); - _childremovedEvent.child = null; - } - return this; - } - removeFromParent() { - const parent = this.parent; - if (parent !== null) { - parent.remove(this); - } - return this; - } - clear() { - return this.remove(...this.children); - } - attach(object) { - this.updateWorldMatrix(true, false); - _m1$3.copy(this.matrixWorld).invert(); - if (object.parent !== null) { - object.parent.updateWorldMatrix(true, false); - _m1$3.multiply(object.parent.matrixWorld); - } - object.applyMatrix4(_m1$3); - object.removeFromParent(); - object.parent = this; - this.children.push(object); - object.updateWorldMatrix(false, true); - object.dispatchEvent(_addedEvent); - _childaddedEvent.child = object; - this.dispatchEvent(_childaddedEvent); - _childaddedEvent.child = null; - return this; - } - getObjectById(id) { - return this.getObjectByProperty("id", id); - } - getObjectByName(name) { - return this.getObjectByProperty("name", name); - } - getObjectByProperty(name, value) { - if (this[name] === value) return this; - for (let i = 0, l = this.children.length; i < l; i++) { - const child = this.children[i]; - const object = child.getObjectByProperty(name, value); - if (object !== void 0) { - return object; - } - } - return void 0; - } - getObjectsByProperty(name, value, result = []) { - if (this[name] === value) result.push(this); - const children = this.children; - for (let i = 0, l = children.length; i < l; i++) { - children[i].getObjectsByProperty(name, value, result); - } - return result; - } - getWorldPosition(target) { - this.updateWorldMatrix(true, false); - return target.setFromMatrixPosition(this.matrixWorld); - } - getWorldQuaternion(target) { - this.updateWorldMatrix(true, false); - this.matrixWorld.decompose(_position$3, target, _scale$2); - return target; - } - getWorldScale(target) { - this.updateWorldMatrix(true, false); - this.matrixWorld.decompose(_position$3, _quaternion$2, target); - return target; - } - getWorldDirection(target) { - this.updateWorldMatrix(true, false); - const e = this.matrixWorld.elements; - return target.set(e[8], e[9], e[10]).normalize(); - } - raycast() { - } - traverse(callback) { - callback(this); - const children = this.children; - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverse(callback); - } - } - traverseVisible(callback) { - if (this.visible === false) return; - callback(this); - const children = this.children; - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverseVisible(callback); - } - } - traverseAncestors(callback) { - const parent = this.parent; - if (parent !== null) { - callback(parent); - parent.traverseAncestors(callback); - } - } - updateMatrix() { - this.matrix.compose(this.position, this.quaternion, this.scale); - this.matrixWorldNeedsUpdate = true; - } - updateMatrixWorld(force) { - if (this.matrixAutoUpdate) this.updateMatrix(); - if (this.matrixWorldNeedsUpdate || force) { - if (this.matrixWorldAutoUpdate === true) { - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } - } - this.matrixWorldNeedsUpdate = false; - force = true; - } - const children = this.children; - for (let i = 0, l = children.length; i < l; i++) { - const child = children[i]; - child.updateMatrixWorld(force); - } - } - updateWorldMatrix(updateParents, updateChildren) { - const parent = this.parent; - if (updateParents === true && parent !== null) { - parent.updateWorldMatrix(true, false); - } - if (this.matrixAutoUpdate) this.updateMatrix(); - if (this.matrixWorldAutoUpdate === true) { - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } - } - if (updateChildren === true) { - const children = this.children; - for (let i = 0, l = children.length; i < l; i++) { - const child = children[i]; - child.updateWorldMatrix(false, true); - } - } - } - toJSON(meta) { - const isRootObject = meta === void 0 || typeof meta === "string"; - const output = {}; - if (isRootObject) { - meta = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {}, - nodes: {} - }; - output.metadata = { - version: 4.6, - type: "Object", - generator: "Object3D.toJSON" - }; - } - const object = {}; - object.uuid = this.uuid; - object.type = this.type; - if (this.name !== "") object.name = this.name; - if (this.castShadow === true) object.castShadow = true; - if (this.receiveShadow === true) object.receiveShadow = true; - if (this.visible === false) object.visible = false; - if (this.frustumCulled === false) object.frustumCulled = false; - if (this.renderOrder !== 0) object.renderOrder = this.renderOrder; - if (Object.keys(this.userData).length > 0) object.userData = this.userData; - object.layers = this.layers.mask; - object.matrix = this.matrix.toArray(); - object.up = this.up.toArray(); - if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; - if (this.isInstancedMesh) { - object.type = "InstancedMesh"; - object.count = this.count; - object.instanceMatrix = this.instanceMatrix.toJSON(); - if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON(); - } - if (this.isBatchedMesh) { - object.type = "BatchedMesh"; - object.perObjectFrustumCulled = this.perObjectFrustumCulled; - object.sortObjects = this.sortObjects; - object.drawRanges = this._drawRanges; - object.reservedRanges = this._reservedRanges; - object.visibility = this._visibility; - object.active = this._active; - object.bounds = this._bounds.map((bound) => ({ - boxInitialized: bound.boxInitialized, - boxMin: bound.box.min.toArray(), - boxMax: bound.box.max.toArray(), - sphereInitialized: bound.sphereInitialized, - sphereRadius: bound.sphere.radius, - sphereCenter: bound.sphere.center.toArray() - })); - object.maxInstanceCount = this._maxInstanceCount; - object.maxVertexCount = this._maxVertexCount; - object.maxIndexCount = this._maxIndexCount; - object.geometryInitialized = this._geometryInitialized; - object.geometryCount = this._geometryCount; - object.matricesTexture = this._matricesTexture.toJSON(meta); - if (this._colorsTexture !== null) object.colorsTexture = this._colorsTexture.toJSON(meta); - if (this.boundingSphere !== null) { - object.boundingSphere = { - center: object.boundingSphere.center.toArray(), - radius: object.boundingSphere.radius - }; - } - if (this.boundingBox !== null) { - object.boundingBox = { - min: object.boundingBox.min.toArray(), - max: object.boundingBox.max.toArray() - }; - } - } - function serialize(library, element) { - if (library[element.uuid] === void 0) { - library[element.uuid] = element.toJSON(meta); - } - return element.uuid; - } - if (this.isScene) { - if (this.background) { - if (this.background.isColor) { - object.background = this.background.toJSON(); - } else if (this.background.isTexture) { - object.background = this.background.toJSON(meta).uuid; - } - } - if (this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true) { - object.environment = this.environment.toJSON(meta).uuid; - } - } else if (this.isMesh || this.isLine || this.isPoints) { - object.geometry = serialize(meta.geometries, this.geometry); - const parameters = this.geometry.parameters; - if (parameters !== void 0 && parameters.shapes !== void 0) { - const shapes = parameters.shapes; - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - serialize(meta.shapes, shape); - } - } else { - serialize(meta.shapes, shapes); - } - } - } - if (this.isSkinnedMesh) { - object.bindMode = this.bindMode; - object.bindMatrix = this.bindMatrix.toArray(); - if (this.skeleton !== void 0) { - serialize(meta.skeletons, this.skeleton); - object.skeleton = this.skeleton.uuid; - } - } - if (this.material !== void 0) { - if (Array.isArray(this.material)) { - const uuids = []; - for (let i = 0, l = this.material.length; i < l; i++) { - uuids.push(serialize(meta.materials, this.material[i])); - } - object.material = uuids; - } else { - object.material = serialize(meta.materials, this.material); - } - } - if (this.children.length > 0) { - object.children = []; - for (let i = 0; i < this.children.length; i++) { - object.children.push(this.children[i].toJSON(meta).object); - } - } - if (this.animations.length > 0) { - object.animations = []; - for (let i = 0; i < this.animations.length; i++) { - const animation = this.animations[i]; - object.animations.push(serialize(meta.animations, animation)); - } - } - if (isRootObject) { - const geometries = extractFromCache(meta.geometries); - const materials = extractFromCache(meta.materials); - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - const shapes = extractFromCache(meta.shapes); - const skeletons = extractFromCache(meta.skeletons); - const animations = extractFromCache(meta.animations); - const nodes = extractFromCache(meta.nodes); - if (geometries.length > 0) output.geometries = geometries; - if (materials.length > 0) output.materials = materials; - if (textures.length > 0) output.textures = textures; - if (images.length > 0) output.images = images; - if (shapes.length > 0) output.shapes = shapes; - if (skeletons.length > 0) output.skeletons = skeletons; - if (animations.length > 0) output.animations = animations; - if (nodes.length > 0) output.nodes = nodes; - } - output.object = object; - return output; - function extractFromCache(cache) { - const values = []; - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - return values; - } - } - clone(recursive) { - return new this.constructor().copy(this, recursive); - } - copy(source, recursive = true) { - this.name = source.name; - this.up.copy(source.up); - this.position.copy(source.position); - this.rotation.order = source.rotation.order; - this.quaternion.copy(source.quaternion); - this.scale.copy(source.scale); - this.matrix.copy(source.matrix); - this.matrixWorld.copy(source.matrixWorld); - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate; - this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; - this.layers.mask = source.layers.mask; - this.visible = source.visible; - this.castShadow = source.castShadow; - this.receiveShadow = source.receiveShadow; - this.frustumCulled = source.frustumCulled; - this.renderOrder = source.renderOrder; - this.animations = source.animations.slice(); - this.userData = JSON.parse(JSON.stringify(source.userData)); - if (recursive === true) { - for (let i = 0; i < source.children.length; i++) { - const child = source.children[i]; - this.add(child.clone()); - } - } - return this; - } -}; -Object3D.DEFAULT_UP = new Vector3(0, 1, 0); -Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true; -Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true; -var _v0$2 = new Vector3(); -var _v1$3 = new Vector3(); -var _v2$2 = new Vector3(); -var _v3$2 = new Vector3(); -var _vab = new Vector3(); -var _vac = new Vector3(); -var _vbc = new Vector3(); -var _vap = new Vector3(); -var _vbp = new Vector3(); -var _vcp = new Vector3(); -var Triangle = class _Triangle { - constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) { - this.a = a; - this.b = b; - this.c = c; - } - static getNormal(a, b, c, target) { - target.subVectors(c, b); - _v0$2.subVectors(a, b); - target.cross(_v0$2); - const targetLengthSq = target.lengthSq(); - if (targetLengthSq > 0) { - return target.multiplyScalar(1 / Math.sqrt(targetLengthSq)); - } - return target.set(0, 0, 0); - } - // static/instance method to calculate barycentric coordinates - // based on: http://www.blackpawn.com/texts/pointinpoly/default.html - static getBarycoord(point, a, b, c, target) { - _v0$2.subVectors(c, a); - _v1$3.subVectors(b, a); - _v2$2.subVectors(point, a); - const dot00 = _v0$2.dot(_v0$2); - const dot01 = _v0$2.dot(_v1$3); - const dot02 = _v0$2.dot(_v2$2); - const dot11 = _v1$3.dot(_v1$3); - const dot12 = _v1$3.dot(_v2$2); - const denom = dot00 * dot11 - dot01 * dot01; - if (denom === 0) { - target.set(0, 0, 0); - return null; - } - const invDenom = 1 / denom; - const u = (dot11 * dot02 - dot01 * dot12) * invDenom; - const v = (dot00 * dot12 - dot01 * dot02) * invDenom; - return target.set(1 - u - v, v, u); - } - static containsPoint(point, a, b, c) { - if (this.getBarycoord(point, a, b, c, _v3$2) === null) { - return false; - } - return _v3$2.x >= 0 && _v3$2.y >= 0 && _v3$2.x + _v3$2.y <= 1; - } - static getInterpolation(point, p1, p2, p3, v1, v2, v3, target) { - if (this.getBarycoord(point, p1, p2, p3, _v3$2) === null) { - target.x = 0; - target.y = 0; - if ("z" in target) target.z = 0; - if ("w" in target) target.w = 0; - return null; - } - target.setScalar(0); - target.addScaledVector(v1, _v3$2.x); - target.addScaledVector(v2, _v3$2.y); - target.addScaledVector(v3, _v3$2.z); - return target; - } - static isFrontFacing(a, b, c, direction) { - _v0$2.subVectors(c, b); - _v1$3.subVectors(a, b); - return _v0$2.cross(_v1$3).dot(direction) < 0 ? true : false; - } - set(a, b, c) { - this.a.copy(a); - this.b.copy(b); - this.c.copy(c); - return this; - } - setFromPointsAndIndices(points, i0, i1, i2) { - this.a.copy(points[i0]); - this.b.copy(points[i1]); - this.c.copy(points[i2]); - return this; - } - setFromAttributeAndIndices(attribute, i0, i1, i2) { - this.a.fromBufferAttribute(attribute, i0); - this.b.fromBufferAttribute(attribute, i1); - this.c.fromBufferAttribute(attribute, i2); - return this; - } - clone() { - return new this.constructor().copy(this); - } - copy(triangle) { - this.a.copy(triangle.a); - this.b.copy(triangle.b); - this.c.copy(triangle.c); - return this; - } - getArea() { - _v0$2.subVectors(this.c, this.b); - _v1$3.subVectors(this.a, this.b); - return _v0$2.cross(_v1$3).length() * 0.5; - } - getMidpoint(target) { - return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3); - } - getNormal(target) { - return _Triangle.getNormal(this.a, this.b, this.c, target); - } - getPlane(target) { - return target.setFromCoplanarPoints(this.a, this.b, this.c); - } - getBarycoord(point, target) { - return _Triangle.getBarycoord(point, this.a, this.b, this.c, target); - } - getInterpolation(point, v1, v2, v3, target) { - return _Triangle.getInterpolation(point, this.a, this.b, this.c, v1, v2, v3, target); - } - containsPoint(point) { - return _Triangle.containsPoint(point, this.a, this.b, this.c); - } - isFrontFacing(direction) { - return _Triangle.isFrontFacing(this.a, this.b, this.c, direction); - } - intersectsBox(box) { - return box.intersectsTriangle(this); - } - closestPointToPoint(p, target) { - const a = this.a, b = this.b, c = this.c; - let v, w; - _vab.subVectors(b, a); - _vac.subVectors(c, a); - _vap.subVectors(p, a); - const d1 = _vab.dot(_vap); - const d2 = _vac.dot(_vap); - if (d1 <= 0 && d2 <= 0) { - return target.copy(a); - } - _vbp.subVectors(p, b); - const d3 = _vab.dot(_vbp); - const d4 = _vac.dot(_vbp); - if (d3 >= 0 && d4 <= d3) { - return target.copy(b); - } - const vc = d1 * d4 - d3 * d2; - if (vc <= 0 && d1 >= 0 && d3 <= 0) { - v = d1 / (d1 - d3); - return target.copy(a).addScaledVector(_vab, v); - } - _vcp.subVectors(p, c); - const d5 = _vab.dot(_vcp); - const d6 = _vac.dot(_vcp); - if (d6 >= 0 && d5 <= d6) { - return target.copy(c); - } - const vb = d5 * d2 - d1 * d6; - if (vb <= 0 && d2 >= 0 && d6 <= 0) { - w = d2 / (d2 - d6); - return target.copy(a).addScaledVector(_vac, w); - } - const va = d3 * d6 - d5 * d4; - if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) { - _vbc.subVectors(c, b); - w = (d4 - d3) / (d4 - d3 + (d5 - d6)); - return target.copy(b).addScaledVector(_vbc, w); - } - const denom = 1 / (va + vb + vc); - v = vb * denom; - w = vc * denom; - return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w); - } - equals(triangle) { - return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c); - } -}; -var _colorKeywords = { - "aliceblue": 15792383, - "antiquewhite": 16444375, - "aqua": 65535, - "aquamarine": 8388564, - "azure": 15794175, - "beige": 16119260, - "bisque": 16770244, - "black": 0, - "blanchedalmond": 16772045, - "blue": 255, - "blueviolet": 9055202, - "brown": 10824234, - "burlywood": 14596231, - "cadetblue": 6266528, - "chartreuse": 8388352, - "chocolate": 13789470, - "coral": 16744272, - "cornflowerblue": 6591981, - "cornsilk": 16775388, - "crimson": 14423100, - "cyan": 65535, - "darkblue": 139, - "darkcyan": 35723, - "darkgoldenrod": 12092939, - "darkgray": 11119017, - "darkgreen": 25600, - "darkgrey": 11119017, - "darkkhaki": 12433259, - "darkmagenta": 9109643, - "darkolivegreen": 5597999, - "darkorange": 16747520, - "darkorchid": 10040012, - "darkred": 9109504, - "darksalmon": 15308410, - "darkseagreen": 9419919, - "darkslateblue": 4734347, - "darkslategray": 3100495, - "darkslategrey": 3100495, - "darkturquoise": 52945, - "darkviolet": 9699539, - "deeppink": 16716947, - "deepskyblue": 49151, - "dimgray": 6908265, - "dimgrey": 6908265, - "dodgerblue": 2003199, - "firebrick": 11674146, - "floralwhite": 16775920, - "forestgreen": 2263842, - "fuchsia": 16711935, - "gainsboro": 14474460, - "ghostwhite": 16316671, - "gold": 16766720, - "goldenrod": 14329120, - "gray": 8421504, - "green": 32768, - "greenyellow": 11403055, - "grey": 8421504, - "honeydew": 15794160, - "hotpink": 16738740, - "indianred": 13458524, - "indigo": 4915330, - "ivory": 16777200, - "khaki": 15787660, - "lavender": 15132410, - "lavenderblush": 16773365, - "lawngreen": 8190976, - "lemonchiffon": 16775885, - "lightblue": 11393254, - "lightcoral": 15761536, - "lightcyan": 14745599, - "lightgoldenrodyellow": 16448210, - "lightgray": 13882323, - "lightgreen": 9498256, - "lightgrey": 13882323, - "lightpink": 16758465, - "lightsalmon": 16752762, - "lightseagreen": 2142890, - "lightskyblue": 8900346, - "lightslategray": 7833753, - "lightslategrey": 7833753, - "lightsteelblue": 11584734, - "lightyellow": 16777184, - "lime": 65280, - "limegreen": 3329330, - "linen": 16445670, - "magenta": 16711935, - "maroon": 8388608, - "mediumaquamarine": 6737322, - "mediumblue": 205, - "mediumorchid": 12211667, - "mediumpurple": 9662683, - "mediumseagreen": 3978097, - "mediumslateblue": 8087790, - "mediumspringgreen": 64154, - "mediumturquoise": 4772300, - "mediumvioletred": 13047173, - "midnightblue": 1644912, - "mintcream": 16121850, - "mistyrose": 16770273, - "moccasin": 16770229, - "navajowhite": 16768685, - "navy": 128, - "oldlace": 16643558, - "olive": 8421376, - "olivedrab": 7048739, - "orange": 16753920, - "orangered": 16729344, - "orchid": 14315734, - "palegoldenrod": 15657130, - "palegreen": 10025880, - "paleturquoise": 11529966, - "palevioletred": 14381203, - "papayawhip": 16773077, - "peachpuff": 16767673, - "peru": 13468991, - "pink": 16761035, - "plum": 14524637, - "powderblue": 11591910, - "purple": 8388736, - "rebeccapurple": 6697881, - "red": 16711680, - "rosybrown": 12357519, - "royalblue": 4286945, - "saddlebrown": 9127187, - "salmon": 16416882, - "sandybrown": 16032864, - "seagreen": 3050327, - "seashell": 16774638, - "sienna": 10506797, - "silver": 12632256, - "skyblue": 8900331, - "slateblue": 6970061, - "slategray": 7372944, - "slategrey": 7372944, - "snow": 16775930, - "springgreen": 65407, - "steelblue": 4620980, - "tan": 13808780, - "teal": 32896, - "thistle": 14204888, - "tomato": 16737095, - "turquoise": 4251856, - "violet": 15631086, - "wheat": 16113331, - "white": 16777215, - "whitesmoke": 16119285, - "yellow": 16776960, - "yellowgreen": 10145074 -}; -var _hslA = { h: 0, s: 0, l: 0 }; -var _hslB = { h: 0, s: 0, l: 0 }; -function hue2rgb(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; -} -var Color = class { - constructor(r, g, b) { - this.isColor = true; - this.r = 1; - this.g = 1; - this.b = 1; - return this.set(r, g, b); - } - set(r, g, b) { - if (g === void 0 && b === void 0) { - const value = r; - if (value && value.isColor) { - this.copy(value); - } else if (typeof value === "number") { - this.setHex(value); - } else if (typeof value === "string") { - this.setStyle(value); - } - } else { - this.setRGB(r, g, b); - } - return this; - } - setScalar(scalar) { - this.r = scalar; - this.g = scalar; - this.b = scalar; - return this; - } - setHex(hex, colorSpace = SRGBColorSpace) { - hex = Math.floor(hex); - this.r = (hex >> 16 & 255) / 255; - this.g = (hex >> 8 & 255) / 255; - this.b = (hex & 255) / 255; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - setRGB(r, g, b, colorSpace = ColorManagement.workingColorSpace) { - this.r = r; - this.g = g; - this.b = b; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - setHSL(h, s, l, colorSpace = ColorManagement.workingColorSpace) { - h = euclideanModulo(h, 1); - s = clamp(s, 0, 1); - l = clamp(l, 0, 1); - if (s === 0) { - this.r = this.g = this.b = l; - } else { - const p = l <= 0.5 ? l * (1 + s) : l + s - l * s; - const q = 2 * l - p; - this.r = hue2rgb(q, p, h + 1 / 3); - this.g = hue2rgb(q, p, h); - this.b = hue2rgb(q, p, h - 1 / 3); - } - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - setStyle(style, colorSpace = SRGBColorSpace) { - function handleAlpha(string) { - if (string === void 0) return; - if (parseFloat(string) < 1) { - console.warn("THREE.Color: Alpha component of " + style + " will be ignored."); - } - } - let m; - if (m = /^(\w+)\(([^\)]*)\)/.exec(style)) { - let color; - const name = m[1]; - const components = m[2]; - switch (name) { - case "rgb": - case "rgba": - if (color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - handleAlpha(color[4]); - return this.setRGB( - Math.min(255, parseInt(color[1], 10)) / 255, - Math.min(255, parseInt(color[2], 10)) / 255, - Math.min(255, parseInt(color[3], 10)) / 255, - colorSpace - ); - } - if (color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - handleAlpha(color[4]); - return this.setRGB( - Math.min(100, parseInt(color[1], 10)) / 100, - Math.min(100, parseInt(color[2], 10)) / 100, - Math.min(100, parseInt(color[3], 10)) / 100, - colorSpace - ); - } - break; - case "hsl": - case "hsla": - if (color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - handleAlpha(color[4]); - return this.setHSL( - parseFloat(color[1]) / 360, - parseFloat(color[2]) / 100, - parseFloat(color[3]) / 100, - colorSpace - ); - } - break; - default: - console.warn("THREE.Color: Unknown color model " + style); - } - } else if (m = /^\#([A-Fa-f\d]+)$/.exec(style)) { - const hex = m[1]; - const size = hex.length; - if (size === 3) { - return this.setRGB( - parseInt(hex.charAt(0), 16) / 15, - parseInt(hex.charAt(1), 16) / 15, - parseInt(hex.charAt(2), 16) / 15, - colorSpace - ); - } else if (size === 6) { - return this.setHex(parseInt(hex, 16), colorSpace); - } else { - console.warn("THREE.Color: Invalid hex color " + style); - } - } else if (style && style.length > 0) { - return this.setColorName(style, colorSpace); - } - return this; - } - setColorName(style, colorSpace = SRGBColorSpace) { - const hex = _colorKeywords[style.toLowerCase()]; - if (hex !== void 0) { - this.setHex(hex, colorSpace); - } else { - console.warn("THREE.Color: Unknown color " + style); - } - return this; - } - clone() { - return new this.constructor(this.r, this.g, this.b); - } - copy(color) { - this.r = color.r; - this.g = color.g; - this.b = color.b; - return this; - } - copySRGBToLinear(color) { - this.r = SRGBToLinear(color.r); - this.g = SRGBToLinear(color.g); - this.b = SRGBToLinear(color.b); - return this; - } - copyLinearToSRGB(color) { - this.r = LinearToSRGB(color.r); - this.g = LinearToSRGB(color.g); - this.b = LinearToSRGB(color.b); - return this; - } - convertSRGBToLinear() { - this.copySRGBToLinear(this); - return this; - } - convertLinearToSRGB() { - this.copyLinearToSRGB(this); - return this; - } - getHex(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - return Math.round(clamp(_color.r * 255, 0, 255)) * 65536 + Math.round(clamp(_color.g * 255, 0, 255)) * 256 + Math.round(clamp(_color.b * 255, 0, 255)); - } - getHexString(colorSpace = SRGBColorSpace) { - return ("000000" + this.getHex(colorSpace).toString(16)).slice(-6); - } - getHSL(target, colorSpace = ColorManagement.workingColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - const r = _color.r, g = _color.g, b = _color.b; - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - let hue, saturation; - const lightness = (min + max) / 2; - if (min === max) { - hue = 0; - saturation = 0; - } else { - const delta = max - min; - saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min); - switch (max) { - case r: - hue = (g - b) / delta + (g < b ? 6 : 0); - break; - case g: - hue = (b - r) / delta + 2; - break; - case b: - hue = (r - g) / delta + 4; - break; - } - hue /= 6; - } - target.h = hue; - target.s = saturation; - target.l = lightness; - return target; - } - getRGB(target, colorSpace = ColorManagement.workingColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - target.r = _color.r; - target.g = _color.g; - target.b = _color.b; - return target; - } - getStyle(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(_color.copy(this), colorSpace); - const r = _color.r, g = _color.g, b = _color.b; - if (colorSpace !== SRGBColorSpace) { - return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(3)})`; - } - return `rgb(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)})`; - } - offsetHSL(h, s, l) { - this.getHSL(_hslA); - return this.setHSL(_hslA.h + h, _hslA.s + s, _hslA.l + l); - } - add(color) { - this.r += color.r; - this.g += color.g; - this.b += color.b; - return this; - } - addColors(color1, color2) { - this.r = color1.r + color2.r; - this.g = color1.g + color2.g; - this.b = color1.b + color2.b; - return this; - } - addScalar(s) { - this.r += s; - this.g += s; - this.b += s; - return this; - } - sub(color) { - this.r = Math.max(0, this.r - color.r); - this.g = Math.max(0, this.g - color.g); - this.b = Math.max(0, this.b - color.b); - return this; - } - multiply(color) { - this.r *= color.r; - this.g *= color.g; - this.b *= color.b; - return this; - } - multiplyScalar(s) { - this.r *= s; - this.g *= s; - this.b *= s; - return this; - } - lerp(color, alpha) { - this.r += (color.r - this.r) * alpha; - this.g += (color.g - this.g) * alpha; - this.b += (color.b - this.b) * alpha; - return this; - } - lerpColors(color1, color2, alpha) { - this.r = color1.r + (color2.r - color1.r) * alpha; - this.g = color1.g + (color2.g - color1.g) * alpha; - this.b = color1.b + (color2.b - color1.b) * alpha; - return this; - } - lerpHSL(color, alpha) { - this.getHSL(_hslA); - color.getHSL(_hslB); - const h = lerp(_hslA.h, _hslB.h, alpha); - const s = lerp(_hslA.s, _hslB.s, alpha); - const l = lerp(_hslA.l, _hslB.l, alpha); - this.setHSL(h, s, l); - return this; - } - setFromVector3(v) { - this.r = v.x; - this.g = v.y; - this.b = v.z; - return this; - } - applyMatrix3(m) { - const r = this.r, g = this.g, b = this.b; - const e = m.elements; - this.r = e[0] * r + e[3] * g + e[6] * b; - this.g = e[1] * r + e[4] * g + e[7] * b; - this.b = e[2] * r + e[5] * g + e[8] * b; - return this; - } - equals(c) { - return c.r === this.r && c.g === this.g && c.b === this.b; - } - fromArray(array, offset = 0) { - this.r = array[offset]; - this.g = array[offset + 1]; - this.b = array[offset + 2]; - return this; - } - toArray(array = [], offset = 0) { - array[offset] = this.r; - array[offset + 1] = this.g; - array[offset + 2] = this.b; - return array; - } - fromBufferAttribute(attribute, index) { - this.r = attribute.getX(index); - this.g = attribute.getY(index); - this.b = attribute.getZ(index); - return this; - } - toJSON() { - return this.getHex(); - } - *[Symbol.iterator]() { - yield this.r; - yield this.g; - yield this.b; - } -}; -var _color = new Color(); -Color.NAMES = _colorKeywords; -var _materialId = 0; -var Material = class extends EventDispatcher { - constructor() { - super(); - this.isMaterial = true; - Object.defineProperty(this, "id", { value: _materialId++ }); - this.uuid = generateUUID(); - this.name = ""; - this.type = "Material"; - this.blending = NormalBlending; - this.side = FrontSide; - this.vertexColors = false; - this.opacity = 1; - this.transparent = false; - this.alphaHash = false; - this.blendSrc = SrcAlphaFactor; - this.blendDst = OneMinusSrcAlphaFactor; - this.blendEquation = AddEquation; - this.blendSrcAlpha = null; - this.blendDstAlpha = null; - this.blendEquationAlpha = null; - this.blendColor = new Color(0, 0, 0); - this.blendAlpha = 0; - this.depthFunc = LessEqualDepth; - this.depthTest = true; - this.depthWrite = true; - this.stencilWriteMask = 255; - this.stencilFunc = AlwaysStencilFunc; - this.stencilRef = 0; - this.stencilFuncMask = 255; - this.stencilFail = KeepStencilOp; - this.stencilZFail = KeepStencilOp; - this.stencilZPass = KeepStencilOp; - this.stencilWrite = false; - this.clippingPlanes = null; - this.clipIntersection = false; - this.clipShadows = false; - this.shadowSide = null; - this.colorWrite = true; - this.precision = null; - this.polygonOffset = false; - this.polygonOffsetFactor = 0; - this.polygonOffsetUnits = 0; - this.dithering = false; - this.alphaToCoverage = false; - this.premultipliedAlpha = false; - this.forceSinglePass = false; - this.visible = true; - this.toneMapped = true; - this.userData = {}; - this.version = 0; - this._alphaTest = 0; - } - get alphaTest() { - return this._alphaTest; - } - set alphaTest(value) { - if (this._alphaTest > 0 !== value > 0) { - this.version++; - } - this._alphaTest = value; - } - onBeforeCompile() { - } - customProgramCacheKey() { - return this.onBeforeCompile.toString(); - } - setValues(values) { - if (values === void 0) return; - for (const key in values) { - const newValue = values[key]; - if (newValue === void 0) { - console.warn(`THREE.Material: parameter '${key}' has value of undefined.`); - continue; - } - const currentValue = this[key]; - if (currentValue === void 0) { - console.warn(`THREE.Material: '${key}' is not a property of THREE.${this.type}.`); - continue; - } - if (currentValue && currentValue.isColor) { - currentValue.set(newValue); - } else if (currentValue && currentValue.isVector3 && (newValue && newValue.isVector3)) { - currentValue.copy(newValue); - } else { - this[key] = newValue; - } - } - } - toJSON(meta) { - const isRootObject = meta === void 0 || typeof meta === "string"; - if (isRootObject) { - meta = { - textures: {}, - images: {} - }; - } - const data = { - metadata: { - version: 4.6, - type: "Material", - generator: "Material.toJSON" - } - }; - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== "") data.name = this.name; - if (this.color && this.color.isColor) data.color = this.color.getHex(); - if (this.roughness !== void 0) data.roughness = this.roughness; - if (this.metalness !== void 0) data.metalness = this.metalness; - if (this.sheen !== void 0) data.sheen = this.sheen; - if (this.sheenColor && this.sheenColor.isColor) data.sheenColor = this.sheenColor.getHex(); - if (this.sheenRoughness !== void 0) data.sheenRoughness = this.sheenRoughness; - if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex(); - if (this.emissiveIntensity !== void 0 && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity; - if (this.specular && this.specular.isColor) data.specular = this.specular.getHex(); - if (this.specularIntensity !== void 0) data.specularIntensity = this.specularIntensity; - if (this.specularColor && this.specularColor.isColor) data.specularColor = this.specularColor.getHex(); - if (this.shininess !== void 0) data.shininess = this.shininess; - if (this.clearcoat !== void 0) data.clearcoat = this.clearcoat; - if (this.clearcoatRoughness !== void 0) data.clearcoatRoughness = this.clearcoatRoughness; - if (this.clearcoatMap && this.clearcoatMap.isTexture) { - data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid; - } - if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) { - data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid; - } - if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) { - data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid; - data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); - } - if (this.dispersion !== void 0) data.dispersion = this.dispersion; - if (this.iridescence !== void 0) data.iridescence = this.iridescence; - if (this.iridescenceIOR !== void 0) data.iridescenceIOR = this.iridescenceIOR; - if (this.iridescenceThicknessRange !== void 0) data.iridescenceThicknessRange = this.iridescenceThicknessRange; - if (this.iridescenceMap && this.iridescenceMap.isTexture) { - data.iridescenceMap = this.iridescenceMap.toJSON(meta).uuid; - } - if (this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture) { - data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON(meta).uuid; - } - if (this.anisotropy !== void 0) data.anisotropy = this.anisotropy; - if (this.anisotropyRotation !== void 0) data.anisotropyRotation = this.anisotropyRotation; - if (this.anisotropyMap && this.anisotropyMap.isTexture) { - data.anisotropyMap = this.anisotropyMap.toJSON(meta).uuid; - } - if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid; - if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid; - if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid; - if (this.lightMap && this.lightMap.isTexture) { - data.lightMap = this.lightMap.toJSON(meta).uuid; - data.lightMapIntensity = this.lightMapIntensity; - } - if (this.aoMap && this.aoMap.isTexture) { - data.aoMap = this.aoMap.toJSON(meta).uuid; - data.aoMapIntensity = this.aoMapIntensity; - } - if (this.bumpMap && this.bumpMap.isTexture) { - data.bumpMap = this.bumpMap.toJSON(meta).uuid; - data.bumpScale = this.bumpScale; - } - if (this.normalMap && this.normalMap.isTexture) { - data.normalMap = this.normalMap.toJSON(meta).uuid; - data.normalMapType = this.normalMapType; - data.normalScale = this.normalScale.toArray(); - } - if (this.displacementMap && this.displacementMap.isTexture) { - data.displacementMap = this.displacementMap.toJSON(meta).uuid; - data.displacementScale = this.displacementScale; - data.displacementBias = this.displacementBias; - } - if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid; - if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid; - if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid; - if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid; - if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid; - if (this.specularColorMap && this.specularColorMap.isTexture) data.specularColorMap = this.specularColorMap.toJSON(meta).uuid; - if (this.envMap && this.envMap.isTexture) { - data.envMap = this.envMap.toJSON(meta).uuid; - if (this.combine !== void 0) data.combine = this.combine; - } - if (this.envMapRotation !== void 0) data.envMapRotation = this.envMapRotation.toArray(); - if (this.envMapIntensity !== void 0) data.envMapIntensity = this.envMapIntensity; - if (this.reflectivity !== void 0) data.reflectivity = this.reflectivity; - if (this.refractionRatio !== void 0) data.refractionRatio = this.refractionRatio; - if (this.gradientMap && this.gradientMap.isTexture) { - data.gradientMap = this.gradientMap.toJSON(meta).uuid; - } - if (this.transmission !== void 0) data.transmission = this.transmission; - if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid; - if (this.thickness !== void 0) data.thickness = this.thickness; - if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid; - if (this.attenuationDistance !== void 0 && this.attenuationDistance !== Infinity) data.attenuationDistance = this.attenuationDistance; - if (this.attenuationColor !== void 0) data.attenuationColor = this.attenuationColor.getHex(); - if (this.size !== void 0) data.size = this.size; - if (this.shadowSide !== null) data.shadowSide = this.shadowSide; - if (this.sizeAttenuation !== void 0) data.sizeAttenuation = this.sizeAttenuation; - if (this.blending !== NormalBlending) data.blending = this.blending; - if (this.side !== FrontSide) data.side = this.side; - if (this.vertexColors === true) data.vertexColors = true; - if (this.opacity < 1) data.opacity = this.opacity; - if (this.transparent === true) data.transparent = true; - if (this.blendSrc !== SrcAlphaFactor) data.blendSrc = this.blendSrc; - if (this.blendDst !== OneMinusSrcAlphaFactor) data.blendDst = this.blendDst; - if (this.blendEquation !== AddEquation) data.blendEquation = this.blendEquation; - if (this.blendSrcAlpha !== null) data.blendSrcAlpha = this.blendSrcAlpha; - if (this.blendDstAlpha !== null) data.blendDstAlpha = this.blendDstAlpha; - if (this.blendEquationAlpha !== null) data.blendEquationAlpha = this.blendEquationAlpha; - if (this.blendColor && this.blendColor.isColor) data.blendColor = this.blendColor.getHex(); - if (this.blendAlpha !== 0) data.blendAlpha = this.blendAlpha; - if (this.depthFunc !== LessEqualDepth) data.depthFunc = this.depthFunc; - if (this.depthTest === false) data.depthTest = this.depthTest; - if (this.depthWrite === false) data.depthWrite = this.depthWrite; - if (this.colorWrite === false) data.colorWrite = this.colorWrite; - if (this.stencilWriteMask !== 255) data.stencilWriteMask = this.stencilWriteMask; - if (this.stencilFunc !== AlwaysStencilFunc) data.stencilFunc = this.stencilFunc; - if (this.stencilRef !== 0) data.stencilRef = this.stencilRef; - if (this.stencilFuncMask !== 255) data.stencilFuncMask = this.stencilFuncMask; - if (this.stencilFail !== KeepStencilOp) data.stencilFail = this.stencilFail; - if (this.stencilZFail !== KeepStencilOp) data.stencilZFail = this.stencilZFail; - if (this.stencilZPass !== KeepStencilOp) data.stencilZPass = this.stencilZPass; - if (this.stencilWrite === true) data.stencilWrite = this.stencilWrite; - if (this.rotation !== void 0 && this.rotation !== 0) data.rotation = this.rotation; - if (this.polygonOffset === true) data.polygonOffset = true; - if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor; - if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits; - if (this.linewidth !== void 0 && this.linewidth !== 1) data.linewidth = this.linewidth; - if (this.dashSize !== void 0) data.dashSize = this.dashSize; - if (this.gapSize !== void 0) data.gapSize = this.gapSize; - if (this.scale !== void 0) data.scale = this.scale; - if (this.dithering === true) data.dithering = true; - if (this.alphaTest > 0) data.alphaTest = this.alphaTest; - if (this.alphaHash === true) data.alphaHash = true; - if (this.alphaToCoverage === true) data.alphaToCoverage = true; - if (this.premultipliedAlpha === true) data.premultipliedAlpha = true; - if (this.forceSinglePass === true) data.forceSinglePass = true; - if (this.wireframe === true) data.wireframe = true; - if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth; - if (this.wireframeLinecap !== "round") data.wireframeLinecap = this.wireframeLinecap; - if (this.wireframeLinejoin !== "round") data.wireframeLinejoin = this.wireframeLinejoin; - if (this.flatShading === true) data.flatShading = true; - if (this.visible === false) data.visible = false; - if (this.toneMapped === false) data.toneMapped = false; - if (this.fog === false) data.fog = false; - if (Object.keys(this.userData).length > 0) data.userData = this.userData; - function extractFromCache(cache) { - const values = []; - for (const key in cache) { - const data2 = cache[key]; - delete data2.metadata; - values.push(data2); - } - return values; - } - if (isRootObject) { - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - if (textures.length > 0) data.textures = textures; - if (images.length > 0) data.images = images; - } - return data; - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.name = source.name; - this.blending = source.blending; - this.side = source.side; - this.vertexColors = source.vertexColors; - this.opacity = source.opacity; - this.transparent = source.transparent; - this.blendSrc = source.blendSrc; - this.blendDst = source.blendDst; - this.blendEquation = source.blendEquation; - this.blendSrcAlpha = source.blendSrcAlpha; - this.blendDstAlpha = source.blendDstAlpha; - this.blendEquationAlpha = source.blendEquationAlpha; - this.blendColor.copy(source.blendColor); - this.blendAlpha = source.blendAlpha; - this.depthFunc = source.depthFunc; - this.depthTest = source.depthTest; - this.depthWrite = source.depthWrite; - this.stencilWriteMask = source.stencilWriteMask; - this.stencilFunc = source.stencilFunc; - this.stencilRef = source.stencilRef; - this.stencilFuncMask = source.stencilFuncMask; - this.stencilFail = source.stencilFail; - this.stencilZFail = source.stencilZFail; - this.stencilZPass = source.stencilZPass; - this.stencilWrite = source.stencilWrite; - const srcPlanes = source.clippingPlanes; - let dstPlanes = null; - if (srcPlanes !== null) { - const n = srcPlanes.length; - dstPlanes = new Array(n); - for (let i = 0; i !== n; ++i) { - dstPlanes[i] = srcPlanes[i].clone(); - } - } - this.clippingPlanes = dstPlanes; - this.clipIntersection = source.clipIntersection; - this.clipShadows = source.clipShadows; - this.shadowSide = source.shadowSide; - this.colorWrite = source.colorWrite; - this.precision = source.precision; - this.polygonOffset = source.polygonOffset; - this.polygonOffsetFactor = source.polygonOffsetFactor; - this.polygonOffsetUnits = source.polygonOffsetUnits; - this.dithering = source.dithering; - this.alphaTest = source.alphaTest; - this.alphaHash = source.alphaHash; - this.alphaToCoverage = source.alphaToCoverage; - this.premultipliedAlpha = source.premultipliedAlpha; - this.forceSinglePass = source.forceSinglePass; - this.visible = source.visible; - this.toneMapped = source.toneMapped; - this.userData = JSON.parse(JSON.stringify(source.userData)); - return this; - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - } - set needsUpdate(value) { - if (value === true) this.version++; - } - onBuild() { - console.warn("Material: onBuild() has been removed."); - } - onBeforeRender() { - console.warn("Material: onBeforeRender() has been removed."); - } -}; -var MeshBasicMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshBasicMaterial = true; - this.type = "MeshBasicMaterial"; - this.color = new Color(16777215); - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1; - this.aoMap = null; - this.aoMapIntensity = 1; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = "round"; - this.wireframeLinejoin = "round"; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.fog = source.fog; - return this; - } -}; -var _tables = _generateTables(); -function _generateTables() { - const buffer = new ArrayBuffer(4); - const floatView = new Float32Array(buffer); - const uint32View = new Uint32Array(buffer); - const baseTable = new Uint32Array(512); - const shiftTable = new Uint32Array(512); - for (let i = 0; i < 256; ++i) { - const e = i - 127; - if (e < -27) { - baseTable[i] = 0; - baseTable[i | 256] = 32768; - shiftTable[i] = 24; - shiftTable[i | 256] = 24; - } else if (e < -14) { - baseTable[i] = 1024 >> -e - 14; - baseTable[i | 256] = 1024 >> -e - 14 | 32768; - shiftTable[i] = -e - 1; - shiftTable[i | 256] = -e - 1; - } else if (e <= 15) { - baseTable[i] = e + 15 << 10; - baseTable[i | 256] = e + 15 << 10 | 32768; - shiftTable[i] = 13; - shiftTable[i | 256] = 13; - } else if (e < 128) { - baseTable[i] = 31744; - baseTable[i | 256] = 64512; - shiftTable[i] = 24; - shiftTable[i | 256] = 24; - } else { - baseTable[i] = 31744; - baseTable[i | 256] = 64512; - shiftTable[i] = 13; - shiftTable[i | 256] = 13; - } - } - const mantissaTable = new Uint32Array(2048); - const exponentTable = new Uint32Array(64); - const offsetTable = new Uint32Array(64); - for (let i = 1; i < 1024; ++i) { - let m = i << 13; - let e = 0; - while ((m & 8388608) === 0) { - m <<= 1; - e -= 8388608; - } - m &= ~8388608; - e += 947912704; - mantissaTable[i] = m | e; - } - for (let i = 1024; i < 2048; ++i) { - mantissaTable[i] = 939524096 + (i - 1024 << 13); - } - for (let i = 1; i < 31; ++i) { - exponentTable[i] = i << 23; - } - exponentTable[31] = 1199570944; - exponentTable[32] = 2147483648; - for (let i = 33; i < 63; ++i) { - exponentTable[i] = 2147483648 + (i - 32 << 23); - } - exponentTable[63] = 3347054592; - for (let i = 1; i < 64; ++i) { - if (i !== 32) { - offsetTable[i] = 1024; - } - } - return { - floatView, - uint32View, - baseTable, - shiftTable, - mantissaTable, - exponentTable, - offsetTable - }; -} -function toHalfFloat(val) { - if (Math.abs(val) > 65504) console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."); - val = clamp(val, -65504, 65504); - _tables.floatView[0] = val; - const f = _tables.uint32View[0]; - const e = f >> 23 & 511; - return _tables.baseTable[e] + ((f & 8388607) >> _tables.shiftTable[e]); -} -function fromHalfFloat(val) { - const m = val >> 10; - _tables.uint32View[0] = _tables.mantissaTable[_tables.offsetTable[m] + (val & 1023)] + _tables.exponentTable[m]; - return _tables.floatView[0]; -} -var DataUtils = { - toHalfFloat, - fromHalfFloat -}; -var _vector$9 = new Vector3(); -var _vector2$1 = new Vector2(); -var BufferAttribute = class { - constructor(array, itemSize, normalized = false) { - if (Array.isArray(array)) { - throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); - } - this.isBufferAttribute = true; - this.name = ""; - this.array = array; - this.itemSize = itemSize; - this.count = array !== void 0 ? array.length / itemSize : 0; - this.normalized = normalized; - this.usage = StaticDrawUsage; - this._updateRange = { offset: 0, count: -1 }; - this.updateRanges = []; - this.gpuType = FloatType; - this.version = 0; - } - onUploadCallback() { - } - set needsUpdate(value) { - if (value === true) this.version++; - } - get updateRange() { - warnOnce("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."); - return this._updateRange; - } - setUsage(value) { - this.usage = value; - return this; - } - addUpdateRange(start, count) { - this.updateRanges.push({ start, count }); - } - clearUpdateRanges() { - this.updateRanges.length = 0; - } - copy(source) { - this.name = source.name; - this.array = new source.array.constructor(source.array); - this.itemSize = source.itemSize; - this.count = source.count; - this.normalized = source.normalized; - this.usage = source.usage; - this.gpuType = source.gpuType; - return this; - } - copyAt(index1, attribute, index2) { - index1 *= this.itemSize; - index2 *= attribute.itemSize; - for (let i = 0, l = this.itemSize; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - return this; - } - copyArray(array) { - this.array.set(array); - return this; - } - applyMatrix3(m) { - if (this.itemSize === 2) { - for (let i = 0, l = this.count; i < l; i++) { - _vector2$1.fromBufferAttribute(this, i); - _vector2$1.applyMatrix3(m); - this.setXY(i, _vector2$1.x, _vector2$1.y); - } - } else if (this.itemSize === 3) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - _vector$9.applyMatrix3(m); - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - } - return this; - } - applyMatrix4(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - _vector$9.applyMatrix4(m); - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - return this; - } - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - _vector$9.applyNormalMatrix(m); - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - return this; - } - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - _vector$9.transformDirection(m); - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - return this; - } - set(value, offset = 0) { - this.array.set(value, offset); - return this; - } - getComponent(index, component) { - let value = this.array[index * this.itemSize + component]; - if (this.normalized) value = denormalize(value, this.array); - return value; - } - setComponent(index, component, value) { - if (this.normalized) value = normalize(value, this.array); - this.array[index * this.itemSize + component] = value; - return this; - } - getX(index) { - let x = this.array[index * this.itemSize]; - if (this.normalized) x = denormalize(x, this.array); - return x; - } - setX(index, x) { - if (this.normalized) x = normalize(x, this.array); - this.array[index * this.itemSize] = x; - return this; - } - getY(index) { - let y = this.array[index * this.itemSize + 1]; - if (this.normalized) y = denormalize(y, this.array); - return y; - } - setY(index, y) { - if (this.normalized) y = normalize(y, this.array); - this.array[index * this.itemSize + 1] = y; - return this; - } - getZ(index) { - let z = this.array[index * this.itemSize + 2]; - if (this.normalized) z = denormalize(z, this.array); - return z; - } - setZ(index, z) { - if (this.normalized) z = normalize(z, this.array); - this.array[index * this.itemSize + 2] = z; - return this; - } - getW(index) { - let w = this.array[index * this.itemSize + 3]; - if (this.normalized) w = denormalize(w, this.array); - return w; - } - setW(index, w) { - if (this.normalized) w = normalize(w, this.array); - this.array[index * this.itemSize + 3] = w; - return this; - } - setXY(index, x, y) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - } - this.array[index + 0] = x; - this.array[index + 1] = y; - return this; - } - setXYZ(index, x, y, z) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - } - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - return this; - } - setXYZW(index, x, y, z, w) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - w = normalize(w, this.array); - } - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - this.array[index + 3] = w; - return this; - } - onUpload(callback) { - this.onUploadCallback = callback; - return this; - } - clone() { - return new this.constructor(this.array, this.itemSize).copy(this); - } - toJSON() { - const data = { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.from(this.array), - normalized: this.normalized - }; - if (this.name !== "") data.name = this.name; - if (this.usage !== StaticDrawUsage) data.usage = this.usage; - return data; - } -}; -var Int8BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int8Array(array), itemSize, normalized); - } -}; -var Uint8BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8Array(array), itemSize, normalized); - } -}; -var Uint8ClampedBufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8ClampedArray(array), itemSize, normalized); - } -}; -var Int16BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int16Array(array), itemSize, normalized); - } -}; -var Uint16BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - } -}; -var Int32BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int32Array(array), itemSize, normalized); - } -}; -var Uint32BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint32Array(array), itemSize, normalized); - } -}; -var Float16BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - this.isFloat16BufferAttribute = true; - } - getX(index) { - let x = fromHalfFloat(this.array[index * this.itemSize]); - if (this.normalized) x = denormalize(x, this.array); - return x; - } - setX(index, x) { - if (this.normalized) x = normalize(x, this.array); - this.array[index * this.itemSize] = toHalfFloat(x); - return this; - } - getY(index) { - let y = fromHalfFloat(this.array[index * this.itemSize + 1]); - if (this.normalized) y = denormalize(y, this.array); - return y; - } - setY(index, y) { - if (this.normalized) y = normalize(y, this.array); - this.array[index * this.itemSize + 1] = toHalfFloat(y); - return this; - } - getZ(index) { - let z = fromHalfFloat(this.array[index * this.itemSize + 2]); - if (this.normalized) z = denormalize(z, this.array); - return z; - } - setZ(index, z) { - if (this.normalized) z = normalize(z, this.array); - this.array[index * this.itemSize + 2] = toHalfFloat(z); - return this; - } - getW(index) { - let w = fromHalfFloat(this.array[index * this.itemSize + 3]); - if (this.normalized) w = denormalize(w, this.array); - return w; - } - setW(index, w) { - if (this.normalized) w = normalize(w, this.array); - this.array[index * this.itemSize + 3] = toHalfFloat(w); - return this; - } - setXY(index, x, y) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - } - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - return this; - } - setXYZ(index, x, y, z) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - } - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - this.array[index + 2] = toHalfFloat(z); - return this; - } - setXYZW(index, x, y, z, w) { - index *= this.itemSize; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - w = normalize(w, this.array); - } - this.array[index + 0] = toHalfFloat(x); - this.array[index + 1] = toHalfFloat(y); - this.array[index + 2] = toHalfFloat(z); - this.array[index + 3] = toHalfFloat(w); - return this; - } -}; -var Float32BufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Float32Array(array), itemSize, normalized); - } -}; -var _id$2 = 0; -var _m1$2 = new Matrix4(); -var _obj = new Object3D(); -var _offset = new Vector3(); -var _box$2 = new Box3(); -var _boxMorphTargets = new Box3(); -var _vector$8 = new Vector3(); -var BufferGeometry = class _BufferGeometry extends EventDispatcher { - constructor() { - super(); - this.isBufferGeometry = true; - Object.defineProperty(this, "id", { value: _id$2++ }); - this.uuid = generateUUID(); - this.name = ""; - this.type = "BufferGeometry"; - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.morphTargetsRelative = false; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; - this.drawRange = { start: 0, count: Infinity }; - this.userData = {}; - } - getIndex() { - return this.index; - } - setIndex(index) { - if (Array.isArray(index)) { - this.index = new (arrayNeedsUint32(index) ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1); - } else { - this.index = index; - } - return this; - } - getAttribute(name) { - return this.attributes[name]; - } - setAttribute(name, attribute) { - this.attributes[name] = attribute; - return this; - } - deleteAttribute(name) { - delete this.attributes[name]; - return this; - } - hasAttribute(name) { - return this.attributes[name] !== void 0; - } - addGroup(start, count, materialIndex = 0) { - this.groups.push({ - start, - count, - materialIndex - }); - } - clearGroups() { - this.groups = []; - } - setDrawRange(start, count) { - this.drawRange.start = start; - this.drawRange.count = count; - } - applyMatrix4(matrix) { - const position = this.attributes.position; - if (position !== void 0) { - position.applyMatrix4(matrix); - position.needsUpdate = true; - } - const normal = this.attributes.normal; - if (normal !== void 0) { - const normalMatrix = new Matrix3().getNormalMatrix(matrix); - normal.applyNormalMatrix(normalMatrix); - normal.needsUpdate = true; - } - const tangent = this.attributes.tangent; - if (tangent !== void 0) { - tangent.transformDirection(matrix); - tangent.needsUpdate = true; - } - if (this.boundingBox !== null) { - this.computeBoundingBox(); - } - if (this.boundingSphere !== null) { - this.computeBoundingSphere(); - } - return this; - } - applyQuaternion(q) { - _m1$2.makeRotationFromQuaternion(q); - this.applyMatrix4(_m1$2); - return this; - } - rotateX(angle) { - _m1$2.makeRotationX(angle); - this.applyMatrix4(_m1$2); - return this; - } - rotateY(angle) { - _m1$2.makeRotationY(angle); - this.applyMatrix4(_m1$2); - return this; - } - rotateZ(angle) { - _m1$2.makeRotationZ(angle); - this.applyMatrix4(_m1$2); - return this; - } - translate(x, y, z) { - _m1$2.makeTranslation(x, y, z); - this.applyMatrix4(_m1$2); - return this; - } - scale(x, y, z) { - _m1$2.makeScale(x, y, z); - this.applyMatrix4(_m1$2); - return this; - } - lookAt(vector) { - _obj.lookAt(vector); - _obj.updateMatrix(); - this.applyMatrix4(_obj.matrix); - return this; - } - center() { - this.computeBoundingBox(); - this.boundingBox.getCenter(_offset).negate(); - this.translate(_offset.x, _offset.y, _offset.z); - return this; - } - setFromPoints(points) { - const position = []; - for (let i = 0, l = points.length; i < l; i++) { - const point = points[i]; - position.push(point.x, point.y, point.z || 0); - } - this.setAttribute("position", new Float32BufferAttribute(position, 3)); - return this; - } - computeBoundingBox() { - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - if (position && position.isGLBufferAttribute) { - console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.", this); - this.boundingBox.set( - new Vector3(-Infinity, -Infinity, -Infinity), - new Vector3(Infinity, Infinity, Infinity) - ); - return; - } - if (position !== void 0) { - this.boundingBox.setFromBufferAttribute(position); - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - _box$2.setFromBufferAttribute(morphAttribute); - if (this.morphTargetsRelative) { - _vector$8.addVectors(this.boundingBox.min, _box$2.min); - this.boundingBox.expandByPoint(_vector$8); - _vector$8.addVectors(this.boundingBox.max, _box$2.max); - this.boundingBox.expandByPoint(_vector$8); - } else { - this.boundingBox.expandByPoint(_box$2.min); - this.boundingBox.expandByPoint(_box$2.max); - } - } - } - } else { - this.boundingBox.makeEmpty(); - } - if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) { - console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this); - } - } - computeBoundingSphere() { - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - if (position && position.isGLBufferAttribute) { - console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.", this); - this.boundingSphere.set(new Vector3(), Infinity); - return; - } - if (position) { - const center = this.boundingSphere.center; - _box$2.setFromBufferAttribute(position); - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - _boxMorphTargets.setFromBufferAttribute(morphAttribute); - if (this.morphTargetsRelative) { - _vector$8.addVectors(_box$2.min, _boxMorphTargets.min); - _box$2.expandByPoint(_vector$8); - _vector$8.addVectors(_box$2.max, _boxMorphTargets.max); - _box$2.expandByPoint(_vector$8); - } else { - _box$2.expandByPoint(_boxMorphTargets.min); - _box$2.expandByPoint(_boxMorphTargets.max); - } - } - } - _box$2.getCenter(center); - let maxRadiusSq = 0; - for (let i = 0, il = position.count; i < il; i++) { - _vector$8.fromBufferAttribute(position, i); - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - const morphTargetsRelative = this.morphTargetsRelative; - for (let j = 0, jl = morphAttribute.count; j < jl; j++) { - _vector$8.fromBufferAttribute(morphAttribute, j); - if (morphTargetsRelative) { - _offset.fromBufferAttribute(position, j); - _vector$8.add(_offset); - } - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } - } - } - this.boundingSphere.radius = Math.sqrt(maxRadiusSq); - if (isNaN(this.boundingSphere.radius)) { - console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this); - } - } - } - computeTangents() { - const index = this.index; - const attributes = this.attributes; - if (index === null || attributes.position === void 0 || attributes.normal === void 0 || attributes.uv === void 0) { - console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)"); - return; - } - const positionAttribute = attributes.position; - const normalAttribute = attributes.normal; - const uvAttribute = attributes.uv; - if (this.hasAttribute("tangent") === false) { - this.setAttribute("tangent", new BufferAttribute(new Float32Array(4 * positionAttribute.count), 4)); - } - const tangentAttribute = this.getAttribute("tangent"); - const tan1 = [], tan2 = []; - for (let i = 0; i < positionAttribute.count; i++) { - tan1[i] = new Vector3(); - tan2[i] = new Vector3(); - } - const vA = new Vector3(), vB = new Vector3(), vC = new Vector3(), uvA = new Vector2(), uvB = new Vector2(), uvC = new Vector2(), sdir = new Vector3(), tdir = new Vector3(); - function handleTriangle(a, b, c) { - vA.fromBufferAttribute(positionAttribute, a); - vB.fromBufferAttribute(positionAttribute, b); - vC.fromBufferAttribute(positionAttribute, c); - uvA.fromBufferAttribute(uvAttribute, a); - uvB.fromBufferAttribute(uvAttribute, b); - uvC.fromBufferAttribute(uvAttribute, c); - vB.sub(vA); - vC.sub(vA); - uvB.sub(uvA); - uvC.sub(uvA); - const r = 1 / (uvB.x * uvC.y - uvC.x * uvB.y); - if (!isFinite(r)) return; - sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r); - tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r); - tan1[a].add(sdir); - tan1[b].add(sdir); - tan1[c].add(sdir); - tan2[a].add(tdir); - tan2[b].add(tdir); - tan2[c].add(tdir); - } - let groups = this.groups; - if (groups.length === 0) { - groups = [{ - start: 0, - count: index.count - }]; - } - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - const start = group.start; - const count = group.count; - for (let j = start, jl = start + count; j < jl; j += 3) { - handleTriangle( - index.getX(j + 0), - index.getX(j + 1), - index.getX(j + 2) - ); - } - } - const tmp2 = new Vector3(), tmp22 = new Vector3(); - const n = new Vector3(), n2 = new Vector3(); - function handleVertex(v) { - n.fromBufferAttribute(normalAttribute, v); - n2.copy(n); - const t = tan1[v]; - tmp2.copy(t); - tmp2.sub(n.multiplyScalar(n.dot(t))).normalize(); - tmp22.crossVectors(n2, t); - const test = tmp22.dot(tan2[v]); - const w = test < 0 ? -1 : 1; - tangentAttribute.setXYZW(v, tmp2.x, tmp2.y, tmp2.z, w); - } - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - const start = group.start; - const count = group.count; - for (let j = start, jl = start + count; j < jl; j += 3) { - handleVertex(index.getX(j + 0)); - handleVertex(index.getX(j + 1)); - handleVertex(index.getX(j + 2)); - } - } - } - computeVertexNormals() { - const index = this.index; - const positionAttribute = this.getAttribute("position"); - if (positionAttribute !== void 0) { - let normalAttribute = this.getAttribute("normal"); - if (normalAttribute === void 0) { - normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); - this.setAttribute("normal", normalAttribute); - } else { - for (let i = 0, il = normalAttribute.count; i < il; i++) { - normalAttribute.setXYZ(i, 0, 0, 0); - } - } - const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); - const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); - const cb = new Vector3(), ab = new Vector3(); - if (index) { - for (let i = 0, il = index.count; i < il; i += 3) { - const vA = index.getX(i + 0); - const vB = index.getX(i + 1); - const vC = index.getX(i + 2); - pA.fromBufferAttribute(positionAttribute, vA); - pB.fromBufferAttribute(positionAttribute, vB); - pC.fromBufferAttribute(positionAttribute, vC); - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - nA.fromBufferAttribute(normalAttribute, vA); - nB.fromBufferAttribute(normalAttribute, vB); - nC.fromBufferAttribute(normalAttribute, vC); - nA.add(cb); - nB.add(cb); - nC.add(cb); - normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); - normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); - normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); - } - } else { - for (let i = 0, il = positionAttribute.count; i < il; i += 3) { - pA.fromBufferAttribute(positionAttribute, i + 0); - pB.fromBufferAttribute(positionAttribute, i + 1); - pC.fromBufferAttribute(positionAttribute, i + 2); - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); - } - } - this.normalizeNormals(); - normalAttribute.needsUpdate = true; - } - } - normalizeNormals() { - const normals = this.attributes.normal; - for (let i = 0, il = normals.count; i < il; i++) { - _vector$8.fromBufferAttribute(normals, i); - _vector$8.normalize(); - normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z); - } - } - toNonIndexed() { - function convertBufferAttribute(attribute, indices2) { - const array = attribute.array; - const itemSize = attribute.itemSize; - const normalized = attribute.normalized; - const array2 = new array.constructor(indices2.length * itemSize); - let index = 0, index2 = 0; - for (let i = 0, l = indices2.length; i < l; i++) { - if (attribute.isInterleavedBufferAttribute) { - index = indices2[i] * attribute.data.stride + attribute.offset; - } else { - index = indices2[i] * itemSize; - } - for (let j = 0; j < itemSize; j++) { - array2[index2++] = array[index++]; - } - } - return new BufferAttribute(array2, itemSize, normalized); - } - if (this.index === null) { - console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."); - return this; - } - const geometry2 = new _BufferGeometry(); - const indices = this.index.array; - const attributes = this.attributes; - for (const name in attributes) { - const attribute = attributes[name]; - const newAttribute = convertBufferAttribute(attribute, indices); - geometry2.setAttribute(name, newAttribute); - } - const morphAttributes = this.morphAttributes; - for (const name in morphAttributes) { - const morphArray = []; - const morphAttribute = morphAttributes[name]; - for (let i = 0, il = morphAttribute.length; i < il; i++) { - const attribute = morphAttribute[i]; - const newAttribute = convertBufferAttribute(attribute, indices); - morphArray.push(newAttribute); - } - geometry2.morphAttributes[name] = morphArray; - } - geometry2.morphTargetsRelative = this.morphTargetsRelative; - const groups = this.groups; - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - geometry2.addGroup(group.start, group.count, group.materialIndex); - } - return geometry2; - } - toJSON() { - const data = { - metadata: { - version: 4.6, - type: "BufferGeometry", - generator: "BufferGeometry.toJSON" - } - }; - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== "") data.name = this.name; - if (Object.keys(this.userData).length > 0) data.userData = this.userData; - if (this.parameters !== void 0) { - const parameters = this.parameters; - for (const key in parameters) { - if (parameters[key] !== void 0) data[key] = parameters[key]; - } - return data; - } - data.data = { attributes: {} }; - const index = this.index; - if (index !== null) { - data.data.index = { - type: index.array.constructor.name, - array: Array.prototype.slice.call(index.array) - }; - } - const attributes = this.attributes; - for (const key in attributes) { - const attribute = attributes[key]; - data.data.attributes[key] = attribute.toJSON(data.data); - } - const morphAttributes = {}; - let hasMorphAttributes = false; - for (const key in this.morphAttributes) { - const attributeArray = this.morphAttributes[key]; - const array = []; - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - array.push(attribute.toJSON(data.data)); - } - if (array.length > 0) { - morphAttributes[key] = array; - hasMorphAttributes = true; - } - } - if (hasMorphAttributes) { - data.data.morphAttributes = morphAttributes; - data.data.morphTargetsRelative = this.morphTargetsRelative; - } - const groups = this.groups; - if (groups.length > 0) { - data.data.groups = JSON.parse(JSON.stringify(groups)); - } - const boundingSphere = this.boundingSphere; - if (boundingSphere !== null) { - data.data.boundingSphere = { - center: boundingSphere.center.toArray(), - radius: boundingSphere.radius - }; - } - return data; - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; - const data = {}; - this.name = source.name; - const index = source.index; - if (index !== null) { - this.setIndex(index.clone(data)); - } - const attributes = source.attributes; - for (const name in attributes) { - const attribute = attributes[name]; - this.setAttribute(name, attribute.clone(data)); - } - const morphAttributes = source.morphAttributes; - for (const name in morphAttributes) { - const array = []; - const morphAttribute = morphAttributes[name]; - for (let i = 0, l = morphAttribute.length; i < l; i++) { - array.push(morphAttribute[i].clone(data)); - } - this.morphAttributes[name] = array; - } - this.morphTargetsRelative = source.morphTargetsRelative; - const groups = source.groups; - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - this.addGroup(group.start, group.count, group.materialIndex); - } - const boundingBox = source.boundingBox; - if (boundingBox !== null) { - this.boundingBox = boundingBox.clone(); - } - const boundingSphere = source.boundingSphere; - if (boundingSphere !== null) { - this.boundingSphere = boundingSphere.clone(); - } - this.drawRange.start = source.drawRange.start; - this.drawRange.count = source.drawRange.count; - this.userData = source.userData; - return this; - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - } -}; -var _inverseMatrix$3 = new Matrix4(); -var _ray$3 = new Ray(); -var _sphere$6 = new Sphere(); -var _sphereHitAt = new Vector3(); -var _vA$1 = new Vector3(); -var _vB$1 = new Vector3(); -var _vC$1 = new Vector3(); -var _tempA = new Vector3(); -var _morphA = new Vector3(); -var _uvA$1 = new Vector2(); -var _uvB$1 = new Vector2(); -var _uvC$1 = new Vector2(); -var _normalA = new Vector3(); -var _normalB = new Vector3(); -var _normalC = new Vector3(); -var _intersectionPoint = new Vector3(); -var _intersectionPointWorld = new Vector3(); -var Mesh = class extends Object3D { - constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) { - super(); - this.isMesh = true; - this.type = "Mesh"; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - copy(source, recursive) { - super.copy(source, recursive); - if (source.morphTargetInfluences !== void 0) { - this.morphTargetInfluences = source.morphTargetInfluences.slice(); - } - if (source.morphTargetDictionary !== void 0) { - this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary); - } - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - return this; - } - updateMorphTargets() { - const geometry = this.geometry; - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - if (morphAttribute !== void 0) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } - getVertexPosition(index, target) { - const geometry = this.geometry; - const position = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - target.fromBufferAttribute(position, index); - const morphInfluences = this.morphTargetInfluences; - if (morphPosition && morphInfluences) { - _morphA.set(0, 0, 0); - for (let i = 0, il = morphPosition.length; i < il; i++) { - const influence = morphInfluences[i]; - const morphAttribute = morphPosition[i]; - if (influence === 0) continue; - _tempA.fromBufferAttribute(morphAttribute, index); - if (morphTargetsRelative) { - _morphA.addScaledVector(_tempA, influence); - } else { - _morphA.addScaledVector(_tempA.sub(target), influence); - } - } - target.add(_morphA); - } - return target; - } - raycast(raycaster, intersects2) { - const geometry = this.geometry; - const material = this.material; - const matrixWorld = this.matrixWorld; - if (material === void 0) return; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _sphere$6.copy(geometry.boundingSphere); - _sphere$6.applyMatrix4(matrixWorld); - _ray$3.copy(raycaster.ray).recast(raycaster.near); - if (_sphere$6.containsPoint(_ray$3.origin) === false) { - if (_ray$3.intersectSphere(_sphere$6, _sphereHitAt) === null) return; - if (_ray$3.origin.distanceToSquared(_sphereHitAt) > (raycaster.far - raycaster.near) ** 2) return; - } - _inverseMatrix$3.copy(matrixWorld).invert(); - _ray$3.copy(raycaster.ray).applyMatrix4(_inverseMatrix$3); - if (geometry.boundingBox !== null) { - if (_ray$3.intersectsBox(geometry.boundingBox) === false) return; - } - this._computeIntersections(raycaster, intersects2, _ray$3); - } - _computeIntersections(raycaster, intersects2, rayLocalSpace) { - let intersection; - const geometry = this.geometry; - const material = this.material; - const index = geometry.index; - const position = geometry.attributes.position; - const uv = geometry.attributes.uv; - const uv1 = geometry.attributes.uv1; - const normal = geometry.attributes.normal; - const groups = geometry.groups; - const drawRange = geometry.drawRange; - if (index !== null) { - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - const start = Math.max(group.start, drawRange.start); - const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - for (let j = start, jl = end; j < jl; j += 3) { - const a = index.getX(j); - const b = index.getX(j + 1); - const c = index.getX(j + 2); - intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); - intersection.face.materialIndex = group.materialIndex; - intersects2.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - for (let i = start, il = end; i < il; i += 3) { - const a = index.getX(i); - const b = index.getX(i + 1); - const c = index.getX(i + 2); - intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); - intersects2.push(intersection); - } - } - } - } else if (position !== void 0) { - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - const start = Math.max(group.start, drawRange.start); - const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - for (let j = start, jl = end; j < jl; j += 3) { - const a = j; - const b = j + 1; - const c = j + 2; - intersection = checkGeometryIntersection(this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); - intersection.face.materialIndex = group.materialIndex; - intersects2.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(position.count, drawRange.start + drawRange.count); - for (let i = start, il = end; i < il; i += 3) { - const a = i; - const b = i + 1; - const c = i + 2; - intersection = checkGeometryIntersection(this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c); - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); - intersects2.push(intersection); - } - } - } - } - } -}; -function checkIntersection$1(object, material, raycaster, ray, pA, pB, pC, point) { - let intersect2; - if (material.side === BackSide) { - intersect2 = ray.intersectTriangle(pC, pB, pA, true, point); - } else { - intersect2 = ray.intersectTriangle(pA, pB, pC, material.side === FrontSide, point); - } - if (intersect2 === null) return null; - _intersectionPointWorld.copy(point); - _intersectionPointWorld.applyMatrix4(object.matrixWorld); - const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); - if (distance < raycaster.near || distance > raycaster.far) return null; - return { - distance, - point: _intersectionPointWorld.clone(), - object - }; -} -function checkGeometryIntersection(object, material, raycaster, ray, uv, uv1, normal, a, b, c) { - object.getVertexPosition(a, _vA$1); - object.getVertexPosition(b, _vB$1); - object.getVertexPosition(c, _vC$1); - const intersection = checkIntersection$1(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint); - if (intersection) { - if (uv) { - _uvA$1.fromBufferAttribute(uv, a); - _uvB$1.fromBufferAttribute(uv, b); - _uvC$1.fromBufferAttribute(uv, c); - intersection.uv = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - if (uv1) { - _uvA$1.fromBufferAttribute(uv1, a); - _uvB$1.fromBufferAttribute(uv1, b); - _uvC$1.fromBufferAttribute(uv1, c); - intersection.uv1 = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - if (normal) { - _normalA.fromBufferAttribute(normal, a); - _normalB.fromBufferAttribute(normal, b); - _normalC.fromBufferAttribute(normal, c); - intersection.normal = Triangle.getInterpolation(_intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3()); - if (intersection.normal.dot(ray.direction) > 0) { - intersection.normal.multiplyScalar(-1); - } - } - const face = { - a, - b, - c, - normal: new Vector3(), - materialIndex: 0 - }; - Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); - intersection.face = face; - } - return intersection; -} -var BoxGeometry = class _BoxGeometry extends BufferGeometry { - constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { - super(); - this.type = "BoxGeometry"; - this.parameters = { - width, - height, - depth, - widthSegments, - heightSegments, - depthSegments - }; - const scope = this; - widthSegments = Math.floor(widthSegments); - heightSegments = Math.floor(heightSegments); - depthSegments = Math.floor(depthSegments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - let numberOfVertices = 0; - let groupStart = 0; - buildPlane("z", "y", "x", -1, -1, depth, height, width, depthSegments, heightSegments, 0); - buildPlane("z", "y", "x", 1, -1, depth, height, -width, depthSegments, heightSegments, 1); - buildPlane("x", "z", "y", 1, 1, width, depth, height, widthSegments, depthSegments, 2); - buildPlane("x", "z", "y", 1, -1, width, depth, -height, widthSegments, depthSegments, 3); - buildPlane("x", "y", "z", 1, -1, width, height, depth, widthSegments, heightSegments, 4); - buildPlane("x", "y", "z", -1, -1, width, height, -depth, widthSegments, heightSegments, 5); - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function buildPlane(u, v, w, udir, vdir, width2, height2, depth2, gridX, gridY, materialIndex) { - const segmentWidth = width2 / gridX; - const segmentHeight = height2 / gridY; - const widthHalf = width2 / 2; - const heightHalf = height2 / 2; - const depthHalf = depth2 / 2; - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - let vertexCounter = 0; - let groupCount = 0; - const vector = new Vector3(); - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segmentHeight - heightHalf; - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segmentWidth - widthHalf; - vector[u] = x * udir; - vector[v] = y * vdir; - vector[w] = depthHalf; - vertices.push(vector.x, vector.y, vector.z); - vector[u] = 0; - vector[v] = 0; - vector[w] = depth2 > 0 ? 1 : -1; - normals.push(vector.x, vector.y, vector.z); - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - vertexCounter += 1; - } - } - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = numberOfVertices + ix + gridX1 * iy; - const b = numberOfVertices + ix + gridX1 * (iy + 1); - const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1); - const d = numberOfVertices + (ix + 1) + gridX1 * iy; - indices.push(a, b, d); - indices.push(b, c, d); - groupCount += 6; - } - } - scope.addGroup(groupStart, groupCount, materialIndex); - groupStart += groupCount; - numberOfVertices += vertexCounter; - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments); - } -}; -function cloneUniforms(src) { - const dst = {}; - for (const u in src) { - dst[u] = {}; - for (const p in src[u]) { - const property = src[u][p]; - if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) { - if (property.isRenderTargetTexture) { - console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."); - dst[u][p] = null; - } else { - dst[u][p] = property.clone(); - } - } else if (Array.isArray(property)) { - dst[u][p] = property.slice(); - } else { - dst[u][p] = property; - } - } - } - return dst; -} -function mergeUniforms(uniforms) { - const merged = {}; - for (let u = 0; u < uniforms.length; u++) { - const tmp2 = cloneUniforms(uniforms[u]); - for (const p in tmp2) { - merged[p] = tmp2[p]; - } - } - return merged; -} -function cloneUniformsGroups(src) { - const dst = []; - for (let u = 0; u < src.length; u++) { - dst.push(src[u].clone()); - } - return dst; -} -function getUnlitUniformColorSpace(renderer) { - const currentRenderTarget = renderer.getRenderTarget(); - if (currentRenderTarget === null) { - return renderer.outputColorSpace; - } - if (currentRenderTarget.isXRRenderTarget === true) { - return currentRenderTarget.texture.colorSpace; - } - return ColorManagement.workingColorSpace; -} -var UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; -var default_vertex = "void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; -var default_fragment = "void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; -var ShaderMaterial = class extends Material { - constructor(parameters) { - super(); - this.isShaderMaterial = true; - this.type = "ShaderMaterial"; - this.defines = {}; - this.uniforms = {}; - this.uniformsGroups = []; - this.vertexShader = default_vertex; - this.fragmentShader = default_fragment; - this.linewidth = 1; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.fog = false; - this.lights = false; - this.clipping = false; - this.forceSinglePass = true; - this.extensions = { - clipCullDistance: false, - // set to use vertex shader clipping - multiDraw: false - // set to use vertex shader multi_draw / enable gl_DrawID - }; - this.defaultAttributeValues = { - "color": [1, 1, 1], - "uv": [0, 0], - "uv1": [0, 0] - }; - this.index0AttributeName = void 0; - this.uniformsNeedUpdate = false; - this.glslVersion = null; - if (parameters !== void 0) { - this.setValues(parameters); - } - } - copy(source) { - super.copy(source); - this.fragmentShader = source.fragmentShader; - this.vertexShader = source.vertexShader; - this.uniforms = cloneUniforms(source.uniforms); - this.uniformsGroups = cloneUniformsGroups(source.uniformsGroups); - this.defines = Object.assign({}, source.defines); - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.fog = source.fog; - this.lights = source.lights; - this.clipping = source.clipping; - this.extensions = Object.assign({}, source.extensions); - this.glslVersion = source.glslVersion; - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - data.glslVersion = this.glslVersion; - data.uniforms = {}; - for (const name in this.uniforms) { - const uniform = this.uniforms[name]; - const value = uniform.value; - if (value && value.isTexture) { - data.uniforms[name] = { - type: "t", - value: value.toJSON(meta).uuid - }; - } else if (value && value.isColor) { - data.uniforms[name] = { - type: "c", - value: value.getHex() - }; - } else if (value && value.isVector2) { - data.uniforms[name] = { - type: "v2", - value: value.toArray() - }; - } else if (value && value.isVector3) { - data.uniforms[name] = { - type: "v3", - value: value.toArray() - }; - } else if (value && value.isVector4) { - data.uniforms[name] = { - type: "v4", - value: value.toArray() - }; - } else if (value && value.isMatrix3) { - data.uniforms[name] = { - type: "m3", - value: value.toArray() - }; - } else if (value && value.isMatrix4) { - data.uniforms[name] = { - type: "m4", - value: value.toArray() - }; - } else { - data.uniforms[name] = { - value - }; - } - } - if (Object.keys(this.defines).length > 0) data.defines = this.defines; - data.vertexShader = this.vertexShader; - data.fragmentShader = this.fragmentShader; - data.lights = this.lights; - data.clipping = this.clipping; - const extensions = {}; - for (const key in this.extensions) { - if (this.extensions[key] === true) extensions[key] = true; - } - if (Object.keys(extensions).length > 0) data.extensions = extensions; - return data; - } -}; -var Camera = class extends Object3D { - constructor() { - super(); - this.isCamera = true; - this.type = "Camera"; - this.matrixWorldInverse = new Matrix4(); - this.projectionMatrix = new Matrix4(); - this.projectionMatrixInverse = new Matrix4(); - this.coordinateSystem = WebGLCoordinateSystem; - } - copy(source, recursive) { - super.copy(source, recursive); - this.matrixWorldInverse.copy(source.matrixWorldInverse); - this.projectionMatrix.copy(source.projectionMatrix); - this.projectionMatrixInverse.copy(source.projectionMatrixInverse); - this.coordinateSystem = source.coordinateSystem; - return this; - } - getWorldDirection(target) { - return super.getWorldDirection(target).negate(); - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - updateWorldMatrix(updateParents, updateChildren) { - super.updateWorldMatrix(updateParents, updateChildren); - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - clone() { - return new this.constructor().copy(this); - } -}; -var _v3$1 = new Vector3(); -var _minTarget = new Vector2(); -var _maxTarget = new Vector2(); -var PerspectiveCamera = class extends Camera { - constructor(fov2 = 50, aspect2 = 1, near = 0.1, far = 2e3) { - super(); - this.isPerspectiveCamera = true; - this.type = "PerspectiveCamera"; - this.fov = fov2; - this.zoom = 1; - this.near = near; - this.far = far; - this.focus = 10; - this.aspect = aspect2; - this.view = null; - this.filmGauge = 35; - this.filmOffset = 0; - this.updateProjectionMatrix(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.fov = source.fov; - this.zoom = source.zoom; - this.near = source.near; - this.far = source.far; - this.focus = source.focus; - this.aspect = source.aspect; - this.view = source.view === null ? null : Object.assign({}, source.view); - this.filmGauge = source.filmGauge; - this.filmOffset = source.filmOffset; - return this; - } - /** - * Sets the FOV by focal length in respect to the current .filmGauge. - * - * The default film gauge is 35, so that the focal length can be specified for - * a 35mm (full frame) camera. - * - * Values for focal length and film gauge must have the same unit. - */ - setFocalLength(focalLength) { - const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; - this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope); - this.updateProjectionMatrix(); - } - /** - * Calculates the focal length from the current .fov and .filmGauge. - */ - getFocalLength() { - const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov); - return 0.5 * this.getFilmHeight() / vExtentSlope; - } - getEffectiveFOV() { - return RAD2DEG * 2 * Math.atan( - Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom - ); - } - getFilmWidth() { - return this.filmGauge * Math.min(this.aspect, 1); - } - getFilmHeight() { - return this.filmGauge / Math.max(this.aspect, 1); - } - /** - * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction. - * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle. - */ - getViewBounds(distance, minTarget, maxTarget) { - _v3$1.set(-1, -1, 0.5).applyMatrix4(this.projectionMatrixInverse); - minTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); - _v3$1.set(1, 1, 0.5).applyMatrix4(this.projectionMatrixInverse); - maxTarget.set(_v3$1.x, _v3$1.y).multiplyScalar(-distance / _v3$1.z); - } - /** - * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction. - * Copies the result into the target Vector2, where x is width and y is height. - */ - getViewSize(distance, target) { - this.getViewBounds(distance, _minTarget, _maxTarget); - return target.subVectors(_maxTarget, _minTarget); - } - /** - * Sets an offset in a larger frustum. This is useful for multi-window or - * multi-monitor/multi-machine setups. - * - * For example, if you have 3x2 monitors and each monitor is 1920x1080 and - * the monitors are in grid like this - * - * +---+---+---+ - * | A | B | C | - * +---+---+---+ - * | D | E | F | - * +---+---+---+ - * - * then for each monitor you would call it like this - * - * const w = 1920; - * const h = 1080; - * const fullWidth = w * 3; - * const fullHeight = h * 2; - * - * --A-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); - * --B-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); - * --C-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); - * --D-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); - * --E-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); - * --F-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); - * - * Note there is no reason monitors have to be the same size or in a grid. - */ - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - this.aspect = fullWidth / fullHeight; - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - } - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - this.updateProjectionMatrix(); - } - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - this.updateProjectionMatrix(); - } - updateProjectionMatrix() { - const near = this.near; - let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom; - let height = 2 * top; - let width = this.aspect * height; - let left = -0.5 * width; - const view = this.view; - if (this.view !== null && this.view.enabled) { - const fullWidth = view.fullWidth, fullHeight = view.fullHeight; - left += view.offsetX * width / fullWidth; - top -= view.offsetY * height / fullHeight; - width *= view.width / fullWidth; - height *= view.height / fullHeight; - } - const skew = this.filmOffset; - if (skew !== 0) left += near * skew / this.getFilmWidth(); - this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far, this.coordinateSystem); - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - toJSON(meta) { - const data = super.toJSON(meta); - data.object.fov = this.fov; - data.object.zoom = this.zoom; - data.object.near = this.near; - data.object.far = this.far; - data.object.focus = this.focus; - data.object.aspect = this.aspect; - if (this.view !== null) data.object.view = Object.assign({}, this.view); - data.object.filmGauge = this.filmGauge; - data.object.filmOffset = this.filmOffset; - return data; - } -}; -var fov = -90; -var aspect = 1; -var CubeCamera = class extends Object3D { - constructor(near, far, renderTarget) { - super(); - this.type = "CubeCamera"; - this.renderTarget = renderTarget; - this.coordinateSystem = null; - this.activeMipmapLevel = 0; - const cameraPX = new PerspectiveCamera(fov, aspect, near, far); - cameraPX.layers = this.layers; - this.add(cameraPX); - const cameraNX = new PerspectiveCamera(fov, aspect, near, far); - cameraNX.layers = this.layers; - this.add(cameraNX); - const cameraPY = new PerspectiveCamera(fov, aspect, near, far); - cameraPY.layers = this.layers; - this.add(cameraPY); - const cameraNY = new PerspectiveCamera(fov, aspect, near, far); - cameraNY.layers = this.layers; - this.add(cameraNY); - const cameraPZ = new PerspectiveCamera(fov, aspect, near, far); - cameraPZ.layers = this.layers; - this.add(cameraPZ); - const cameraNZ = new PerspectiveCamera(fov, aspect, near, far); - cameraNZ.layers = this.layers; - this.add(cameraNZ); - } - updateCoordinateSystem() { - const coordinateSystem = this.coordinateSystem; - const cameras = this.children.concat(); - const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = cameras; - for (const camera of cameras) this.remove(camera); - if (coordinateSystem === WebGLCoordinateSystem) { - cameraPX.up.set(0, 1, 0); - cameraPX.lookAt(1, 0, 0); - cameraNX.up.set(0, 1, 0); - cameraNX.lookAt(-1, 0, 0); - cameraPY.up.set(0, 0, -1); - cameraPY.lookAt(0, 1, 0); - cameraNY.up.set(0, 0, 1); - cameraNY.lookAt(0, -1, 0); - cameraPZ.up.set(0, 1, 0); - cameraPZ.lookAt(0, 0, 1); - cameraNZ.up.set(0, 1, 0); - cameraNZ.lookAt(0, 0, -1); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - cameraPX.up.set(0, -1, 0); - cameraPX.lookAt(-1, 0, 0); - cameraNX.up.set(0, -1, 0); - cameraNX.lookAt(1, 0, 0); - cameraPY.up.set(0, 0, 1); - cameraPY.lookAt(0, 1, 0); - cameraNY.up.set(0, 0, -1); - cameraNY.lookAt(0, -1, 0); - cameraPZ.up.set(0, -1, 0); - cameraPZ.lookAt(0, 0, 1); - cameraNZ.up.set(0, -1, 0); - cameraNZ.lookAt(0, 0, -1); - } else { - throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: " + coordinateSystem); - } - for (const camera of cameras) { - this.add(camera); - camera.updateMatrixWorld(); - } - } - update(renderer, scene) { - if (this.parent === null) this.updateMatrixWorld(); - const { renderTarget, activeMipmapLevel } = this; - if (this.coordinateSystem !== renderer.coordinateSystem) { - this.coordinateSystem = renderer.coordinateSystem; - this.updateCoordinateSystem(); - } - const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children; - const currentRenderTarget = renderer.getRenderTarget(); - const currentActiveCubeFace = renderer.getActiveCubeFace(); - const currentActiveMipmapLevel = renderer.getActiveMipmapLevel(); - const currentXrEnabled = renderer.xr.enabled; - renderer.xr.enabled = false; - const generateMipmaps = renderTarget.texture.generateMipmaps; - renderTarget.texture.generateMipmaps = false; - renderer.setRenderTarget(renderTarget, 0, activeMipmapLevel); - renderer.render(scene, cameraPX); - renderer.setRenderTarget(renderTarget, 1, activeMipmapLevel); - renderer.render(scene, cameraNX); - renderer.setRenderTarget(renderTarget, 2, activeMipmapLevel); - renderer.render(scene, cameraPY); - renderer.setRenderTarget(renderTarget, 3, activeMipmapLevel); - renderer.render(scene, cameraNY); - renderer.setRenderTarget(renderTarget, 4, activeMipmapLevel); - renderer.render(scene, cameraPZ); - renderTarget.texture.generateMipmaps = generateMipmaps; - renderer.setRenderTarget(renderTarget, 5, activeMipmapLevel); - renderer.render(scene, cameraNZ); - renderer.setRenderTarget(currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel); - renderer.xr.enabled = currentXrEnabled; - renderTarget.texture.needsPMREMUpdate = true; - } -}; -var CubeTexture = class extends Texture { - constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace) { - images = images !== void 0 ? images : []; - mapping = mapping !== void 0 ? mapping : CubeReflectionMapping; - super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - this.isCubeTexture = true; - this.flipY = false; - } - get images() { - return this.image; - } - set images(value) { - this.image = value; - } -}; -var WebGLCubeRenderTarget = class extends WebGLRenderTarget { - constructor(size = 1, options = {}) { - super(size, size, options); - this.isWebGLCubeRenderTarget = true; - const image = { width: size, height: size, depth: 1 }; - const images = [image, image, image, image, image, image]; - this.texture = new CubeTexture(images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace); - this.texture.isRenderTargetTexture = true; - this.texture.generateMipmaps = options.generateMipmaps !== void 0 ? options.generateMipmaps : false; - this.texture.minFilter = options.minFilter !== void 0 ? options.minFilter : LinearFilter; - } - fromEquirectangularTexture(renderer, texture) { - this.texture.type = texture.type; - this.texture.colorSpace = texture.colorSpace; - this.texture.generateMipmaps = texture.generateMipmaps; - this.texture.minFilter = texture.minFilter; - this.texture.magFilter = texture.magFilter; - const shader = { - uniforms: { - tEquirect: { value: null } - }, - vertexShader: ( - /* glsl */ - ` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - ` - ), - fragmentShader: ( - /* glsl */ - ` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - ` - ) - }; - const geometry = new BoxGeometry(5, 5, 5); - const material = new ShaderMaterial({ - name: "CubemapFromEquirect", - uniforms: cloneUniforms(shader.uniforms), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - side: BackSide, - blending: NoBlending - }); - material.uniforms.tEquirect.value = texture; - const mesh = new Mesh(geometry, material); - const currentMinFilter = texture.minFilter; - if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter; - const camera = new CubeCamera(1, 10, this); - camera.update(renderer, mesh); - texture.minFilter = currentMinFilter; - mesh.geometry.dispose(); - mesh.material.dispose(); - return this; - } - clear(renderer, color, depth, stencil) { - const currentRenderTarget = renderer.getRenderTarget(); - for (let i = 0; i < 6; i++) { - renderer.setRenderTarget(this, i); - renderer.clear(color, depth, stencil); - } - renderer.setRenderTarget(currentRenderTarget); - } -}; -var _vector1 = new Vector3(); -var _vector2 = new Vector3(); -var _normalMatrix = new Matrix3(); -var Plane = class { - constructor(normal = new Vector3(1, 0, 0), constant = 0) { - this.isPlane = true; - this.normal = normal; - this.constant = constant; - } - set(normal, constant) { - this.normal.copy(normal); - this.constant = constant; - return this; - } - setComponents(x, y, z, w) { - this.normal.set(x, y, z); - this.constant = w; - return this; - } - setFromNormalAndCoplanarPoint(normal, point) { - this.normal.copy(normal); - this.constant = -point.dot(this.normal); - return this; - } - setFromCoplanarPoints(a, b, c) { - const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); - this.setFromNormalAndCoplanarPoint(normal, a); - return this; - } - copy(plane) { - this.normal.copy(plane.normal); - this.constant = plane.constant; - return this; - } - normalize() { - const inverseNormalLength = 1 / this.normal.length(); - this.normal.multiplyScalar(inverseNormalLength); - this.constant *= inverseNormalLength; - return this; - } - negate() { - this.constant *= -1; - this.normal.negate(); - return this; - } - distanceToPoint(point) { - return this.normal.dot(point) + this.constant; - } - distanceToSphere(sphere) { - return this.distanceToPoint(sphere.center) - sphere.radius; - } - projectPoint(point, target) { - return target.copy(point).addScaledVector(this.normal, -this.distanceToPoint(point)); - } - intersectLine(line, target) { - const direction = line.delta(_vector1); - const denominator = this.normal.dot(direction); - if (denominator === 0) { - if (this.distanceToPoint(line.start) === 0) { - return target.copy(line.start); - } - return null; - } - const t = -(line.start.dot(this.normal) + this.constant) / denominator; - if (t < 0 || t > 1) { - return null; - } - return target.copy(line.start).addScaledVector(direction, t); - } - intersectsLine(line) { - const startSign = this.distanceToPoint(line.start); - const endSign = this.distanceToPoint(line.end); - return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0; - } - intersectsBox(box) { - return box.intersectsPlane(this); - } - intersectsSphere(sphere) { - return sphere.intersectsPlane(this); - } - coplanarPoint(target) { - return target.copy(this.normal).multiplyScalar(-this.constant); - } - applyMatrix4(matrix, optionalNormalMatrix) { - const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix); - const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix); - const normal = this.normal.applyMatrix3(normalMatrix).normalize(); - this.constant = -referencePoint.dot(normal); - return this; - } - translate(offset) { - this.constant -= offset.dot(this.normal); - return this; - } - equals(plane) { - return plane.normal.equals(this.normal) && plane.constant === this.constant; - } - clone() { - return new this.constructor().copy(this); - } -}; -var _sphere$5 = new Sphere(); -var _vector$7 = new Vector3(); -var Frustum = class { - constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) { - this.planes = [p0, p1, p2, p3, p4, p5]; - } - set(p0, p1, p2, p3, p4, p5) { - const planes = this.planes; - planes[0].copy(p0); - planes[1].copy(p1); - planes[2].copy(p2); - planes[3].copy(p3); - planes[4].copy(p4); - planes[5].copy(p5); - return this; - } - copy(frustum) { - const planes = this.planes; - for (let i = 0; i < 6; i++) { - planes[i].copy(frustum.planes[i]); - } - return this; - } - setFromProjectionMatrix(m, coordinateSystem = WebGLCoordinateSystem) { - const planes = this.planes; - const me = m.elements; - const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3]; - const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7]; - const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11]; - const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15]; - planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize(); - planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize(); - planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize(); - planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize(); - planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize(); - if (coordinateSystem === WebGLCoordinateSystem) { - planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize(); - } else if (coordinateSystem === WebGPUCoordinateSystem) { - planes[5].setComponents(me2, me6, me10, me14).normalize(); - } else { - throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: " + coordinateSystem); - } - return this; - } - intersectsObject(object) { - if (object.boundingSphere !== void 0) { - if (object.boundingSphere === null) object.computeBoundingSphere(); - _sphere$5.copy(object.boundingSphere).applyMatrix4(object.matrixWorld); - } else { - const geometry = object.geometry; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _sphere$5.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld); - } - return this.intersectsSphere(_sphere$5); - } - intersectsSprite(sprite) { - _sphere$5.center.set(0, 0, 0); - _sphere$5.radius = 0.7071067811865476; - _sphere$5.applyMatrix4(sprite.matrixWorld); - return this.intersectsSphere(_sphere$5); - } - intersectsSphere(sphere) { - const planes = this.planes; - const center = sphere.center; - const negRadius = -sphere.radius; - for (let i = 0; i < 6; i++) { - const distance = planes[i].distanceToPoint(center); - if (distance < negRadius) { - return false; - } - } - return true; - } - intersectsBox(box) { - const planes = this.planes; - for (let i = 0; i < 6; i++) { - const plane = planes[i]; - _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x; - _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y; - _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z; - if (plane.distanceToPoint(_vector$7) < 0) { - return false; - } - } - return true; - } - containsPoint(point) { - const planes = this.planes; - for (let i = 0; i < 6; i++) { - if (planes[i].distanceToPoint(point) < 0) { - return false; - } - } - return true; - } - clone() { - return new this.constructor().copy(this); - } -}; -function WebGLAnimation() { - let context = null; - let isAnimating = false; - let animationLoop = null; - let requestId = null; - function onAnimationFrame(time, frame) { - animationLoop(time, frame); - requestId = context.requestAnimationFrame(onAnimationFrame); - } - return { - start: function() { - if (isAnimating === true) return; - if (animationLoop === null) return; - requestId = context.requestAnimationFrame(onAnimationFrame); - isAnimating = true; - }, - stop: function() { - context.cancelAnimationFrame(requestId); - isAnimating = false; - }, - setAnimationLoop: function(callback) { - animationLoop = callback; - }, - setContext: function(value) { - context = value; - } - }; -} -function WebGLAttributes(gl) { - const buffers = /* @__PURE__ */ new WeakMap(); - function createBuffer(attribute, bufferType) { - const array = attribute.array; - const usage = attribute.usage; - const size = array.byteLength; - const buffer = gl.createBuffer(); - gl.bindBuffer(bufferType, buffer); - gl.bufferData(bufferType, array, usage); - attribute.onUploadCallback(); - let type; - if (array instanceof Float32Array) { - type = gl.FLOAT; - } else if (array instanceof Uint16Array) { - if (attribute.isFloat16BufferAttribute) { - type = gl.HALF_FLOAT; - } else { - type = gl.UNSIGNED_SHORT; - } - } else if (array instanceof Int16Array) { - type = gl.SHORT; - } else if (array instanceof Uint32Array) { - type = gl.UNSIGNED_INT; - } else if (array instanceof Int32Array) { - type = gl.INT; - } else if (array instanceof Int8Array) { - type = gl.BYTE; - } else if (array instanceof Uint8Array) { - type = gl.UNSIGNED_BYTE; - } else if (array instanceof Uint8ClampedArray) { - type = gl.UNSIGNED_BYTE; - } else { - throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: " + array); - } - return { - buffer, - type, - bytesPerElement: array.BYTES_PER_ELEMENT, - version: attribute.version, - size - }; - } - function updateBuffer(buffer, attribute, bufferType) { - const array = attribute.array; - const updateRange = attribute._updateRange; - const updateRanges = attribute.updateRanges; - gl.bindBuffer(bufferType, buffer); - if (updateRange.count === -1 && updateRanges.length === 0) { - gl.bufferSubData(bufferType, 0, array); - } - if (updateRanges.length !== 0) { - for (let i = 0, l = updateRanges.length; i < l; i++) { - const range = updateRanges[i]; - gl.bufferSubData( - bufferType, - range.start * array.BYTES_PER_ELEMENT, - array, - range.start, - range.count - ); - } - attribute.clearUpdateRanges(); - } - if (updateRange.count !== -1) { - gl.bufferSubData( - bufferType, - updateRange.offset * array.BYTES_PER_ELEMENT, - array, - updateRange.offset, - updateRange.count - ); - updateRange.count = -1; - } - attribute.onUploadCallback(); - } - function get(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - return buffers.get(attribute); - } - function remove(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - const data = buffers.get(attribute); - if (data) { - gl.deleteBuffer(data.buffer); - buffers.delete(attribute); - } - } - function update(attribute, bufferType) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - if (attribute.isGLBufferAttribute) { - const cached = buffers.get(attribute); - if (!cached || cached.version < attribute.version) { - buffers.set(attribute, { - buffer: attribute.buffer, - type: attribute.type, - bytesPerElement: attribute.elementSize, - version: attribute.version - }); - } - return; - } - const data = buffers.get(attribute); - if (data === void 0) { - buffers.set(attribute, createBuffer(attribute, bufferType)); - } else if (data.version < attribute.version) { - if (data.size !== attribute.array.byteLength) { - throw new Error("THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported."); - } - updateBuffer(data.buffer, attribute, bufferType); - data.version = attribute.version; - } - } - return { - get, - remove, - update - }; -} -var PlaneGeometry = class _PlaneGeometry extends BufferGeometry { - constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) { - super(); - this.type = "PlaneGeometry"; - this.parameters = { - width, - height, - widthSegments, - heightSegments - }; - const width_half = width / 2; - const height_half = height / 2; - const gridX = Math.floor(widthSegments); - const gridY = Math.floor(heightSegments); - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - const segment_width = width / gridX; - const segment_height = height / gridY; - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segment_height - height_half; - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segment_width - width_half; - vertices.push(x, -y, 0); - normals.push(0, 0, 1); - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - } - } - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = ix + gridX1 * iy; - const b = ix + gridX1 * (iy + 1); - const c = ix + 1 + gridX1 * (iy + 1); - const d = ix + 1 + gridX1 * iy; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments); - } -}; -var alphahash_fragment = "#ifdef USE_ALPHAHASH\n if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif"; -var alphahash_pars_fragment = "#ifdef USE_ALPHAHASH\n const float ALPHA_HASH_SCALE = 0.05;\n float hash2D( vec2 value ) {\n return fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\n }\n float hash3D( vec3 value ) {\n return hash2D( vec2( hash2D( value.xy ), value.z ) );\n }\n float getAlphaHashThreshold( vec3 position ) {\n float maxDeriv = max(\n length( dFdx( position.xyz ) ),\n length( dFdy( position.xyz ) )\n );\n float pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\n vec2 pixScales = vec2(\n exp2( floor( log2( pixScale ) ) ),\n exp2( ceil( log2( pixScale ) ) )\n );\n vec2 alpha = vec2(\n hash3D( floor( pixScales.x * position.xyz ) ),\n hash3D( floor( pixScales.y * position.xyz ) )\n );\n float lerpFactor = fract( log2( pixScale ) );\n float x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\n float a = min( lerpFactor, 1.0 - lerpFactor );\n vec3 cases = vec3(\n x * x / ( 2.0 * a * ( 1.0 - a ) ),\n ( x - 0.5 * a ) / ( 1.0 - a ),\n 1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\n );\n float threshold = ( x < ( 1.0 - a ) )\n ? ( ( x < a ) ? cases.x : cases.y )\n : cases.z;\n return clamp( threshold , 1.0e-6, 1.0 );\n }\n#endif"; -var alphamap_fragment = "#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif"; -var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; -var alphatest_fragment = "#ifdef USE_ALPHATEST\n #ifdef ALPHA_TO_COVERAGE\n diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n if ( diffuseColor.a < alphaTest ) discard;\n #endif\n#endif"; -var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n uniform float alphaTest;\n#endif"; -var aomap_fragment = "#ifdef USE_AOMAP\n float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n reflectedLight.indirectDiffuse *= ambientOcclusion;\n #if defined( USE_CLEARCOAT ) \n clearcoatSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_SHEEN ) \n sheenSpecularIndirect *= ambientOcclusion;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD )\n float dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n #endif\n#endif"; -var aomap_pars_fragment = "#ifdef USE_AOMAP\n uniform sampler2D aoMap;\n uniform float aoMapIntensity;\n#endif"; -var batching_pars_vertex = "#ifdef USE_BATCHING\n #if ! defined( GL_ANGLE_multi_draw )\n #define gl_DrawID _gl_DrawID\n uniform int _gl_DrawID;\n #endif\n uniform highp sampler2D batchingTexture;\n uniform highp usampler2D batchingIdTexture;\n mat4 getBatchingMatrix( const in float i ) {\n int size = textureSize( batchingTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n float getIndirectIndex( const in int i ) {\n int size = textureSize( batchingIdTexture, 0 ).x;\n int x = i % size;\n int y = i / size;\n return float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\n }\n#endif\n#ifdef USE_BATCHING_COLOR\n uniform sampler2D batchingColorTexture;\n vec3 getBatchingColor( const in float i ) {\n int size = textureSize( batchingColorTexture, 0 ).x;\n int j = int( i );\n int x = j % size;\n int y = j / size;\n return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\n }\n#endif"; -var batching_vertex = "#ifdef USE_BATCHING\n mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\n#endif"; -var begin_vertex = "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n vPosition = vec3( position );\n#endif"; -var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n vec3 objectTangent = vec3( tangent.xyz );\n#endif"; -var bsdfs = "float G_BlinnPhong_Implicit( ) {\n return 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( specularColor, 1.0, dotVH );\n float G = G_BlinnPhong_Implicit( );\n float D = D_BlinnPhong( shininess, dotNH );\n return F * ( G * D );\n} // validated"; -var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n const mat3 XYZ_TO_REC709 = mat3(\n 3.2404542, -0.9692660, 0.0556434,\n -1.5371385, 1.8760108, -0.2040259,\n -0.4985314, 0.0415560, 1.0572252\n );\n vec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n }\n vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n }\n float IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n }\n vec3 evalSensitivity( float OPD, vec3 shift ) {\n float phase = 2.0 * PI * OPD * 1.0e-9;\n vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n xyz /= 1.0685e-7;\n vec3 rgb = XYZ_TO_REC709 * xyz;\n return rgb;\n }\n vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq < 0.0 ) {\n return vec3( 1.0 );\n }\n float cosTheta2 = sqrt( cosTheta2Sq );\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR < outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n vec3 r123 = sqrt( R123 );\n vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n vec3 C0 = R12 + Rs;\n I = C0;\n vec3 Cm = Rs - T121;\n for ( int m = 1; m <= 2; ++ m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n return max( I, vec3( 0.0 ) );\n }\n#endif"; -var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n uniform sampler2D bumpMap;\n uniform float bumpScale;\n vec2 dHdxy_fwd() {\n vec2 dSTdx = dFdx( vBumpMapUv );\n vec2 dSTdy = dFdy( vBumpMapUv );\n float Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n float dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n float dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n return vec2( dBx, dBy );\n }\n vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n vec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n vec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n vec3 vN = surf_norm;\n vec3 R1 = cross( vSigmaY, vN );\n vec3 R2 = cross( vN, vSigmaX );\n float fDet = dot( vSigmaX, R1 ) * faceDirection;\n vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n return normalize( abs( fDet ) * surf_norm - vGrad );\n }\n#endif"; -var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n vec4 plane;\n #ifdef ALPHA_TO_COVERAGE\n float distanceToPlane, distanceGradient;\n float clipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n if ( clipOpacity == 0.0 ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n float unionClipOpacity = 1.0;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n distanceGradient = fwidth( distanceToPlane ) / 2.0;\n unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n }\n #pragma unroll_loop_end\n clipOpacity *= 1.0 - unionClipOpacity;\n #endif\n diffuseColor.a *= clipOpacity;\n if ( diffuseColor.a == 0.0 ) discard;\n #else\n #pragma unroll_loop_start\n for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n }\n #pragma unroll_loop_end\n #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n bool clipped = true;\n #pragma unroll_loop_start\n for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n plane = clippingPlanes[ i ];\n clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n }\n #pragma unroll_loop_end\n if ( clipped ) discard;\n #endif\n #endif\n#endif"; -var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; -var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n varying vec3 vClipPosition;\n#endif"; -var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n vClipPosition = - mvPosition.xyz;\n#endif"; -var color_fragment = "#if defined( USE_COLOR_ALPHA )\n diffuseColor *= vColor;\n#elif defined( USE_COLOR )\n diffuseColor.rgb *= vColor;\n#endif"; -var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR )\n varying vec3 vColor;\n#endif"; -var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n varying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n varying vec3 vColor;\n#endif"; -var color_vertex = "#if defined( USE_COLOR_ALPHA )\n vColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n vColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n vColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n vColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n vColor.xyz *= batchingColor.xyz;\n#endif"; -var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n return fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n float precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n float precisionSafeLength( vec3 v ) {\n float maxComponent = max3( abs( v ) );\n return length( v / maxComponent ) * maxComponent;\n }\n#endif\nstruct IncidentLight {\n vec3 color;\n vec3 direction;\n bool visible;\n};\nstruct ReflectedLight {\n vec3 directDiffuse;\n vec3 directSpecular;\n vec3 indirectDiffuse;\n vec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n varying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n mat3 tmp;\n tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n return tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n return vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n return RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated"; -var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n #define cubeUV_minMipLevel 4.0\n #define cubeUV_minTileSize 16.0\n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z );\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x );\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y );\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z );\n }\n return 0.5 * ( uv + 1.0 );\n }\n vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n float face = getFace( direction );\n float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n mipInt = max( mipInt, cubeUV_minMipLevel );\n float faceSize = exp2( mipInt );\n highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n if ( face > 2.0 ) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n uv.x += filterInt * 3.0 * cubeUV_minTileSize;\n uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n uv.x *= CUBEUV_TEXEL_WIDTH;\n uv.y *= CUBEUV_TEXEL_HEIGHT;\n #ifdef texture2DGradEXT\n return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n #else\n return texture2D( envMap, uv ).rgb;\n #endif\n }\n #define cubeUV_r0 1.0\n #define cubeUV_m0 - 2.0\n #define cubeUV_r1 0.8\n #define cubeUV_m1 - 1.0\n #define cubeUV_r4 0.4\n #define cubeUV_m4 2.0\n #define cubeUV_r5 0.305\n #define cubeUV_m5 3.0\n #define cubeUV_r6 0.21\n #define cubeUV_m6 4.0\n float roughnessToMip( float roughness ) {\n float mip = 0.0;\n if ( roughness >= cubeUV_r1 ) {\n mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n } else if ( roughness >= cubeUV_r4 ) {\n mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n } else if ( roughness >= cubeUV_r5 ) {\n mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n } else if ( roughness >= cubeUV_r6 ) {\n mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n } else {\n mip = - 2.0 * log2( 1.16 * roughness ); }\n return mip;\n }\n vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n float mipF = fract( mip );\n float mipInt = floor( mip );\n vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n if ( mipF == 0.0 ) {\n return vec4( color0, 1.0 );\n } else {\n vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n return vec4( mix( color0, color1, mipF ), 1.0 );\n }\n }\n#endif"; -var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n vec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n mat3 bm = mat3( batchingMatrix );\n transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n transformedNormal = bm * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = bm * transformedTangent;\n #endif\n#endif\n#ifdef USE_INSTANCING\n mat3 im = mat3( instanceMatrix );\n transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n transformedNormal = im * transformedNormal;\n #ifdef USE_TANGENT\n transformedTangent = im * transformedTangent;\n #endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n transformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n #ifdef FLIP_SIDED\n transformedTangent = - transformedTangent;\n #endif\n#endif"; -var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n uniform sampler2D displacementMap;\n uniform float displacementScale;\n uniform float displacementBias;\n#endif"; -var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif"; -var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n totalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; -var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n uniform sampler2D emissiveMap;\n#endif"; -var colorspace_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; -var colorspace_pars_fragment = "\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n vec3( 0.8224621, 0.177538, 0.0 ),\n vec3( 0.0331941, 0.9668058, 0.0 ),\n vec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n vec3( 1.2249401, - 0.2249404, 0.0 ),\n vec3( - 0.0420569, 1.0420571, 0.0 ),\n vec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n return vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n return vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n return value;\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}"; -var envmap_fragment = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vec3 cameraToFrag;\n if ( isOrthographic ) {\n cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToFrag = normalize( vWorldPosition - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vec3 reflectVec = reflect( cameraToFrag, worldNormal );\n #else\n vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n #endif\n #else\n vec3 reflectVec = vReflect;\n #endif\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n #else\n vec4 envColor = vec4( 0.0 );\n #endif\n #ifdef ENVMAP_BLENDING_MULTIPLY\n outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_MIX )\n outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n #elif defined( ENVMAP_BLENDING_ADD )\n outgoingLight += envColor.xyz * specularStrength * reflectivity;\n #endif\n#endif"; -var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n uniform float envMapIntensity;\n uniform float flipEnvMap;\n uniform mat3 envMapRotation;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n \n#endif"; -var envmap_pars_fragment = "#ifdef USE_ENVMAP\n uniform float reflectivity;\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n varying vec3 vWorldPosition;\n uniform float refractionRatio;\n #else\n varying vec3 vReflect;\n #endif\n#endif"; -var envmap_pars_vertex = "#ifdef USE_ENVMAP\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n #define ENV_WORLDPOS\n #endif\n #ifdef ENV_WORLDPOS\n \n varying vec3 vWorldPosition;\n #else\n varying vec3 vReflect;\n uniform float refractionRatio;\n #endif\n#endif"; -var envmap_vertex = "#ifdef USE_ENVMAP\n #ifdef ENV_WORLDPOS\n vWorldPosition = worldPosition.xyz;\n #else\n vec3 cameraToVertex;\n if ( isOrthographic ) {\n cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n } else {\n cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n }\n vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n #ifdef ENVMAP_MODE_REFLECTION\n vReflect = reflect( cameraToVertex, worldNormal );\n #else\n vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n #endif\n #endif\n#endif"; -var fog_vertex = "#ifdef USE_FOG\n vFogDepth = - mvPosition.z;\n#endif"; -var fog_pars_vertex = "#ifdef USE_FOG\n varying float vFogDepth;\n#endif"; -var fog_fragment = "#ifdef USE_FOG\n #ifdef FOG_EXP2\n float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n #else\n float fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n #endif\n gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; -var fog_pars_fragment = "#ifdef USE_FOG\n uniform vec3 fogColor;\n varying float vFogDepth;\n #ifdef FOG_EXP2\n uniform float fogDensity;\n #else\n uniform float fogNear;\n uniform float fogFar;\n #endif\n#endif"; -var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n uniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n float dotNL = dot( normal, lightDirection );\n vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n #ifdef USE_GRADIENTMAP\n return vec3( texture2D( gradientMap, coord ).r );\n #else\n vec2 fw = fwidth( coord ) * 0.5;\n return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n #endif\n}"; -var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n uniform sampler2D lightMap;\n uniform float lightMapIntensity;\n#endif"; -var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;"; -var lights_lambert_pars_fragment = "varying vec3 vViewPosition;\nstruct LambertMaterial {\n vec3 diffuseColor;\n float specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Lambert\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert"; -var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n uniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n float x = normal.x, y = normal.y, z = normal.z;\n vec3 result = shCoefficients[ 0 ] * 0.886227;\n result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n return result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n return irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n vec3 irradiance = ambientLightColor;\n return irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n if ( cutoffDistance > 0.0 ) {\n distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n }\n return distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n struct DirectionalLight {\n vec3 direction;\n vec3 color;\n };\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n light.color = directionalLight.color;\n light.direction = directionalLight.direction;\n light.visible = true;\n }\n#endif\n#if NUM_POINT_LIGHTS > 0\n struct PointLight {\n vec3 position;\n vec3 color;\n float distance;\n float decay;\n };\n uniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = pointLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float lightDistance = length( lVector );\n light.color = pointLight.color;\n light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n }\n#endif\n#if NUM_SPOT_LIGHTS > 0\n struct SpotLight {\n vec3 position;\n vec3 direction;\n vec3 color;\n float distance;\n float decay;\n float coneCos;\n float penumbraCos;\n };\n uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n vec3 lVector = spotLight.position - geometryPosition;\n light.direction = normalize( lVector );\n float angleCos = dot( light.direction, spotLight.direction );\n float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n if ( spotAttenuation > 0.0 ) {\n float lightDistance = length( lVector );\n light.color = spotLight.color * spotAttenuation;\n light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n light.visible = ( light.color != vec3( 0.0 ) );\n } else {\n light.color = vec3( 0.0 );\n light.visible = false;\n }\n }\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n struct RectAreaLight {\n vec3 color;\n vec3 position;\n vec3 halfWidth;\n vec3 halfHeight;\n };\n uniform sampler2D ltc_1; uniform sampler2D ltc_2;\n uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n struct HemisphereLight {\n vec3 direction;\n vec3 skyColor;\n vec3 groundColor;\n };\n uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n float dotNL = dot( normal, hemiLight.direction );\n float hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n return irradiance;\n }\n#endif"; -var envmap_physical_pars_fragment = "#ifdef USE_ENVMAP\n vec3 getIBLIrradiance( const in vec3 normal ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n return PI * envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 reflectVec = reflect( - viewDir, normal );\n reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n return envMapColor.rgb * envMapIntensity;\n #else\n return vec3( 0.0 );\n #endif\n }\n #ifdef USE_ANISOTROPY\n vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n #ifdef ENVMAP_TYPE_CUBE_UV\n vec3 bentNormal = cross( bitangent, viewDir );\n bentNormal = normalize( cross( bentNormal, bitangent ) );\n bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n return getIBLRadiance( viewDir, bentNormal, roughness );\n #else\n return vec3( 0.0 );\n #endif\n }\n #endif\n#endif"; -var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; -var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n vec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_Toon\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon"; -var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; -var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n vec3 diffuseColor;\n vec3 specularColor;\n float specularShininess;\n float specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct RE_Direct_BlinnPhong\n#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong"; -var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n material.ior = ior;\n #ifdef USE_SPECULAR\n float specularIntensityFactor = specularIntensity;\n vec3 specularColorFactor = specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n #endif\n material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n #else\n float specularIntensityFactor = 1.0;\n vec3 specularColorFactor = vec3( 1.0 );\n material.specularF90 = 1.0;\n #endif\n material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n material.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n material.clearcoat = clearcoat;\n material.clearcoatRoughness = clearcoatRoughness;\n material.clearcoatF0 = vec3( 0.04 );\n material.clearcoatF90 = 1.0;\n #ifdef USE_CLEARCOATMAP\n material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n #endif\n #ifdef USE_CLEARCOAT_ROUGHNESSMAP\n material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n #endif\n material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n material.clearcoatRoughness += geometryRoughness;\n material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n material.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n material.iridescence = iridescence;\n material.iridescenceIOR = iridescenceIOR;\n #ifdef USE_IRIDESCENCEMAP\n material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n #endif\n #ifdef USE_IRIDESCENCE_THICKNESSMAP\n material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n #else\n material.iridescenceThickness = iridescenceThicknessMaximum;\n #endif\n#endif\n#ifdef USE_SHEEN\n material.sheenColor = sheenColor;\n #ifdef USE_SHEEN_COLORMAP\n material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n #endif\n material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n #ifdef USE_SHEEN_ROUGHNESSMAP\n material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n #ifdef USE_ANISOTROPYMAP\n mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n #else\n vec2 anisotropyV = anisotropyVector;\n #endif\n material.anisotropy = length( anisotropyV );\n if( material.anisotropy == 0.0 ) {\n anisotropyV = vec2( 1.0, 0.0 );\n } else {\n anisotropyV /= material.anisotropy;\n material.anisotropy = saturate( material.anisotropy );\n }\n material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif"; -var lights_physical_pars_fragment = "struct PhysicalMaterial {\n vec3 diffuseColor;\n float roughness;\n vec3 specularColor;\n float specularF90;\n float dispersion;\n #ifdef USE_CLEARCOAT\n float clearcoat;\n float clearcoatRoughness;\n vec3 clearcoatF0;\n float clearcoatF90;\n #endif\n #ifdef USE_IRIDESCENCE\n float iridescence;\n float iridescenceIOR;\n float iridescenceThickness;\n vec3 iridescenceFresnel;\n vec3 iridescenceF0;\n #endif\n #ifdef USE_SHEEN\n vec3 sheenColor;\n float sheenRoughness;\n #endif\n #ifdef IOR\n float ior;\n #endif\n #ifdef USE_TRANSMISSION\n float transmission;\n float transmissionAlpha;\n float thickness;\n float attenuationDistance;\n vec3 attenuationColor;\n #endif\n #ifdef USE_ANISOTROPY\n float anisotropy;\n float alphaT;\n vec3 anisotropyT;\n vec3 anisotropyB;\n #endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n float a2 = pow2( alpha );\n float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n return 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n float a2 = pow2( alpha );\n float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n return RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n float v = 0.5 / ( gv + gl );\n return saturate(v);\n }\n float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n float a2 = alphaT * alphaB;\n highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n highp float v2 = dot( v, v );\n float w2 = a2 / v2;\n return RECIPROCAL_PI * a2 * pow2 ( w2 );\n }\n#endif\n#ifdef USE_CLEARCOAT\n vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n vec3 f0 = material.clearcoatF0;\n float f90 = material.clearcoatF90;\n float roughness = material.clearcoatRoughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n return F * ( V * D );\n }\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n vec3 f0 = material.specularColor;\n float f90 = material.specularF90;\n float roughness = material.roughness;\n float alpha = pow2( roughness );\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float dotVH = saturate( dot( viewDir, halfDir ) );\n vec3 F = F_Schlick( f0, f90, dotVH );\n #ifdef USE_IRIDESCENCE\n F = mix( F, material.iridescenceFresnel, material.iridescence );\n #endif\n #ifdef USE_ANISOTROPY\n float dotTL = dot( material.anisotropyT, lightDir );\n float dotTV = dot( material.anisotropyT, viewDir );\n float dotTH = dot( material.anisotropyT, halfDir );\n float dotBL = dot( material.anisotropyB, lightDir );\n float dotBV = dot( material.anisotropyB, viewDir );\n float dotBH = dot( material.anisotropyB, halfDir );\n float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n #else\n float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n float D = D_GGX( alpha, dotNH );\n #endif\n return F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n const float LUT_SIZE = 64.0;\n const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n const float LUT_BIAS = 0.5 / LUT_SIZE;\n float dotNV = saturate( dot( N, V ) );\n vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n uv = uv * LUT_SCALE + LUT_BIAS;\n return uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n float l = length( f );\n return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n float x = dot( v1, v2 );\n float y = abs( x );\n float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n float b = 3.4175940 + ( 4.1616724 + y ) * y;\n float v = a / b;\n float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n return cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n vec3 lightNormal = cross( v1, v2 );\n if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n vec3 T1, T2;\n T1 = normalize( V - N * dot( V, N ) );\n T2 = - cross( N, T1 );\n mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n vec3 coords[ 4 ];\n coords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n coords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n coords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n coords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n coords[ 0 ] = normalize( coords[ 0 ] );\n coords[ 1 ] = normalize( coords[ 1 ] );\n coords[ 2 ] = normalize( coords[ 2 ] );\n coords[ 3 ] = normalize( coords[ 3 ] );\n vec3 vectorFormFactor = vec3( 0.0 );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n float result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n return vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n float alpha = pow2( roughness );\n float invAlpha = 1.0 / alpha;\n float cos2h = dotNH * dotNH;\n float sin2h = max( 1.0 - cos2h, 0.0078125 );\n return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n vec3 halfDir = normalize( lightDir + viewDir );\n float dotNL = saturate( dot( normal, lightDir ) );\n float dotNV = saturate( dot( normal, viewDir ) );\n float dotNH = saturate( dot( normal, halfDir ) );\n float D = D_Charlie( sheenRoughness, dotNH );\n float V = V_Neubelt( dotNV, dotNL );\n return sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n float r2 = roughness * roughness;\n float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n return saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n float dotNV = saturate( dot( normal, viewDir ) );\n const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n vec4 r = roughness * c0 + c1;\n float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n return fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n return specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n vec2 fab = DFGApprox( normal, viewDir, roughness );\n #ifdef USE_IRIDESCENCE\n vec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n #else\n vec3 Fr = specularColor;\n #endif\n vec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n float Ess = fab.x + fab.y;\n float Ems = 1.0 - Ess;\n vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n singleScatter += FssEss;\n multiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n vec3 normal = geometryNormal;\n vec3 viewDir = geometryViewDir;\n vec3 position = geometryPosition;\n vec3 lightPos = rectAreaLight.position;\n vec3 halfWidth = rectAreaLight.halfWidth;\n vec3 halfHeight = rectAreaLight.halfHeight;\n vec3 lightColor = rectAreaLight.color;\n float roughness = material.roughness;\n vec3 rectCoords[ 4 ];\n rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n rectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n rectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n vec2 uv = LTC_Uv( normal, viewDir, roughness );\n vec4 t1 = texture2D( ltc_1, uv );\n vec4 t2 = texture2D( ltc_2, uv );\n mat3 mInv = mat3(\n vec3( t1.x, 0, t1.y ),\n vec3( 0, 1, 0 ),\n vec3( t1.z, 0, t1.w )\n );\n vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n float dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n vec3 irradiance = dotNL * directLight.color;\n #ifdef USE_CLEARCOAT\n float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n vec3 ccIrradiance = dotNLcc * directLight.color;\n clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n #endif\n reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n #ifdef USE_CLEARCOAT\n clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n #endif\n #ifdef USE_SHEEN\n sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n #endif\n vec3 singleScattering = vec3( 0.0 );\n vec3 multiScattering = vec3( 0.0 );\n vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n #ifdef USE_IRIDESCENCE\n computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n #else\n computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n #endif\n vec3 totalScattering = singleScattering + multiScattering;\n vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n reflectedLight.indirectSpecular += radiance * singleScattering;\n reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct RE_Direct_Physical\n#define RE_Direct_RectArea RE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular RE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; -var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n geometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n float dotNVi = saturate( dot( normal, geometryViewDir ) );\n if ( material.iridescenceThickness == 0.0 ) {\n material.iridescence = 0.0;\n } else {\n material.iridescence = saturate( material.iridescence );\n }\n if ( material.iridescence > 0.0 ) {\n material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n }\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n pointLight = pointLights[ i ];\n getPointLightInfo( pointLight, geometryPosition, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n SpotLight spotLight;\n vec4 spotColor;\n vec3 spotLightCoord;\n bool inSpotLightMap;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n spotLight = spotLights[ i ];\n getSpotLightInfo( spotLight, geometryPosition, directLight );\n #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n #else\n #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n #endif\n #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n #endif\n #undef SPOT_LIGHT_MAP_INDEX\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n RectAreaLight rectAreaLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n }\n #pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n vec3 iblIrradiance = vec3( 0.0 );\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if defined( RE_IndirectSpecular )\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; -var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n irradiance += lightMapIrradiance;\n #endif\n #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n iblIrradiance += getIBLIrradiance( geometryNormal );\n #endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n #ifdef USE_ANISOTROPY\n radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n #else\n radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n #endif\n #ifdef USE_CLEARCOAT\n clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n #endif\n#endif"; -var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif"; -var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF )\n gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; -var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF )\n uniform float logDepthBufFC;\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; -var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n varying float vFragDepth;\n varying float vIsPerspective;\n#endif"; -var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n vFragDepth = 1.0 + gl_Position.w;\n vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif"; -var map_fragment = "#ifdef USE_MAP\n vec4 sampledDiffuseColor = texture2D( map, vMapUv );\n #ifdef DECODE_VIDEO_TEXTURE\n sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n \n #endif\n diffuseColor *= sampledDiffuseColor;\n#endif"; -var map_pars_fragment = "#ifdef USE_MAP\n uniform sampler2D map;\n#endif"; -var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n #if defined( USE_POINTS_UV )\n vec2 uv = vUv;\n #else\n vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n #endif\n#endif\n#ifdef USE_MAP\n diffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n diffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; -var map_particle_pars_fragment = "#if defined( USE_POINTS_UV )\n varying vec2 vUv;\n#else\n #if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n uniform mat3 uvTransform;\n #endif\n#endif\n#ifdef USE_MAP\n uniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n uniform sampler2D alphaMap;\n#endif"; -var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n metalnessFactor *= texelMetalness.b;\n#endif"; -var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n uniform sampler2D metalnessMap;\n#endif"; -var morphinstance_vertex = "#ifdef USE_INSTANCING_MORPH\n float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n }\n#endif"; -var morphcolor_vertex = "#if defined( USE_MORPHCOLORS )\n vColor *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n #if defined( USE_COLOR_ALPHA )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n #elif defined( USE_COLOR )\n if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n #endif\n }\n#endif"; -var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n objectNormal *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; -var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n #ifndef USE_INSTANCING_MORPH\n uniform float morphTargetBaseInfluence;\n uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n #endif\n uniform sampler2DArray morphTargetsTexture;\n uniform ivec2 morphTargetsTextureSize;\n vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n int y = texelIndex / morphTargetsTextureSize.x;\n int x = texelIndex - y * morphTargetsTextureSize.x;\n ivec3 morphUV = ivec3( x, y, morphTargetIndex );\n return texelFetch( morphTargetsTexture, morphUV, 0 );\n }\n#endif"; -var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n transformed *= morphTargetBaseInfluence;\n for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n }\n#endif"; -var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n vec3 fdx = dFdx( vViewPosition );\n vec3 fdy = dFdy( vViewPosition );\n vec3 normal = normalize( cross( fdx, fdy ) );\n#else\n vec3 normal = normalize( vNormal );\n #ifdef DOUBLE_SIDED\n normal *= faceDirection;\n #endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n #ifdef USE_TANGENT\n mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn = getTangentFrame( - vViewPosition, normal,\n #if defined( USE_NORMALMAP )\n vNormalMapUv\n #elif defined( USE_CLEARCOAT_NORMALMAP )\n vClearcoatNormalMapUv\n #else\n vUv\n #endif\n );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn[0] *= faceDirection;\n tbn[1] *= faceDirection;\n #endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n #ifdef USE_TANGENT\n mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n #else\n mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n #endif\n #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n tbn2[0] *= faceDirection;\n tbn2[1] *= faceDirection;\n #endif\n#endif\nvec3 nonPerturbedNormal = normal;"; -var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n #ifdef FLIP_SIDED\n normal = - normal;\n #endif\n #ifdef DOUBLE_SIDED\n normal = normal * faceDirection;\n #endif\n normal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n mapN.xy *= normalScale;\n normal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; -var normal_pars_fragment = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; -var normal_pars_vertex = "#ifndef FLAT_SHADED\n varying vec3 vNormal;\n #ifdef USE_TANGENT\n varying vec3 vTangent;\n varying vec3 vBitangent;\n #endif\n#endif"; -var normal_vertex = "#ifndef FLAT_SHADED\n vNormal = normalize( transformedNormal );\n #ifdef USE_TANGENT\n vTangent = normalize( transformedTangent );\n vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n #endif\n#endif"; -var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n uniform sampler2D normalMap;\n uniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n uniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n vec3 q0 = dFdx( eye_pos.xyz );\n vec3 q1 = dFdy( eye_pos.xyz );\n vec2 st0 = dFdx( uv.st );\n vec2 st1 = dFdy( uv.st );\n vec3 N = surf_norm;\n vec3 q1perp = cross( q1, N );\n vec3 q0perp = cross( N, q0 );\n vec3 T = q1perp * st0.x + q0perp * st1.x;\n vec3 B = q1perp * st0.y + q0perp * st1.y;\n float det = max( dot( T, T ), dot( B, B ) );\n float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n return mat3( T * scale, B * scale, N );\n }\n#endif"; -var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n vec3 clearcoatNormal = nonPerturbedNormal;\n#endif"; -var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n clearcoatMapN.xy *= clearcoatNormalScale;\n clearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif"; -var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n uniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform sampler2D clearcoatNormalMap;\n uniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform sampler2D clearcoatRoughnessMap;\n#endif"; -var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n uniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform sampler2D iridescenceThicknessMap;\n#endif"; -var opaque_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );"; -var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n return 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n if( v <= 0.0 )\n return vec4( 0., 0., 0., 0. );\n if( v >= 1.0 )\n return vec4( 1., 1., 1., 1. );\n float vuf;\n float af = modf( v * PackFactors.a, vuf );\n float bf = modf( vuf * ShiftRight8, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n if( v <= 0.0 )\n return vec3( 0., 0., 0. );\n if( v >= 1.0 )\n return vec3( 1., 1., 1. );\n float vuf;\n float bf = modf( v * PackFactors.b, vuf );\n float gf = modf( vuf * ShiftRight8, vuf );\n return vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n if( v <= 0.0 )\n return vec2( 0., 0. );\n if( v >= 1.0 )\n return vec2( 1., 1. );\n float vuf;\n float gf = modf( v * 256., vuf );\n return vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n return dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n return dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n return ( near * far ) / ( ( far - near ) * depth - far );\n}"; -var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif"; -var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n mvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n mvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; -var dithering_fragment = "#ifdef DITHERING\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; -var dithering_pars_fragment = "#ifdef DITHERING\n vec3 dithering( vec3 color ) {\n float grid_position = rand( gl_FragCoord.xy );\n vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n return color + dither_shift_RGB;\n }\n#endif"; -var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n roughnessFactor *= texelRoughness.g;\n#endif"; -var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n uniform sampler2D roughnessMap;\n#endif"; -var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n }\n vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n return unpackRGBATo2Half( texture2D( shadow, uv ) );\n }\n float VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n float occlusion = 1.0;\n vec2 distribution = texture2DDistribution( shadow, uv );\n float hard_shadow = step( compare , distribution.x );\n if (hard_shadow != 1.0 ) {\n float distance = compare - distribution.x ;\n float variance = max( 0.00000, distribution.y * distribution.y );\n float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n }\n return occlusion;\n }\n float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n float shadow = 1.0;\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if ( frustumTest ) {\n #if defined( SHADOWMAP_TYPE_PCF )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx0 = - texelSize.x * shadowRadius;\n float dy0 = - texelSize.y * shadowRadius;\n float dx1 = + texelSize.x * shadowRadius;\n float dy1 = + texelSize.y * shadowRadius;\n float dx2 = dx0 / 2.0;\n float dy2 = dy0 / 2.0;\n float dx3 = dx1 / 2.0;\n float dy3 = dy1 / 2.0;\n shadow = (\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n ) * ( 1.0 / 17.0 );\n #elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n vec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n float dx = texelSize.x;\n float dy = texelSize.y;\n vec2 uv = shadowCoord.xy;\n vec2 f = fract( uv * shadowMapSize + 0.5 );\n uv -= f * texelSize;\n shadow = (\n texture2DCompare( shadowMap, uv, shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n f.x ) +\n mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n f.y ) +\n mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n f.x ),\n mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n f.x ),\n f.y )\n ) * ( 1.0 / 9.0 );\n #elif defined( SHADOWMAP_TYPE_VSM )\n shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n #else\n shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n vec2 cubeToUV( vec3 v, float texelSizeY ) {\n vec3 absV = abs( v );\n float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n absV *= scaleToCube;\n v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n vec2 planar = v.xy;\n float almostATexel = 1.5 * texelSizeY;\n float almostOne = 1.0 - almostATexel;\n if ( absV.z >= almostOne ) {\n if ( v.z > 0.0 )\n planar.x = 4.0 - v.x;\n } else if ( absV.x >= almostOne ) {\n float signX = sign( v.x );\n planar.x = v.z * signX + 2.0 * signX;\n } else if ( absV.y >= almostOne ) {\n float signY = sign( v.y );\n planar.x = v.x + 2.0 * signY + 2.0;\n planar.y = v.z * signY - 2.0;\n }\n return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n }\n float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n float shadow = 1.0;\n vec3 lightToPosition = shadowCoord.xyz;\n \n float lightToPositionLength = length( lightToPosition );\n if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n float dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias;\n vec3 bd3D = normalize( lightToPosition );\n vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n shadow = (\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n ) * ( 1.0 / 9.0 );\n #else\n shadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n #endif\n }\n return mix( 1.0, shadow, shadowIntensity );\n }\n#endif"; -var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n struct DirectionalLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n struct SpotLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n };\n uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n struct PointLightShadow {\n float shadowIntensity;\n float shadowBias;\n float shadowNormalBias;\n float shadowRadius;\n vec2 shadowMapSize;\n float shadowCameraNear;\n float shadowCameraFar;\n };\n uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n #endif\n#endif"; -var shadowmap_vertex = "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n vec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n #if NUM_DIR_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n #endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n shadowWorldPosition = worldPosition;\n #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n #endif\n vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n }\n #pragma unroll_loop_end\n#endif"; -var shadowmask_pars_fragment = "float getShadowMask() {\n float shadow = 1.0;\n #ifdef USE_SHADOWMAP\n #if NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n directionalLight = directionalLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n spotLight = spotLightShadows[ i ];\n shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #if NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLight;\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n pointLight = pointLightShadows[ i ];\n shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n }\n #pragma unroll_loop_end\n #endif\n #endif\n return shadow;\n}"; -var skinbase_vertex = "#ifdef USE_SKINNING\n mat4 boneMatX = getBoneMatrix( skinIndex.x );\n mat4 boneMatY = getBoneMatrix( skinIndex.y );\n mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n mat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; -var skinning_pars_vertex = "#ifdef USE_SKINNING\n uniform mat4 bindMatrix;\n uniform mat4 bindMatrixInverse;\n uniform highp sampler2D boneTexture;\n mat4 getBoneMatrix( const in float i ) {\n int size = textureSize( boneTexture, 0 ).x;\n int j = int( i ) * 4;\n int x = j % size;\n int y = j / size;\n vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n return mat4( v1, v2, v3, v4 );\n }\n#endif"; -var skinning_vertex = "#ifdef USE_SKINNING\n vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n vec4 skinned = vec4( 0.0 );\n skinned += boneMatX * skinVertex * skinWeight.x;\n skinned += boneMatY * skinVertex * skinWeight.y;\n skinned += boneMatZ * skinVertex * skinWeight.z;\n skinned += boneMatW * skinVertex * skinWeight.w;\n transformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; -var skinnormal_vertex = "#ifdef USE_SKINNING\n mat4 skinMatrix = mat4( 0.0 );\n skinMatrix += skinWeight.x * boneMatX;\n skinMatrix += skinWeight.y * boneMatY;\n skinMatrix += skinWeight.z * boneMatZ;\n skinMatrix += skinWeight.w * boneMatW;\n skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n #ifdef USE_TANGENT\n objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n #endif\n#endif"; -var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n specularStrength = texelSpecular.r;\n#else\n specularStrength = 1.0;\n#endif"; -var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n uniform sampler2D specularMap;\n#endif"; -var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; -var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n return saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n return saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n color *= toneMappingExposure;\n color = max( vec3( 0.0 ), color - 0.004 );\n return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n vec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n return a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n const mat3 ACESInputMat = mat3(\n vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ),\n vec3( 0.04823, 0.01566, 0.83777 )\n );\n const mat3 ACESOutputMat = mat3(\n vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ),\n vec3( -0.07367, -0.00605, 1.07602 )\n );\n color *= toneMappingExposure / 0.6;\n color = ACESInputMat * color;\n color = RRTAndODTFit( color );\n color = ACESOutputMat * color;\n return saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n vec3( 1.6605, - 0.1246, - 0.0182 ),\n vec3( - 0.5876, 1.1329, - 0.1006 ),\n vec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n vec3( 0.6274, 0.0691, 0.0164 ),\n vec3( 0.3293, 0.9195, 0.0880 ),\n vec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n vec3 x2 = x * x;\n vec3 x4 = x2 * x2;\n return + 15.5 * x4 * x2\n - 40.14 * x4 * x\n + 31.96 * x4\n - 6.868 * x2 * x\n + 0.4298 * x2\n + 0.1191 * x\n - 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n const mat3 AgXInsetMatrix = mat3(\n vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n );\n const mat3 AgXOutsetMatrix = mat3(\n vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n );\n const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069;\n color *= toneMappingExposure;\n color = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n color = AgXInsetMatrix * color;\n color = max( color, 1e-10 ); color = log2( color );\n color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n color = clamp( color, 0.0, 1.0 );\n color = agxDefaultContrastApprox( color );\n color = AgXOutsetMatrix * color;\n color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n color = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n color = clamp( color, 0.0, 1.0 );\n return color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n const float StartCompression = 0.8 - 0.04;\n const float Desaturation = 0.15;\n color *= toneMappingExposure;\n float x = min( color.r, min( color.g, color.b ) );\n float offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n color -= offset;\n float peak = max( color.r, max( color.g, color.b ) );\n if ( peak < StartCompression ) return color;\n float d = 1. - StartCompression;\n float newPeak = 1. - d * d / ( peak + d - StartCompression );\n color *= newPeak / peak;\n float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n return mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; -var transmission_fragment = "#ifdef USE_TRANSMISSION\n material.transmission = transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n #endif\n vec3 pos = vWorldPosition;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec4 transmitted = getIBLVolumeRefraction(\n n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n material.attenuationColor, material.attenuationDistance );\n material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif"; -var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n uniform float transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n float w0( float a ) {\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n }\n float w1( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n }\n float w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n }\n float w3( float a ) {\n return ( 1.0 / 6.0 ) * ( a * a * a );\n }\n float g0( float a ) {\n return w0( a ) + w1( a );\n }\n float g1( float a ) {\n return w2( a ) + w3( a );\n }\n float h0( float a ) {\n return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n }\n float h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n }\n vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n uv = uv * texelSize.zw + 0.5;\n vec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n }\n vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n vec2 fLodSizeInv = 1.0 / fLodSize;\n vec2 cLodSizeInv = 1.0 / cLodSize;\n vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n return mix( fSample, cSample, fract( lod ) );\n }\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n }\n vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n return vec3( 1.0 );\n } else {\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec4 transmittedLight;\n vec3 transmittance;\n #ifdef USE_DISPERSION\n float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n for ( int i = 0; i < 3; i ++ ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n \n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n \n vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n transmittedLight[ i ] = transmissionSample[ i ];\n transmittedLight.a += transmissionSample.a;\n transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n }\n transmittedLight.a /= 3.0;\n \n #else\n \n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n \n #endif\n vec3 attenuatedColor = transmittance * transmittedLight.rgb;\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n }\n#endif"; -var uv_pars_fragment = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; -var uv_pars_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n varying vec2 vUv;\n#endif\n#ifdef USE_MAP\n uniform mat3 mapTransform;\n varying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n uniform mat3 alphaMapTransform;\n varying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n uniform mat3 lightMapTransform;\n varying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n uniform mat3 aoMapTransform;\n varying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n uniform mat3 bumpMapTransform;\n varying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n uniform mat3 normalMapTransform;\n varying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n uniform mat3 displacementMapTransform;\n varying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n uniform mat3 emissiveMapTransform;\n varying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n uniform mat3 metalnessMapTransform;\n varying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n uniform mat3 roughnessMapTransform;\n varying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n uniform mat3 anisotropyMapTransform;\n varying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n uniform mat3 clearcoatMapTransform;\n varying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n uniform mat3 clearcoatNormalMapTransform;\n varying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n uniform mat3 clearcoatRoughnessMapTransform;\n varying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n uniform mat3 sheenColorMapTransform;\n varying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n uniform mat3 sheenRoughnessMapTransform;\n varying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n uniform mat3 iridescenceMapTransform;\n varying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n uniform mat3 iridescenceThicknessMapTransform;\n varying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n uniform mat3 specularMapTransform;\n varying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n uniform mat3 specularColorMapTransform;\n varying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n uniform mat3 specularIntensityMapTransform;\n varying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n uniform mat3 transmissionMapTransform;\n varying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n uniform mat3 thicknessMapTransform;\n varying vec2 vThicknessMapUv;\n#endif"; -var uv_vertex = "#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n vUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif"; -var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n vec4 worldPosition = vec4( transformed, 1.0 );\n #ifdef USE_BATCHING\n worldPosition = batchingMatrix * worldPosition;\n #endif\n #ifdef USE_INSTANCING\n worldPosition = instanceMatrix * worldPosition;\n #endif\n worldPosition = modelMatrix * worldPosition;\n#endif"; -var vertex$h = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n gl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; -var fragment$h = "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n vec4 texColor = texture2D( t2D, vUv );\n #ifdef DECODE_VIDEO_TEXTURE\n texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; -var vertex$g = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; -var fragment$g = "#ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n uniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n #ifdef ENVMAP_TYPE_CUBE\n vec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n #elif defined( ENVMAP_TYPE_CUBE_UV )\n vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n #else\n vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n #endif\n texColor.rgb *= backgroundIntensity;\n gl_FragColor = texColor;\n #include \n #include \n}"; -var vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n gl_Position.z = gl_Position.w;\n}"; -var fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n gl_FragColor = texColor;\n gl_FragColor.a *= opacity;\n #include \n #include \n}"; -var vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vHighPrecisionZW = gl_Position.zw;\n}"; -var fragment$e = "#if DEPTH_PACKING == 3200\n uniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #if DEPTH_PACKING == 3200\n diffuseColor.a = opacity;\n #endif\n #include \n #include \n #include \n #include \n #include \n float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n #if DEPTH_PACKING == 3200\n gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n #elif DEPTH_PACKING == 3201\n gl_FragColor = packDepthToRGBA( fragCoordZ );\n #elif DEPTH_PACKING == 3202\n gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n #elif DEPTH_PACKING == 3203\n gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n #endif\n}"; -var vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #ifdef USE_DISPLACEMENTMAP\n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vWorldPosition = worldPosition.xyz;\n}"; -var fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n vec4 diffuseColor = vec4( 1.0 );\n #include \n #include \n #include \n #include \n #include \n float dist = length( vWorldPosition - referencePosition );\n dist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n dist = saturate( dist );\n gl_FragColor = packDepthToRGBA( dist );\n}"; -var vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n vWorldDirection = transformDirection( position, modelMatrix );\n #include \n #include \n}"; -var fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n vec3 direction = normalize( vWorldDirection );\n vec2 sampleUV = equirectUv( direction );\n gl_FragColor = texture2D( tEquirect, sampleUV );\n #include \n #include \n}"; -var vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vLineDistance = scale * lineDistance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n if ( mod( vLineDistance, totalSize ) > dashSize ) {\n discard;\n }\n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n #include \n #include \n #include \n #include \n #include \n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n varying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n #ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n #else\n reflectedLight.indirectDiffuse += vec3( 1.0 );\n #endif\n #include \n reflectedLight.indirectDiffuse *= diffuseColor.rgb;\n vec3 outgoingLight = reflectedLight.indirectDiffuse;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$9 = "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; -var fragment$9 = "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n}"; -var fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n #ifdef USE_MATCAP\n vec4 matcapColor = texture2D( matcap, uv );\n #else\n vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n #endif\n vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n vViewPosition = - mvPosition.xyz;\n#endif\n}"; -var fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n varying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n #include \n #include \n #include \n #include \n gl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n #ifdef OPAQUE\n gl_FragColor.a = 1.0;\n #endif\n}"; -var vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n #include \n}"; -var fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n varying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n#ifdef USE_TRANSMISSION\n vWorldPosition = worldPosition.xyz;\n#endif\n}"; -var fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n #define IOR\n #define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n uniform float ior;\n#endif\n#ifdef USE_SPECULAR\n uniform float specularIntensity;\n uniform vec3 specularColor;\n #ifdef USE_SPECULAR_COLORMAP\n uniform sampler2D specularColorMap;\n #endif\n #ifdef USE_SPECULAR_INTENSITYMAP\n uniform sampler2D specularIntensityMap;\n #endif\n#endif\n#ifdef USE_CLEARCOAT\n uniform float clearcoat;\n uniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n uniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n uniform float iridescence;\n uniform float iridescenceIOR;\n uniform float iridescenceThicknessMinimum;\n uniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n uniform vec3 sheenColor;\n uniform float sheenRoughness;\n #ifdef USE_SHEEN_COLORMAP\n uniform sampler2D sheenColorMap;\n #endif\n #ifdef USE_SHEEN_ROUGHNESSMAP\n uniform sampler2D sheenRoughnessMap;\n #endif\n#endif\n#ifdef USE_ANISOTROPY\n uniform vec2 anisotropyVector;\n #ifdef USE_ANISOTROPYMAP\n uniform sampler2D anisotropyMap;\n #endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n #include \n vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n #ifdef USE_SHEEN\n float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n #endif\n #ifdef USE_CLEARCOAT\n float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vViewPosition = - mvPosition.xyz;\n #include \n #include \n #include \n}"; -var fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n vec3 totalEmissiveRadiance = emissive;\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$3 = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n varying vec2 vUv;\n uniform mat3 uvTransform;\n#endif\nvoid main() {\n #ifdef USE_POINTS_UV\n vUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n #endif\n #include \n #include \n #include \n #include \n #include \n #include \n gl_PointSize = size;\n #ifdef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n #endif\n #include \n #include \n #include \n #include \n}"; -var fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n #include \n}"; -var vertex$2 = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n #include \n}"; -var fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n #include \n #include \n #include \n}"; -var vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n #include \n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n #ifndef USE_SIZEATTENUATION\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n #endif\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n gl_Position = projectionMatrix * mvPosition;\n #include \n #include \n #include \n}"; -var fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n vec4 diffuseColor = vec4( diffuse, opacity );\n #include \n vec3 outgoingLight = vec3( 0.0 );\n #include \n #include \n #include \n #include \n #include \n outgoingLight = diffuseColor.rgb;\n #include \n #include \n #include \n #include \n}"; -var ShaderChunk = { - alphahash_fragment, - alphahash_pars_fragment, - alphamap_fragment, - alphamap_pars_fragment, - alphatest_fragment, - alphatest_pars_fragment, - aomap_fragment, - aomap_pars_fragment, - batching_pars_vertex, - batching_vertex, - begin_vertex, - beginnormal_vertex, - bsdfs, - iridescence_fragment, - bumpmap_pars_fragment, - clipping_planes_fragment, - clipping_planes_pars_fragment, - clipping_planes_pars_vertex, - clipping_planes_vertex, - color_fragment, - color_pars_fragment, - color_pars_vertex, - color_vertex, - common, - cube_uv_reflection_fragment, - defaultnormal_vertex, - displacementmap_pars_vertex, - displacementmap_vertex, - emissivemap_fragment, - emissivemap_pars_fragment, - colorspace_fragment, - colorspace_pars_fragment, - envmap_fragment, - envmap_common_pars_fragment, - envmap_pars_fragment, - envmap_pars_vertex, - envmap_physical_pars_fragment, - envmap_vertex, - fog_vertex, - fog_pars_vertex, - fog_fragment, - fog_pars_fragment, - gradientmap_pars_fragment, - lightmap_pars_fragment, - lights_lambert_fragment, - lights_lambert_pars_fragment, - lights_pars_begin, - lights_toon_fragment, - lights_toon_pars_fragment, - lights_phong_fragment, - lights_phong_pars_fragment, - lights_physical_fragment, - lights_physical_pars_fragment, - lights_fragment_begin, - lights_fragment_maps, - lights_fragment_end, - logdepthbuf_fragment, - logdepthbuf_pars_fragment, - logdepthbuf_pars_vertex, - logdepthbuf_vertex, - map_fragment, - map_pars_fragment, - map_particle_fragment, - map_particle_pars_fragment, - metalnessmap_fragment, - metalnessmap_pars_fragment, - morphinstance_vertex, - morphcolor_vertex, - morphnormal_vertex, - morphtarget_pars_vertex, - morphtarget_vertex, - normal_fragment_begin, - normal_fragment_maps, - normal_pars_fragment, - normal_pars_vertex, - normal_vertex, - normalmap_pars_fragment, - clearcoat_normal_fragment_begin, - clearcoat_normal_fragment_maps, - clearcoat_pars_fragment, - iridescence_pars_fragment, - opaque_fragment, - packing, - premultiplied_alpha_fragment, - project_vertex, - dithering_fragment, - dithering_pars_fragment, - roughnessmap_fragment, - roughnessmap_pars_fragment, - shadowmap_pars_fragment, - shadowmap_pars_vertex, - shadowmap_vertex, - shadowmask_pars_fragment, - skinbase_vertex, - skinning_pars_vertex, - skinning_vertex, - skinnormal_vertex, - specularmap_fragment, - specularmap_pars_fragment, - tonemapping_fragment, - tonemapping_pars_fragment, - transmission_fragment, - transmission_pars_fragment, - uv_pars_fragment, - uv_pars_vertex, - uv_vertex, - worldpos_vertex, - background_vert: vertex$h, - background_frag: fragment$h, - backgroundCube_vert: vertex$g, - backgroundCube_frag: fragment$g, - cube_vert: vertex$f, - cube_frag: fragment$f, - depth_vert: vertex$e, - depth_frag: fragment$e, - distanceRGBA_vert: vertex$d, - distanceRGBA_frag: fragment$d, - equirect_vert: vertex$c, - equirect_frag: fragment$c, - linedashed_vert: vertex$b, - linedashed_frag: fragment$b, - meshbasic_vert: vertex$a, - meshbasic_frag: fragment$a, - meshlambert_vert: vertex$9, - meshlambert_frag: fragment$9, - meshmatcap_vert: vertex$8, - meshmatcap_frag: fragment$8, - meshnormal_vert: vertex$7, - meshnormal_frag: fragment$7, - meshphong_vert: vertex$6, - meshphong_frag: fragment$6, - meshphysical_vert: vertex$5, - meshphysical_frag: fragment$5, - meshtoon_vert: vertex$4, - meshtoon_frag: fragment$4, - points_vert: vertex$3, - points_frag: fragment$3, - shadow_vert: vertex$2, - shadow_frag: fragment$2, - sprite_vert: vertex$1, - sprite_frag: fragment$1 -}; -var UniformsLib = { - common: { - diffuse: { value: new Color(16777215) }, - opacity: { value: 1 }, - map: { value: null }, - mapTransform: { value: new Matrix3() }, - alphaMap: { value: null }, - alphaMapTransform: { value: new Matrix3() }, - alphaTest: { value: 0 } - }, - specularmap: { - specularMap: { value: null }, - specularMapTransform: { value: new Matrix3() } - }, - envmap: { - envMap: { value: null }, - envMapRotation: { value: new Matrix3() }, - flipEnvMap: { value: -1 }, - reflectivity: { value: 1 }, - // basic, lambert, phong - ior: { value: 1.5 }, - // physical - refractionRatio: { value: 0.98 } - // basic, lambert, phong - }, - aomap: { - aoMap: { value: null }, - aoMapIntensity: { value: 1 }, - aoMapTransform: { value: new Matrix3() } - }, - lightmap: { - lightMap: { value: null }, - lightMapIntensity: { value: 1 }, - lightMapTransform: { value: new Matrix3() } - }, - bumpmap: { - bumpMap: { value: null }, - bumpMapTransform: { value: new Matrix3() }, - bumpScale: { value: 1 } - }, - normalmap: { - normalMap: { value: null }, - normalMapTransform: { value: new Matrix3() }, - normalScale: { value: new Vector2(1, 1) } - }, - displacementmap: { - displacementMap: { value: null }, - displacementMapTransform: { value: new Matrix3() }, - displacementScale: { value: 1 }, - displacementBias: { value: 0 } - }, - emissivemap: { - emissiveMap: { value: null }, - emissiveMapTransform: { value: new Matrix3() } - }, - metalnessmap: { - metalnessMap: { value: null }, - metalnessMapTransform: { value: new Matrix3() } - }, - roughnessmap: { - roughnessMap: { value: null }, - roughnessMapTransform: { value: new Matrix3() } - }, - gradientmap: { - gradientMap: { value: null } - }, - fog: { - fogDensity: { value: 25e-5 }, - fogNear: { value: 1 }, - fogFar: { value: 2e3 }, - fogColor: { value: new Color(16777215) } - }, - lights: { - ambientLightColor: { value: [] }, - lightProbe: { value: [] }, - directionalLights: { value: [], properties: { - direction: {}, - color: {} - } }, - directionalLightShadows: { value: [], properties: { - shadowIntensity: 1, - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - directionalShadowMap: { value: [] }, - directionalShadowMatrix: { value: [] }, - spotLights: { value: [], properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } }, - spotLightShadows: { value: [], properties: { - shadowIntensity: 1, - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - spotLightMap: { value: [] }, - spotShadowMap: { value: [] }, - spotLightMatrix: { value: [] }, - pointLights: { value: [], properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } }, - pointLightShadows: { value: [], properties: { - shadowIntensity: 1, - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } }, - pointShadowMap: { value: [] }, - pointShadowMatrix: { value: [] }, - hemisphereLights: { value: [], properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } }, - // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src - rectAreaLights: { value: [], properties: { - color: {}, - position: {}, - width: {}, - height: {} - } }, - ltc_1: { value: null }, - ltc_2: { value: null } - }, - points: { - diffuse: { value: new Color(16777215) }, - opacity: { value: 1 }, - size: { value: 1 }, - scale: { value: 1 }, - map: { value: null }, - alphaMap: { value: null }, - alphaMapTransform: { value: new Matrix3() }, - alphaTest: { value: 0 }, - uvTransform: { value: new Matrix3() } - }, - sprite: { - diffuse: { value: new Color(16777215) }, - opacity: { value: 1 }, - center: { value: new Vector2(0.5, 0.5) }, - rotation: { value: 0 }, - map: { value: null }, - mapTransform: { value: new Matrix3() }, - alphaMap: { value: null }, - alphaMapTransform: { value: new Matrix3() }, - alphaTest: { value: 0 } - } -}; -var ShaderLib = { - basic: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.fog - ]), - vertexShader: ShaderChunk.meshbasic_vert, - fragmentShader: ShaderChunk.meshbasic_frag - }, - lambert: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color(0) } - } - ]), - vertexShader: ShaderChunk.meshlambert_vert, - fragmentShader: ShaderChunk.meshlambert_frag - }, - phong: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color(0) }, - specular: { value: new Color(1118481) }, - shininess: { value: 30 } - } - ]), - vertexShader: ShaderChunk.meshphong_vert, - fragmentShader: ShaderChunk.meshphong_frag - }, - standard: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.roughnessmap, - UniformsLib.metalnessmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color(0) }, - roughness: { value: 1 }, - metalness: { value: 0 }, - envMapIntensity: { value: 1 } - } - ]), - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - }, - toon: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.gradientmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color(0) } - } - ]), - vertexShader: ShaderChunk.meshtoon_vert, - fragmentShader: ShaderChunk.meshtoon_frag - }, - matcap: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - { - matcap: { value: null } - } - ]), - vertexShader: ShaderChunk.meshmatcap_vert, - fragmentShader: ShaderChunk.meshmatcap_frag - }, - points: { - uniforms: mergeUniforms([ - UniformsLib.points, - UniformsLib.fog - ]), - vertexShader: ShaderChunk.points_vert, - fragmentShader: ShaderChunk.points_frag - }, - dashed: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.fog, - { - scale: { value: 1 }, - dashSize: { value: 1 }, - totalSize: { value: 2 } - } - ]), - vertexShader: ShaderChunk.linedashed_vert, - fragmentShader: ShaderChunk.linedashed_frag - }, - depth: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.displacementmap - ]), - vertexShader: ShaderChunk.depth_vert, - fragmentShader: ShaderChunk.depth_frag - }, - normal: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - { - opacity: { value: 1 } - } - ]), - vertexShader: ShaderChunk.meshnormal_vert, - fragmentShader: ShaderChunk.meshnormal_frag - }, - sprite: { - uniforms: mergeUniforms([ - UniformsLib.sprite, - UniformsLib.fog - ]), - vertexShader: ShaderChunk.sprite_vert, - fragmentShader: ShaderChunk.sprite_frag - }, - background: { - uniforms: { - uvTransform: { value: new Matrix3() }, - t2D: { value: null }, - backgroundIntensity: { value: 1 } - }, - vertexShader: ShaderChunk.background_vert, - fragmentShader: ShaderChunk.background_frag - }, - backgroundCube: { - uniforms: { - envMap: { value: null }, - flipEnvMap: { value: -1 }, - backgroundBlurriness: { value: 0 }, - backgroundIntensity: { value: 1 }, - backgroundRotation: { value: new Matrix3() } - }, - vertexShader: ShaderChunk.backgroundCube_vert, - fragmentShader: ShaderChunk.backgroundCube_frag - }, - cube: { - uniforms: { - tCube: { value: null }, - tFlip: { value: -1 }, - opacity: { value: 1 } - }, - vertexShader: ShaderChunk.cube_vert, - fragmentShader: ShaderChunk.cube_frag - }, - equirect: { - uniforms: { - tEquirect: { value: null } - }, - vertexShader: ShaderChunk.equirect_vert, - fragmentShader: ShaderChunk.equirect_frag - }, - distanceRGBA: { - uniforms: mergeUniforms([ - UniformsLib.common, - UniformsLib.displacementmap, - { - referencePosition: { value: new Vector3() }, - nearDistance: { value: 1 }, - farDistance: { value: 1e3 } - } - ]), - vertexShader: ShaderChunk.distanceRGBA_vert, - fragmentShader: ShaderChunk.distanceRGBA_frag - }, - shadow: { - uniforms: mergeUniforms([ - UniformsLib.lights, - UniformsLib.fog, - { - color: { value: new Color(0) }, - opacity: { value: 1 } - } - ]), - vertexShader: ShaderChunk.shadow_vert, - fragmentShader: ShaderChunk.shadow_frag - } -}; -ShaderLib.physical = { - uniforms: mergeUniforms([ - ShaderLib.standard.uniforms, - { - clearcoat: { value: 0 }, - clearcoatMap: { value: null }, - clearcoatMapTransform: { value: new Matrix3() }, - clearcoatNormalMap: { value: null }, - clearcoatNormalMapTransform: { value: new Matrix3() }, - clearcoatNormalScale: { value: new Vector2(1, 1) }, - clearcoatRoughness: { value: 0 }, - clearcoatRoughnessMap: { value: null }, - clearcoatRoughnessMapTransform: { value: new Matrix3() }, - dispersion: { value: 0 }, - iridescence: { value: 0 }, - iridescenceMap: { value: null }, - iridescenceMapTransform: { value: new Matrix3() }, - iridescenceIOR: { value: 1.3 }, - iridescenceThicknessMinimum: { value: 100 }, - iridescenceThicknessMaximum: { value: 400 }, - iridescenceThicknessMap: { value: null }, - iridescenceThicknessMapTransform: { value: new Matrix3() }, - sheen: { value: 0 }, - sheenColor: { value: new Color(0) }, - sheenColorMap: { value: null }, - sheenColorMapTransform: { value: new Matrix3() }, - sheenRoughness: { value: 1 }, - sheenRoughnessMap: { value: null }, - sheenRoughnessMapTransform: { value: new Matrix3() }, - transmission: { value: 0 }, - transmissionMap: { value: null }, - transmissionMapTransform: { value: new Matrix3() }, - transmissionSamplerSize: { value: new Vector2() }, - transmissionSamplerMap: { value: null }, - thickness: { value: 0 }, - thicknessMap: { value: null }, - thicknessMapTransform: { value: new Matrix3() }, - attenuationDistance: { value: 0 }, - attenuationColor: { value: new Color(0) }, - specularColor: { value: new Color(1, 1, 1) }, - specularColorMap: { value: null }, - specularColorMapTransform: { value: new Matrix3() }, - specularIntensity: { value: 1 }, - specularIntensityMap: { value: null }, - specularIntensityMapTransform: { value: new Matrix3() }, - anisotropyVector: { value: new Vector2() }, - anisotropyMap: { value: null }, - anisotropyMapTransform: { value: new Matrix3() } - } - ]), - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag -}; -var _rgb = { r: 0, b: 0, g: 0 }; -var _e1$1 = new Euler(); -var _m1$1 = new Matrix4(); -function WebGLBackground(renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha) { - const clearColor = new Color(0); - let clearAlpha = alpha === true ? 0 : 1; - let planeMesh; - let boxMesh; - let currentBackground = null; - let currentBackgroundVersion = 0; - let currentTonemapping = null; - function getBackground(scene) { - let background = scene.isScene === true ? scene.background : null; - if (background && background.isTexture) { - const usePMREM = scene.backgroundBlurriness > 0; - background = (usePMREM ? cubeuvmaps : cubemaps).get(background); - } - return background; - } - function render(scene) { - let forceClear = false; - const background = getBackground(scene); - if (background === null) { - setClear(clearColor, clearAlpha); - } else if (background && background.isColor) { - setClear(background, 1); - forceClear = true; - } - const environmentBlendMode = renderer.xr.getEnvironmentBlendMode(); - if (environmentBlendMode === "additive") { - state.buffers.color.setClear(0, 0, 0, 1, premultipliedAlpha); - } else if (environmentBlendMode === "alpha-blend") { - state.buffers.color.setClear(0, 0, 0, 0, premultipliedAlpha); - } - if (renderer.autoClear || forceClear) { - state.buffers.depth.setTest(true); - state.buffers.depth.setMask(true); - state.buffers.color.setMask(true); - renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); - } - } - function addToRenderList(renderList, scene) { - const background = getBackground(scene); - if (background && (background.isCubeTexture || background.mapping === CubeUVReflectionMapping)) { - if (boxMesh === void 0) { - boxMesh = new Mesh( - new BoxGeometry(1, 1, 1), - new ShaderMaterial({ - name: "BackgroundCubeMaterial", - uniforms: cloneUniforms(ShaderLib.backgroundCube.uniforms), - vertexShader: ShaderLib.backgroundCube.vertexShader, - fragmentShader: ShaderLib.backgroundCube.fragmentShader, - side: BackSide, - depthTest: false, - depthWrite: false, - fog: false - }) - ); - boxMesh.geometry.deleteAttribute("normal"); - boxMesh.geometry.deleteAttribute("uv"); - boxMesh.onBeforeRender = function(renderer2, scene2, camera) { - this.matrixWorld.copyPosition(camera.matrixWorld); - }; - Object.defineProperty(boxMesh.material, "envMap", { - get: function() { - return this.uniforms.envMap.value; - } - }); - objects.update(boxMesh); - } - _e1$1.copy(scene.backgroundRotation); - _e1$1.x *= -1; - _e1$1.y *= -1; - _e1$1.z *= -1; - if (background.isCubeTexture && background.isRenderTargetTexture === false) { - _e1$1.y *= -1; - _e1$1.z *= -1; - } - boxMesh.material.uniforms.envMap.value = background; - boxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture && background.isRenderTargetTexture === false ? -1 : 1; - boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness; - boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; - boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4(_m1$1.makeRotationFromEuler(_e1$1)); - boxMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; - if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { - boxMesh.material.needsUpdate = true; - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - } - boxMesh.layers.enableAll(); - renderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null); - } else if (background && background.isTexture) { - if (planeMesh === void 0) { - planeMesh = new Mesh( - new PlaneGeometry(2, 2), - new ShaderMaterial({ - name: "BackgroundMaterial", - uniforms: cloneUniforms(ShaderLib.background.uniforms), - vertexShader: ShaderLib.background.vertexShader, - fragmentShader: ShaderLib.background.fragmentShader, - side: FrontSide, - depthTest: false, - depthWrite: false, - fog: false - }) - ); - planeMesh.geometry.deleteAttribute("normal"); - Object.defineProperty(planeMesh.material, "map", { - get: function() { - return this.uniforms.t2D.value; - } - }); - objects.update(planeMesh); - } - planeMesh.material.uniforms.t2D.value = background; - planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; - planeMesh.material.toneMapped = ColorManagement.getTransfer(background.colorSpace) !== SRGBTransfer; - if (background.matrixAutoUpdate === true) { - background.updateMatrix(); - } - planeMesh.material.uniforms.uvTransform.value.copy(background.matrix); - if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { - planeMesh.material.needsUpdate = true; - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - } - planeMesh.layers.enableAll(); - renderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null); - } - } - function setClear(color, alpha2) { - color.getRGB(_rgb, getUnlitUniformColorSpace(renderer)); - state.buffers.color.setClear(_rgb.r, _rgb.g, _rgb.b, alpha2, premultipliedAlpha); - } - return { - getClearColor: function() { - return clearColor; - }, - setClearColor: function(color, alpha2 = 1) { - clearColor.set(color); - clearAlpha = alpha2; - setClear(clearColor, clearAlpha); - }, - getClearAlpha: function() { - return clearAlpha; - }, - setClearAlpha: function(alpha2) { - clearAlpha = alpha2; - setClear(clearColor, clearAlpha); - }, - render, - addToRenderList - }; -} -function WebGLBindingStates(gl, attributes) { - const maxVertexAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); - const bindingStates = {}; - const defaultState = createBindingState(null); - let currentState = defaultState; - let forceUpdate = false; - function setup(object, material, program, geometry, index) { - let updateBuffers = false; - const state = getBindingState(geometry, program, material); - if (currentState !== state) { - currentState = state; - bindVertexArrayObject(currentState.object); - } - updateBuffers = needsUpdate(object, geometry, program, index); - if (updateBuffers) saveCache(object, geometry, program, index); - if (index !== null) { - attributes.update(index, gl.ELEMENT_ARRAY_BUFFER); - } - if (updateBuffers || forceUpdate) { - forceUpdate = false; - setupVertexAttributes(object, material, program, geometry); - if (index !== null) { - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, attributes.get(index).buffer); - } - } - } - function createVertexArrayObject() { - return gl.createVertexArray(); - } - function bindVertexArrayObject(vao) { - return gl.bindVertexArray(vao); - } - function deleteVertexArrayObject(vao) { - return gl.deleteVertexArray(vao); - } - function getBindingState(geometry, program, material) { - const wireframe = material.wireframe === true; - let programMap = bindingStates[geometry.id]; - if (programMap === void 0) { - programMap = {}; - bindingStates[geometry.id] = programMap; - } - let stateMap = programMap[program.id]; - if (stateMap === void 0) { - stateMap = {}; - programMap[program.id] = stateMap; - } - let state = stateMap[wireframe]; - if (state === void 0) { - state = createBindingState(createVertexArrayObject()); - stateMap[wireframe] = state; - } - return state; - } - function createBindingState(vao) { - const newAttributes = []; - const enabledAttributes = []; - const attributeDivisors = []; - for (let i = 0; i < maxVertexAttributes; i++) { - newAttributes[i] = 0; - enabledAttributes[i] = 0; - attributeDivisors[i] = 0; - } - return { - // for backward compatibility on non-VAO support browser - geometry: null, - program: null, - wireframe: false, - newAttributes, - enabledAttributes, - attributeDivisors, - object: vao, - attributes: {}, - index: null - }; - } - function needsUpdate(object, geometry, program, index) { - const cachedAttributes = currentState.attributes; - const geometryAttributes = geometry.attributes; - let attributesNum = 0; - const programAttributes = program.getAttributes(); - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - if (programAttribute.location >= 0) { - const cachedAttribute = cachedAttributes[name]; - let geometryAttribute = geometryAttributes[name]; - if (geometryAttribute === void 0) { - if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; - if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; - } - if (cachedAttribute === void 0) return true; - if (cachedAttribute.attribute !== geometryAttribute) return true; - if (geometryAttribute && cachedAttribute.data !== geometryAttribute.data) return true; - attributesNum++; - } - } - if (currentState.attributesNum !== attributesNum) return true; - if (currentState.index !== index) return true; - return false; - } - function saveCache(object, geometry, program, index) { - const cache = {}; - const attributes2 = geometry.attributes; - let attributesNum = 0; - const programAttributes = program.getAttributes(); - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - if (programAttribute.location >= 0) { - let attribute = attributes2[name]; - if (attribute === void 0) { - if (name === "instanceMatrix" && object.instanceMatrix) attribute = object.instanceMatrix; - if (name === "instanceColor" && object.instanceColor) attribute = object.instanceColor; - } - const data = {}; - data.attribute = attribute; - if (attribute && attribute.data) { - data.data = attribute.data; - } - cache[name] = data; - attributesNum++; - } - } - currentState.attributes = cache; - currentState.attributesNum = attributesNum; - currentState.index = index; - } - function initAttributes() { - const newAttributes = currentState.newAttributes; - for (let i = 0, il = newAttributes.length; i < il; i++) { - newAttributes[i] = 0; - } - } - function enableAttribute(attribute) { - enableAttributeAndDivisor(attribute, 0); - } - function enableAttributeAndDivisor(attribute, meshPerAttribute) { - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - const attributeDivisors = currentState.attributeDivisors; - newAttributes[attribute] = 1; - if (enabledAttributes[attribute] === 0) { - gl.enableVertexAttribArray(attribute); - enabledAttributes[attribute] = 1; - } - if (attributeDivisors[attribute] !== meshPerAttribute) { - gl.vertexAttribDivisor(attribute, meshPerAttribute); - attributeDivisors[attribute] = meshPerAttribute; - } - } - function disableUnusedAttributes() { - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - for (let i = 0, il = enabledAttributes.length; i < il; i++) { - if (enabledAttributes[i] !== newAttributes[i]) { - gl.disableVertexAttribArray(i); - enabledAttributes[i] = 0; - } - } - } - function vertexAttribPointer(index, size, type, normalized, stride, offset, integer) { - if (integer === true) { - gl.vertexAttribIPointer(index, size, type, stride, offset); - } else { - gl.vertexAttribPointer(index, size, type, normalized, stride, offset); - } - } - function setupVertexAttributes(object, material, program, geometry) { - initAttributes(); - const geometryAttributes = geometry.attributes; - const programAttributes = program.getAttributes(); - const materialDefaultAttributeValues = material.defaultAttributeValues; - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - if (programAttribute.location >= 0) { - let geometryAttribute = geometryAttributes[name]; - if (geometryAttribute === void 0) { - if (name === "instanceMatrix" && object.instanceMatrix) geometryAttribute = object.instanceMatrix; - if (name === "instanceColor" && object.instanceColor) geometryAttribute = object.instanceColor; - } - if (geometryAttribute !== void 0) { - const normalized = geometryAttribute.normalized; - const size = geometryAttribute.itemSize; - const attribute = attributes.get(geometryAttribute); - if (attribute === void 0) continue; - const buffer = attribute.buffer; - const type = attribute.type; - const bytesPerElement = attribute.bytesPerElement; - const integer = type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType; - if (geometryAttribute.isInterleavedBufferAttribute) { - const data = geometryAttribute.data; - const stride = data.stride; - const offset = geometryAttribute.offset; - if (data.isInstancedInterleavedBuffer) { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttributeAndDivisor(programAttribute.location + i, data.meshPerAttribute); - } - if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { - geometry._maxInstanceCount = data.meshPerAttribute * data.count; - } - } else { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttribute(programAttribute.location + i); - } - } - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - for (let i = 0; i < programAttribute.locationSize; i++) { - vertexAttribPointer( - programAttribute.location + i, - size / programAttribute.locationSize, - type, - normalized, - stride * bytesPerElement, - (offset + size / programAttribute.locationSize * i) * bytesPerElement, - integer - ); - } - } else { - if (geometryAttribute.isInstancedBufferAttribute) { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttributeAndDivisor(programAttribute.location + i, geometryAttribute.meshPerAttribute); - } - if (object.isInstancedMesh !== true && geometry._maxInstanceCount === void 0) { - geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; - } - } else { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttribute(programAttribute.location + i); - } - } - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - for (let i = 0; i < programAttribute.locationSize; i++) { - vertexAttribPointer( - programAttribute.location + i, - size / programAttribute.locationSize, - type, - normalized, - size * bytesPerElement, - size / programAttribute.locationSize * i * bytesPerElement, - integer - ); - } - } - } else if (materialDefaultAttributeValues !== void 0) { - const value = materialDefaultAttributeValues[name]; - if (value !== void 0) { - switch (value.length) { - case 2: - gl.vertexAttrib2fv(programAttribute.location, value); - break; - case 3: - gl.vertexAttrib3fv(programAttribute.location, value); - break; - case 4: - gl.vertexAttrib4fv(programAttribute.location, value); - break; - default: - gl.vertexAttrib1fv(programAttribute.location, value); - } - } - } - } - } - disableUnusedAttributes(); - } - function dispose() { - reset(); - for (const geometryId in bindingStates) { - const programMap = bindingStates[geometryId]; - for (const programId in programMap) { - const stateMap = programMap[programId]; - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - delete programMap[programId]; - } - delete bindingStates[geometryId]; - } - } - function releaseStatesOfGeometry(geometry) { - if (bindingStates[geometry.id] === void 0) return; - const programMap = bindingStates[geometry.id]; - for (const programId in programMap) { - const stateMap = programMap[programId]; - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - delete programMap[programId]; - } - delete bindingStates[geometry.id]; - } - function releaseStatesOfProgram(program) { - for (const geometryId in bindingStates) { - const programMap = bindingStates[geometryId]; - if (programMap[program.id] === void 0) continue; - const stateMap = programMap[program.id]; - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - delete programMap[program.id]; - } - } - function reset() { - resetDefaultState(); - forceUpdate = true; - if (currentState === defaultState) return; - currentState = defaultState; - bindVertexArrayObject(currentState.object); - } - function resetDefaultState() { - defaultState.geometry = null; - defaultState.program = null; - defaultState.wireframe = false; - } - return { - setup, - reset, - resetDefaultState, - dispose, - releaseStatesOfGeometry, - releaseStatesOfProgram, - initAttributes, - enableAttribute, - disableUnusedAttributes - }; -} -function WebGLBufferRenderer(gl, extensions, info) { - let mode; - function setMode(value) { - mode = value; - } - function render(start, count) { - gl.drawArrays(mode, start, count); - info.update(count, mode, 1); - } - function renderInstances(start, count, primcount) { - if (primcount === 0) return; - gl.drawArraysInstanced(mode, start, count, primcount); - info.update(count, mode, primcount); - } - function renderMultiDraw(starts, counts, drawCount) { - if (drawCount === 0) return; - const extension = extensions.get("WEBGL_multi_draw"); - extension.multiDrawArraysWEBGL(mode, starts, 0, counts, 0, drawCount); - let elementCount = 0; - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - info.update(elementCount, mode, 1); - } - function renderMultiDrawInstances(starts, counts, drawCount, primcount) { - if (drawCount === 0) return; - const extension = extensions.get("WEBGL_multi_draw"); - if (extension === null) { - for (let i = 0; i < starts.length; i++) { - renderInstances(starts[i], counts[i], primcount[i]); - } - } else { - extension.multiDrawArraysInstancedWEBGL(mode, starts, 0, counts, 0, primcount, 0, drawCount); - let elementCount = 0; - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - for (let i = 0; i < primcount.length; i++) { - info.update(elementCount, mode, primcount[i]); - } - } - } - this.setMode = setMode; - this.render = render; - this.renderInstances = renderInstances; - this.renderMultiDraw = renderMultiDraw; - this.renderMultiDrawInstances = renderMultiDrawInstances; -} -function WebGLCapabilities(gl, extensions, parameters, utils) { - let maxAnisotropy; - function getMaxAnisotropy() { - if (maxAnisotropy !== void 0) return maxAnisotropy; - if (extensions.has("EXT_texture_filter_anisotropic") === true) { - const extension = extensions.get("EXT_texture_filter_anisotropic"); - maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT); - } else { - maxAnisotropy = 0; - } - return maxAnisotropy; - } - function textureFormatReadable(textureFormat) { - if (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT)) { - return false; - } - return true; - } - function textureTypeReadable(textureType) { - const halfFloatSupportedByExt = textureType === HalfFloatType && (extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float")); - if (textureType !== UnsignedByteType && utils.convert(textureType) !== gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE) && // Edge and Chrome Mac < 52 (#9513) - textureType !== FloatType && !halfFloatSupportedByExt) { - return false; - } - return true; - } - function getMaxPrecision(precision2) { - if (precision2 === "highp") { - if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0) { - return "highp"; - } - precision2 = "mediump"; - } - if (precision2 === "mediump") { - if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0) { - return "mediump"; - } - } - return "lowp"; - } - let precision = parameters.precision !== void 0 ? parameters.precision : "highp"; - const maxPrecision = getMaxPrecision(precision); - if (maxPrecision !== precision) { - console.warn("THREE.WebGLRenderer:", precision, "not supported, using", maxPrecision, "instead."); - precision = maxPrecision; - } - const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; - const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); - const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); - const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); - const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); - const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); - const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS); - const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS); - const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); - const vertexTextures = maxVertexTextures > 0; - const maxSamples = gl.getParameter(gl.MAX_SAMPLES); - return { - isWebGL2: true, - // keeping this for backwards compatibility - getMaxAnisotropy, - getMaxPrecision, - textureFormatReadable, - textureTypeReadable, - precision, - logarithmicDepthBuffer, - maxTextures, - maxVertexTextures, - maxTextureSize, - maxCubemapSize, - maxAttributes, - maxVertexUniforms, - maxVaryings, - maxFragmentUniforms, - vertexTextures, - maxSamples - }; -} -function WebGLClipping(properties) { - const scope = this; - let globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false; - const plane = new Plane(), viewNormalMatrix = new Matrix3(), uniform = { value: null, needsUpdate: false }; - this.uniform = uniform; - this.numPlanes = 0; - this.numIntersection = 0; - this.init = function(planes, enableLocalClipping) { - const enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to - // run another frame in order to reset the state: - numGlobalPlanes !== 0 || localClippingEnabled; - localClippingEnabled = enableLocalClipping; - numGlobalPlanes = planes.length; - return enabled; - }; - this.beginShadows = function() { - renderingShadows = true; - projectPlanes(null); - }; - this.endShadows = function() { - renderingShadows = false; - }; - this.setGlobalState = function(planes, camera) { - globalState = projectPlanes(planes, camera, 0); - }; - this.setState = function(material, camera, useCache) { - const planes = material.clippingPlanes, clipIntersection = material.clipIntersection, clipShadows = material.clipShadows; - const materialProperties = properties.get(material); - if (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) { - if (renderingShadows) { - projectPlanes(null); - } else { - resetGlobalState(); - } - } else { - const nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4; - let dstArray = materialProperties.clippingState || null; - uniform.value = dstArray; - dstArray = projectPlanes(planes, camera, lGlobal, useCache); - for (let i = 0; i !== lGlobal; ++i) { - dstArray[i] = globalState[i]; - } - materialProperties.clippingState = dstArray; - this.numIntersection = clipIntersection ? this.numPlanes : 0; - this.numPlanes += nGlobal; - } - }; - function resetGlobalState() { - if (uniform.value !== globalState) { - uniform.value = globalState; - uniform.needsUpdate = numGlobalPlanes > 0; - } - scope.numPlanes = numGlobalPlanes; - scope.numIntersection = 0; - } - function projectPlanes(planes, camera, dstOffset, skipTransform) { - const nPlanes = planes !== null ? planes.length : 0; - let dstArray = null; - if (nPlanes !== 0) { - dstArray = uniform.value; - if (skipTransform !== true || dstArray === null) { - const flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse; - viewNormalMatrix.getNormalMatrix(viewMatrix); - if (dstArray === null || dstArray.length < flatSize) { - dstArray = new Float32Array(flatSize); - } - for (let i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) { - plane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix); - plane.normal.toArray(dstArray, i4); - dstArray[i4 + 3] = plane.constant; - } - } - uniform.value = dstArray; - uniform.needsUpdate = true; - } - scope.numPlanes = nPlanes; - scope.numIntersection = 0; - return dstArray; - } -} -function WebGLCubeMaps(renderer) { - let cubemaps = /* @__PURE__ */ new WeakMap(); - function mapTextureMapping(texture, mapping) { - if (mapping === EquirectangularReflectionMapping) { - texture.mapping = CubeReflectionMapping; - } else if (mapping === EquirectangularRefractionMapping) { - texture.mapping = CubeRefractionMapping; - } - return texture; - } - function get(texture) { - if (texture && texture.isTexture) { - const mapping = texture.mapping; - if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) { - if (cubemaps.has(texture)) { - const cubemap = cubemaps.get(texture).texture; - return mapTextureMapping(cubemap, texture.mapping); - } else { - const image = texture.image; - if (image && image.height > 0) { - const renderTarget = new WebGLCubeRenderTarget(image.height); - renderTarget.fromEquirectangularTexture(renderer, texture); - cubemaps.set(texture, renderTarget); - texture.addEventListener("dispose", onTextureDispose); - return mapTextureMapping(renderTarget.texture, texture.mapping); - } else { - return null; - } - } - } - } - return texture; - } - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener("dispose", onTextureDispose); - const cubemap = cubemaps.get(texture); - if (cubemap !== void 0) { - cubemaps.delete(texture); - cubemap.dispose(); - } - } - function dispose() { - cubemaps = /* @__PURE__ */ new WeakMap(); - } - return { - get, - dispose - }; -} -var OrthographicCamera = class extends Camera { - constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2e3) { - super(); - this.isOrthographicCamera = true; - this.type = "OrthographicCamera"; - this.zoom = 1; - this.view = null; - this.left = left; - this.right = right; - this.top = top; - this.bottom = bottom; - this.near = near; - this.far = far; - this.updateProjectionMatrix(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.left = source.left; - this.right = source.right; - this.top = source.top; - this.bottom = source.bottom; - this.near = source.near; - this.far = source.far; - this.zoom = source.zoom; - this.view = source.view === null ? null : Object.assign({}, source.view); - return this; - } - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - } - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - this.updateProjectionMatrix(); - } - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - this.updateProjectionMatrix(); - } - updateProjectionMatrix() { - const dx = (this.right - this.left) / (2 * this.zoom); - const dy = (this.top - this.bottom) / (2 * this.zoom); - const cx = (this.right + this.left) / 2; - const cy = (this.top + this.bottom) / 2; - let left = cx - dx; - let right = cx + dx; - let top = cy + dy; - let bottom = cy - dy; - if (this.view !== null && this.view.enabled) { - const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom; - const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - left += scaleW * this.view.offsetX; - right = left + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - } - this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far, this.coordinateSystem); - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - toJSON(meta) { - const data = super.toJSON(meta); - data.object.zoom = this.zoom; - data.object.left = this.left; - data.object.right = this.right; - data.object.top = this.top; - data.object.bottom = this.bottom; - data.object.near = this.near; - data.object.far = this.far; - if (this.view !== null) data.object.view = Object.assign({}, this.view); - return data; - } -}; -var LOD_MIN = 4; -var EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582]; -var MAX_SAMPLES = 20; -var _flatCamera = new OrthographicCamera(); -var _clearColor = new Color(); -var _oldTarget = null; -var _oldActiveCubeFace = 0; -var _oldActiveMipmapLevel = 0; -var _oldXrEnabled = false; -var PHI = (1 + Math.sqrt(5)) / 2; -var INV_PHI = 1 / PHI; -var _axisDirections = [ - new Vector3(-PHI, INV_PHI, 0), - new Vector3(PHI, INV_PHI, 0), - new Vector3(-INV_PHI, 0, PHI), - new Vector3(INV_PHI, 0, PHI), - new Vector3(0, PHI, -INV_PHI), - new Vector3(0, PHI, INV_PHI), - new Vector3(-1, 1, -1), - new Vector3(1, 1, -1), - new Vector3(-1, 1, 1), - new Vector3(1, 1, 1) -]; -var PMREMGenerator = class { - constructor(renderer) { - this._renderer = renderer; - this._pingPongRenderTarget = null; - this._lodMax = 0; - this._cubeSize = 0; - this._lodPlanes = []; - this._sizeLods = []; - this._sigmas = []; - this._blurMaterial = null; - this._cubemapMaterial = null; - this._equirectMaterial = null; - this._compileMaterial(this._blurMaterial); - } - /** - * Generates a PMREM from a supplied Scene, which can be faster than using an - * image if networking bandwidth is low. Optional sigma specifies a blur radius - * in radians to be applied to the scene before PMREM generation. Optional near - * and far planes ensure the scene is rendered in its entirety (the cubeCamera - * is placed at the origin). - */ - fromScene(scene, sigma = 0, near = 0.1, far = 100) { - _oldTarget = this._renderer.getRenderTarget(); - _oldActiveCubeFace = this._renderer.getActiveCubeFace(); - _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); - _oldXrEnabled = this._renderer.xr.enabled; - this._renderer.xr.enabled = false; - this._setSize(256); - const cubeUVRenderTarget = this._allocateTargets(); - cubeUVRenderTarget.depthBuffer = true; - this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget); - if (sigma > 0) { - this._blur(cubeUVRenderTarget, 0, 0, sigma); - } - this._applyPMREM(cubeUVRenderTarget); - this._cleanup(cubeUVRenderTarget); - return cubeUVRenderTarget; - } - /** - * Generates a PMREM from an equirectangular texture, which can be either LDR - * or HDR. The ideal input image size is 1k (1024 x 512), - * as this matches best with the 256 x 256 cubemap output. - * The smallest supported equirectangular image size is 64 x 32. - */ - fromEquirectangular(equirectangular, renderTarget = null) { - return this._fromTexture(equirectangular, renderTarget); - } - /** - * Generates a PMREM from an cubemap texture, which can be either LDR - * or HDR. The ideal input cube size is 256 x 256, - * as this matches best with the 256 x 256 cubemap output. - * The smallest supported cube size is 16 x 16. - */ - fromCubemap(cubemap, renderTarget = null) { - return this._fromTexture(cubemap, renderTarget); - } - /** - * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileCubemapShader() { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(); - this._compileMaterial(this._cubemapMaterial); - } - } - /** - * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileEquirectangularShader() { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(); - this._compileMaterial(this._equirectMaterial); - } - } - /** - * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, - * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on - * one of them will cause any others to also become unusable. - */ - dispose() { - this._dispose(); - if (this._cubemapMaterial !== null) this._cubemapMaterial.dispose(); - if (this._equirectMaterial !== null) this._equirectMaterial.dispose(); - } - // private interface - _setSize(cubeSize) { - this._lodMax = Math.floor(Math.log2(cubeSize)); - this._cubeSize = Math.pow(2, this._lodMax); - } - _dispose() { - if (this._blurMaterial !== null) this._blurMaterial.dispose(); - if (this._pingPongRenderTarget !== null) this._pingPongRenderTarget.dispose(); - for (let i = 0; i < this._lodPlanes.length; i++) { - this._lodPlanes[i].dispose(); - } - } - _cleanup(outputTarget) { - this._renderer.setRenderTarget(_oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel); - this._renderer.xr.enabled = _oldXrEnabled; - outputTarget.scissorTest = false; - _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height); - } - _fromTexture(texture, renderTarget) { - if (texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping) { - this._setSize(texture.image.length === 0 ? 16 : texture.image[0].width || texture.image[0].image.width); - } else { - this._setSize(texture.image.width / 4); - } - _oldTarget = this._renderer.getRenderTarget(); - _oldActiveCubeFace = this._renderer.getActiveCubeFace(); - _oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel(); - _oldXrEnabled = this._renderer.xr.enabled; - this._renderer.xr.enabled = false; - const cubeUVRenderTarget = renderTarget || this._allocateTargets(); - this._textureToCubeUV(texture, cubeUVRenderTarget); - this._applyPMREM(cubeUVRenderTarget); - this._cleanup(cubeUVRenderTarget); - return cubeUVRenderTarget; - } - _allocateTargets() { - const width = 3 * Math.max(this._cubeSize, 16 * 7); - const height = 4 * this._cubeSize; - const params = { - magFilter: LinearFilter, - minFilter: LinearFilter, - generateMipmaps: false, - type: HalfFloatType, - format: RGBAFormat, - colorSpace: LinearSRGBColorSpace, - depthBuffer: false - }; - const cubeUVRenderTarget = _createRenderTarget(width, height, params); - if (this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height) { - if (this._pingPongRenderTarget !== null) { - this._dispose(); - } - this._pingPongRenderTarget = _createRenderTarget(width, height, params); - const { _lodMax } = this; - ({ sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes(_lodMax)); - this._blurMaterial = _getBlurShader(_lodMax, width, height); - } - return cubeUVRenderTarget; - } - _compileMaterial(material) { - const tmpMesh = new Mesh(this._lodPlanes[0], material); - this._renderer.compile(tmpMesh, _flatCamera); - } - _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) { - const fov2 = 90; - const aspect2 = 1; - const cubeCamera = new PerspectiveCamera(fov2, aspect2, near, far); - const upSign = [1, -1, 1, 1, 1, 1]; - const forwardSign = [1, 1, 1, -1, -1, -1]; - const renderer = this._renderer; - const originalAutoClear = renderer.autoClear; - const toneMapping = renderer.toneMapping; - renderer.getClearColor(_clearColor); - renderer.toneMapping = NoToneMapping; - renderer.autoClear = false; - const backgroundMaterial = new MeshBasicMaterial({ - name: "PMREM.Background", - side: BackSide, - depthWrite: false, - depthTest: false - }); - const backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial); - let useSolidColor = false; - const background = scene.background; - if (background) { - if (background.isColor) { - backgroundMaterial.color.copy(background); - scene.background = null; - useSolidColor = true; - } - } else { - backgroundMaterial.color.copy(_clearColor); - useSolidColor = true; - } - for (let i = 0; i < 6; i++) { - const col = i % 3; - if (col === 0) { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(forwardSign[i], 0, 0); - } else if (col === 1) { - cubeCamera.up.set(0, 0, upSign[i]); - cubeCamera.lookAt(0, forwardSign[i], 0); - } else { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(0, 0, forwardSign[i]); - } - const size = this._cubeSize; - _setViewport(cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size); - renderer.setRenderTarget(cubeUVRenderTarget); - if (useSolidColor) { - renderer.render(backgroundBox, cubeCamera); - } - renderer.render(scene, cubeCamera); - } - backgroundBox.geometry.dispose(); - backgroundBox.material.dispose(); - renderer.toneMapping = toneMapping; - renderer.autoClear = originalAutoClear; - scene.background = background; - } - _textureToCubeUV(texture, cubeUVRenderTarget) { - const renderer = this._renderer; - const isCubeTexture = texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping; - if (isCubeTexture) { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(); - } - this._cubemapMaterial.uniforms.flipEnvMap.value = texture.isRenderTargetTexture === false ? -1 : 1; - } else { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(); - } - } - const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; - const mesh = new Mesh(this._lodPlanes[0], material); - const uniforms = material.uniforms; - uniforms["envMap"].value = texture; - const size = this._cubeSize; - _setViewport(cubeUVRenderTarget, 0, 0, 3 * size, 2 * size); - renderer.setRenderTarget(cubeUVRenderTarget); - renderer.render(mesh, _flatCamera); - } - _applyPMREM(cubeUVRenderTarget) { - const renderer = this._renderer; - const autoClear = renderer.autoClear; - renderer.autoClear = false; - const n = this._lodPlanes.length; - for (let i = 1; i < n; i++) { - const sigma = Math.sqrt(this._sigmas[i] * this._sigmas[i] - this._sigmas[i - 1] * this._sigmas[i - 1]); - const poleAxis = _axisDirections[(n - i - 1) % _axisDirections.length]; - this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis); - } - renderer.autoClear = autoClear; - } - /** - * This is a two-pass Gaussian blur for a cubemap. Normally this is done - * vertically and horizontally, but this breaks down on a cube. Here we apply - * the blur latitudinally (around the poles), and then longitudinally (towards - * the poles) to approximate the orthogonally-separable blur. It is least - * accurate at the poles, but still does a decent job. - */ - _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) { - const pingPongRenderTarget = this._pingPongRenderTarget; - this._halfBlur( - cubeUVRenderTarget, - pingPongRenderTarget, - lodIn, - lodOut, - sigma, - "latitudinal", - poleAxis - ); - this._halfBlur( - pingPongRenderTarget, - cubeUVRenderTarget, - lodOut, - lodOut, - sigma, - "longitudinal", - poleAxis - ); - } - _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) { - const renderer = this._renderer; - const blurMaterial = this._blurMaterial; - if (direction !== "latitudinal" && direction !== "longitudinal") { - console.error( - "blur direction must be either latitudinal or longitudinal!" - ); - } - const STANDARD_DEVIATIONS = 3; - const blurMesh = new Mesh(this._lodPlanes[lodOut], blurMaterial); - const blurUniforms = blurMaterial.uniforms; - const pixels = this._sizeLods[lodIn] - 1; - const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1); - const sigmaPixels = sigmaRadians / radiansPerPixel; - const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES; - if (samples > MAX_SAMPLES) { - console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`); - } - const weights = []; - let sum = 0; - for (let i = 0; i < MAX_SAMPLES; ++i) { - const x2 = i / sigmaPixels; - const weight = Math.exp(-x2 * x2 / 2); - weights.push(weight); - if (i === 0) { - sum += weight; - } else if (i < samples) { - sum += 2 * weight; - } - } - for (let i = 0; i < weights.length; i++) { - weights[i] = weights[i] / sum; - } - blurUniforms["envMap"].value = targetIn.texture; - blurUniforms["samples"].value = samples; - blurUniforms["weights"].value = weights; - blurUniforms["latitudinal"].value = direction === "latitudinal"; - if (poleAxis) { - blurUniforms["poleAxis"].value = poleAxis; - } - const { _lodMax } = this; - blurUniforms["dTheta"].value = radiansPerPixel; - blurUniforms["mipInt"].value = _lodMax - lodIn; - const outputSize = this._sizeLods[lodOut]; - const x = 3 * outputSize * (lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0); - const y = 4 * (this._cubeSize - outputSize); - _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize); - renderer.setRenderTarget(targetOut); - renderer.render(blurMesh, _flatCamera); - } -}; -function _createPlanes(lodMax) { - const lodPlanes = []; - const sizeLods = []; - const sigmas = []; - let lod = lodMax; - const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; - for (let i = 0; i < totalLods; i++) { - const sizeLod = Math.pow(2, lod); - sizeLods.push(sizeLod); - let sigma = 1 / sizeLod; - if (i > lodMax - LOD_MIN) { - sigma = EXTRA_LOD_SIGMA[i - lodMax + LOD_MIN - 1]; - } else if (i === 0) { - sigma = 0; - } - sigmas.push(sigma); - const texelSize = 1 / (sizeLod - 2); - const min = -texelSize; - const max = 1 + texelSize; - const uv1 = [min, min, max, min, max, max, min, min, max, max, min, max]; - const cubeFaces = 6; - const vertices = 6; - const positionSize = 3; - const uvSize = 2; - const faceIndexSize = 1; - const position = new Float32Array(positionSize * vertices * cubeFaces); - const uv = new Float32Array(uvSize * vertices * cubeFaces); - const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces); - for (let face = 0; face < cubeFaces; face++) { - const x = face % 3 * 2 / 3 - 1; - const y = face > 2 ? 0 : -1; - const coordinates = [ - x, - y, - 0, - x + 2 / 3, - y, - 0, - x + 2 / 3, - y + 1, - 0, - x, - y, - 0, - x + 2 / 3, - y + 1, - 0, - x, - y + 1, - 0 - ]; - position.set(coordinates, positionSize * vertices * face); - uv.set(uv1, uvSize * vertices * face); - const fill2 = [face, face, face, face, face, face]; - faceIndex.set(fill2, faceIndexSize * vertices * face); - } - const planes = new BufferGeometry(); - planes.setAttribute("position", new BufferAttribute(position, positionSize)); - planes.setAttribute("uv", new BufferAttribute(uv, uvSize)); - planes.setAttribute("faceIndex", new BufferAttribute(faceIndex, faceIndexSize)); - lodPlanes.push(planes); - if (lod > LOD_MIN) { - lod--; - } - } - return { lodPlanes, sizeLods, sigmas }; -} -function _createRenderTarget(width, height, params) { - const cubeUVRenderTarget = new WebGLRenderTarget(width, height, params); - cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; - cubeUVRenderTarget.texture.name = "PMREM.cubeUv"; - cubeUVRenderTarget.scissorTest = true; - return cubeUVRenderTarget; -} -function _setViewport(target, x, y, width, height) { - target.viewport.set(x, y, width, height); - target.scissor.set(x, y, width, height); -} -function _getBlurShader(lodMax, width, height) { - const weights = new Float32Array(MAX_SAMPLES); - const poleAxis = new Vector3(0, 1, 0); - const shaderMaterial = new ShaderMaterial({ - name: "SphericalGaussianBlur", - defines: { - "n": MAX_SAMPLES, - "CUBEUV_TEXEL_WIDTH": 1 / width, - "CUBEUV_TEXEL_HEIGHT": 1 / height, - "CUBEUV_MAX_MIP": `${lodMax}.0` - }, - uniforms: { - "envMap": { value: null }, - "samples": { value: 1 }, - "weights": { value: weights }, - "latitudinal": { value: false }, - "dTheta": { value: 0 }, - "mipInt": { value: 0 }, - "poleAxis": { value: poleAxis } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: ( - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - ` - ), - blending: NoBlending, - depthTest: false, - depthWrite: false - }); - return shaderMaterial; -} -function _getEquirectMaterial() { - return new ShaderMaterial({ - name: "EquirectangularToCubeUV", - uniforms: { - "envMap": { value: null } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: ( - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - ` - ), - blending: NoBlending, - depthTest: false, - depthWrite: false - }); -} -function _getCubemapMaterial() { - return new ShaderMaterial({ - name: "CubemapToCubeUV", - uniforms: { - "envMap": { value: null }, - "flipEnvMap": { value: -1 } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: ( - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - ` - ), - blending: NoBlending, - depthTest: false, - depthWrite: false - }); -} -function _getCommonVertexShader() { - return ( - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - ` - ); -} -function WebGLCubeUVMaps(renderer) { - let cubeUVmaps = /* @__PURE__ */ new WeakMap(); - let pmremGenerator = null; - function get(texture) { - if (texture && texture.isTexture) { - const mapping = texture.mapping; - const isEquirectMap = mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping; - const isCubeMap = mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; - if (isEquirectMap || isCubeMap) { - let renderTarget = cubeUVmaps.get(texture); - const currentPMREMVersion = renderTarget !== void 0 ? renderTarget.texture.pmremVersion : 0; - if (texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion) { - if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); - renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture, renderTarget) : pmremGenerator.fromCubemap(texture, renderTarget); - renderTarget.texture.pmremVersion = texture.pmremVersion; - cubeUVmaps.set(texture, renderTarget); - return renderTarget.texture; - } else { - if (renderTarget !== void 0) { - return renderTarget.texture; - } else { - const image = texture.image; - if (isEquirectMap && image && image.height > 0 || isCubeMap && image && isCubeTextureComplete(image)) { - if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); - renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture) : pmremGenerator.fromCubemap(texture); - renderTarget.texture.pmremVersion = texture.pmremVersion; - cubeUVmaps.set(texture, renderTarget); - texture.addEventListener("dispose", onTextureDispose); - return renderTarget.texture; - } else { - return null; - } - } - } - } - } - return texture; - } - function isCubeTextureComplete(image) { - let count = 0; - const length = 6; - for (let i = 0; i < length; i++) { - if (image[i] !== void 0) count++; - } - return count === length; - } - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener("dispose", onTextureDispose); - const cubemapUV = cubeUVmaps.get(texture); - if (cubemapUV !== void 0) { - cubeUVmaps.delete(texture); - cubemapUV.dispose(); - } - } - function dispose() { - cubeUVmaps = /* @__PURE__ */ new WeakMap(); - if (pmremGenerator !== null) { - pmremGenerator.dispose(); - pmremGenerator = null; - } - } - return { - get, - dispose - }; -} -function WebGLExtensions(gl) { - const extensions = {}; - function getExtension(name) { - if (extensions[name] !== void 0) { - return extensions[name]; - } - let extension; - switch (name) { - case "WEBGL_depth_texture": - extension = gl.getExtension("WEBGL_depth_texture") || gl.getExtension("MOZ_WEBGL_depth_texture") || gl.getExtension("WEBKIT_WEBGL_depth_texture"); - break; - case "EXT_texture_filter_anisotropic": - extension = gl.getExtension("EXT_texture_filter_anisotropic") || gl.getExtension("MOZ_EXT_texture_filter_anisotropic") || gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); - break; - case "WEBGL_compressed_texture_s3tc": - extension = gl.getExtension("WEBGL_compressed_texture_s3tc") || gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); - break; - case "WEBGL_compressed_texture_pvrtc": - extension = gl.getExtension("WEBGL_compressed_texture_pvrtc") || gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); - break; - default: - extension = gl.getExtension(name); - } - extensions[name] = extension; - return extension; - } - return { - has: function(name) { - return getExtension(name) !== null; - }, - init: function() { - getExtension("EXT_color_buffer_float"); - getExtension("WEBGL_clip_cull_distance"); - getExtension("OES_texture_float_linear"); - getExtension("EXT_color_buffer_half_float"); - getExtension("WEBGL_multisampled_render_to_texture"); - getExtension("WEBGL_render_shared_exponent"); - }, - get: function(name) { - const extension = getExtension(name); - if (extension === null) { - warnOnce("THREE.WebGLRenderer: " + name + " extension not supported."); - } - return extension; - } - }; -} -function WebGLGeometries(gl, attributes, info, bindingStates) { - const geometries = {}; - const wireframeAttributes = /* @__PURE__ */ new WeakMap(); - function onGeometryDispose(event) { - const geometry = event.target; - if (geometry.index !== null) { - attributes.remove(geometry.index); - } - for (const name in geometry.attributes) { - attributes.remove(geometry.attributes[name]); - } - for (const name in geometry.morphAttributes) { - const array = geometry.morphAttributes[name]; - for (let i = 0, l = array.length; i < l; i++) { - attributes.remove(array[i]); - } - } - geometry.removeEventListener("dispose", onGeometryDispose); - delete geometries[geometry.id]; - const attribute = wireframeAttributes.get(geometry); - if (attribute) { - attributes.remove(attribute); - wireframeAttributes.delete(geometry); - } - bindingStates.releaseStatesOfGeometry(geometry); - if (geometry.isInstancedBufferGeometry === true) { - delete geometry._maxInstanceCount; - } - info.memory.geometries--; - } - function get(object, geometry) { - if (geometries[geometry.id] === true) return geometry; - geometry.addEventListener("dispose", onGeometryDispose); - geometries[geometry.id] = true; - info.memory.geometries++; - return geometry; - } - function update(geometry) { - const geometryAttributes = geometry.attributes; - for (const name in geometryAttributes) { - attributes.update(geometryAttributes[name], gl.ARRAY_BUFFER); - } - const morphAttributes = geometry.morphAttributes; - for (const name in morphAttributes) { - const array = morphAttributes[name]; - for (let i = 0, l = array.length; i < l; i++) { - attributes.update(array[i], gl.ARRAY_BUFFER); - } - } - } - function updateWireframeAttribute(geometry) { - const indices = []; - const geometryIndex = geometry.index; - const geometryPosition = geometry.attributes.position; - let version = 0; - if (geometryIndex !== null) { - const array = geometryIndex.array; - version = geometryIndex.version; - for (let i = 0, l = array.length; i < l; i += 3) { - const a = array[i + 0]; - const b = array[i + 1]; - const c = array[i + 2]; - indices.push(a, b, b, c, c, a); - } - } else if (geometryPosition !== void 0) { - const array = geometryPosition.array; - version = geometryPosition.version; - for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) { - const a = i + 0; - const b = i + 1; - const c = i + 2; - indices.push(a, b, b, c, c, a); - } - } else { - return; - } - const attribute = new (arrayNeedsUint32(indices) ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1); - attribute.version = version; - const previousAttribute = wireframeAttributes.get(geometry); - if (previousAttribute) attributes.remove(previousAttribute); - wireframeAttributes.set(geometry, attribute); - } - function getWireframeAttribute(geometry) { - const currentAttribute = wireframeAttributes.get(geometry); - if (currentAttribute) { - const geometryIndex = geometry.index; - if (geometryIndex !== null) { - if (currentAttribute.version < geometryIndex.version) { - updateWireframeAttribute(geometry); - } - } - } else { - updateWireframeAttribute(geometry); - } - return wireframeAttributes.get(geometry); - } - return { - get, - update, - getWireframeAttribute - }; -} -function WebGLIndexedBufferRenderer(gl, extensions, info) { - let mode; - function setMode(value) { - mode = value; - } - let type, bytesPerElement; - function setIndex(value) { - type = value.type; - bytesPerElement = value.bytesPerElement; - } - function render(start, count) { - gl.drawElements(mode, count, type, start * bytesPerElement); - info.update(count, mode, 1); - } - function renderInstances(start, count, primcount) { - if (primcount === 0) return; - gl.drawElementsInstanced(mode, count, type, start * bytesPerElement, primcount); - info.update(count, mode, primcount); - } - function renderMultiDraw(starts, counts, drawCount) { - if (drawCount === 0) return; - const extension = extensions.get("WEBGL_multi_draw"); - extension.multiDrawElementsWEBGL(mode, counts, 0, type, starts, 0, drawCount); - let elementCount = 0; - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - info.update(elementCount, mode, 1); - } - function renderMultiDrawInstances(starts, counts, drawCount, primcount) { - if (drawCount === 0) return; - const extension = extensions.get("WEBGL_multi_draw"); - if (extension === null) { - for (let i = 0; i < starts.length; i++) { - renderInstances(starts[i] / bytesPerElement, counts[i], primcount[i]); - } - } else { - extension.multiDrawElementsInstancedWEBGL(mode, counts, 0, type, starts, 0, primcount, 0, drawCount); - let elementCount = 0; - for (let i = 0; i < drawCount; i++) { - elementCount += counts[i]; - } - for (let i = 0; i < primcount.length; i++) { - info.update(elementCount, mode, primcount[i]); - } - } - } - this.setMode = setMode; - this.setIndex = setIndex; - this.render = render; - this.renderInstances = renderInstances; - this.renderMultiDraw = renderMultiDraw; - this.renderMultiDrawInstances = renderMultiDrawInstances; -} -function WebGLInfo(gl) { - const memory = { - geometries: 0, - textures: 0 - }; - const render = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - function update(count, mode, instanceCount) { - render.calls++; - switch (mode) { - case gl.TRIANGLES: - render.triangles += instanceCount * (count / 3); - break; - case gl.LINES: - render.lines += instanceCount * (count / 2); - break; - case gl.LINE_STRIP: - render.lines += instanceCount * (count - 1); - break; - case gl.LINE_LOOP: - render.lines += instanceCount * count; - break; - case gl.POINTS: - render.points += instanceCount * count; - break; - default: - console.error("THREE.WebGLInfo: Unknown draw mode:", mode); - break; - } - } - function reset() { - render.calls = 0; - render.triangles = 0; - render.points = 0; - render.lines = 0; - } - return { - memory, - render, - programs: null, - autoReset: true, - reset, - update - }; -} -function WebGLMorphtargets(gl, capabilities, textures) { - const morphTextures = /* @__PURE__ */ new WeakMap(); - const morph = new Vector4(); - function update(object, geometry, program) { - const objectInfluences = object.morphTargetInfluences; - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; - let entry = morphTextures.get(geometry); - if (entry === void 0 || entry.count !== morphTargetsCount) { - let disposeTexture = function() { - texture.dispose(); - morphTextures.delete(geometry); - geometry.removeEventListener("dispose", disposeTexture); - }; - if (entry !== void 0) entry.texture.dispose(); - const hasMorphPosition = geometry.morphAttributes.position !== void 0; - const hasMorphNormals = geometry.morphAttributes.normal !== void 0; - const hasMorphColors = geometry.morphAttributes.color !== void 0; - const morphTargets = geometry.morphAttributes.position || []; - const morphNormals = geometry.morphAttributes.normal || []; - const morphColors = geometry.morphAttributes.color || []; - let vertexDataCount = 0; - if (hasMorphPosition === true) vertexDataCount = 1; - if (hasMorphNormals === true) vertexDataCount = 2; - if (hasMorphColors === true) vertexDataCount = 3; - let width = geometry.attributes.position.count * vertexDataCount; - let height = 1; - if (width > capabilities.maxTextureSize) { - height = Math.ceil(width / capabilities.maxTextureSize); - width = capabilities.maxTextureSize; - } - const buffer = new Float32Array(width * height * 4 * morphTargetsCount); - const texture = new DataArrayTexture(buffer, width, height, morphTargetsCount); - texture.type = FloatType; - texture.needsUpdate = true; - const vertexDataStride = vertexDataCount * 4; - for (let i = 0; i < morphTargetsCount; i++) { - const morphTarget = morphTargets[i]; - const morphNormal = morphNormals[i]; - const morphColor = morphColors[i]; - const offset = width * height * 4 * i; - for (let j = 0; j < morphTarget.count; j++) { - const stride = j * vertexDataStride; - if (hasMorphPosition === true) { - morph.fromBufferAttribute(morphTarget, j); - buffer[offset + stride + 0] = morph.x; - buffer[offset + stride + 1] = morph.y; - buffer[offset + stride + 2] = morph.z; - buffer[offset + stride + 3] = 0; - } - if (hasMorphNormals === true) { - morph.fromBufferAttribute(morphNormal, j); - buffer[offset + stride + 4] = morph.x; - buffer[offset + stride + 5] = morph.y; - buffer[offset + stride + 6] = morph.z; - buffer[offset + stride + 7] = 0; - } - if (hasMorphColors === true) { - morph.fromBufferAttribute(morphColor, j); - buffer[offset + stride + 8] = morph.x; - buffer[offset + stride + 9] = morph.y; - buffer[offset + stride + 10] = morph.z; - buffer[offset + stride + 11] = morphColor.itemSize === 4 ? morph.w : 1; - } - } - } - entry = { - count: morphTargetsCount, - texture, - size: new Vector2(width, height) - }; - morphTextures.set(geometry, entry); - geometry.addEventListener("dispose", disposeTexture); - } - if (object.isInstancedMesh === true && object.morphTexture !== null) { - program.getUniforms().setValue(gl, "morphTexture", object.morphTexture, textures); - } else { - let morphInfluencesSum = 0; - for (let i = 0; i < objectInfluences.length; i++) { - morphInfluencesSum += objectInfluences[i]; - } - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - program.getUniforms().setValue(gl, "morphTargetBaseInfluence", morphBaseInfluence); - program.getUniforms().setValue(gl, "morphTargetInfluences", objectInfluences); - } - program.getUniforms().setValue(gl, "morphTargetsTexture", entry.texture, textures); - program.getUniforms().setValue(gl, "morphTargetsTextureSize", entry.size); - } - return { - update - }; -} -function WebGLObjects(gl, geometries, attributes, info) { - let updateMap = /* @__PURE__ */ new WeakMap(); - function update(object) { - const frame = info.render.frame; - const geometry = object.geometry; - const buffergeometry = geometries.get(object, geometry); - if (updateMap.get(buffergeometry) !== frame) { - geometries.update(buffergeometry); - updateMap.set(buffergeometry, frame); - } - if (object.isInstancedMesh) { - if (object.hasEventListener("dispose", onInstancedMeshDispose) === false) { - object.addEventListener("dispose", onInstancedMeshDispose); - } - if (updateMap.get(object) !== frame) { - attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER); - if (object.instanceColor !== null) { - attributes.update(object.instanceColor, gl.ARRAY_BUFFER); - } - updateMap.set(object, frame); - } - } - if (object.isSkinnedMesh) { - const skeleton = object.skeleton; - if (updateMap.get(skeleton) !== frame) { - skeleton.update(); - updateMap.set(skeleton, frame); - } - } - return buffergeometry; - } - function dispose() { - updateMap = /* @__PURE__ */ new WeakMap(); - } - function onInstancedMeshDispose(event) { - const instancedMesh = event.target; - instancedMesh.removeEventListener("dispose", onInstancedMeshDispose); - attributes.remove(instancedMesh.instanceMatrix); - if (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor); - } - return { - update, - dispose - }; -} -var DepthTexture = class extends Texture { - constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat) { - if (format !== DepthFormat && format !== DepthStencilFormat) { - throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); - } - if (type === void 0 && format === DepthFormat) type = UnsignedIntType; - if (type === void 0 && format === DepthStencilFormat) type = UnsignedInt248Type; - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.isDepthTexture = true; - this.image = { width, height }; - this.magFilter = magFilter !== void 0 ? magFilter : NearestFilter; - this.minFilter = minFilter !== void 0 ? minFilter : NearestFilter; - this.flipY = false; - this.generateMipmaps = false; - this.compareFunction = null; - } - copy(source) { - super.copy(source); - this.compareFunction = source.compareFunction; - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - if (this.compareFunction !== null) data.compareFunction = this.compareFunction; - return data; - } -}; -var emptyTexture = new Texture(); -var emptyShadowTexture = new DepthTexture(1, 1); -var emptyArrayTexture = new DataArrayTexture(); -var empty3dTexture = new Data3DTexture(); -var emptyCubeTexture = new CubeTexture(); -var arrayCacheF32 = []; -var arrayCacheI32 = []; -var mat4array = new Float32Array(16); -var mat3array = new Float32Array(9); -var mat2array = new Float32Array(4); -function flatten(array, nBlocks, blockSize) { - const firstElem = array[0]; - if (firstElem <= 0 || firstElem > 0) return array; - const n = nBlocks * blockSize; - let r = arrayCacheF32[n]; - if (r === void 0) { - r = new Float32Array(n); - arrayCacheF32[n] = r; - } - if (nBlocks !== 0) { - firstElem.toArray(r, 0); - for (let i = 1, offset = 0; i !== nBlocks; ++i) { - offset += blockSize; - array[i].toArray(r, offset); - } - } - return r; -} -function arraysEqual(a, b) { - if (a.length !== b.length) return false; - for (let i = 0, l = a.length; i < l; i++) { - if (a[i] !== b[i]) return false; - } - return true; -} -function copyArray(a, b) { - for (let i = 0, l = b.length; i < l; i++) { - a[i] = b[i]; - } -} -function allocTexUnits(textures, n) { - let r = arrayCacheI32[n]; - if (r === void 0) { - r = new Int32Array(n); - arrayCacheI32[n] = r; - } - for (let i = 0; i !== n; ++i) { - r[i] = textures.allocateTextureUnit(); - } - return r; -} -function setValueV1f(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1f(this.addr, v); - cache[0] = v; -} -function setValueV2f(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y) { - gl.uniform2f(this.addr, v.x, v.y); - cache[0] = v.x; - cache[1] = v.y; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform2fv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV3f(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { - gl.uniform3f(this.addr, v.x, v.y, v.z); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - } - } else if (v.r !== void 0) { - if (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) { - gl.uniform3f(this.addr, v.r, v.g, v.b); - cache[0] = v.r; - cache[1] = v.g; - cache[2] = v.b; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform3fv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV4f(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { - gl.uniform4f(this.addr, v.x, v.y, v.z, v.w); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - cache[3] = v.w; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform4fv(this.addr, v); - copyArray(cache, v); - } -} -function setValueM2(gl, v) { - const cache = this.cache; - const elements = v.elements; - if (elements === void 0) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix2fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat2array.set(elements); - gl.uniformMatrix2fv(this.addr, false, mat2array); - copyArray(cache, elements); - } -} -function setValueM3(gl, v) { - const cache = this.cache; - const elements = v.elements; - if (elements === void 0) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix3fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat3array.set(elements); - gl.uniformMatrix3fv(this.addr, false, mat3array); - copyArray(cache, elements); - } -} -function setValueM4(gl, v) { - const cache = this.cache; - const elements = v.elements; - if (elements === void 0) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix4fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat4array.set(elements); - gl.uniformMatrix4fv(this.addr, false, mat4array); - copyArray(cache, elements); - } -} -function setValueV1i(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1i(this.addr, v); - cache[0] = v; -} -function setValueV2i(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y) { - gl.uniform2i(this.addr, v.x, v.y); - cache[0] = v.x; - cache[1] = v.y; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform2iv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV3i(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { - gl.uniform3i(this.addr, v.x, v.y, v.z); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform3iv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV4i(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { - gl.uniform4i(this.addr, v.x, v.y, v.z, v.w); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - cache[3] = v.w; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform4iv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV1ui(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1ui(this.addr, v); - cache[0] = v; -} -function setValueV2ui(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y) { - gl.uniform2ui(this.addr, v.x, v.y); - cache[0] = v.x; - cache[1] = v.y; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform2uiv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV3ui(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { - gl.uniform3ui(this.addr, v.x, v.y, v.z); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform3uiv(this.addr, v); - copyArray(cache, v); - } -} -function setValueV4ui(gl, v) { - const cache = this.cache; - if (v.x !== void 0) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { - gl.uniform4ui(this.addr, v.x, v.y, v.z, v.w); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - cache[3] = v.w; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform4uiv(this.addr, v); - copyArray(cache, v); - } -} -function setValueT1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - let emptyTexture2D; - if (this.type === gl.SAMPLER_2D_SHADOW) { - emptyShadowTexture.compareFunction = LessEqualCompare; - emptyTexture2D = emptyShadowTexture; - } else { - emptyTexture2D = emptyTexture; - } - textures.setTexture2D(v || emptyTexture2D, unit); -} -function setValueT3D1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - textures.setTexture3D(v || empty3dTexture, unit); -} -function setValueT6(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - textures.setTextureCube(v || emptyCubeTexture, unit); -} -function setValueT2DArray1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - textures.setTexture2DArray(v || emptyArrayTexture, unit); -} -function getSingularSetter(type) { - switch (type) { - case 5126: - return setValueV1f; - case 35664: - return setValueV2f; - case 35665: - return setValueV3f; - case 35666: - return setValueV4f; - case 35674: - return setValueM2; - case 35675: - return setValueM3; - case 35676: - return setValueM4; - case 5124: - case 35670: - return setValueV1i; - case 35667: - case 35671: - return setValueV2i; - case 35668: - case 35672: - return setValueV3i; - case 35669: - case 35673: - return setValueV4i; - case 5125: - return setValueV1ui; - case 36294: - return setValueV2ui; - case 36295: - return setValueV3ui; - case 36296: - return setValueV4ui; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return setValueT1; - case 35679: - case 36299: - case 36307: - return setValueT3D1; - case 35680: - case 36300: - case 36308: - case 36293: - return setValueT6; - case 36289: - case 36303: - case 36311: - case 36292: - return setValueT2DArray1; - } -} -function setValueV1fArray(gl, v) { - gl.uniform1fv(this.addr, v); -} -function setValueV2fArray(gl, v) { - const data = flatten(v, this.size, 2); - gl.uniform2fv(this.addr, data); -} -function setValueV3fArray(gl, v) { - const data = flatten(v, this.size, 3); - gl.uniform3fv(this.addr, data); -} -function setValueV4fArray(gl, v) { - const data = flatten(v, this.size, 4); - gl.uniform4fv(this.addr, data); -} -function setValueM2Array(gl, v) { - const data = flatten(v, this.size, 4); - gl.uniformMatrix2fv(this.addr, false, data); -} -function setValueM3Array(gl, v) { - const data = flatten(v, this.size, 9); - gl.uniformMatrix3fv(this.addr, false, data); -} -function setValueM4Array(gl, v) { - const data = flatten(v, this.size, 16); - gl.uniformMatrix4fv(this.addr, false, data); -} -function setValueV1iArray(gl, v) { - gl.uniform1iv(this.addr, v); -} -function setValueV2iArray(gl, v) { - gl.uniform2iv(this.addr, v); -} -function setValueV3iArray(gl, v) { - gl.uniform3iv(this.addr, v); -} -function setValueV4iArray(gl, v) { - gl.uniform4iv(this.addr, v); -} -function setValueV1uiArray(gl, v) { - gl.uniform1uiv(this.addr, v); -} -function setValueV2uiArray(gl, v) { - gl.uniform2uiv(this.addr, v); -} -function setValueV3uiArray(gl, v) { - gl.uniform3uiv(this.addr, v); -} -function setValueV4uiArray(gl, v) { - gl.uniform4uiv(this.addr, v); -} -function setValueT1Array(gl, v, textures) { - const cache = this.cache; - const n = v.length; - const units = allocTexUnits(textures, n); - if (!arraysEqual(cache, units)) { - gl.uniform1iv(this.addr, units); - copyArray(cache, units); - } - for (let i = 0; i !== n; ++i) { - textures.setTexture2D(v[i] || emptyTexture, units[i]); - } -} -function setValueT3DArray(gl, v, textures) { - const cache = this.cache; - const n = v.length; - const units = allocTexUnits(textures, n); - if (!arraysEqual(cache, units)) { - gl.uniform1iv(this.addr, units); - copyArray(cache, units); - } - for (let i = 0; i !== n; ++i) { - textures.setTexture3D(v[i] || empty3dTexture, units[i]); - } -} -function setValueT6Array(gl, v, textures) { - const cache = this.cache; - const n = v.length; - const units = allocTexUnits(textures, n); - if (!arraysEqual(cache, units)) { - gl.uniform1iv(this.addr, units); - copyArray(cache, units); - } - for (let i = 0; i !== n; ++i) { - textures.setTextureCube(v[i] || emptyCubeTexture, units[i]); - } -} -function setValueT2DArrayArray(gl, v, textures) { - const cache = this.cache; - const n = v.length; - const units = allocTexUnits(textures, n); - if (!arraysEqual(cache, units)) { - gl.uniform1iv(this.addr, units); - copyArray(cache, units); - } - for (let i = 0; i !== n; ++i) { - textures.setTexture2DArray(v[i] || emptyArrayTexture, units[i]); - } -} -function getPureArraySetter(type) { - switch (type) { - case 5126: - return setValueV1fArray; - case 35664: - return setValueV2fArray; - case 35665: - return setValueV3fArray; - case 35666: - return setValueV4fArray; - case 35674: - return setValueM2Array; - case 35675: - return setValueM3Array; - case 35676: - return setValueM4Array; - case 5124: - case 35670: - return setValueV1iArray; - case 35667: - case 35671: - return setValueV2iArray; - case 35668: - case 35672: - return setValueV3iArray; - case 35669: - case 35673: - return setValueV4iArray; - case 5125: - return setValueV1uiArray; - case 36294: - return setValueV2uiArray; - case 36295: - return setValueV3uiArray; - case 36296: - return setValueV4uiArray; - case 35678: - case 36198: - case 36298: - case 36306: - case 35682: - return setValueT1Array; - case 35679: - case 36299: - case 36307: - return setValueT3DArray; - case 35680: - case 36300: - case 36308: - case 36293: - return setValueT6Array; - case 36289: - case 36303: - case 36311: - case 36292: - return setValueT2DArrayArray; - } -} -var SingleUniform = class { - constructor(id, activeInfo, addr) { - this.id = id; - this.addr = addr; - this.cache = []; - this.type = activeInfo.type; - this.setValue = getSingularSetter(activeInfo.type); - } -}; -var PureArrayUniform = class { - constructor(id, activeInfo, addr) { - this.id = id; - this.addr = addr; - this.cache = []; - this.type = activeInfo.type; - this.size = activeInfo.size; - this.setValue = getPureArraySetter(activeInfo.type); - } -}; -var StructuredUniform = class { - constructor(id) { - this.id = id; - this.seq = []; - this.map = {}; - } - setValue(gl, value, textures) { - const seq = this.seq; - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i]; - u.setValue(gl, value[u.id], textures); - } - } -}; -var RePathPart = /(\w+)(\])?(\[|\.)?/g; -function addUniform(container, uniformObject) { - container.seq.push(uniformObject); - container.map[uniformObject.id] = uniformObject; -} -function parseUniform(activeInfo, addr, container) { - const path = activeInfo.name, pathLength = path.length; - RePathPart.lastIndex = 0; - while (true) { - const match = RePathPart.exec(path), matchEnd = RePathPart.lastIndex; - let id = match[1]; - const idIsIndex = match[2] === "]", subscript = match[3]; - if (idIsIndex) id = id | 0; - if (subscript === void 0 || subscript === "[" && matchEnd + 2 === pathLength) { - addUniform(container, subscript === void 0 ? new SingleUniform(id, activeInfo, addr) : new PureArrayUniform(id, activeInfo, addr)); - break; - } else { - const map = container.map; - let next = map[id]; - if (next === void 0) { - next = new StructuredUniform(id); - addUniform(container, next); - } - container = next; - } - } -} -var WebGLUniforms = class { - constructor(gl, program) { - this.seq = []; - this.map = {}; - const n = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); - for (let i = 0; i < n; ++i) { - const info = gl.getActiveUniform(program, i), addr = gl.getUniformLocation(program, info.name); - parseUniform(info, addr, this); - } - } - setValue(gl, name, value, textures) { - const u = this.map[name]; - if (u !== void 0) u.setValue(gl, value, textures); - } - setOptional(gl, object, name) { - const v = object[name]; - if (v !== void 0) this.setValue(gl, name, v); - } - static upload(gl, seq, values, textures) { - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i], v = values[u.id]; - if (v.needsUpdate !== false) { - u.setValue(gl, v.value, textures); - } - } - } - static seqWithValue(seq, values) { - const r = []; - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i]; - if (u.id in values) r.push(u); - } - return r; - } -}; -function WebGLShader(gl, type, string) { - const shader = gl.createShader(type); - gl.shaderSource(shader, string); - gl.compileShader(shader); - return shader; -} -var COMPLETION_STATUS_KHR = 37297; -var programIdCount = 0; -function handleSource(string, errorLine) { - const lines = string.split("\n"); - const lines2 = []; - const from = Math.max(errorLine - 6, 0); - const to = Math.min(errorLine + 6, lines.length); - for (let i = from; i < to; i++) { - const line = i + 1; - lines2.push(`${line === errorLine ? ">" : " "} ${line}: ${lines[i]}`); - } - return lines2.join("\n"); -} -function getEncodingComponents(colorSpace) { - const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); - const encodingPrimaries = ColorManagement.getPrimaries(colorSpace); - let gamutMapping; - if (workingPrimaries === encodingPrimaries) { - gamutMapping = ""; - } else if (workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries) { - gamutMapping = "LinearDisplayP3ToLinearSRGB"; - } else if (workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries) { - gamutMapping = "LinearSRGBToLinearDisplayP3"; - } - switch (colorSpace) { - case LinearSRGBColorSpace: - case LinearDisplayP3ColorSpace: - return [gamutMapping, "LinearTransferOETF"]; - case SRGBColorSpace: - case DisplayP3ColorSpace: - return [gamutMapping, "sRGBTransferOETF"]; - default: - console.warn("THREE.WebGLProgram: Unsupported color space:", colorSpace); - return [gamutMapping, "LinearTransferOETF"]; - } -} -function getShaderErrors(gl, shader, type) { - const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - const errors = gl.getShaderInfoLog(shader).trim(); - if (status && errors === "") return ""; - const errorMatches = /ERROR: 0:(\d+)/.exec(errors); - if (errorMatches) { - const errorLine = parseInt(errorMatches[1]); - return type.toUpperCase() + "\n\n" + errors + "\n\n" + handleSource(gl.getShaderSource(shader), errorLine); - } else { - return errors; - } -} -function getTexelEncodingFunction(functionName, colorSpace) { - const components = getEncodingComponents(colorSpace); - return `vec4 ${functionName}( vec4 value ) { return ${components[0]}( ${components[1]}( value ) ); }`; -} -function getToneMappingFunction(functionName, toneMapping) { - let toneMappingName; - switch (toneMapping) { - case LinearToneMapping: - toneMappingName = "Linear"; - break; - case ReinhardToneMapping: - toneMappingName = "Reinhard"; - break; - case CineonToneMapping: - toneMappingName = "OptimizedCineon"; - break; - case ACESFilmicToneMapping: - toneMappingName = "ACESFilmic"; - break; - case AgXToneMapping: - toneMappingName = "AgX"; - break; - case NeutralToneMapping: - toneMappingName = "Neutral"; - break; - case CustomToneMapping: - toneMappingName = "Custom"; - break; - default: - console.warn("THREE.WebGLProgram: Unsupported toneMapping:", toneMapping); - toneMappingName = "Linear"; - } - return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; -} -var _v0$1 = new Vector3(); -function getLuminanceFunction() { - ColorManagement.getLuminanceCoefficients(_v0$1); - const r = _v0$1.x.toFixed(4); - const g = _v0$1.y.toFixed(4); - const b = _v0$1.z.toFixed(4); - return [ - "float luminance( const in vec3 rgb ) {", - ` const vec3 weights = vec3( ${r}, ${g}, ${b} );`, - " return dot( weights, rgb );", - "}" - ].join("\n"); -} -function generateVertexExtensions(parameters) { - const chunks = [ - parameters.extensionClipCullDistance ? "#extension GL_ANGLE_clip_cull_distance : require" : "", - parameters.extensionMultiDraw ? "#extension GL_ANGLE_multi_draw : require" : "" - ]; - return chunks.filter(filterEmptyLine).join("\n"); -} -function generateDefines(defines) { - const chunks = []; - for (const name in defines) { - const value = defines[name]; - if (value === false) continue; - chunks.push("#define " + name + " " + value); - } - return chunks.join("\n"); -} -function fetchAttributeLocations(gl, program) { - const attributes = {}; - const n = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); - for (let i = 0; i < n; i++) { - const info = gl.getActiveAttrib(program, i); - const name = info.name; - let locationSize = 1; - if (info.type === gl.FLOAT_MAT2) locationSize = 2; - if (info.type === gl.FLOAT_MAT3) locationSize = 3; - if (info.type === gl.FLOAT_MAT4) locationSize = 4; - attributes[name] = { - type: info.type, - location: gl.getAttribLocation(program, name), - locationSize - }; - } - return attributes; -} -function filterEmptyLine(string) { - return string !== ""; -} -function replaceLightNums(string, parameters) { - const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps; - return string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows); -} -function replaceClippingPlaneNums(string, parameters) { - return string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection); -} -var includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; -function resolveIncludes(string) { - return string.replace(includePattern, includeReplacer); -} -var shaderChunkMap = /* @__PURE__ */ new Map(); -function includeReplacer(match, include) { - let string = ShaderChunk[include]; - if (string === void 0) { - const newInclude = shaderChunkMap.get(include); - if (newInclude !== void 0) { - string = ShaderChunk[newInclude]; - console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude); - } else { - throw new Error("Can not resolve #include <" + include + ">"); - } - } - return resolveIncludes(string); -} -var unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; -function unrollLoops(string) { - return string.replace(unrollLoopPattern, loopReplacer); -} -function loopReplacer(match, start, end, snippet) { - let string = ""; - for (let i = parseInt(start); i < parseInt(end); i++) { - string += snippet.replace(/\[\s*i\s*\]/g, "[ " + i + " ]").replace(/UNROLLED_LOOP_INDEX/g, i); - } - return string; -} -function generatePrecision(parameters) { - let precisionstring = `precision ${parameters.precision} float; - precision ${parameters.precision} int; - precision ${parameters.precision} sampler2D; - precision ${parameters.precision} samplerCube; - precision ${parameters.precision} sampler3D; - precision ${parameters.precision} sampler2DArray; - precision ${parameters.precision} sampler2DShadow; - precision ${parameters.precision} samplerCubeShadow; - precision ${parameters.precision} sampler2DArrayShadow; - precision ${parameters.precision} isampler2D; - precision ${parameters.precision} isampler3D; - precision ${parameters.precision} isamplerCube; - precision ${parameters.precision} isampler2DArray; - precision ${parameters.precision} usampler2D; - precision ${parameters.precision} usampler3D; - precision ${parameters.precision} usamplerCube; - precision ${parameters.precision} usampler2DArray; - `; - if (parameters.precision === "highp") { - precisionstring += "\n#define HIGH_PRECISION"; - } else if (parameters.precision === "mediump") { - precisionstring += "\n#define MEDIUM_PRECISION"; - } else if (parameters.precision === "lowp") { - precisionstring += "\n#define LOW_PRECISION"; - } - return precisionstring; -} -function generateShadowMapTypeDefine(parameters) { - let shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC"; - if (parameters.shadowMapType === PCFShadowMap) { - shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF"; - } else if (parameters.shadowMapType === PCFSoftShadowMap) { - shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT"; - } else if (parameters.shadowMapType === VSMShadowMap) { - shadowMapTypeDefine = "SHADOWMAP_TYPE_VSM"; - } - return shadowMapTypeDefine; -} -function generateEnvMapTypeDefine(parameters) { - let envMapTypeDefine = "ENVMAP_TYPE_CUBE"; - if (parameters.envMap) { - switch (parameters.envMapMode) { - case CubeReflectionMapping: - case CubeRefractionMapping: - envMapTypeDefine = "ENVMAP_TYPE_CUBE"; - break; - case CubeUVReflectionMapping: - envMapTypeDefine = "ENVMAP_TYPE_CUBE_UV"; - break; - } - } - return envMapTypeDefine; -} -function generateEnvMapModeDefine(parameters) { - let envMapModeDefine = "ENVMAP_MODE_REFLECTION"; - if (parameters.envMap) { - switch (parameters.envMapMode) { - case CubeRefractionMapping: - envMapModeDefine = "ENVMAP_MODE_REFRACTION"; - break; - } - } - return envMapModeDefine; -} -function generateEnvMapBlendingDefine(parameters) { - let envMapBlendingDefine = "ENVMAP_BLENDING_NONE"; - if (parameters.envMap) { - switch (parameters.combine) { - case MultiplyOperation: - envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY"; - break; - case MixOperation: - envMapBlendingDefine = "ENVMAP_BLENDING_MIX"; - break; - case AddOperation: - envMapBlendingDefine = "ENVMAP_BLENDING_ADD"; - break; - } - } - return envMapBlendingDefine; -} -function generateCubeUVSize(parameters) { - const imageHeight = parameters.envMapCubeUVHeight; - if (imageHeight === null) return null; - const maxMip = Math.log2(imageHeight) - 2; - const texelHeight = 1 / imageHeight; - const texelWidth = 1 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16)); - return { texelWidth, texelHeight, maxMip }; -} -function WebGLProgram(renderer, cacheKey, parameters, bindingStates) { - const gl = renderer.getContext(); - const defines = parameters.defines; - let vertexShader = parameters.vertexShader; - let fragmentShader = parameters.fragmentShader; - const shadowMapTypeDefine = generateShadowMapTypeDefine(parameters); - const envMapTypeDefine = generateEnvMapTypeDefine(parameters); - const envMapModeDefine = generateEnvMapModeDefine(parameters); - const envMapBlendingDefine = generateEnvMapBlendingDefine(parameters); - const envMapCubeUVSize = generateCubeUVSize(parameters); - const customVertexExtensions = generateVertexExtensions(parameters); - const customDefines = generateDefines(defines); - const program = gl.createProgram(); - let prefixVertex, prefixFragment; - let versionString = parameters.glslVersion ? "#version " + parameters.glslVersion + "\n" : ""; - if (parameters.isRawShaderMaterial) { - prefixVertex = [ - "#define SHADER_TYPE " + parameters.shaderType, - "#define SHADER_NAME " + parameters.shaderName, - customDefines - ].filter(filterEmptyLine).join("\n"); - if (prefixVertex.length > 0) { - prefixVertex += "\n"; - } - prefixFragment = [ - "#define SHADER_TYPE " + parameters.shaderType, - "#define SHADER_NAME " + parameters.shaderName, - customDefines - ].filter(filterEmptyLine).join("\n"); - if (prefixFragment.length > 0) { - prefixFragment += "\n"; - } - } else { - prefixVertex = [ - generatePrecision(parameters), - "#define SHADER_TYPE " + parameters.shaderType, - "#define SHADER_NAME " + parameters.shaderName, - customDefines, - parameters.extensionClipCullDistance ? "#define USE_CLIP_DISTANCE" : "", - parameters.batching ? "#define USE_BATCHING" : "", - parameters.batchingColor ? "#define USE_BATCHING_COLOR" : "", - parameters.instancing ? "#define USE_INSTANCING" : "", - parameters.instancingColor ? "#define USE_INSTANCING_COLOR" : "", - parameters.instancingMorph ? "#define USE_INSTANCING_MORPH" : "", - parameters.useFog && parameters.fog ? "#define USE_FOG" : "", - parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", - parameters.map ? "#define USE_MAP" : "", - parameters.envMap ? "#define USE_ENVMAP" : "", - parameters.envMap ? "#define " + envMapModeDefine : "", - parameters.lightMap ? "#define USE_LIGHTMAP" : "", - parameters.aoMap ? "#define USE_AOMAP" : "", - parameters.bumpMap ? "#define USE_BUMPMAP" : "", - parameters.normalMap ? "#define USE_NORMALMAP" : "", - parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", - parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", - parameters.displacementMap ? "#define USE_DISPLACEMENTMAP" : "", - parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", - parameters.anisotropy ? "#define USE_ANISOTROPY" : "", - parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", - parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", - parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", - parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", - parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", - parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", - parameters.specularMap ? "#define USE_SPECULARMAP" : "", - parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", - parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", - parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", - parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", - parameters.alphaMap ? "#define USE_ALPHAMAP" : "", - parameters.alphaHash ? "#define USE_ALPHAHASH" : "", - parameters.transmission ? "#define USE_TRANSMISSION" : "", - parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", - parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", - parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", - parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", - // - parameters.mapUv ? "#define MAP_UV " + parameters.mapUv : "", - parameters.alphaMapUv ? "#define ALPHAMAP_UV " + parameters.alphaMapUv : "", - parameters.lightMapUv ? "#define LIGHTMAP_UV " + parameters.lightMapUv : "", - parameters.aoMapUv ? "#define AOMAP_UV " + parameters.aoMapUv : "", - parameters.emissiveMapUv ? "#define EMISSIVEMAP_UV " + parameters.emissiveMapUv : "", - parameters.bumpMapUv ? "#define BUMPMAP_UV " + parameters.bumpMapUv : "", - parameters.normalMapUv ? "#define NORMALMAP_UV " + parameters.normalMapUv : "", - parameters.displacementMapUv ? "#define DISPLACEMENTMAP_UV " + parameters.displacementMapUv : "", - parameters.metalnessMapUv ? "#define METALNESSMAP_UV " + parameters.metalnessMapUv : "", - parameters.roughnessMapUv ? "#define ROUGHNESSMAP_UV " + parameters.roughnessMapUv : "", - parameters.anisotropyMapUv ? "#define ANISOTROPYMAP_UV " + parameters.anisotropyMapUv : "", - parameters.clearcoatMapUv ? "#define CLEARCOATMAP_UV " + parameters.clearcoatMapUv : "", - parameters.clearcoatNormalMapUv ? "#define CLEARCOAT_NORMALMAP_UV " + parameters.clearcoatNormalMapUv : "", - parameters.clearcoatRoughnessMapUv ? "#define CLEARCOAT_ROUGHNESSMAP_UV " + parameters.clearcoatRoughnessMapUv : "", - parameters.iridescenceMapUv ? "#define IRIDESCENCEMAP_UV " + parameters.iridescenceMapUv : "", - parameters.iridescenceThicknessMapUv ? "#define IRIDESCENCE_THICKNESSMAP_UV " + parameters.iridescenceThicknessMapUv : "", - parameters.sheenColorMapUv ? "#define SHEEN_COLORMAP_UV " + parameters.sheenColorMapUv : "", - parameters.sheenRoughnessMapUv ? "#define SHEEN_ROUGHNESSMAP_UV " + parameters.sheenRoughnessMapUv : "", - parameters.specularMapUv ? "#define SPECULARMAP_UV " + parameters.specularMapUv : "", - parameters.specularColorMapUv ? "#define SPECULAR_COLORMAP_UV " + parameters.specularColorMapUv : "", - parameters.specularIntensityMapUv ? "#define SPECULAR_INTENSITYMAP_UV " + parameters.specularIntensityMapUv : "", - parameters.transmissionMapUv ? "#define TRANSMISSIONMAP_UV " + parameters.transmissionMapUv : "", - parameters.thicknessMapUv ? "#define THICKNESSMAP_UV " + parameters.thicknessMapUv : "", - // - parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", - parameters.vertexColors ? "#define USE_COLOR" : "", - parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", - parameters.vertexUv1s ? "#define USE_UV1" : "", - parameters.vertexUv2s ? "#define USE_UV2" : "", - parameters.vertexUv3s ? "#define USE_UV3" : "", - parameters.pointsUvs ? "#define USE_POINTS_UV" : "", - parameters.flatShading ? "#define FLAT_SHADED" : "", - parameters.skinning ? "#define USE_SKINNING" : "", - parameters.morphTargets ? "#define USE_MORPHTARGETS" : "", - parameters.morphNormals && parameters.flatShading === false ? "#define USE_MORPHNORMALS" : "", - parameters.morphColors ? "#define USE_MORPHCOLORS" : "", - parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_TEXTURE_STRIDE " + parameters.morphTextureStride : "", - parameters.morphTargetsCount > 0 ? "#define MORPHTARGETS_COUNT " + parameters.morphTargetsCount : "", - parameters.doubleSided ? "#define DOUBLE_SIDED" : "", - parameters.flipSided ? "#define FLIP_SIDED" : "", - parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", - parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", - parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", - parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", - parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", - "uniform mat4 modelMatrix;", - "uniform mat4 modelViewMatrix;", - "uniform mat4 projectionMatrix;", - "uniform mat4 viewMatrix;", - "uniform mat3 normalMatrix;", - "uniform vec3 cameraPosition;", - "uniform bool isOrthographic;", - "#ifdef USE_INSTANCING", - " attribute mat4 instanceMatrix;", - "#endif", - "#ifdef USE_INSTANCING_COLOR", - " attribute vec3 instanceColor;", - "#endif", - "#ifdef USE_INSTANCING_MORPH", - " uniform sampler2D morphTexture;", - "#endif", - "attribute vec3 position;", - "attribute vec3 normal;", - "attribute vec2 uv;", - "#ifdef USE_UV1", - " attribute vec2 uv1;", - "#endif", - "#ifdef USE_UV2", - " attribute vec2 uv2;", - "#endif", - "#ifdef USE_UV3", - " attribute vec2 uv3;", - "#endif", - "#ifdef USE_TANGENT", - " attribute vec4 tangent;", - "#endif", - "#if defined( USE_COLOR_ALPHA )", - " attribute vec4 color;", - "#elif defined( USE_COLOR )", - " attribute vec3 color;", - "#endif", - "#ifdef USE_SKINNING", - " attribute vec4 skinIndex;", - " attribute vec4 skinWeight;", - "#endif", - "\n" - ].filter(filterEmptyLine).join("\n"); - prefixFragment = [ - generatePrecision(parameters), - "#define SHADER_TYPE " + parameters.shaderType, - "#define SHADER_NAME " + parameters.shaderName, - customDefines, - parameters.useFog && parameters.fog ? "#define USE_FOG" : "", - parameters.useFog && parameters.fogExp2 ? "#define FOG_EXP2" : "", - parameters.alphaToCoverage ? "#define ALPHA_TO_COVERAGE" : "", - parameters.map ? "#define USE_MAP" : "", - parameters.matcap ? "#define USE_MATCAP" : "", - parameters.envMap ? "#define USE_ENVMAP" : "", - parameters.envMap ? "#define " + envMapTypeDefine : "", - parameters.envMap ? "#define " + envMapModeDefine : "", - parameters.envMap ? "#define " + envMapBlendingDefine : "", - envMapCubeUVSize ? "#define CUBEUV_TEXEL_WIDTH " + envMapCubeUVSize.texelWidth : "", - envMapCubeUVSize ? "#define CUBEUV_TEXEL_HEIGHT " + envMapCubeUVSize.texelHeight : "", - envMapCubeUVSize ? "#define CUBEUV_MAX_MIP " + envMapCubeUVSize.maxMip + ".0" : "", - parameters.lightMap ? "#define USE_LIGHTMAP" : "", - parameters.aoMap ? "#define USE_AOMAP" : "", - parameters.bumpMap ? "#define USE_BUMPMAP" : "", - parameters.normalMap ? "#define USE_NORMALMAP" : "", - parameters.normalMapObjectSpace ? "#define USE_NORMALMAP_OBJECTSPACE" : "", - parameters.normalMapTangentSpace ? "#define USE_NORMALMAP_TANGENTSPACE" : "", - parameters.emissiveMap ? "#define USE_EMISSIVEMAP" : "", - parameters.anisotropy ? "#define USE_ANISOTROPY" : "", - parameters.anisotropyMap ? "#define USE_ANISOTROPYMAP" : "", - parameters.clearcoat ? "#define USE_CLEARCOAT" : "", - parameters.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", - parameters.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", - parameters.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", - parameters.dispersion ? "#define USE_DISPERSION" : "", - parameters.iridescence ? "#define USE_IRIDESCENCE" : "", - parameters.iridescenceMap ? "#define USE_IRIDESCENCEMAP" : "", - parameters.iridescenceThicknessMap ? "#define USE_IRIDESCENCE_THICKNESSMAP" : "", - parameters.specularMap ? "#define USE_SPECULARMAP" : "", - parameters.specularColorMap ? "#define USE_SPECULAR_COLORMAP" : "", - parameters.specularIntensityMap ? "#define USE_SPECULAR_INTENSITYMAP" : "", - parameters.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", - parameters.metalnessMap ? "#define USE_METALNESSMAP" : "", - parameters.alphaMap ? "#define USE_ALPHAMAP" : "", - parameters.alphaTest ? "#define USE_ALPHATEST" : "", - parameters.alphaHash ? "#define USE_ALPHAHASH" : "", - parameters.sheen ? "#define USE_SHEEN" : "", - parameters.sheenColorMap ? "#define USE_SHEEN_COLORMAP" : "", - parameters.sheenRoughnessMap ? "#define USE_SHEEN_ROUGHNESSMAP" : "", - parameters.transmission ? "#define USE_TRANSMISSION" : "", - parameters.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", - parameters.thicknessMap ? "#define USE_THICKNESSMAP" : "", - parameters.vertexTangents && parameters.flatShading === false ? "#define USE_TANGENT" : "", - parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? "#define USE_COLOR" : "", - parameters.vertexAlphas ? "#define USE_COLOR_ALPHA" : "", - parameters.vertexUv1s ? "#define USE_UV1" : "", - parameters.vertexUv2s ? "#define USE_UV2" : "", - parameters.vertexUv3s ? "#define USE_UV3" : "", - parameters.pointsUvs ? "#define USE_POINTS_UV" : "", - parameters.gradientMap ? "#define USE_GRADIENTMAP" : "", - parameters.flatShading ? "#define FLAT_SHADED" : "", - parameters.doubleSided ? "#define DOUBLE_SIDED" : "", - parameters.flipSided ? "#define FLIP_SIDED" : "", - parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", - parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "", - parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", - parameters.numLightProbes > 0 ? "#define USE_LIGHT_PROBES" : "", - parameters.decodeVideoTexture ? "#define DECODE_VIDEO_TEXTURE" : "", - parameters.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", - "uniform mat4 viewMatrix;", - "uniform vec3 cameraPosition;", - "uniform bool isOrthographic;", - parameters.toneMapping !== NoToneMapping ? "#define TONE_MAPPING" : "", - parameters.toneMapping !== NoToneMapping ? ShaderChunk["tonemapping_pars_fragment"] : "", - // this code is required here because it is used by the toneMapping() function defined below - parameters.toneMapping !== NoToneMapping ? getToneMappingFunction("toneMapping", parameters.toneMapping) : "", - parameters.dithering ? "#define DITHERING" : "", - parameters.opaque ? "#define OPAQUE" : "", - ShaderChunk["colorspace_pars_fragment"], - // this code is required here because it is used by the various encoding/decoding function defined below - getTexelEncodingFunction("linearToOutputTexel", parameters.outputColorSpace), - getLuminanceFunction(), - parameters.useDepthPacking ? "#define DEPTH_PACKING " + parameters.depthPacking : "", - "\n" - ].filter(filterEmptyLine).join("\n"); - } - vertexShader = resolveIncludes(vertexShader); - vertexShader = replaceLightNums(vertexShader, parameters); - vertexShader = replaceClippingPlaneNums(vertexShader, parameters); - fragmentShader = resolveIncludes(fragmentShader); - fragmentShader = replaceLightNums(fragmentShader, parameters); - fragmentShader = replaceClippingPlaneNums(fragmentShader, parameters); - vertexShader = unrollLoops(vertexShader); - fragmentShader = unrollLoops(fragmentShader); - if (parameters.isRawShaderMaterial !== true) { - versionString = "#version 300 es\n"; - prefixVertex = [ - customVertexExtensions, - "#define attribute in", - "#define varying out", - "#define texture2D texture" - ].join("\n") + "\n" + prefixVertex; - prefixFragment = [ - "#define varying in", - parameters.glslVersion === GLSL3 ? "" : "layout(location = 0) out highp vec4 pc_fragColor;", - parameters.glslVersion === GLSL3 ? "" : "#define gl_FragColor pc_fragColor", - "#define gl_FragDepthEXT gl_FragDepth", - "#define texture2D texture", - "#define textureCube texture", - "#define texture2DProj textureProj", - "#define texture2DLodEXT textureLod", - "#define texture2DProjLodEXT textureProjLod", - "#define textureCubeLodEXT textureLod", - "#define texture2DGradEXT textureGrad", - "#define texture2DProjGradEXT textureProjGrad", - "#define textureCubeGradEXT textureGrad" - ].join("\n") + "\n" + prefixFragment; - } - const vertexGlsl = versionString + prefixVertex + vertexShader; - const fragmentGlsl = versionString + prefixFragment + fragmentShader; - const glVertexShader = WebGLShader(gl, gl.VERTEX_SHADER, vertexGlsl); - const glFragmentShader = WebGLShader(gl, gl.FRAGMENT_SHADER, fragmentGlsl); - gl.attachShader(program, glVertexShader); - gl.attachShader(program, glFragmentShader); - if (parameters.index0AttributeName !== void 0) { - gl.bindAttribLocation(program, 0, parameters.index0AttributeName); - } else if (parameters.morphTargets === true) { - gl.bindAttribLocation(program, 0, "position"); - } - gl.linkProgram(program); - function onFirstUse(self2) { - if (renderer.debug.checkShaderErrors) { - const programLog = gl.getProgramInfoLog(program).trim(); - const vertexLog = gl.getShaderInfoLog(glVertexShader).trim(); - const fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim(); - let runnable = true; - let haveDiagnostics = true; - if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { - runnable = false; - if (typeof renderer.debug.onShaderError === "function") { - renderer.debug.onShaderError(gl, program, glVertexShader, glFragmentShader); - } else { - const vertexErrors = getShaderErrors(gl, glVertexShader, "vertex"); - const fragmentErrors = getShaderErrors(gl, glFragmentShader, "fragment"); - console.error( - "THREE.WebGLProgram: Shader Error " + gl.getError() + " - VALIDATE_STATUS " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n\nMaterial Name: " + self2.name + "\nMaterial Type: " + self2.type + "\n\nProgram Info Log: " + programLog + "\n" + vertexErrors + "\n" + fragmentErrors - ); - } - } else if (programLog !== "") { - console.warn("THREE.WebGLProgram: Program Info Log:", programLog); - } else if (vertexLog === "" || fragmentLog === "") { - haveDiagnostics = false; - } - if (haveDiagnostics) { - self2.diagnostics = { - runnable, - programLog, - vertexShader: { - log: vertexLog, - prefix: prefixVertex - }, - fragmentShader: { - log: fragmentLog, - prefix: prefixFragment - } - }; - } - } - gl.deleteShader(glVertexShader); - gl.deleteShader(glFragmentShader); - cachedUniforms = new WebGLUniforms(gl, program); - cachedAttributes = fetchAttributeLocations(gl, program); - } - let cachedUniforms; - this.getUniforms = function() { - if (cachedUniforms === void 0) { - onFirstUse(this); - } - return cachedUniforms; - }; - let cachedAttributes; - this.getAttributes = function() { - if (cachedAttributes === void 0) { - onFirstUse(this); - } - return cachedAttributes; - }; - let programReady = parameters.rendererExtensionParallelShaderCompile === false; - this.isReady = function() { - if (programReady === false) { - programReady = gl.getProgramParameter(program, COMPLETION_STATUS_KHR); - } - return programReady; - }; - this.destroy = function() { - bindingStates.releaseStatesOfProgram(this); - gl.deleteProgram(program); - this.program = void 0; - }; - this.type = parameters.shaderType; - this.name = parameters.shaderName; - this.id = programIdCount++; - this.cacheKey = cacheKey; - this.usedTimes = 1; - this.program = program; - this.vertexShader = glVertexShader; - this.fragmentShader = glFragmentShader; - return this; -} -var _id$1 = 0; -var WebGLShaderCache = class { - constructor() { - this.shaderCache = /* @__PURE__ */ new Map(); - this.materialCache = /* @__PURE__ */ new Map(); - } - update(material) { - const vertexShader = material.vertexShader; - const fragmentShader = material.fragmentShader; - const vertexShaderStage = this._getShaderStage(vertexShader); - const fragmentShaderStage = this._getShaderStage(fragmentShader); - const materialShaders = this._getShaderCacheForMaterial(material); - if (materialShaders.has(vertexShaderStage) === false) { - materialShaders.add(vertexShaderStage); - vertexShaderStage.usedTimes++; - } - if (materialShaders.has(fragmentShaderStage) === false) { - materialShaders.add(fragmentShaderStage); - fragmentShaderStage.usedTimes++; - } - return this; - } - remove(material) { - const materialShaders = this.materialCache.get(material); - for (const shaderStage of materialShaders) { - shaderStage.usedTimes--; - if (shaderStage.usedTimes === 0) this.shaderCache.delete(shaderStage.code); - } - this.materialCache.delete(material); - return this; - } - getVertexShaderID(material) { - return this._getShaderStage(material.vertexShader).id; - } - getFragmentShaderID(material) { - return this._getShaderStage(material.fragmentShader).id; - } - dispose() { - this.shaderCache.clear(); - this.materialCache.clear(); - } - _getShaderCacheForMaterial(material) { - const cache = this.materialCache; - let set = cache.get(material); - if (set === void 0) { - set = /* @__PURE__ */ new Set(); - cache.set(material, set); - } - return set; - } - _getShaderStage(code) { - const cache = this.shaderCache; - let stage = cache.get(code); - if (stage === void 0) { - stage = new WebGLShaderStage(code); - cache.set(code, stage); - } - return stage; - } -}; -var WebGLShaderStage = class { - constructor(code) { - this.id = _id$1++; - this.code = code; - this.usedTimes = 0; - } -}; -function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping) { - const _programLayers = new Layers(); - const _customShaders = new WebGLShaderCache(); - const _activeChannels = /* @__PURE__ */ new Set(); - const programs = []; - const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; - const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures; - let precision = capabilities.precision; - const shaderIDs = { - MeshDepthMaterial: "depth", - MeshDistanceMaterial: "distanceRGBA", - MeshNormalMaterial: "normal", - MeshBasicMaterial: "basic", - MeshLambertMaterial: "lambert", - MeshPhongMaterial: "phong", - MeshToonMaterial: "toon", - MeshStandardMaterial: "physical", - MeshPhysicalMaterial: "physical", - MeshMatcapMaterial: "matcap", - LineBasicMaterial: "basic", - LineDashedMaterial: "dashed", - PointsMaterial: "points", - ShadowMaterial: "shadow", - SpriteMaterial: "sprite" - }; - function getChannel(value) { - _activeChannels.add(value); - if (value === 0) return "uv"; - return `uv${value}`; - } - function getParameters(material, lights, shadows, scene, object) { - const fog = scene.fog; - const geometry = object.geometry; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); - const envMapCubeUVHeight = !!envMap && envMap.mapping === CubeUVReflectionMapping ? envMap.image.height : null; - const shaderID = shaderIDs[material.type]; - if (material.precision !== null) { - precision = capabilities.getMaxPrecision(material.precision); - if (precision !== material.precision) { - console.warn("THREE.WebGLProgram.getParameters:", material.precision, "not supported, using", precision, "instead."); - } - } - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; - let morphTextureStride = 0; - if (geometry.morphAttributes.position !== void 0) morphTextureStride = 1; - if (geometry.morphAttributes.normal !== void 0) morphTextureStride = 2; - if (geometry.morphAttributes.color !== void 0) morphTextureStride = 3; - let vertexShader, fragmentShader; - let customVertexShaderID, customFragmentShaderID; - if (shaderID) { - const shader = ShaderLib[shaderID]; - vertexShader = shader.vertexShader; - fragmentShader = shader.fragmentShader; - } else { - vertexShader = material.vertexShader; - fragmentShader = material.fragmentShader; - _customShaders.update(material); - customVertexShaderID = _customShaders.getVertexShaderID(material); - customFragmentShaderID = _customShaders.getFragmentShaderID(material); - } - const currentRenderTarget = renderer.getRenderTarget(); - const IS_INSTANCEDMESH = object.isInstancedMesh === true; - const IS_BATCHEDMESH = object.isBatchedMesh === true; - const HAS_MAP = !!material.map; - const HAS_MATCAP = !!material.matcap; - const HAS_ENVMAP = !!envMap; - const HAS_AOMAP = !!material.aoMap; - const HAS_LIGHTMAP = !!material.lightMap; - const HAS_BUMPMAP = !!material.bumpMap; - const HAS_NORMALMAP = !!material.normalMap; - const HAS_DISPLACEMENTMAP = !!material.displacementMap; - const HAS_EMISSIVEMAP = !!material.emissiveMap; - const HAS_METALNESSMAP = !!material.metalnessMap; - const HAS_ROUGHNESSMAP = !!material.roughnessMap; - const HAS_ANISOTROPY = material.anisotropy > 0; - const HAS_CLEARCOAT = material.clearcoat > 0; - const HAS_DISPERSION = material.dispersion > 0; - const HAS_IRIDESCENCE = material.iridescence > 0; - const HAS_SHEEN = material.sheen > 0; - const HAS_TRANSMISSION = material.transmission > 0; - const HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !!material.anisotropyMap; - const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !!material.clearcoatMap; - const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !!material.clearcoatNormalMap; - const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !!material.clearcoatRoughnessMap; - const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !!material.iridescenceMap; - const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !!material.iridescenceThicknessMap; - const HAS_SHEEN_COLORMAP = HAS_SHEEN && !!material.sheenColorMap; - const HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !!material.sheenRoughnessMap; - const HAS_SPECULARMAP = !!material.specularMap; - const HAS_SPECULAR_COLORMAP = !!material.specularColorMap; - const HAS_SPECULAR_INTENSITYMAP = !!material.specularIntensityMap; - const HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !!material.transmissionMap; - const HAS_THICKNESSMAP = HAS_TRANSMISSION && !!material.thicknessMap; - const HAS_GRADIENTMAP = !!material.gradientMap; - const HAS_ALPHAMAP = !!material.alphaMap; - const HAS_ALPHATEST = material.alphaTest > 0; - const HAS_ALPHAHASH = !!material.alphaHash; - const HAS_EXTENSIONS = !!material.extensions; - let toneMapping = NoToneMapping; - if (material.toneMapped) { - if (currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true) { - toneMapping = renderer.toneMapping; - } - } - const parameters = { - shaderID, - shaderType: material.type, - shaderName: material.name, - vertexShader, - fragmentShader, - defines: material.defines, - customVertexShaderID, - customFragmentShaderID, - isRawShaderMaterial: material.isRawShaderMaterial === true, - glslVersion: material.glslVersion, - precision, - batching: IS_BATCHEDMESH, - batchingColor: IS_BATCHEDMESH && object._colorsTexture !== null, - instancing: IS_INSTANCEDMESH, - instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null, - instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null, - supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES, - outputColorSpace: currentRenderTarget === null ? renderer.outputColorSpace : currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace, - alphaToCoverage: !!material.alphaToCoverage, - map: HAS_MAP, - matcap: HAS_MATCAP, - envMap: HAS_ENVMAP, - envMapMode: HAS_ENVMAP && envMap.mapping, - envMapCubeUVHeight, - aoMap: HAS_AOMAP, - lightMap: HAS_LIGHTMAP, - bumpMap: HAS_BUMPMAP, - normalMap: HAS_NORMALMAP, - displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP, - emissiveMap: HAS_EMISSIVEMAP, - normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, - normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, - metalnessMap: HAS_METALNESSMAP, - roughnessMap: HAS_ROUGHNESSMAP, - anisotropy: HAS_ANISOTROPY, - anisotropyMap: HAS_ANISOTROPYMAP, - clearcoat: HAS_CLEARCOAT, - clearcoatMap: HAS_CLEARCOATMAP, - clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP, - clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP, - dispersion: HAS_DISPERSION, - iridescence: HAS_IRIDESCENCE, - iridescenceMap: HAS_IRIDESCENCEMAP, - iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP, - sheen: HAS_SHEEN, - sheenColorMap: HAS_SHEEN_COLORMAP, - sheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP, - specularMap: HAS_SPECULARMAP, - specularColorMap: HAS_SPECULAR_COLORMAP, - specularIntensityMap: HAS_SPECULAR_INTENSITYMAP, - transmission: HAS_TRANSMISSION, - transmissionMap: HAS_TRANSMISSIONMAP, - thicknessMap: HAS_THICKNESSMAP, - gradientMap: HAS_GRADIENTMAP, - opaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false, - alphaMap: HAS_ALPHAMAP, - alphaTest: HAS_ALPHATEST, - alphaHash: HAS_ALPHAHASH, - combine: material.combine, - // - mapUv: HAS_MAP && getChannel(material.map.channel), - aoMapUv: HAS_AOMAP && getChannel(material.aoMap.channel), - lightMapUv: HAS_LIGHTMAP && getChannel(material.lightMap.channel), - bumpMapUv: HAS_BUMPMAP && getChannel(material.bumpMap.channel), - normalMapUv: HAS_NORMALMAP && getChannel(material.normalMap.channel), - displacementMapUv: HAS_DISPLACEMENTMAP && getChannel(material.displacementMap.channel), - emissiveMapUv: HAS_EMISSIVEMAP && getChannel(material.emissiveMap.channel), - metalnessMapUv: HAS_METALNESSMAP && getChannel(material.metalnessMap.channel), - roughnessMapUv: HAS_ROUGHNESSMAP && getChannel(material.roughnessMap.channel), - anisotropyMapUv: HAS_ANISOTROPYMAP && getChannel(material.anisotropyMap.channel), - clearcoatMapUv: HAS_CLEARCOATMAP && getChannel(material.clearcoatMap.channel), - clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel(material.clearcoatNormalMap.channel), - clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel(material.clearcoatRoughnessMap.channel), - iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel(material.iridescenceMap.channel), - iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel(material.iridescenceThicknessMap.channel), - sheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel(material.sheenColorMap.channel), - sheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel(material.sheenRoughnessMap.channel), - specularMapUv: HAS_SPECULARMAP && getChannel(material.specularMap.channel), - specularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel(material.specularColorMap.channel), - specularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel(material.specularIntensityMap.channel), - transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel(material.transmissionMap.channel), - thicknessMapUv: HAS_THICKNESSMAP && getChannel(material.thicknessMap.channel), - alphaMapUv: HAS_ALPHAMAP && getChannel(material.alphaMap.channel), - // - vertexTangents: !!geometry.attributes.tangent && (HAS_NORMALMAP || HAS_ANISOTROPY), - vertexColors: material.vertexColors, - vertexAlphas: material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4, - pointsUvs: object.isPoints === true && !!geometry.attributes.uv && (HAS_MAP || HAS_ALPHAMAP), - fog: !!fog, - useFog: material.fog === true, - fogExp2: !!fog && fog.isFogExp2, - flatShading: material.flatShading === true, - sizeAttenuation: material.sizeAttenuation === true, - logarithmicDepthBuffer, - skinning: object.isSkinnedMesh === true, - morphTargets: geometry.morphAttributes.position !== void 0, - morphNormals: geometry.morphAttributes.normal !== void 0, - morphColors: geometry.morphAttributes.color !== void 0, - morphTargetsCount, - morphTextureStride, - numDirLights: lights.directional.length, - numPointLights: lights.point.length, - numSpotLights: lights.spot.length, - numSpotLightMaps: lights.spotLightMap.length, - numRectAreaLights: lights.rectArea.length, - numHemiLights: lights.hemi.length, - numDirLightShadows: lights.directionalShadowMap.length, - numPointLightShadows: lights.pointShadowMap.length, - numSpotLightShadows: lights.spotShadowMap.length, - numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps, - numLightProbes: lights.numLightProbes, - numClippingPlanes: clipping.numPlanes, - numClipIntersection: clipping.numIntersection, - dithering: material.dithering, - shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, - shadowMapType: renderer.shadowMap.type, - toneMapping, - decodeVideoTexture: HAS_MAP && material.map.isVideoTexture === true && ColorManagement.getTransfer(material.map.colorSpace) === SRGBTransfer, - premultipliedAlpha: material.premultipliedAlpha, - doubleSided: material.side === DoubleSide, - flipSided: material.side === BackSide, - useDepthPacking: material.depthPacking >= 0, - depthPacking: material.depthPacking || 0, - index0AttributeName: material.index0AttributeName, - extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has("WEBGL_clip_cull_distance"), - extensionMultiDraw: (HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH) && extensions.has("WEBGL_multi_draw"), - rendererExtensionParallelShaderCompile: extensions.has("KHR_parallel_shader_compile"), - customProgramCacheKey: material.customProgramCacheKey() - }; - parameters.vertexUv1s = _activeChannels.has(1); - parameters.vertexUv2s = _activeChannels.has(2); - parameters.vertexUv3s = _activeChannels.has(3); - _activeChannels.clear(); - return parameters; - } - function getProgramCacheKey(parameters) { - const array = []; - if (parameters.shaderID) { - array.push(parameters.shaderID); - } else { - array.push(parameters.customVertexShaderID); - array.push(parameters.customFragmentShaderID); - } - if (parameters.defines !== void 0) { - for (const name in parameters.defines) { - array.push(name); - array.push(parameters.defines[name]); - } - } - if (parameters.isRawShaderMaterial === false) { - getProgramCacheKeyParameters(array, parameters); - getProgramCacheKeyBooleans(array, parameters); - array.push(renderer.outputColorSpace); - } - array.push(parameters.customProgramCacheKey); - return array.join(); - } - function getProgramCacheKeyParameters(array, parameters) { - array.push(parameters.precision); - array.push(parameters.outputColorSpace); - array.push(parameters.envMapMode); - array.push(parameters.envMapCubeUVHeight); - array.push(parameters.mapUv); - array.push(parameters.alphaMapUv); - array.push(parameters.lightMapUv); - array.push(parameters.aoMapUv); - array.push(parameters.bumpMapUv); - array.push(parameters.normalMapUv); - array.push(parameters.displacementMapUv); - array.push(parameters.emissiveMapUv); - array.push(parameters.metalnessMapUv); - array.push(parameters.roughnessMapUv); - array.push(parameters.anisotropyMapUv); - array.push(parameters.clearcoatMapUv); - array.push(parameters.clearcoatNormalMapUv); - array.push(parameters.clearcoatRoughnessMapUv); - array.push(parameters.iridescenceMapUv); - array.push(parameters.iridescenceThicknessMapUv); - array.push(parameters.sheenColorMapUv); - array.push(parameters.sheenRoughnessMapUv); - array.push(parameters.specularMapUv); - array.push(parameters.specularColorMapUv); - array.push(parameters.specularIntensityMapUv); - array.push(parameters.transmissionMapUv); - array.push(parameters.thicknessMapUv); - array.push(parameters.combine); - array.push(parameters.fogExp2); - array.push(parameters.sizeAttenuation); - array.push(parameters.morphTargetsCount); - array.push(parameters.morphAttributeCount); - array.push(parameters.numDirLights); - array.push(parameters.numPointLights); - array.push(parameters.numSpotLights); - array.push(parameters.numSpotLightMaps); - array.push(parameters.numHemiLights); - array.push(parameters.numRectAreaLights); - array.push(parameters.numDirLightShadows); - array.push(parameters.numPointLightShadows); - array.push(parameters.numSpotLightShadows); - array.push(parameters.numSpotLightShadowsWithMaps); - array.push(parameters.numLightProbes); - array.push(parameters.shadowMapType); - array.push(parameters.toneMapping); - array.push(parameters.numClippingPlanes); - array.push(parameters.numClipIntersection); - array.push(parameters.depthPacking); - } - function getProgramCacheKeyBooleans(array, parameters) { - _programLayers.disableAll(); - if (parameters.supportsVertexTextures) - _programLayers.enable(0); - if (parameters.instancing) - _programLayers.enable(1); - if (parameters.instancingColor) - _programLayers.enable(2); - if (parameters.instancingMorph) - _programLayers.enable(3); - if (parameters.matcap) - _programLayers.enable(4); - if (parameters.envMap) - _programLayers.enable(5); - if (parameters.normalMapObjectSpace) - _programLayers.enable(6); - if (parameters.normalMapTangentSpace) - _programLayers.enable(7); - if (parameters.clearcoat) - _programLayers.enable(8); - if (parameters.iridescence) - _programLayers.enable(9); - if (parameters.alphaTest) - _programLayers.enable(10); - if (parameters.vertexColors) - _programLayers.enable(11); - if (parameters.vertexAlphas) - _programLayers.enable(12); - if (parameters.vertexUv1s) - _programLayers.enable(13); - if (parameters.vertexUv2s) - _programLayers.enable(14); - if (parameters.vertexUv3s) - _programLayers.enable(15); - if (parameters.vertexTangents) - _programLayers.enable(16); - if (parameters.anisotropy) - _programLayers.enable(17); - if (parameters.alphaHash) - _programLayers.enable(18); - if (parameters.batching) - _programLayers.enable(19); - if (parameters.dispersion) - _programLayers.enable(20); - if (parameters.batchingColor) - _programLayers.enable(21); - array.push(_programLayers.mask); - _programLayers.disableAll(); - if (parameters.fog) - _programLayers.enable(0); - if (parameters.useFog) - _programLayers.enable(1); - if (parameters.flatShading) - _programLayers.enable(2); - if (parameters.logarithmicDepthBuffer) - _programLayers.enable(3); - if (parameters.skinning) - _programLayers.enable(4); - if (parameters.morphTargets) - _programLayers.enable(5); - if (parameters.morphNormals) - _programLayers.enable(6); - if (parameters.morphColors) - _programLayers.enable(7); - if (parameters.premultipliedAlpha) - _programLayers.enable(8); - if (parameters.shadowMapEnabled) - _programLayers.enable(9); - if (parameters.doubleSided) - _programLayers.enable(10); - if (parameters.flipSided) - _programLayers.enable(11); - if (parameters.useDepthPacking) - _programLayers.enable(12); - if (parameters.dithering) - _programLayers.enable(13); - if (parameters.transmission) - _programLayers.enable(14); - if (parameters.sheen) - _programLayers.enable(15); - if (parameters.opaque) - _programLayers.enable(16); - if (parameters.pointsUvs) - _programLayers.enable(17); - if (parameters.decodeVideoTexture) - _programLayers.enable(18); - if (parameters.alphaToCoverage) - _programLayers.enable(19); - array.push(_programLayers.mask); - } - function getUniforms(material) { - const shaderID = shaderIDs[material.type]; - let uniforms; - if (shaderID) { - const shader = ShaderLib[shaderID]; - uniforms = UniformsUtils.clone(shader.uniforms); - } else { - uniforms = material.uniforms; - } - return uniforms; - } - function acquireProgram(parameters, cacheKey) { - let program; - for (let p = 0, pl = programs.length; p < pl; p++) { - const preexistingProgram = programs[p]; - if (preexistingProgram.cacheKey === cacheKey) { - program = preexistingProgram; - ++program.usedTimes; - break; - } - } - if (program === void 0) { - program = new WebGLProgram(renderer, cacheKey, parameters, bindingStates); - programs.push(program); - } - return program; - } - function releaseProgram(program) { - if (--program.usedTimes === 0) { - const i = programs.indexOf(program); - programs[i] = programs[programs.length - 1]; - programs.pop(); - program.destroy(); - } - } - function releaseShaderCache(material) { - _customShaders.remove(material); - } - function dispose() { - _customShaders.dispose(); - } - return { - getParameters, - getProgramCacheKey, - getUniforms, - acquireProgram, - releaseProgram, - releaseShaderCache, - // Exposed for resource monitoring & error feedback via renderer.info: - programs, - dispose - }; -} -function WebGLProperties() { - let properties = /* @__PURE__ */ new WeakMap(); - function get(object) { - let map = properties.get(object); - if (map === void 0) { - map = {}; - properties.set(object, map); - } - return map; - } - function remove(object) { - properties.delete(object); - } - function update(object, key, value) { - properties.get(object)[key] = value; - } - function dispose() { - properties = /* @__PURE__ */ new WeakMap(); - } - return { - get, - remove, - update, - dispose - }; -} -function painterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.material.id !== b.material.id) { - return a.material.id - b.material.id; - } else if (a.z !== b.z) { - return a.z - b.z; - } else { - return a.id - b.id; - } -} -function reversePainterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.z !== b.z) { - return b.z - a.z; - } else { - return a.id - b.id; - } -} -function WebGLRenderList() { - const renderItems = []; - let renderItemsIndex = 0; - const opaque = []; - const transmissive = []; - const transparent = []; - function init() { - renderItemsIndex = 0; - opaque.length = 0; - transmissive.length = 0; - transparent.length = 0; - } - function getNextRenderItem(object, geometry, material, groupOrder, z, group) { - let renderItem = renderItems[renderItemsIndex]; - if (renderItem === void 0) { - renderItem = { - id: object.id, - object, - geometry, - material, - groupOrder, - renderOrder: object.renderOrder, - z, - group - }; - renderItems[renderItemsIndex] = renderItem; - } else { - renderItem.id = object.id; - renderItem.object = object; - renderItem.geometry = geometry; - renderItem.material = material; - renderItem.groupOrder = groupOrder; - renderItem.renderOrder = object.renderOrder; - renderItem.z = z; - renderItem.group = group; - } - renderItemsIndex++; - return renderItem; - } - function push(object, geometry, material, groupOrder, z, group) { - const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); - if (material.transmission > 0) { - transmissive.push(renderItem); - } else if (material.transparent === true) { - transparent.push(renderItem); - } else { - opaque.push(renderItem); - } - } - function unshift(object, geometry, material, groupOrder, z, group) { - const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); - if (material.transmission > 0) { - transmissive.unshift(renderItem); - } else if (material.transparent === true) { - transparent.unshift(renderItem); - } else { - opaque.unshift(renderItem); - } - } - function sort(customOpaqueSort, customTransparentSort) { - if (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable); - if (transmissive.length > 1) transmissive.sort(customTransparentSort || reversePainterSortStable); - if (transparent.length > 1) transparent.sort(customTransparentSort || reversePainterSortStable); - } - function finish() { - for (let i = renderItemsIndex, il = renderItems.length; i < il; i++) { - const renderItem = renderItems[i]; - if (renderItem.id === null) break; - renderItem.id = null; - renderItem.object = null; - renderItem.geometry = null; - renderItem.material = null; - renderItem.group = null; - } - } - return { - opaque, - transmissive, - transparent, - init, - push, - unshift, - finish, - sort - }; -} -function WebGLRenderLists() { - let lists = /* @__PURE__ */ new WeakMap(); - function get(scene, renderCallDepth) { - const listArray = lists.get(scene); - let list; - if (listArray === void 0) { - list = new WebGLRenderList(); - lists.set(scene, [list]); - } else { - if (renderCallDepth >= listArray.length) { - list = new WebGLRenderList(); - listArray.push(list); - } else { - list = listArray[renderCallDepth]; - } - } - return list; - } - function dispose() { - lists = /* @__PURE__ */ new WeakMap(); - } - return { - get, - dispose - }; -} -function UniformsCache() { - const lights = {}; - return { - get: function(light) { - if (lights[light.id] !== void 0) { - return lights[light.id]; - } - let uniforms; - switch (light.type) { - case "DirectionalLight": - uniforms = { - direction: new Vector3(), - color: new Color() - }; - break; - case "SpotLight": - uniforms = { - position: new Vector3(), - direction: new Vector3(), - color: new Color(), - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - case "PointLight": - uniforms = { - position: new Vector3(), - color: new Color(), - distance: 0, - decay: 0 - }; - break; - case "HemisphereLight": - uniforms = { - direction: new Vector3(), - skyColor: new Color(), - groundColor: new Color() - }; - break; - case "RectAreaLight": - uniforms = { - color: new Color(), - position: new Vector3(), - halfWidth: new Vector3(), - halfHeight: new Vector3() - }; - break; - } - lights[light.id] = uniforms; - return uniforms; - } - }; -} -function ShadowUniformsCache() { - const lights = {}; - return { - get: function(light) { - if (lights[light.id] !== void 0) { - return lights[light.id]; - } - let uniforms; - switch (light.type) { - case "DirectionalLight": - uniforms = { - shadowIntensity: 1, - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - case "SpotLight": - uniforms = { - shadowIntensity: 1, - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - case "PointLight": - uniforms = { - shadowIntensity: 1, - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2(), - shadowCameraNear: 1, - shadowCameraFar: 1e3 - }; - break; - } - lights[light.id] = uniforms; - return uniforms; - } - }; -} -var nextVersion = 0; -function shadowCastingAndTexturingLightsFirst(lightA, lightB) { - return (lightB.castShadow ? 2 : 0) - (lightA.castShadow ? 2 : 0) + (lightB.map ? 1 : 0) - (lightA.map ? 1 : 0); -} -function WebGLLights(extensions) { - const cache = new UniformsCache(); - const shadowCache = ShadowUniformsCache(); - const state = { - version: 0, - hash: { - directionalLength: -1, - pointLength: -1, - spotLength: -1, - rectAreaLength: -1, - hemiLength: -1, - numDirectionalShadows: -1, - numPointShadows: -1, - numSpotShadows: -1, - numSpotMaps: -1, - numLightProbes: -1 - }, - ambient: [0, 0, 0], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotLightMap: [], - spotShadow: [], - spotShadowMap: [], - spotLightMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [], - numSpotLightShadowsWithMaps: 0, - numLightProbes: 0 - }; - for (let i = 0; i < 9; i++) state.probe.push(new Vector3()); - const vector3 = new Vector3(); - const matrix4 = new Matrix4(); - const matrix42 = new Matrix4(); - function setup(lights) { - let r = 0, g = 0, b = 0; - for (let i = 0; i < 9; i++) state.probe[i].set(0, 0, 0); - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - let numDirectionalShadows = 0; - let numPointShadows = 0; - let numSpotShadows = 0; - let numSpotMaps = 0; - let numSpotShadowsWithMaps = 0; - let numLightProbes = 0; - lights.sort(shadowCastingAndTexturingLightsFirst); - for (let i = 0, l = lights.length; i < l; i++) { - const light = lights[i]; - const color = light.color; - const intensity = light.intensity; - const distance = light.distance; - const shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null; - if (light.isAmbientLight) { - r += color.r * intensity; - g += color.g * intensity; - b += color.b * intensity; - } else if (light.isLightProbe) { - for (let j = 0; j < 9; j++) { - state.probe[j].addScaledVector(light.sh.coefficients[j], intensity); - } - numLightProbes++; - } else if (light.isDirectionalLight) { - const uniforms = cache.get(light); - uniforms.color.copy(light.color).multiplyScalar(light.intensity); - if (light.castShadow) { - const shadow = light.shadow; - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowIntensity = shadow.intensity; - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - state.directionalShadow[directionalLength] = shadowUniforms; - state.directionalShadowMap[directionalLength] = shadowMap; - state.directionalShadowMatrix[directionalLength] = light.shadow.matrix; - numDirectionalShadows++; - } - state.directional[directionalLength] = uniforms; - directionalLength++; - } else if (light.isSpotLight) { - const uniforms = cache.get(light); - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.color.copy(color).multiplyScalar(intensity); - uniforms.distance = distance; - uniforms.coneCos = Math.cos(light.angle); - uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra)); - uniforms.decay = light.decay; - state.spot[spotLength] = uniforms; - const shadow = light.shadow; - if (light.map) { - state.spotLightMap[numSpotMaps] = light.map; - numSpotMaps++; - shadow.updateMatrices(light); - if (light.castShadow) numSpotShadowsWithMaps++; - } - state.spotLightMatrix[spotLength] = shadow.matrix; - if (light.castShadow) { - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowIntensity = shadow.intensity; - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - state.spotShadow[spotLength] = shadowUniforms; - state.spotShadowMap[spotLength] = shadowMap; - numSpotShadows++; - } - spotLength++; - } else if (light.isRectAreaLight) { - const uniforms = cache.get(light); - uniforms.color.copy(color).multiplyScalar(intensity); - uniforms.halfWidth.set(light.width * 0.5, 0, 0); - uniforms.halfHeight.set(0, light.height * 0.5, 0); - state.rectArea[rectAreaLength] = uniforms; - rectAreaLength++; - } else if (light.isPointLight) { - const uniforms = cache.get(light); - uniforms.color.copy(light.color).multiplyScalar(light.intensity); - uniforms.distance = light.distance; - uniforms.decay = light.decay; - if (light.castShadow) { - const shadow = light.shadow; - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowIntensity = shadow.intensity; - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - shadowUniforms.shadowCameraNear = shadow.camera.near; - shadowUniforms.shadowCameraFar = shadow.camera.far; - state.pointShadow[pointLength] = shadowUniforms; - state.pointShadowMap[pointLength] = shadowMap; - state.pointShadowMatrix[pointLength] = light.shadow.matrix; - numPointShadows++; - } - state.point[pointLength] = uniforms; - pointLength++; - } else if (light.isHemisphereLight) { - const uniforms = cache.get(light); - uniforms.skyColor.copy(light.color).multiplyScalar(intensity); - uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity); - state.hemi[hemiLength] = uniforms; - hemiLength++; - } - } - if (rectAreaLength > 0) { - if (extensions.has("OES_texture_float_linear") === true) { - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - } else { - state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; - state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; - } - } - state.ambient[0] = r; - state.ambient[1] = g; - state.ambient[2] = b; - const hash = state.hash; - if (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows || hash.numSpotMaps !== numSpotMaps || hash.numLightProbes !== numLightProbes) { - state.directional.length = directionalLength; - state.spot.length = spotLength; - state.rectArea.length = rectAreaLength; - state.point.length = pointLength; - state.hemi.length = hemiLength; - state.directionalShadow.length = numDirectionalShadows; - state.directionalShadowMap.length = numDirectionalShadows; - state.pointShadow.length = numPointShadows; - state.pointShadowMap.length = numPointShadows; - state.spotShadow.length = numSpotShadows; - state.spotShadowMap.length = numSpotShadows; - state.directionalShadowMatrix.length = numDirectionalShadows; - state.pointShadowMatrix.length = numPointShadows; - state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps; - state.spotLightMap.length = numSpotMaps; - state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps; - state.numLightProbes = numLightProbes; - hash.directionalLength = directionalLength; - hash.pointLength = pointLength; - hash.spotLength = spotLength; - hash.rectAreaLength = rectAreaLength; - hash.hemiLength = hemiLength; - hash.numDirectionalShadows = numDirectionalShadows; - hash.numPointShadows = numPointShadows; - hash.numSpotShadows = numSpotShadows; - hash.numSpotMaps = numSpotMaps; - hash.numLightProbes = numLightProbes; - state.version = nextVersion++; - } - } - function setupView(lights, camera) { - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - const viewMatrix = camera.matrixWorldInverse; - for (let i = 0, l = lights.length; i < l; i++) { - const light = lights[i]; - if (light.isDirectionalLight) { - const uniforms = state.directional[directionalLength]; - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - vector3.setFromMatrixPosition(light.target.matrixWorld); - uniforms.direction.sub(vector3); - uniforms.direction.transformDirection(viewMatrix); - directionalLength++; - } else if (light.isSpotLight) { - const uniforms = state.spot[spotLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - vector3.setFromMatrixPosition(light.target.matrixWorld); - uniforms.direction.sub(vector3); - uniforms.direction.transformDirection(viewMatrix); - spotLength++; - } else if (light.isRectAreaLight) { - const uniforms = state.rectArea[rectAreaLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); - matrix42.identity(); - matrix4.copy(light.matrixWorld); - matrix4.premultiply(viewMatrix); - matrix42.extractRotation(matrix4); - uniforms.halfWidth.set(light.width * 0.5, 0, 0); - uniforms.halfHeight.set(0, light.height * 0.5, 0); - uniforms.halfWidth.applyMatrix4(matrix42); - uniforms.halfHeight.applyMatrix4(matrix42); - rectAreaLength++; - } else if (light.isPointLight) { - const uniforms = state.point[pointLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); - pointLength++; - } else if (light.isHemisphereLight) { - const uniforms = state.hemi[hemiLength]; - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - uniforms.direction.transformDirection(viewMatrix); - hemiLength++; - } - } - } - return { - setup, - setupView, - state - }; -} -function WebGLRenderState(extensions) { - const lights = new WebGLLights(extensions); - const lightsArray = []; - const shadowsArray = []; - function init(camera) { - state.camera = camera; - lightsArray.length = 0; - shadowsArray.length = 0; - } - function pushLight(light) { - lightsArray.push(light); - } - function pushShadow(shadowLight) { - shadowsArray.push(shadowLight); - } - function setupLights() { - lights.setup(lightsArray); - } - function setupLightsView(camera) { - lights.setupView(lightsArray, camera); - } - const state = { - lightsArray, - shadowsArray, - camera: null, - lights, - transmissionRenderTarget: {} - }; - return { - init, - state, - setupLights, - setupLightsView, - pushLight, - pushShadow - }; -} -function WebGLRenderStates(extensions) { - let renderStates = /* @__PURE__ */ new WeakMap(); - function get(scene, renderCallDepth = 0) { - const renderStateArray = renderStates.get(scene); - let renderState; - if (renderStateArray === void 0) { - renderState = new WebGLRenderState(extensions); - renderStates.set(scene, [renderState]); - } else { - if (renderCallDepth >= renderStateArray.length) { - renderState = new WebGLRenderState(extensions); - renderStateArray.push(renderState); - } else { - renderState = renderStateArray[renderCallDepth]; - } - } - return renderState; - } - function dispose() { - renderStates = /* @__PURE__ */ new WeakMap(); - } - return { - get, - dispose - }; -} -var MeshDepthMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshDepthMaterial = true; - this.type = "MeshDepthMaterial"; - this.depthPacking = BasicDepthPacking; - this.map = null; - this.alphaMap = null; - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.depthPacking = source.depthPacking; - this.map = source.map; - this.alphaMap = source.alphaMap; - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - return this; - } -}; -var MeshDistanceMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshDistanceMaterial = true; - this.type = "MeshDistanceMaterial"; - this.map = null; - this.alphaMap = null; - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.map = source.map; - this.alphaMap = source.alphaMap; - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - return this; - } -}; -var vertex = "void main() {\n gl_Position = vec4( position, 1.0 );\n}"; -var fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n const float samples = float( VSM_SAMPLES );\n float mean = 0.0;\n float squared_mean = 0.0;\n float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n float uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n for ( float i = 0.0; i < samples; i ++ ) {\n float uvOffset = uvStart + i * uvStride;\n #ifdef HORIZONTAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean / samples;\n squared_mean = squared_mean / samples;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; -function WebGLShadowMap(renderer, objects, capabilities) { - let _frustum2 = new Frustum(); - const _shadowMapSize = new Vector2(), _viewportSize = new Vector2(), _viewport = new Vector4(), _depthMaterial = new MeshDepthMaterial({ depthPacking: RGBADepthPacking }), _distanceMaterial = new MeshDistanceMaterial(), _materialCache = {}, _maxTextureSize = capabilities.maxTextureSize; - const shadowSide = { [FrontSide]: BackSide, [BackSide]: FrontSide, [DoubleSide]: DoubleSide }; - const shadowMaterialVertical = new ShaderMaterial({ - defines: { - VSM_SAMPLES: 8 - }, - uniforms: { - shadow_pass: { value: null }, - resolution: { value: new Vector2() }, - radius: { value: 4 } - }, - vertexShader: vertex, - fragmentShader: fragment - }); - const shadowMaterialHorizontal = shadowMaterialVertical.clone(); - shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; - const fullScreenTri = new BufferGeometry(); - fullScreenTri.setAttribute( - "position", - new BufferAttribute( - new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), - 3 - ) - ); - const fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical); - const scope = this; - this.enabled = false; - this.autoUpdate = true; - this.needsUpdate = false; - this.type = PCFShadowMap; - let _previousType = this.type; - this.render = function(lights, scene, camera) { - if (scope.enabled === false) return; - if (scope.autoUpdate === false && scope.needsUpdate === false) return; - if (lights.length === 0) return; - const currentRenderTarget = renderer.getRenderTarget(); - const activeCubeFace = renderer.getActiveCubeFace(); - const activeMipmapLevel = renderer.getActiveMipmapLevel(); - const _state = renderer.state; - _state.setBlending(NoBlending); - _state.buffers.color.setClear(1, 1, 1, 1); - _state.buffers.depth.setTest(true); - _state.setScissorTest(false); - const toVSM = _previousType !== VSMShadowMap && this.type === VSMShadowMap; - const fromVSM = _previousType === VSMShadowMap && this.type !== VSMShadowMap; - for (let i = 0, il = lights.length; i < il; i++) { - const light = lights[i]; - const shadow = light.shadow; - if (shadow === void 0) { - console.warn("THREE.WebGLShadowMap:", light, "has no shadow."); - continue; - } - if (shadow.autoUpdate === false && shadow.needsUpdate === false) continue; - _shadowMapSize.copy(shadow.mapSize); - const shadowFrameExtents = shadow.getFrameExtents(); - _shadowMapSize.multiply(shadowFrameExtents); - _viewportSize.copy(shadow.mapSize); - if (_shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize) { - if (_shadowMapSize.x > _maxTextureSize) { - _viewportSize.x = Math.floor(_maxTextureSize / shadowFrameExtents.x); - _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; - shadow.mapSize.x = _viewportSize.x; - } - if (_shadowMapSize.y > _maxTextureSize) { - _viewportSize.y = Math.floor(_maxTextureSize / shadowFrameExtents.y); - _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; - shadow.mapSize.y = _viewportSize.y; - } - } - if (shadow.map === null || toVSM === true || fromVSM === true) { - const pars = this.type !== VSMShadowMap ? { minFilter: NearestFilter, magFilter: NearestFilter } : {}; - if (shadow.map !== null) { - shadow.map.dispose(); - } - shadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars); - shadow.map.texture.name = light.name + ".shadowMap"; - shadow.camera.updateProjectionMatrix(); - } - renderer.setRenderTarget(shadow.map); - renderer.clear(); - const viewportCount = shadow.getViewportCount(); - for (let vp = 0; vp < viewportCount; vp++) { - const viewport = shadow.getViewport(vp); - _viewport.set( - _viewportSize.x * viewport.x, - _viewportSize.y * viewport.y, - _viewportSize.x * viewport.z, - _viewportSize.y * viewport.w - ); - _state.viewport(_viewport); - shadow.updateMatrices(light, vp); - _frustum2 = shadow.getFrustum(); - renderObject(scene, camera, shadow.camera, light, this.type); - } - if (shadow.isPointLightShadow !== true && this.type === VSMShadowMap) { - VSMPass(shadow, camera); - } - shadow.needsUpdate = false; - } - _previousType = this.type; - scope.needsUpdate = false; - renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel); - }; - function VSMPass(shadow, camera) { - const geometry = objects.update(fullScreenMesh); - if (shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples) { - shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples; - shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples; - shadowMaterialVertical.needsUpdate = true; - shadowMaterialHorizontal.needsUpdate = true; - } - if (shadow.mapPass === null) { - shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y); - } - shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; - shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; - shadowMaterialVertical.uniforms.radius.value = shadow.radius; - renderer.setRenderTarget(shadow.mapPass); - renderer.clear(); - renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null); - shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; - shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; - shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; - renderer.setRenderTarget(shadow.map); - renderer.clear(); - renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null); - } - function getDepthMaterial(object, material, light, type) { - let result = null; - const customMaterial = light.isPointLight === true ? object.customDistanceMaterial : object.customDepthMaterial; - if (customMaterial !== void 0) { - result = customMaterial; - } else { - result = light.isPointLight === true ? _distanceMaterial : _depthMaterial; - if (renderer.localClippingEnabled && material.clipShadows === true && Array.isArray(material.clippingPlanes) && material.clippingPlanes.length !== 0 || material.displacementMap && material.displacementScale !== 0 || material.alphaMap && material.alphaTest > 0 || material.map && material.alphaTest > 0) { - const keyA = result.uuid, keyB = material.uuid; - let materialsForVariant = _materialCache[keyA]; - if (materialsForVariant === void 0) { - materialsForVariant = {}; - _materialCache[keyA] = materialsForVariant; - } - let cachedMaterial = materialsForVariant[keyB]; - if (cachedMaterial === void 0) { - cachedMaterial = result.clone(); - materialsForVariant[keyB] = cachedMaterial; - material.addEventListener("dispose", onMaterialDispose); - } - result = cachedMaterial; - } - } - result.visible = material.visible; - result.wireframe = material.wireframe; - if (type === VSMShadowMap) { - result.side = material.shadowSide !== null ? material.shadowSide : material.side; - } else { - result.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side]; - } - result.alphaMap = material.alphaMap; - result.alphaTest = material.alphaTest; - result.map = material.map; - result.clipShadows = material.clipShadows; - result.clippingPlanes = material.clippingPlanes; - result.clipIntersection = material.clipIntersection; - result.displacementMap = material.displacementMap; - result.displacementScale = material.displacementScale; - result.displacementBias = material.displacementBias; - result.wireframeLinewidth = material.wireframeLinewidth; - result.linewidth = material.linewidth; - if (light.isPointLight === true && result.isMeshDistanceMaterial === true) { - const materialProperties = renderer.properties.get(result); - materialProperties.light = light; - } - return result; - } - function renderObject(object, camera, shadowCamera, light, type) { - if (object.visible === false) return; - const visible = object.layers.test(camera.layers); - if (visible && (object.isMesh || object.isLine || object.isPoints)) { - if ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum2.intersectsObject(object))) { - object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld); - const geometry = objects.update(object); - const material = object.material; - if (Array.isArray(material)) { - const groups = geometry.groups; - for (let k = 0, kl = groups.length; k < kl; k++) { - const group = groups[k]; - const groupMaterial = material[group.materialIndex]; - if (groupMaterial && groupMaterial.visible) { - const depthMaterial = getDepthMaterial(object, groupMaterial, light, type); - object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); - renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group); - object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, group); - } - } - } else if (material.visible) { - const depthMaterial = getDepthMaterial(object, material, light, type); - object.onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); - renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null); - object.onAfterShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial, null); - } - } - } - const children = object.children; - for (let i = 0, l = children.length; i < l; i++) { - renderObject(children[i], camera, shadowCamera, light, type); - } - } - function onMaterialDispose(event) { - const material = event.target; - material.removeEventListener("dispose", onMaterialDispose); - for (const id in _materialCache) { - const cache = _materialCache[id]; - const uuid = event.target.uuid; - if (uuid in cache) { - const shadowMaterial = cache[uuid]; - shadowMaterial.dispose(); - delete cache[uuid]; - } - } - } -} -function WebGLState(gl) { - function ColorBuffer() { - let locked = false; - const color = new Vector4(); - let currentColorMask = null; - const currentColorClear = new Vector4(0, 0, 0, 0); - return { - setMask: function(colorMask) { - if (currentColorMask !== colorMask && !locked) { - gl.colorMask(colorMask, colorMask, colorMask, colorMask); - currentColorMask = colorMask; - } - }, - setLocked: function(lock) { - locked = lock; - }, - setClear: function(r, g, b, a, premultipliedAlpha) { - if (premultipliedAlpha === true) { - r *= a; - g *= a; - b *= a; - } - color.set(r, g, b, a); - if (currentColorClear.equals(color) === false) { - gl.clearColor(r, g, b, a); - currentColorClear.copy(color); - } - }, - reset: function() { - locked = false; - currentColorMask = null; - currentColorClear.set(-1, 0, 0, 0); - } - }; - } - function DepthBuffer() { - let locked = false; - let currentDepthMask = null; - let currentDepthFunc = null; - let currentDepthClear = null; - return { - setTest: function(depthTest) { - if (depthTest) { - enable(gl.DEPTH_TEST); - } else { - disable(gl.DEPTH_TEST); - } - }, - setMask: function(depthMask) { - if (currentDepthMask !== depthMask && !locked) { - gl.depthMask(depthMask); - currentDepthMask = depthMask; - } - }, - setFunc: function(depthFunc) { - if (currentDepthFunc !== depthFunc) { - switch (depthFunc) { - case NeverDepth: - gl.depthFunc(gl.NEVER); - break; - case AlwaysDepth: - gl.depthFunc(gl.ALWAYS); - break; - case LessDepth: - gl.depthFunc(gl.LESS); - break; - case LessEqualDepth: - gl.depthFunc(gl.LEQUAL); - break; - case EqualDepth: - gl.depthFunc(gl.EQUAL); - break; - case GreaterEqualDepth: - gl.depthFunc(gl.GEQUAL); - break; - case GreaterDepth: - gl.depthFunc(gl.GREATER); - break; - case NotEqualDepth: - gl.depthFunc(gl.NOTEQUAL); - break; - default: - gl.depthFunc(gl.LEQUAL); - } - currentDepthFunc = depthFunc; - } - }, - setLocked: function(lock) { - locked = lock; - }, - setClear: function(depth) { - if (currentDepthClear !== depth) { - gl.clearDepth(depth); - currentDepthClear = depth; - } - }, - reset: function() { - locked = false; - currentDepthMask = null; - currentDepthFunc = null; - currentDepthClear = null; - } - }; - } - function StencilBuffer() { - let locked = false; - let currentStencilMask = null; - let currentStencilFunc = null; - let currentStencilRef = null; - let currentStencilFuncMask = null; - let currentStencilFail = null; - let currentStencilZFail = null; - let currentStencilZPass = null; - let currentStencilClear = null; - return { - setTest: function(stencilTest) { - if (!locked) { - if (stencilTest) { - enable(gl.STENCIL_TEST); - } else { - disable(gl.STENCIL_TEST); - } - } - }, - setMask: function(stencilMask) { - if (currentStencilMask !== stencilMask && !locked) { - gl.stencilMask(stencilMask); - currentStencilMask = stencilMask; - } - }, - setFunc: function(stencilFunc, stencilRef, stencilMask) { - if (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) { - gl.stencilFunc(stencilFunc, stencilRef, stencilMask); - currentStencilFunc = stencilFunc; - currentStencilRef = stencilRef; - currentStencilFuncMask = stencilMask; - } - }, - setOp: function(stencilFail, stencilZFail, stencilZPass) { - if (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) { - gl.stencilOp(stencilFail, stencilZFail, stencilZPass); - currentStencilFail = stencilFail; - currentStencilZFail = stencilZFail; - currentStencilZPass = stencilZPass; - } - }, - setLocked: function(lock) { - locked = lock; - }, - setClear: function(stencil) { - if (currentStencilClear !== stencil) { - gl.clearStencil(stencil); - currentStencilClear = stencil; - } - }, - reset: function() { - locked = false; - currentStencilMask = null; - currentStencilFunc = null; - currentStencilRef = null; - currentStencilFuncMask = null; - currentStencilFail = null; - currentStencilZFail = null; - currentStencilZPass = null; - currentStencilClear = null; - } - }; - } - const colorBuffer = new ColorBuffer(); - const depthBuffer = new DepthBuffer(); - const stencilBuffer = new StencilBuffer(); - const uboBindings = /* @__PURE__ */ new WeakMap(); - const uboProgramMap = /* @__PURE__ */ new WeakMap(); - let enabledCapabilities = {}; - let currentBoundFramebuffers = {}; - let currentDrawbuffers = /* @__PURE__ */ new WeakMap(); - let defaultDrawbuffers = []; - let currentProgram = null; - let currentBlendingEnabled = false; - let currentBlending = null; - let currentBlendEquation = null; - let currentBlendSrc = null; - let currentBlendDst = null; - let currentBlendEquationAlpha = null; - let currentBlendSrcAlpha = null; - let currentBlendDstAlpha = null; - let currentBlendColor = new Color(0, 0, 0); - let currentBlendAlpha = 0; - let currentPremultipledAlpha = false; - let currentFlipSided = null; - let currentCullFace = null; - let currentLineWidth = null; - let currentPolygonOffsetFactor = null; - let currentPolygonOffsetUnits = null; - const maxTextures = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS); - let lineWidthAvailable = false; - let version = 0; - const glVersion = gl.getParameter(gl.VERSION); - if (glVersion.indexOf("WebGL") !== -1) { - version = parseFloat(/^WebGL (\d)/.exec(glVersion)[1]); - lineWidthAvailable = version >= 1; - } else if (glVersion.indexOf("OpenGL ES") !== -1) { - version = parseFloat(/^OpenGL ES (\d)/.exec(glVersion)[1]); - lineWidthAvailable = version >= 2; - } - let currentTextureSlot = null; - let currentBoundTextures = {}; - const scissorParam = gl.getParameter(gl.SCISSOR_BOX); - const viewportParam = gl.getParameter(gl.VIEWPORT); - const currentScissor = new Vector4().fromArray(scissorParam); - const currentViewport = new Vector4().fromArray(viewportParam); - function createTexture(type, target, count, dimensions) { - const data = new Uint8Array(4); - const texture = gl.createTexture(); - gl.bindTexture(type, texture); - gl.texParameteri(type, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(type, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - for (let i = 0; i < count; i++) { - if (type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY) { - gl.texImage3D(target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); - } else { - gl.texImage2D(target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); - } - } - return texture; - } - const emptyTextures = {}; - emptyTextures[gl.TEXTURE_2D] = createTexture(gl.TEXTURE_2D, gl.TEXTURE_2D, 1); - emptyTextures[gl.TEXTURE_CUBE_MAP] = createTexture(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6); - emptyTextures[gl.TEXTURE_2D_ARRAY] = createTexture(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1); - emptyTextures[gl.TEXTURE_3D] = createTexture(gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1); - colorBuffer.setClear(0, 0, 0, 1); - depthBuffer.setClear(1); - stencilBuffer.setClear(0); - enable(gl.DEPTH_TEST); - depthBuffer.setFunc(LessEqualDepth); - setFlipSided(false); - setCullFace(CullFaceBack); - enable(gl.CULL_FACE); - setBlending(NoBlending); - function enable(id) { - if (enabledCapabilities[id] !== true) { - gl.enable(id); - enabledCapabilities[id] = true; - } - } - function disable(id) { - if (enabledCapabilities[id] !== false) { - gl.disable(id); - enabledCapabilities[id] = false; - } - } - function bindFramebuffer(target, framebuffer) { - if (currentBoundFramebuffers[target] !== framebuffer) { - gl.bindFramebuffer(target, framebuffer); - currentBoundFramebuffers[target] = framebuffer; - if (target === gl.DRAW_FRAMEBUFFER) { - currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer; - } - if (target === gl.FRAMEBUFFER) { - currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer; - } - return true; - } - return false; - } - function drawBuffers(renderTarget, framebuffer) { - let drawBuffers2 = defaultDrawbuffers; - let needsUpdate = false; - if (renderTarget) { - drawBuffers2 = currentDrawbuffers.get(framebuffer); - if (drawBuffers2 === void 0) { - drawBuffers2 = []; - currentDrawbuffers.set(framebuffer, drawBuffers2); - } - const textures = renderTarget.textures; - if (drawBuffers2.length !== textures.length || drawBuffers2[0] !== gl.COLOR_ATTACHMENT0) { - for (let i = 0, il = textures.length; i < il; i++) { - drawBuffers2[i] = gl.COLOR_ATTACHMENT0 + i; - } - drawBuffers2.length = textures.length; - needsUpdate = true; - } - } else { - if (drawBuffers2[0] !== gl.BACK) { - drawBuffers2[0] = gl.BACK; - needsUpdate = true; - } - } - if (needsUpdate) { - gl.drawBuffers(drawBuffers2); - } - } - function useProgram(program) { - if (currentProgram !== program) { - gl.useProgram(program); - currentProgram = program; - return true; - } - return false; - } - const equationToGL = { - [AddEquation]: gl.FUNC_ADD, - [SubtractEquation]: gl.FUNC_SUBTRACT, - [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT - }; - equationToGL[MinEquation] = gl.MIN; - equationToGL[MaxEquation] = gl.MAX; - const factorToGL = { - [ZeroFactor]: gl.ZERO, - [OneFactor]: gl.ONE, - [SrcColorFactor]: gl.SRC_COLOR, - [SrcAlphaFactor]: gl.SRC_ALPHA, - [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE, - [DstColorFactor]: gl.DST_COLOR, - [DstAlphaFactor]: gl.DST_ALPHA, - [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR, - [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA, - [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR, - [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA, - [ConstantColorFactor]: gl.CONSTANT_COLOR, - [OneMinusConstantColorFactor]: gl.ONE_MINUS_CONSTANT_COLOR, - [ConstantAlphaFactor]: gl.CONSTANT_ALPHA, - [OneMinusConstantAlphaFactor]: gl.ONE_MINUS_CONSTANT_ALPHA - }; - function setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha) { - if (blending === NoBlending) { - if (currentBlendingEnabled === true) { - disable(gl.BLEND); - currentBlendingEnabled = false; - } - return; - } - if (currentBlendingEnabled === false) { - enable(gl.BLEND); - currentBlendingEnabled = true; - } - if (blending !== CustomBlending) { - if (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) { - if (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) { - gl.blendEquation(gl.FUNC_ADD); - currentBlendEquation = AddEquation; - currentBlendEquationAlpha = AddEquation; - } - if (premultipliedAlpha) { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - case AdditiveBlending: - gl.blendFunc(gl.ONE, gl.ONE); - break; - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - case MultiplyBlending: - gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", blending); - break; - } - } else { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - case AdditiveBlending: - gl.blendFunc(gl.SRC_ALPHA, gl.ONE); - break; - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - case MultiplyBlending: - gl.blendFunc(gl.ZERO, gl.SRC_COLOR); - break; - default: - console.error("THREE.WebGLState: Invalid blending: ", blending); - break; - } - } - currentBlendSrc = null; - currentBlendDst = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentBlendColor.set(0, 0, 0); - currentBlendAlpha = 0; - currentBlending = blending; - currentPremultipledAlpha = premultipliedAlpha; - } - return; - } - blendEquationAlpha = blendEquationAlpha || blendEquation; - blendSrcAlpha = blendSrcAlpha || blendSrc; - blendDstAlpha = blendDstAlpha || blendDst; - if (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) { - gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]); - currentBlendEquation = blendEquation; - currentBlendEquationAlpha = blendEquationAlpha; - } - if (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) { - gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]); - currentBlendSrc = blendSrc; - currentBlendDst = blendDst; - currentBlendSrcAlpha = blendSrcAlpha; - currentBlendDstAlpha = blendDstAlpha; - } - if (blendColor.equals(currentBlendColor) === false || blendAlpha !== currentBlendAlpha) { - gl.blendColor(blendColor.r, blendColor.g, blendColor.b, blendAlpha); - currentBlendColor.copy(blendColor); - currentBlendAlpha = blendAlpha; - } - currentBlending = blending; - currentPremultipledAlpha = false; - } - function setMaterial(material, frontFaceCW) { - material.side === DoubleSide ? disable(gl.CULL_FACE) : enable(gl.CULL_FACE); - let flipSided = material.side === BackSide; - if (frontFaceCW) flipSided = !flipSided; - setFlipSided(flipSided); - material.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha); - depthBuffer.setFunc(material.depthFunc); - depthBuffer.setTest(material.depthTest); - depthBuffer.setMask(material.depthWrite); - colorBuffer.setMask(material.colorWrite); - const stencilWrite = material.stencilWrite; - stencilBuffer.setTest(stencilWrite); - if (stencilWrite) { - stencilBuffer.setMask(material.stencilWriteMask); - stencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask); - stencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass); - } - setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits); - material.alphaToCoverage === true ? enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : disable(gl.SAMPLE_ALPHA_TO_COVERAGE); - } - function setFlipSided(flipSided) { - if (currentFlipSided !== flipSided) { - if (flipSided) { - gl.frontFace(gl.CW); - } else { - gl.frontFace(gl.CCW); - } - currentFlipSided = flipSided; - } - } - function setCullFace(cullFace) { - if (cullFace !== CullFaceNone) { - enable(gl.CULL_FACE); - if (cullFace !== currentCullFace) { - if (cullFace === CullFaceBack) { - gl.cullFace(gl.BACK); - } else if (cullFace === CullFaceFront) { - gl.cullFace(gl.FRONT); - } else { - gl.cullFace(gl.FRONT_AND_BACK); - } - } - } else { - disable(gl.CULL_FACE); - } - currentCullFace = cullFace; - } - function setLineWidth(width) { - if (width !== currentLineWidth) { - if (lineWidthAvailable) gl.lineWidth(width); - currentLineWidth = width; - } - } - function setPolygonOffset(polygonOffset, factor, units) { - if (polygonOffset) { - enable(gl.POLYGON_OFFSET_FILL); - if (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) { - gl.polygonOffset(factor, units); - currentPolygonOffsetFactor = factor; - currentPolygonOffsetUnits = units; - } - } else { - disable(gl.POLYGON_OFFSET_FILL); - } - } - function setScissorTest(scissorTest) { - if (scissorTest) { - enable(gl.SCISSOR_TEST); - } else { - disable(gl.SCISSOR_TEST); - } - } - function activeTexture(webglSlot) { - if (webglSlot === void 0) webglSlot = gl.TEXTURE0 + maxTextures - 1; - if (currentTextureSlot !== webglSlot) { - gl.activeTexture(webglSlot); - currentTextureSlot = webglSlot; - } - } - function bindTexture(webglType, webglTexture, webglSlot) { - if (webglSlot === void 0) { - if (currentTextureSlot === null) { - webglSlot = gl.TEXTURE0 + maxTextures - 1; - } else { - webglSlot = currentTextureSlot; - } - } - let boundTexture = currentBoundTextures[webglSlot]; - if (boundTexture === void 0) { - boundTexture = { type: void 0, texture: void 0 }; - currentBoundTextures[webglSlot] = boundTexture; - } - if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) { - if (currentTextureSlot !== webglSlot) { - gl.activeTexture(webglSlot); - currentTextureSlot = webglSlot; - } - gl.bindTexture(webglType, webglTexture || emptyTextures[webglType]); - boundTexture.type = webglType; - boundTexture.texture = webglTexture; - } - } - function unbindTexture() { - const boundTexture = currentBoundTextures[currentTextureSlot]; - if (boundTexture !== void 0 && boundTexture.type !== void 0) { - gl.bindTexture(boundTexture.type, null); - boundTexture.type = void 0; - boundTexture.texture = void 0; - } - } - function compressedTexImage2D() { - try { - gl.compressedTexImage2D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function compressedTexImage3D() { - try { - gl.compressedTexImage3D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texSubImage2D() { - try { - gl.texSubImage2D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texSubImage3D() { - try { - gl.texSubImage3D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function compressedTexSubImage2D() { - try { - gl.compressedTexSubImage2D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function compressedTexSubImage3D() { - try { - gl.compressedTexSubImage3D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texStorage2D() { - try { - gl.texStorage2D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texStorage3D() { - try { - gl.texStorage3D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texImage2D() { - try { - gl.texImage2D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function texImage3D() { - try { - gl.texImage3D.apply(gl, arguments); - } catch (error) { - console.error("THREE.WebGLState:", error); - } - } - function scissor(scissor2) { - if (currentScissor.equals(scissor2) === false) { - gl.scissor(scissor2.x, scissor2.y, scissor2.z, scissor2.w); - currentScissor.copy(scissor2); - } - } - function viewport(viewport2) { - if (currentViewport.equals(viewport2) === false) { - gl.viewport(viewport2.x, viewport2.y, viewport2.z, viewport2.w); - currentViewport.copy(viewport2); - } - } - function updateUBOMapping(uniformsGroup, program) { - let mapping = uboProgramMap.get(program); - if (mapping === void 0) { - mapping = /* @__PURE__ */ new WeakMap(); - uboProgramMap.set(program, mapping); - } - let blockIndex = mapping.get(uniformsGroup); - if (blockIndex === void 0) { - blockIndex = gl.getUniformBlockIndex(program, uniformsGroup.name); - mapping.set(uniformsGroup, blockIndex); - } - } - function uniformBlockBinding(uniformsGroup, program) { - const mapping = uboProgramMap.get(program); - const blockIndex = mapping.get(uniformsGroup); - if (uboBindings.get(program) !== blockIndex) { - gl.uniformBlockBinding(program, blockIndex, uniformsGroup.__bindingPointIndex); - uboBindings.set(program, blockIndex); - } - } - function reset() { - gl.disable(gl.BLEND); - gl.disable(gl.CULL_FACE); - gl.disable(gl.DEPTH_TEST); - gl.disable(gl.POLYGON_OFFSET_FILL); - gl.disable(gl.SCISSOR_TEST); - gl.disable(gl.STENCIL_TEST); - gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE); - gl.blendEquation(gl.FUNC_ADD); - gl.blendFunc(gl.ONE, gl.ZERO); - gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); - gl.blendColor(0, 0, 0, 0); - gl.colorMask(true, true, true, true); - gl.clearColor(0, 0, 0, 0); - gl.depthMask(true); - gl.depthFunc(gl.LESS); - gl.clearDepth(1); - gl.stencilMask(4294967295); - gl.stencilFunc(gl.ALWAYS, 0, 4294967295); - gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); - gl.clearStencil(0); - gl.cullFace(gl.BACK); - gl.frontFace(gl.CCW); - gl.polygonOffset(0, 0); - gl.activeTexture(gl.TEXTURE0); - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null); - gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); - gl.useProgram(null); - gl.lineWidth(1); - gl.scissor(0, 0, gl.canvas.width, gl.canvas.height); - gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); - enabledCapabilities = {}; - currentTextureSlot = null; - currentBoundTextures = {}; - currentBoundFramebuffers = {}; - currentDrawbuffers = /* @__PURE__ */ new WeakMap(); - defaultDrawbuffers = []; - currentProgram = null; - currentBlendingEnabled = false; - currentBlending = null; - currentBlendEquation = null; - currentBlendSrc = null; - currentBlendDst = null; - currentBlendEquationAlpha = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentBlendColor = new Color(0, 0, 0); - currentBlendAlpha = 0; - currentPremultipledAlpha = false; - currentFlipSided = null; - currentCullFace = null; - currentLineWidth = null; - currentPolygonOffsetFactor = null; - currentPolygonOffsetUnits = null; - currentScissor.set(0, 0, gl.canvas.width, gl.canvas.height); - currentViewport.set(0, 0, gl.canvas.width, gl.canvas.height); - colorBuffer.reset(); - depthBuffer.reset(); - stencilBuffer.reset(); - } - return { - buffers: { - color: colorBuffer, - depth: depthBuffer, - stencil: stencilBuffer - }, - enable, - disable, - bindFramebuffer, - drawBuffers, - useProgram, - setBlending, - setMaterial, - setFlipSided, - setCullFace, - setLineWidth, - setPolygonOffset, - setScissorTest, - activeTexture, - bindTexture, - unbindTexture, - compressedTexImage2D, - compressedTexImage3D, - texImage2D, - texImage3D, - updateUBOMapping, - uniformBlockBinding, - texStorage2D, - texStorage3D, - texSubImage2D, - texSubImage3D, - compressedTexSubImage2D, - compressedTexSubImage3D, - scissor, - viewport, - reset - }; -} -function contain(texture, aspect2) { - const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; - if (imageAspect > aspect2) { - texture.repeat.x = 1; - texture.repeat.y = imageAspect / aspect2; - texture.offset.x = 0; - texture.offset.y = (1 - texture.repeat.y) / 2; - } else { - texture.repeat.x = aspect2 / imageAspect; - texture.repeat.y = 1; - texture.offset.x = (1 - texture.repeat.x) / 2; - texture.offset.y = 0; - } - return texture; -} -function cover(texture, aspect2) { - const imageAspect = texture.image && texture.image.width ? texture.image.width / texture.image.height : 1; - if (imageAspect > aspect2) { - texture.repeat.x = aspect2 / imageAspect; - texture.repeat.y = 1; - texture.offset.x = (1 - texture.repeat.x) / 2; - texture.offset.y = 0; - } else { - texture.repeat.x = 1; - texture.repeat.y = imageAspect / aspect2; - texture.offset.x = 0; - texture.offset.y = (1 - texture.repeat.y) / 2; - } - return texture; -} -function fill(texture) { - texture.repeat.x = 1; - texture.repeat.y = 1; - texture.offset.x = 0; - texture.offset.y = 0; - return texture; -} -function getByteLength(width, height, format, type) { - const typeByteLength = getTextureTypeByteLength(type); - switch (format) { - case AlphaFormat: - return width * height; - case LuminanceFormat: - return width * height; - case LuminanceAlphaFormat: - return width * height * 2; - case RedFormat: - return width * height / typeByteLength.components * typeByteLength.byteLength; - case RedIntegerFormat: - return width * height / typeByteLength.components * typeByteLength.byteLength; - case RGFormat: - return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; - case RGIntegerFormat: - return width * height * 2 / typeByteLength.components * typeByteLength.byteLength; - case RGBFormat: - return width * height * 3 / typeByteLength.components * typeByteLength.byteLength; - case RGBAFormat: - return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; - case RGBAIntegerFormat: - return width * height * 4 / typeByteLength.components * typeByteLength.byteLength; - case RGB_S3TC_DXT1_Format: - case RGBA_S3TC_DXT1_Format: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; - case RGBA_S3TC_DXT3_Format: - case RGBA_S3TC_DXT5_Format: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; - case RGB_PVRTC_2BPPV1_Format: - case RGBA_PVRTC_2BPPV1_Format: - return Math.max(width, 16) * Math.max(height, 8) / 4; - case RGB_PVRTC_4BPPV1_Format: - case RGBA_PVRTC_4BPPV1_Format: - return Math.max(width, 8) * Math.max(height, 8) / 2; - case RGB_ETC1_Format: - case RGB_ETC2_Format: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; - case RGBA_ETC2_EAC_Format: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; - case RGBA_ASTC_4x4_Format: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; - case RGBA_ASTC_5x4_Format: - return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16; - case RGBA_ASTC_5x5_Format: - return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16; - case RGBA_ASTC_6x5_Format: - return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16; - case RGBA_ASTC_6x6_Format: - return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16; - case RGBA_ASTC_8x5_Format: - return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16; - case RGBA_ASTC_8x6_Format: - return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16; - case RGBA_ASTC_8x8_Format: - return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16; - case RGBA_ASTC_10x5_Format: - return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16; - case RGBA_ASTC_10x6_Format: - return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16; - case RGBA_ASTC_10x8_Format: - return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16; - case RGBA_ASTC_10x10_Format: - return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16; - case RGBA_ASTC_12x10_Format: - return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16; - case RGBA_ASTC_12x12_Format: - return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16; - case RGBA_BPTC_Format: - case RGB_BPTC_SIGNED_Format: - case RGB_BPTC_UNSIGNED_Format: - return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; - case RED_RGTC1_Format: - case SIGNED_RED_RGTC1_Format: - return Math.ceil(width / 4) * Math.ceil(height / 4) * 8; - case RED_GREEN_RGTC2_Format: - case SIGNED_RED_GREEN_RGTC2_Format: - return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; - } - throw new Error( - `Unable to determine texture byte length for ${format} format.` - ); -} -function getTextureTypeByteLength(type) { - switch (type) { - case UnsignedByteType: - case ByteType: - return { byteLength: 1, components: 1 }; - case UnsignedShortType: - case ShortType: - case HalfFloatType: - return { byteLength: 2, components: 1 }; - case UnsignedShort4444Type: - case UnsignedShort5551Type: - return { byteLength: 2, components: 4 }; - case UnsignedIntType: - case IntType: - case FloatType: - return { byteLength: 4, components: 1 }; - case UnsignedInt5999Type: - return { byteLength: 4, components: 3 }; - } - throw new Error(`Unknown texture type ${type}.`); -} -var TextureUtils = { - contain, - cover, - fill, - getByteLength -}; -function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) { - const multisampledRTTExt = extensions.has("WEBGL_multisampled_render_to_texture") ? extensions.get("WEBGL_multisampled_render_to_texture") : null; - const supportsInvalidateFramebuffer = typeof navigator === "undefined" ? false : /OculusBrowser/g.test(navigator.userAgent); - const _imageDimensions = new Vector2(); - const _videoTextures = /* @__PURE__ */ new WeakMap(); - let _canvas2; - const _sources = /* @__PURE__ */ new WeakMap(); - let useOffscreenCanvas = false; - try { - useOffscreenCanvas = typeof OffscreenCanvas !== "undefined" && new OffscreenCanvas(1, 1).getContext("2d") !== null; - } catch (err) { - } - function createCanvas(width, height) { - return useOffscreenCanvas ? ( - // eslint-disable-next-line compat/compat - new OffscreenCanvas(width, height) - ) : createElementNS("canvas"); - } - function resizeImage(image, needsNewCanvas, maxSize) { - let scale = 1; - const dimensions = getDimensions(image); - if (dimensions.width > maxSize || dimensions.height > maxSize) { - scale = maxSize / Math.max(dimensions.width, dimensions.height); - } - if (scale < 1) { - if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap || typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { - const width = Math.floor(scale * dimensions.width); - const height = Math.floor(scale * dimensions.height); - if (_canvas2 === void 0) _canvas2 = createCanvas(width, height); - const canvas = needsNewCanvas ? createCanvas(width, height) : _canvas2; - canvas.width = width; - canvas.height = height; - const context = canvas.getContext("2d"); - context.drawImage(image, 0, 0, width, height); - console.warn("THREE.WebGLRenderer: Texture has been resized from (" + dimensions.width + "x" + dimensions.height + ") to (" + width + "x" + height + ")."); - return canvas; - } else { - if ("data" in image) { - console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + dimensions.width + "x" + dimensions.height + ")."); - } - return image; - } - } - return image; - } - function textureNeedsGenerateMipmaps(texture) { - return texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; - } - function generateMipmap(target) { - _gl.generateMipmap(target); - } - function getInternalFormat(internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false) { - if (internalFormatName !== null) { - if (_gl[internalFormatName] !== void 0) return _gl[internalFormatName]; - console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + internalFormatName + "'"); - } - let internalFormat = glFormat; - if (glFormat === _gl.RED) { - if (glType === _gl.FLOAT) internalFormat = _gl.R32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.R16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8; - } - if (glFormat === _gl.RED_INTEGER) { - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8UI; - if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.R16UI; - if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.R32UI; - if (glType === _gl.BYTE) internalFormat = _gl.R8I; - if (glType === _gl.SHORT) internalFormat = _gl.R16I; - if (glType === _gl.INT) internalFormat = _gl.R32I; - } - if (glFormat === _gl.RG) { - if (glType === _gl.FLOAT) internalFormat = _gl.RG32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RG16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8; - } - if (glFormat === _gl.RG_INTEGER) { - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8UI; - if (glType === _gl.UNSIGNED_SHORT) internalFormat = _gl.RG16UI; - if (glType === _gl.UNSIGNED_INT) internalFormat = _gl.RG32UI; - if (glType === _gl.BYTE) internalFormat = _gl.RG8I; - if (glType === _gl.SHORT) internalFormat = _gl.RG16I; - if (glType === _gl.INT) internalFormat = _gl.RG32I; - } - if (glFormat === _gl.RGB) { - if (glType === _gl.UNSIGNED_INT_5_9_9_9_REV) internalFormat = _gl.RGB9_E5; - } - if (glFormat === _gl.RGBA) { - const transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer(colorSpace); - if (glType === _gl.FLOAT) internalFormat = _gl.RGBA32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RGBA16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = transfer === SRGBTransfer ? _gl.SRGB8_ALPHA8 : _gl.RGBA8; - if (glType === _gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = _gl.RGBA4; - if (glType === _gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = _gl.RGB5_A1; - } - if (internalFormat === _gl.R16F || internalFormat === _gl.R32F || internalFormat === _gl.RG16F || internalFormat === _gl.RG32F || internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F) { - extensions.get("EXT_color_buffer_float"); - } - return internalFormat; - } - function getInternalDepthFormat(useStencil, depthType) { - let glInternalFormat; - if (useStencil) { - if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { - glInternalFormat = _gl.DEPTH24_STENCIL8; - } else if (depthType === FloatType) { - glInternalFormat = _gl.DEPTH32F_STENCIL8; - } else if (depthType === UnsignedShortType) { - glInternalFormat = _gl.DEPTH24_STENCIL8; - console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment."); - } - } else { - if (depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type) { - glInternalFormat = _gl.DEPTH_COMPONENT24; - } else if (depthType === FloatType) { - glInternalFormat = _gl.DEPTH_COMPONENT32F; - } else if (depthType === UnsignedShortType) { - glInternalFormat = _gl.DEPTH_COMPONENT16; - } - } - return glInternalFormat; - } - function getMipLevels(texture, image) { - if (textureNeedsGenerateMipmaps(texture) === true || texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) { - return Math.log2(Math.max(image.width, image.height)) + 1; - } else if (texture.mipmaps !== void 0 && texture.mipmaps.length > 0) { - return texture.mipmaps.length; - } else if (texture.isCompressedTexture && Array.isArray(texture.image)) { - return image.mipmaps.length; - } else { - return 1; - } - } - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener("dispose", onTextureDispose); - deallocateTexture(texture); - if (texture.isVideoTexture) { - _videoTextures.delete(texture); - } - } - function onRenderTargetDispose(event) { - const renderTarget = event.target; - renderTarget.removeEventListener("dispose", onRenderTargetDispose); - deallocateRenderTarget(renderTarget); - } - function deallocateTexture(texture) { - const textureProperties = properties.get(texture); - if (textureProperties.__webglInit === void 0) return; - const source = texture.source; - const webglTextures = _sources.get(source); - if (webglTextures) { - const webglTexture = webglTextures[textureProperties.__cacheKey]; - webglTexture.usedTimes--; - if (webglTexture.usedTimes === 0) { - deleteTexture(texture); - } - if (Object.keys(webglTextures).length === 0) { - _sources.delete(source); - } - } - properties.remove(texture); - } - function deleteTexture(texture) { - const textureProperties = properties.get(texture); - _gl.deleteTexture(textureProperties.__webglTexture); - const source = texture.source; - const webglTextures = _sources.get(source); - delete webglTextures[textureProperties.__cacheKey]; - info.memory.textures--; - } - function deallocateRenderTarget(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - if (renderTarget.depthTexture) { - renderTarget.depthTexture.dispose(); - } - if (renderTarget.isWebGLCubeRenderTarget) { - for (let i = 0; i < 6; i++) { - if (Array.isArray(renderTargetProperties.__webglFramebuffer[i])) { - for (let level = 0; level < renderTargetProperties.__webglFramebuffer[i].length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i][level]); - } else { - _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]); - } - if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]); - } - } else { - if (Array.isArray(renderTargetProperties.__webglFramebuffer)) { - for (let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level++) _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[level]); - } else { - _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer); - } - if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer); - if (renderTargetProperties.__webglMultisampledFramebuffer) _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer); - if (renderTargetProperties.__webglColorRenderbuffer) { - for (let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i++) { - if (renderTargetProperties.__webglColorRenderbuffer[i]) _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer[i]); - } - } - if (renderTargetProperties.__webglDepthRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer); - } - const textures = renderTarget.textures; - for (let i = 0, il = textures.length; i < il; i++) { - const attachmentProperties = properties.get(textures[i]); - if (attachmentProperties.__webglTexture) { - _gl.deleteTexture(attachmentProperties.__webglTexture); - info.memory.textures--; - } - properties.remove(textures[i]); - } - properties.remove(renderTarget); - } - let textureUnits = 0; - function resetTextureUnits() { - textureUnits = 0; - } - function allocateTextureUnit() { - const textureUnit = textureUnits; - if (textureUnit >= capabilities.maxTextures) { - console.warn("THREE.WebGLTextures: Trying to use " + textureUnit + " texture units while this GPU supports only " + capabilities.maxTextures); - } - textureUnits += 1; - return textureUnit; - } - function getTextureCacheKey(texture) { - const array = []; - array.push(texture.wrapS); - array.push(texture.wrapT); - array.push(texture.wrapR || 0); - array.push(texture.magFilter); - array.push(texture.minFilter); - array.push(texture.anisotropy); - array.push(texture.internalFormat); - array.push(texture.format); - array.push(texture.type); - array.push(texture.generateMipmaps); - array.push(texture.premultiplyAlpha); - array.push(texture.flipY); - array.push(texture.unpackAlignment); - array.push(texture.colorSpace); - return array.join(); - } - function setTexture2D(texture, slot) { - const textureProperties = properties.get(texture); - if (texture.isVideoTexture) updateVideoTexture(texture); - if (texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version) { - const image = texture.image; - if (image === null) { - console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found."); - } else if (image.complete === false) { - console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete"); - } else { - uploadTexture(textureProperties, texture, slot); - return; - } - } - state.bindTexture(_gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - } - function setTexture2DArray(texture, slot) { - const textureProperties = properties.get(texture); - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadTexture(textureProperties, texture, slot); - return; - } - state.bindTexture(_gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - } - function setTexture3D(texture, slot) { - const textureProperties = properties.get(texture); - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadTexture(textureProperties, texture, slot); - return; - } - state.bindTexture(_gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - } - function setTextureCube(texture, slot) { - const textureProperties = properties.get(texture); - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadCubeTexture(textureProperties, texture, slot); - return; - } - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - } - const wrappingToGL = { - [RepeatWrapping]: _gl.REPEAT, - [ClampToEdgeWrapping]: _gl.CLAMP_TO_EDGE, - [MirroredRepeatWrapping]: _gl.MIRRORED_REPEAT - }; - const filterToGL = { - [NearestFilter]: _gl.NEAREST, - [NearestMipmapNearestFilter]: _gl.NEAREST_MIPMAP_NEAREST, - [NearestMipmapLinearFilter]: _gl.NEAREST_MIPMAP_LINEAR, - [LinearFilter]: _gl.LINEAR, - [LinearMipmapNearestFilter]: _gl.LINEAR_MIPMAP_NEAREST, - [LinearMipmapLinearFilter]: _gl.LINEAR_MIPMAP_LINEAR - }; - const compareToGL = { - [NeverCompare]: _gl.NEVER, - [AlwaysCompare]: _gl.ALWAYS, - [LessCompare]: _gl.LESS, - [LessEqualCompare]: _gl.LEQUAL, - [EqualCompare]: _gl.EQUAL, - [GreaterEqualCompare]: _gl.GEQUAL, - [GreaterCompare]: _gl.GREATER, - [NotEqualCompare]: _gl.NOTEQUAL - }; - function setTextureParameters(textureType, texture) { - if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false && (texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter || texture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter)) { - console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."); - } - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]); - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]); - if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) { - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]); - } - _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]); - _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]); - if (texture.compareFunction) { - _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE); - _gl.texParameteri(textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[texture.compareFunction]); - } - if (extensions.has("EXT_texture_filter_anisotropic") === true) { - if (texture.magFilter === NearestFilter) return; - if (texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter) return; - if (texture.type === FloatType && extensions.has("OES_texture_float_linear") === false) return; - if (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) { - const extension = extensions.get("EXT_texture_filter_anisotropic"); - _gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy())); - properties.get(texture).__currentAnisotropy = texture.anisotropy; - } - } - } - function initTexture(textureProperties, texture) { - let forceUpload = false; - if (textureProperties.__webglInit === void 0) { - textureProperties.__webglInit = true; - texture.addEventListener("dispose", onTextureDispose); - } - const source = texture.source; - let webglTextures = _sources.get(source); - if (webglTextures === void 0) { - webglTextures = {}; - _sources.set(source, webglTextures); - } - const textureCacheKey = getTextureCacheKey(texture); - if (textureCacheKey !== textureProperties.__cacheKey) { - if (webglTextures[textureCacheKey] === void 0) { - webglTextures[textureCacheKey] = { - texture: _gl.createTexture(), - usedTimes: 0 - }; - info.memory.textures++; - forceUpload = true; - } - webglTextures[textureCacheKey].usedTimes++; - const webglTexture = webglTextures[textureProperties.__cacheKey]; - if (webglTexture !== void 0) { - webglTextures[textureProperties.__cacheKey].usedTimes--; - if (webglTexture.usedTimes === 0) { - deleteTexture(texture); - } - } - textureProperties.__cacheKey = textureCacheKey; - textureProperties.__webglTexture = webglTextures[textureCacheKey].texture; - } - return forceUpload; - } - function uploadTexture(textureProperties, texture, slot) { - let textureType = _gl.TEXTURE_2D; - if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) textureType = _gl.TEXTURE_2D_ARRAY; - if (texture.isData3DTexture) textureType = _gl.TEXTURE_3D; - const forceUpload = initTexture(textureProperties, texture); - const source = texture.source; - state.bindTexture(textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - const sourceProperties = properties.get(source); - if (source.version !== sourceProperties.__version || forceUpload === true) { - state.activeTexture(_gl.TEXTURE0 + slot); - const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); - const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); - const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); - _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); - let image = resizeImage(texture.image, false, capabilities.maxTextureSize); - image = verifyColorSpace(texture, image); - const glFormat = utils.convert(texture.format, texture.colorSpace); - const glType = utils.convert(texture.type); - let glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture); - setTextureParameters(textureType, texture); - let mipmap; - const mipmaps = texture.mipmaps; - const useTexStorage = texture.isVideoTexture !== true; - const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; - const dataReady = source.dataReady; - const levels = getMipLevels(texture, image); - if (texture.isDepthTexture) { - glInternalFormat = getInternalDepthFormat(texture.format === DepthStencilFormat, texture.type); - if (allocateMemory) { - if (useTexStorage) { - state.texStorage2D(_gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height); - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null); - } - } - } else if (texture.isDataTexture) { - if (mipmaps.length > 0) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); - } - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - texture.generateMipmaps = false; - } else { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); - } - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data); - } - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data); - } - } - } else if (texture.isCompressedTexture) { - if (texture.isCompressedArrayTexture) { - if (useTexStorage && allocateMemory) { - state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height, image.depth); - } - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - if (texture.format !== RGBAFormat) { - if (glFormat !== null) { - if (useTexStorage) { - if (dataReady) { - if (texture.layerUpdates.size > 0) { - const layerByteLength = getByteLength(mipmap.width, mipmap.height, texture.format, texture.type); - for (const layerIndex of texture.layerUpdates) { - const layerData = mipmap.data.subarray( - layerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT, - (layerIndex + 1) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT - ); - state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0); - } - texture.clearLayerUpdates(); - } else { - state.compressedTexSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0); - } - } - } else { - state.compressedTexImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0); - } - } else { - console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); - } - } else { - if (useTexStorage) { - if (dataReady) { - state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data); - } - } else { - state.texImage3D(_gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data); - } - } - } - } else { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); - } - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - if (texture.format !== RGBAFormat) { - if (glFormat !== null) { - if (useTexStorage) { - if (dataReady) { - state.compressedTexSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); - } - } else { - state.compressedTexImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); - } - } else { - console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"); - } - } else { - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - } - } - } else if (texture.isDataArrayTexture) { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth); - } - if (dataReady) { - if (texture.layerUpdates.size > 0) { - const layerByteLength = getByteLength(image.width, image.height, texture.format, texture.type); - for (const layerIndex of texture.layerUpdates) { - const layerData = image.data.subarray( - layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT, - (layerIndex + 1) * layerByteLength / image.data.BYTES_PER_ELEMENT - ); - state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData); - } - texture.clearLayerUpdates(); - } else { - state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } - } - } else { - state.texImage3D(_gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); - } - } else if (texture.isData3DTexture) { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage3D(_gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth); - } - if (dataReady) { - state.texSubImage3D(_gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } - } else { - state.texImage3D(_gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); - } - } else if (texture.isFramebufferTexture) { - if (allocateMemory) { - if (useTexStorage) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); - } else { - let width = image.width, height = image.height; - for (let i = 0; i < levels; i++) { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null); - width >>= 1; - height >>= 1; - } - } - } - } else { - if (mipmaps.length > 0) { - if (useTexStorage && allocateMemory) { - const dimensions = getDimensions(mipmaps[0]); - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); - } - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap); - } - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap); - } - } - texture.generateMipmaps = false; - } else { - if (useTexStorage) { - if (allocateMemory) { - const dimensions = getDimensions(image); - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height); - } - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image); - } - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image); - } - } - } - if (textureNeedsGenerateMipmaps(texture)) { - generateMipmap(textureType); - } - sourceProperties.__version = source.version; - if (texture.onUpdate) texture.onUpdate(texture); - } - textureProperties.__version = texture.version; - } - function uploadCubeTexture(textureProperties, texture, slot) { - if (texture.image.length !== 6) return; - const forceUpload = initTexture(textureProperties, texture); - const source = texture.source; - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot); - const sourceProperties = properties.get(source); - if (source.version !== sourceProperties.__version || forceUpload === true) { - state.activeTexture(_gl.TEXTURE0 + slot); - const workingPrimaries = ColorManagement.getPrimaries(ColorManagement.workingColorSpace); - const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries(texture.colorSpace); - const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL; - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); - _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion); - const isCompressed = texture.isCompressedTexture || texture.image[0].isCompressedTexture; - const isDataTexture = texture.image[0] && texture.image[0].isDataTexture; - const cubeImage = []; - for (let i = 0; i < 6; i++) { - if (!isCompressed && !isDataTexture) { - cubeImage[i] = resizeImage(texture.image[i], true, capabilities.maxCubemapSize); - } else { - cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i]; - } - cubeImage[i] = verifyColorSpace(texture, cubeImage[i]); - } - const image = cubeImage[0], glFormat = utils.convert(texture.format, texture.colorSpace), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); - const useTexStorage = texture.isVideoTexture !== true; - const allocateMemory = sourceProperties.__version === void 0 || forceUpload === true; - const dataReady = source.dataReady; - let levels = getMipLevels(texture, image); - setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); - let mipmaps; - if (isCompressed) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height); - } - for (let i = 0; i < 6; i++) { - mipmaps = cubeImage[i].mipmaps; - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - if (texture.format !== RGBAFormat) { - if (glFormat !== null) { - if (useTexStorage) { - if (dataReady) { - state.compressedTexSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); - } - } else { - state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); - } - } else { - console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"); - } - } else { - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - } - } - } else { - mipmaps = texture.mipmaps; - if (useTexStorage && allocateMemory) { - if (mipmaps.length > 0) levels++; - const dimensions = getDimensions(cubeImage[0]); - state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height); - } - for (let i = 0; i < 6; i++) { - if (isDataTexture) { - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[i].width, cubeImage[i].height, glFormat, glType, cubeImage[i].data); - } - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[i].width, cubeImage[i].height, 0, glFormat, glType, cubeImage[i].data); - } - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - const mipmapImage = mipmap.image[i].image; - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data); - } - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data); - } - } - } else { - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[i]); - } - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[i]); - } - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - if (useTexStorage) { - if (dataReady) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[i]); - } - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[i]); - } - } - } - } - } - if (textureNeedsGenerateMipmaps(texture)) { - generateMipmap(_gl.TEXTURE_CUBE_MAP); - } - sourceProperties.__version = source.version; - if (texture.onUpdate) texture.onUpdate(texture); - } - textureProperties.__version = texture.version; - } - function setupFrameBufferTexture(framebuffer, renderTarget, texture, attachment, textureTarget, level) { - const glFormat = utils.convert(texture.format, texture.colorSpace); - const glType = utils.convert(texture.type); - const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); - const renderTargetProperties = properties.get(renderTarget); - if (!renderTargetProperties.__hasExternalTextures) { - const width = Math.max(1, renderTarget.width >> level); - const height = Math.max(1, renderTarget.height >> level); - if (textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY) { - state.texImage3D(textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null); - } else { - state.texImage2D(textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null); - } - } - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, 0, getRenderTargetSamples(renderTarget)); - } else if (textureTarget === _gl.TEXTURE_2D || textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, level); - } - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } - function setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) { - _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); - if (renderTarget.depthBuffer) { - const depthTexture = renderTarget.depthTexture; - const depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null; - const glInternalFormat = getInternalDepthFormat(renderTarget.stencilBuffer, depthType); - const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; - const samples = getRenderTargetSamples(renderTarget); - const isUseMultisampledRTT = useMultisampledRTT(renderTarget); - if (isUseMultisampledRTT) { - multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else if (isMultisample) { - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else { - _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); - } - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer); - } else { - const textures = renderTarget.textures; - for (let i = 0; i < textures.length; i++) { - const texture = textures[i]; - const glFormat = utils.convert(texture.format, texture.colorSpace); - const glType = utils.convert(texture.type); - const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.colorSpace); - const samples = getRenderTargetSamples(renderTarget); - if (isMultisample && useMultisampledRTT(renderTarget) === false) { - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else { - _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); - } - } - } - _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); - } - function setupDepthTexture(framebuffer, renderTarget) { - const isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget; - if (isCube) throw new Error("Depth Texture with cube render targets is not supported"); - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - if (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) { - throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); - } - if (!properties.get(renderTarget.depthTexture).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) { - renderTarget.depthTexture.image.width = renderTarget.width; - renderTarget.depthTexture.image.height = renderTarget.height; - renderTarget.depthTexture.needsUpdate = true; - } - setTexture2D(renderTarget.depthTexture, 0); - const webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture; - const samples = getRenderTargetSamples(renderTarget); - if (renderTarget.depthTexture.format === DepthFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); - } else { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); - } - } else if (renderTarget.depthTexture.format === DepthStencilFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); - } else { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); - } - } else { - throw new Error("Unknown depthTexture format"); - } - } - function setupDepthRenderbuffer(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - const isCube = renderTarget.isWebGLCubeRenderTarget === true; - if (renderTarget.depthTexture && !renderTargetProperties.__autoAllocateDepthBuffer) { - if (isCube) throw new Error("target.depthTexture not supported in Cube render targets"); - setupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget); - } else { - if (isCube) { - renderTargetProperties.__webglDepthbuffer = []; - for (let i = 0; i < 6; i++) { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[i]); - renderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false); - } - } else { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false); - } - } - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } - function rebindTextures(renderTarget, colorTexture, depthTexture) { - const renderTargetProperties = properties.get(renderTarget); - if (colorTexture !== void 0) { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0); - } - if (depthTexture !== void 0) { - setupDepthRenderbuffer(renderTarget); - } - } - function setupRenderTarget(renderTarget) { - const texture = renderTarget.texture; - const renderTargetProperties = properties.get(renderTarget); - const textureProperties = properties.get(texture); - renderTarget.addEventListener("dispose", onRenderTargetDispose); - const textures = renderTarget.textures; - const isCube = renderTarget.isWebGLCubeRenderTarget === true; - const isMultipleRenderTargets = textures.length > 1; - if (!isMultipleRenderTargets) { - if (textureProperties.__webglTexture === void 0) { - textureProperties.__webglTexture = _gl.createTexture(); - } - textureProperties.__version = texture.version; - info.memory.textures++; - } - if (isCube) { - renderTargetProperties.__webglFramebuffer = []; - for (let i = 0; i < 6; i++) { - if (texture.mipmaps && texture.mipmaps.length > 0) { - renderTargetProperties.__webglFramebuffer[i] = []; - for (let level = 0; level < texture.mipmaps.length; level++) { - renderTargetProperties.__webglFramebuffer[i][level] = _gl.createFramebuffer(); - } - } else { - renderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer(); - } - } - } else { - if (texture.mipmaps && texture.mipmaps.length > 0) { - renderTargetProperties.__webglFramebuffer = []; - for (let level = 0; level < texture.mipmaps.length; level++) { - renderTargetProperties.__webglFramebuffer[level] = _gl.createFramebuffer(); - } - } else { - renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); - } - if (isMultipleRenderTargets) { - for (let i = 0, il = textures.length; i < il; i++) { - const attachmentProperties = properties.get(textures[i]); - if (attachmentProperties.__webglTexture === void 0) { - attachmentProperties.__webglTexture = _gl.createTexture(); - info.memory.textures++; - } - } - } - if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { - renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); - renderTargetProperties.__webglColorRenderbuffer = []; - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - for (let i = 0; i < textures.length; i++) { - const texture2 = textures[i]; - renderTargetProperties.__webglColorRenderbuffer[i] = _gl.createRenderbuffer(); - _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); - const glFormat = utils.convert(texture2.format, texture2.colorSpace); - const glType = utils.convert(texture2.type); - const glInternalFormat = getInternalFormat(texture2.internalFormat, glFormat, glType, texture2.colorSpace, renderTarget.isXRRenderTarget === true); - const samples = getRenderTargetSamples(renderTarget); - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); - } - _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); - if (renderTarget.depthBuffer) { - renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true); - } - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } - } - if (isCube) { - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); - setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture); - for (let i = 0; i < 6; i++) { - if (texture.mipmaps && texture.mipmaps.length > 0) { - for (let level = 0; level < texture.mipmaps.length; level++) { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i][level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level); - } - } else { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0); - } - } - if (textureNeedsGenerateMipmaps(texture)) { - generateMipmap(_gl.TEXTURE_CUBE_MAP); - } - state.unbindTexture(); - } else if (isMultipleRenderTargets) { - for (let i = 0, il = textures.length; i < il; i++) { - const attachment = textures[i]; - const attachmentProperties = properties.get(attachment); - state.bindTexture(_gl.TEXTURE_2D, attachmentProperties.__webglTexture); - setTextureParameters(_gl.TEXTURE_2D, attachment); - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0); - if (textureNeedsGenerateMipmaps(attachment)) { - generateMipmap(_gl.TEXTURE_2D); - } - } - state.unbindTexture(); - } else { - let glTextureType = _gl.TEXTURE_2D; - if (renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { - glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY; - } - state.bindTexture(glTextureType, textureProperties.__webglTexture); - setTextureParameters(glTextureType, texture); - if (texture.mipmaps && texture.mipmaps.length > 0) { - for (let level = 0; level < texture.mipmaps.length; level++) { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[level], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level); - } - } else { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0); - } - if (textureNeedsGenerateMipmaps(texture)) { - generateMipmap(glTextureType); - } - state.unbindTexture(); - } - if (renderTarget.depthBuffer) { - setupDepthRenderbuffer(renderTarget); - } - } - function updateRenderTargetMipmap(renderTarget) { - const textures = renderTarget.textures; - for (let i = 0, il = textures.length; i < il; i++) { - const texture = textures[i]; - if (textureNeedsGenerateMipmaps(texture)) { - const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; - const webglTexture = properties.get(texture).__webglTexture; - state.bindTexture(target, webglTexture); - generateMipmap(target); - state.unbindTexture(); - } - } - } - const invalidationArrayRead = []; - const invalidationArrayDraw = []; - function updateMultisampleRenderTarget(renderTarget) { - if (renderTarget.samples > 0) { - if (useMultisampledRTT(renderTarget) === false) { - const textures = renderTarget.textures; - const width = renderTarget.width; - const height = renderTarget.height; - let mask = _gl.COLOR_BUFFER_BIT; - const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; - const renderTargetProperties = properties.get(renderTarget); - const isMultipleRenderTargets = textures.length > 1; - if (isMultipleRenderTargets) { - for (let i = 0; i < textures.length; i++) { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null); - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0); - } - } - state.bindFramebuffer(_gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - for (let i = 0; i < textures.length; i++) { - if (renderTarget.resolveDepthBuffer) { - if (renderTarget.depthBuffer) mask |= _gl.DEPTH_BUFFER_BIT; - if (renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer) mask |= _gl.STENCIL_BUFFER_BIT; - } - if (isMultipleRenderTargets) { - _gl.framebufferRenderbuffer(_gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); - const webglTexture = properties.get(textures[i]).__webglTexture; - _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0); - } - _gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST); - if (supportsInvalidateFramebuffer === true) { - invalidationArrayRead.length = 0; - invalidationArrayDraw.length = 0; - invalidationArrayRead.push(_gl.COLOR_ATTACHMENT0 + i); - if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false) { - invalidationArrayRead.push(depthStyle); - invalidationArrayDraw.push(depthStyle); - _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, invalidationArrayDraw); - } - _gl.invalidateFramebuffer(_gl.READ_FRAMEBUFFER, invalidationArrayRead); - } - } - state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null); - state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, null); - if (isMultipleRenderTargets) { - for (let i = 0; i < textures.length; i++) { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[i]); - const webglTexture = properties.get(textures[i]).__webglTexture; - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - _gl.framebufferTexture2D(_gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0); - } - } - state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - } else { - if (renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer) { - const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; - _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, [depthStyle]); - } - } - } - } - function getRenderTargetSamples(renderTarget) { - return Math.min(capabilities.maxSamples, renderTarget.samples); - } - function useMultisampledRTT(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - return renderTarget.samples > 0 && extensions.has("WEBGL_multisampled_render_to_texture") === true && renderTargetProperties.__useRenderToTexture !== false; - } - function updateVideoTexture(texture) { - const frame = info.render.frame; - if (_videoTextures.get(texture) !== frame) { - _videoTextures.set(texture, frame); - texture.update(); - } - } - function verifyColorSpace(texture, image) { - const colorSpace = texture.colorSpace; - const format = texture.format; - const type = texture.type; - if (texture.isCompressedTexture === true || texture.isVideoTexture === true) return image; - if (colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace) { - if (ColorManagement.getTransfer(colorSpace) === SRGBTransfer) { - if (format !== RGBAFormat || type !== UnsignedByteType) { - console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."); - } - } else { - console.error("THREE.WebGLTextures: Unsupported texture color space:", colorSpace); - } - } - return image; - } - function getDimensions(image) { - if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement) { - _imageDimensions.width = image.naturalWidth || image.width; - _imageDimensions.height = image.naturalHeight || image.height; - } else if (typeof VideoFrame !== "undefined" && image instanceof VideoFrame) { - _imageDimensions.width = image.displayWidth; - _imageDimensions.height = image.displayHeight; - } else { - _imageDimensions.width = image.width; - _imageDimensions.height = image.height; - } - return _imageDimensions; - } - this.allocateTextureUnit = allocateTextureUnit; - this.resetTextureUnits = resetTextureUnits; - this.setTexture2D = setTexture2D; - this.setTexture2DArray = setTexture2DArray; - this.setTexture3D = setTexture3D; - this.setTextureCube = setTextureCube; - this.rebindTextures = rebindTextures; - this.setupRenderTarget = setupRenderTarget; - this.updateRenderTargetMipmap = updateRenderTargetMipmap; - this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; - this.setupDepthRenderbuffer = setupDepthRenderbuffer; - this.setupFrameBufferTexture = setupFrameBufferTexture; - this.useMultisampledRTT = useMultisampledRTT; -} -function WebGLUtils(gl, extensions) { - function convert(p, colorSpace = NoColorSpace) { - let extension; - const transfer = ColorManagement.getTransfer(colorSpace); - if (p === UnsignedByteType) return gl.UNSIGNED_BYTE; - if (p === UnsignedShort4444Type) return gl.UNSIGNED_SHORT_4_4_4_4; - if (p === UnsignedShort5551Type) return gl.UNSIGNED_SHORT_5_5_5_1; - if (p === UnsignedInt5999Type) return gl.UNSIGNED_INT_5_9_9_9_REV; - if (p === ByteType) return gl.BYTE; - if (p === ShortType) return gl.SHORT; - if (p === UnsignedShortType) return gl.UNSIGNED_SHORT; - if (p === IntType) return gl.INT; - if (p === UnsignedIntType) return gl.UNSIGNED_INT; - if (p === FloatType) return gl.FLOAT; - if (p === HalfFloatType) return gl.HALF_FLOAT; - if (p === AlphaFormat) return gl.ALPHA; - if (p === RGBFormat) return gl.RGB; - if (p === RGBAFormat) return gl.RGBA; - if (p === LuminanceFormat) return gl.LUMINANCE; - if (p === LuminanceAlphaFormat) return gl.LUMINANCE_ALPHA; - if (p === DepthFormat) return gl.DEPTH_COMPONENT; - if (p === DepthStencilFormat) return gl.DEPTH_STENCIL; - if (p === RedFormat) return gl.RED; - if (p === RedIntegerFormat) return gl.RED_INTEGER; - if (p === RGFormat) return gl.RG; - if (p === RGIntegerFormat) return gl.RG_INTEGER; - if (p === RGBAIntegerFormat) return gl.RGBA_INTEGER; - if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { - if (transfer === SRGBTransfer) { - extension = extensions.get("WEBGL_compressed_texture_s3tc_srgb"); - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; - } else { - return null; - } - } else { - extension = extensions.get("WEBGL_compressed_texture_s3tc"); - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; - } else { - return null; - } - } - } - if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { - extension = extensions.get("WEBGL_compressed_texture_pvrtc"); - if (extension !== null) { - if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; - } else { - return null; - } - } - if (p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { - extension = extensions.get("WEBGL_compressed_texture_etc"); - if (extension !== null) { - if (p === RGB_ETC1_Format || p === RGB_ETC2_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; - if (p === RGBA_ETC2_EAC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; - } else { - return null; - } - } - if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { - extension = extensions.get("WEBGL_compressed_texture_astc"); - if (extension !== null) { - if (p === RGBA_ASTC_4x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; - if (p === RGBA_ASTC_5x4_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; - if (p === RGBA_ASTC_5x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; - if (p === RGBA_ASTC_6x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; - if (p === RGBA_ASTC_6x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; - if (p === RGBA_ASTC_8x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; - if (p === RGBA_ASTC_8x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; - if (p === RGBA_ASTC_8x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; - if (p === RGBA_ASTC_10x5_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; - if (p === RGBA_ASTC_10x6_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; - if (p === RGBA_ASTC_10x8_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; - if (p === RGBA_ASTC_10x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; - if (p === RGBA_ASTC_12x10_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; - if (p === RGBA_ASTC_12x12_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; - } else { - return null; - } - } - if (p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format) { - extension = extensions.get("EXT_texture_compression_bptc"); - if (extension !== null) { - if (p === RGBA_BPTC_Format) return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; - if (p === RGB_BPTC_SIGNED_Format) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT; - if (p === RGB_BPTC_UNSIGNED_Format) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT; - } else { - return null; - } - } - if (p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format) { - extension = extensions.get("EXT_texture_compression_rgtc"); - if (extension !== null) { - if (p === RGBA_BPTC_Format) return extension.COMPRESSED_RED_RGTC1_EXT; - if (p === SIGNED_RED_RGTC1_Format) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT; - if (p === RED_GREEN_RGTC2_Format) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT; - if (p === SIGNED_RED_GREEN_RGTC2_Format) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT; - } else { - return null; - } - } - if (p === UnsignedInt248Type) return gl.UNSIGNED_INT_24_8; - return gl[p] !== void 0 ? gl[p] : null; - } - return { convert }; -} -var ArrayCamera = class extends PerspectiveCamera { - constructor(array = []) { - super(); - this.isArrayCamera = true; - this.cameras = array; - } -}; -var Group = class extends Object3D { - constructor() { - super(); - this.isGroup = true; - this.type = "Group"; - } -}; -var _moveEvent = { type: "move" }; -var WebXRController = class { - constructor() { - this._targetRay = null; - this._grip = null; - this._hand = null; - } - getHandSpace() { - if (this._hand === null) { - this._hand = new Group(); - this._hand.matrixAutoUpdate = false; - this._hand.visible = false; - this._hand.joints = {}; - this._hand.inputState = { pinching: false }; - } - return this._hand; - } - getTargetRaySpace() { - if (this._targetRay === null) { - this._targetRay = new Group(); - this._targetRay.matrixAutoUpdate = false; - this._targetRay.visible = false; - this._targetRay.hasLinearVelocity = false; - this._targetRay.linearVelocity = new Vector3(); - this._targetRay.hasAngularVelocity = false; - this._targetRay.angularVelocity = new Vector3(); - } - return this._targetRay; - } - getGripSpace() { - if (this._grip === null) { - this._grip = new Group(); - this._grip.matrixAutoUpdate = false; - this._grip.visible = false; - this._grip.hasLinearVelocity = false; - this._grip.linearVelocity = new Vector3(); - this._grip.hasAngularVelocity = false; - this._grip.angularVelocity = new Vector3(); - } - return this._grip; - } - dispatchEvent(event) { - if (this._targetRay !== null) { - this._targetRay.dispatchEvent(event); - } - if (this._grip !== null) { - this._grip.dispatchEvent(event); - } - if (this._hand !== null) { - this._hand.dispatchEvent(event); - } - return this; - } - connect(inputSource) { - if (inputSource && inputSource.hand) { - const hand = this._hand; - if (hand) { - for (const inputjoint of inputSource.hand.values()) { - this._getHandJoint(hand, inputjoint); - } - } - } - this.dispatchEvent({ type: "connected", data: inputSource }); - return this; - } - disconnect(inputSource) { - this.dispatchEvent({ type: "disconnected", data: inputSource }); - if (this._targetRay !== null) { - this._targetRay.visible = false; - } - if (this._grip !== null) { - this._grip.visible = false; - } - if (this._hand !== null) { - this._hand.visible = false; - } - return this; - } - update(inputSource, frame, referenceSpace) { - let inputPose = null; - let gripPose = null; - let handPose = null; - const targetRay = this._targetRay; - const grip = this._grip; - const hand = this._hand; - if (inputSource && frame.session.visibilityState !== "visible-blurred") { - if (hand && inputSource.hand) { - handPose = true; - for (const inputjoint of inputSource.hand.values()) { - const jointPose = frame.getJointPose(inputjoint, referenceSpace); - const joint = this._getHandJoint(hand, inputjoint); - if (jointPose !== null) { - joint.matrix.fromArray(jointPose.transform.matrix); - joint.matrix.decompose(joint.position, joint.rotation, joint.scale); - joint.matrixWorldNeedsUpdate = true; - joint.jointRadius = jointPose.radius; - } - joint.visible = jointPose !== null; - } - const indexTip = hand.joints["index-finger-tip"]; - const thumbTip = hand.joints["thumb-tip"]; - const distance = indexTip.position.distanceTo(thumbTip.position); - const distanceToPinch = 0.02; - const threshold = 5e-3; - if (hand.inputState.pinching && distance > distanceToPinch + threshold) { - hand.inputState.pinching = false; - this.dispatchEvent({ - type: "pinchend", - handedness: inputSource.handedness, - target: this - }); - } else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) { - hand.inputState.pinching = true; - this.dispatchEvent({ - type: "pinchstart", - handedness: inputSource.handedness, - target: this - }); - } - } else { - if (grip !== null && inputSource.gripSpace) { - gripPose = frame.getPose(inputSource.gripSpace, referenceSpace); - if (gripPose !== null) { - grip.matrix.fromArray(gripPose.transform.matrix); - grip.matrix.decompose(grip.position, grip.rotation, grip.scale); - grip.matrixWorldNeedsUpdate = true; - if (gripPose.linearVelocity) { - grip.hasLinearVelocity = true; - grip.linearVelocity.copy(gripPose.linearVelocity); - } else { - grip.hasLinearVelocity = false; - } - if (gripPose.angularVelocity) { - grip.hasAngularVelocity = true; - grip.angularVelocity.copy(gripPose.angularVelocity); - } else { - grip.hasAngularVelocity = false; - } - } - } - } - if (targetRay !== null) { - inputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace); - if (inputPose === null && gripPose !== null) { - inputPose = gripPose; - } - if (inputPose !== null) { - targetRay.matrix.fromArray(inputPose.transform.matrix); - targetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale); - targetRay.matrixWorldNeedsUpdate = true; - if (inputPose.linearVelocity) { - targetRay.hasLinearVelocity = true; - targetRay.linearVelocity.copy(inputPose.linearVelocity); - } else { - targetRay.hasLinearVelocity = false; - } - if (inputPose.angularVelocity) { - targetRay.hasAngularVelocity = true; - targetRay.angularVelocity.copy(inputPose.angularVelocity); - } else { - targetRay.hasAngularVelocity = false; - } - this.dispatchEvent(_moveEvent); - } - } - } - if (targetRay !== null) { - targetRay.visible = inputPose !== null; - } - if (grip !== null) { - grip.visible = gripPose !== null; - } - if (hand !== null) { - hand.visible = handPose !== null; - } - return this; - } - // private method - _getHandJoint(hand, inputjoint) { - if (hand.joints[inputjoint.jointName] === void 0) { - const joint = new Group(); - joint.matrixAutoUpdate = false; - joint.visible = false; - hand.joints[inputjoint.jointName] = joint; - hand.add(joint); - } - return hand.joints[inputjoint.jointName]; - } -}; -var _occlusion_vertex = ` -void main() { - - gl_Position = vec4( position, 1.0 ); - -}`; -var _occlusion_fragment = ` -uniform sampler2DArray depthColor; -uniform float depthWidth; -uniform float depthHeight; - -void main() { - - vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); - - if ( coord.x >= 1.0 ) { - - gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; - - } else { - - gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; - - } - -}`; -var WebXRDepthSensing = class { - constructor() { - this.texture = null; - this.mesh = null; - this.depthNear = 0; - this.depthFar = 0; - } - init(renderer, depthData, renderState) { - if (this.texture === null) { - const texture = new Texture(); - const texProps = renderer.properties.get(texture); - texProps.__webglTexture = depthData.texture; - if (depthData.depthNear != renderState.depthNear || depthData.depthFar != renderState.depthFar) { - this.depthNear = depthData.depthNear; - this.depthFar = depthData.depthFar; - } - this.texture = texture; - } - } - getMesh(cameraXR) { - if (this.texture !== null) { - if (this.mesh === null) { - const viewport = cameraXR.cameras[0].viewport; - const material = new ShaderMaterial({ - vertexShader: _occlusion_vertex, - fragmentShader: _occlusion_fragment, - uniforms: { - depthColor: { value: this.texture }, - depthWidth: { value: viewport.z }, - depthHeight: { value: viewport.w } - } - }); - this.mesh = new Mesh(new PlaneGeometry(20, 20), material); - } - } - return this.mesh; - } - reset() { - this.texture = null; - this.mesh = null; - } - getDepthTexture() { - return this.texture; - } -}; -var WebXRManager = class extends EventDispatcher { - constructor(renderer, gl) { - super(); - const scope = this; - let session = null; - let framebufferScaleFactor = 1; - let referenceSpace = null; - let referenceSpaceType = "local-floor"; - let foveation = 1; - let customReferenceSpace = null; - let pose = null; - let glBinding = null; - let glProjLayer = null; - let glBaseLayer = null; - let xrFrame = null; - const depthSensing = new WebXRDepthSensing(); - const attributes = gl.getContextAttributes(); - let initialRenderTarget = null; - let newRenderTarget = null; - const controllers = []; - const controllerInputSources = []; - const currentSize = new Vector2(); - let currentPixelRatio = null; - const cameraL = new PerspectiveCamera(); - cameraL.layers.enable(1); - cameraL.viewport = new Vector4(); - const cameraR = new PerspectiveCamera(); - cameraR.layers.enable(2); - cameraR.viewport = new Vector4(); - const cameras = [cameraL, cameraR]; - const cameraXR = new ArrayCamera(); - cameraXR.layers.enable(1); - cameraXR.layers.enable(2); - let _currentDepthNear = null; - let _currentDepthFar = null; - this.cameraAutoUpdate = true; - this.enabled = false; - this.isPresenting = false; - this.getController = function(index) { - let controller = controllers[index]; - if (controller === void 0) { - controller = new WebXRController(); - controllers[index] = controller; - } - return controller.getTargetRaySpace(); - }; - this.getControllerGrip = function(index) { - let controller = controllers[index]; - if (controller === void 0) { - controller = new WebXRController(); - controllers[index] = controller; - } - return controller.getGripSpace(); - }; - this.getHand = function(index) { - let controller = controllers[index]; - if (controller === void 0) { - controller = new WebXRController(); - controllers[index] = controller; - } - return controller.getHandSpace(); - }; - function onSessionEvent(event) { - const controllerIndex = controllerInputSources.indexOf(event.inputSource); - if (controllerIndex === -1) { - return; - } - const controller = controllers[controllerIndex]; - if (controller !== void 0) { - controller.update(event.inputSource, event.frame, customReferenceSpace || referenceSpace); - controller.dispatchEvent({ type: event.type, data: event.inputSource }); - } - } - function onSessionEnd() { - session.removeEventListener("select", onSessionEvent); - session.removeEventListener("selectstart", onSessionEvent); - session.removeEventListener("selectend", onSessionEvent); - session.removeEventListener("squeeze", onSessionEvent); - session.removeEventListener("squeezestart", onSessionEvent); - session.removeEventListener("squeezeend", onSessionEvent); - session.removeEventListener("end", onSessionEnd); - session.removeEventListener("inputsourceschange", onInputSourcesChange); - for (let i = 0; i < controllers.length; i++) { - const inputSource = controllerInputSources[i]; - if (inputSource === null) continue; - controllerInputSources[i] = null; - controllers[i].disconnect(inputSource); - } - _currentDepthNear = null; - _currentDepthFar = null; - depthSensing.reset(); - renderer.setRenderTarget(initialRenderTarget); - glBaseLayer = null; - glProjLayer = null; - glBinding = null; - session = null; - newRenderTarget = null; - animation.stop(); - scope.isPresenting = false; - renderer.setPixelRatio(currentPixelRatio); - renderer.setSize(currentSize.width, currentSize.height, false); - scope.dispatchEvent({ type: "sessionend" }); - } - this.setFramebufferScaleFactor = function(value) { - framebufferScaleFactor = value; - if (scope.isPresenting === true) { - console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting."); - } - }; - this.setReferenceSpaceType = function(value) { - referenceSpaceType = value; - if (scope.isPresenting === true) { - console.warn("THREE.WebXRManager: Cannot change reference space type while presenting."); - } - }; - this.getReferenceSpace = function() { - return customReferenceSpace || referenceSpace; - }; - this.setReferenceSpace = function(space) { - customReferenceSpace = space; - }; - this.getBaseLayer = function() { - return glProjLayer !== null ? glProjLayer : glBaseLayer; - }; - this.getBinding = function() { - return glBinding; - }; - this.getFrame = function() { - return xrFrame; - }; - this.getSession = function() { - return session; - }; - this.setSession = async function(value) { - session = value; - if (session !== null) { - initialRenderTarget = renderer.getRenderTarget(); - session.addEventListener("select", onSessionEvent); - session.addEventListener("selectstart", onSessionEvent); - session.addEventListener("selectend", onSessionEvent); - session.addEventListener("squeeze", onSessionEvent); - session.addEventListener("squeezestart", onSessionEvent); - session.addEventListener("squeezeend", onSessionEvent); - session.addEventListener("end", onSessionEnd); - session.addEventListener("inputsourceschange", onInputSourcesChange); - if (attributes.xrCompatible !== true) { - await gl.makeXRCompatible(); - } - currentPixelRatio = renderer.getPixelRatio(); - renderer.getSize(currentSize); - if (session.renderState.layers === void 0) { - const layerInit = { - antialias: attributes.antialias, - alpha: true, - depth: attributes.depth, - stencil: attributes.stencil, - framebufferScaleFactor - }; - glBaseLayer = new XRWebGLLayer(session, gl, layerInit); - session.updateRenderState({ baseLayer: glBaseLayer }); - renderer.setPixelRatio(1); - renderer.setSize(glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false); - newRenderTarget = new WebGLRenderTarget( - glBaseLayer.framebufferWidth, - glBaseLayer.framebufferHeight, - { - format: RGBAFormat, - type: UnsignedByteType, - colorSpace: renderer.outputColorSpace, - stencilBuffer: attributes.stencil - } - ); - } else { - let depthFormat = null; - let depthType = null; - let glDepthFormat = null; - if (attributes.depth) { - glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24; - depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat; - depthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType; - } - const projectionlayerInit = { - colorFormat: gl.RGBA8, - depthFormat: glDepthFormat, - scaleFactor: framebufferScaleFactor - }; - glBinding = new XRWebGLBinding(session, gl); - glProjLayer = glBinding.createProjectionLayer(projectionlayerInit); - session.updateRenderState({ layers: [glProjLayer] }); - renderer.setPixelRatio(1); - renderer.setSize(glProjLayer.textureWidth, glProjLayer.textureHeight, false); - newRenderTarget = new WebGLRenderTarget( - glProjLayer.textureWidth, - glProjLayer.textureHeight, - { - format: RGBAFormat, - type: UnsignedByteType, - depthTexture: new DepthTexture(glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, void 0, void 0, void 0, void 0, void 0, void 0, depthFormat), - stencilBuffer: attributes.stencil, - colorSpace: renderer.outputColorSpace, - samples: attributes.antialias ? 4 : 0, - resolveDepthBuffer: glProjLayer.ignoreDepthValues === false - } - ); - } - newRenderTarget.isXRRenderTarget = true; - this.setFoveation(foveation); - customReferenceSpace = null; - referenceSpace = await session.requestReferenceSpace(referenceSpaceType); - animation.setContext(session); - animation.start(); - scope.isPresenting = true; - scope.dispatchEvent({ type: "sessionstart" }); - } - }; - this.getEnvironmentBlendMode = function() { - if (session !== null) { - return session.environmentBlendMode; - } - }; - this.getDepthTexture = function() { - return depthSensing.getDepthTexture(); - }; - function onInputSourcesChange(event) { - for (let i = 0; i < event.removed.length; i++) { - const inputSource = event.removed[i]; - const index = controllerInputSources.indexOf(inputSource); - if (index >= 0) { - controllerInputSources[index] = null; - controllers[index].disconnect(inputSource); - } - } - for (let i = 0; i < event.added.length; i++) { - const inputSource = event.added[i]; - let controllerIndex = controllerInputSources.indexOf(inputSource); - if (controllerIndex === -1) { - for (let i2 = 0; i2 < controllers.length; i2++) { - if (i2 >= controllerInputSources.length) { - controllerInputSources.push(inputSource); - controllerIndex = i2; - break; - } else if (controllerInputSources[i2] === null) { - controllerInputSources[i2] = inputSource; - controllerIndex = i2; - break; - } - } - if (controllerIndex === -1) break; - } - const controller = controllers[controllerIndex]; - if (controller) { - controller.connect(inputSource); - } - } - } - const cameraLPos = new Vector3(); - const cameraRPos = new Vector3(); - function setProjectionFromUnion(camera, cameraL2, cameraR2) { - cameraLPos.setFromMatrixPosition(cameraL2.matrixWorld); - cameraRPos.setFromMatrixPosition(cameraR2.matrixWorld); - const ipd = cameraLPos.distanceTo(cameraRPos); - const projL = cameraL2.projectionMatrix.elements; - const projR = cameraR2.projectionMatrix.elements; - const near = projL[14] / (projL[10] - 1); - const far = projL[14] / (projL[10] + 1); - const topFov = (projL[9] + 1) / projL[5]; - const bottomFov = (projL[9] - 1) / projL[5]; - const leftFov = (projL[8] - 1) / projL[0]; - const rightFov = (projR[8] + 1) / projR[0]; - const left = near * leftFov; - const right = near * rightFov; - const zOffset = ipd / (-leftFov + rightFov); - const xOffset = zOffset * -leftFov; - cameraL2.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale); - camera.translateX(xOffset); - camera.translateZ(zOffset); - camera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale); - camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); - const near2 = near + zOffset; - const far2 = far + zOffset; - const left2 = left - xOffset; - const right2 = right + (ipd - xOffset); - const top2 = topFov * far / far2 * near2; - const bottom2 = bottomFov * far / far2 * near2; - camera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2); - camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); - } - function updateCamera(camera, parent) { - if (parent === null) { - camera.matrixWorld.copy(camera.matrix); - } else { - camera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix); - } - camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); - } - this.updateCamera = function(camera) { - if (session === null) return; - if (depthSensing.texture !== null) { - camera.near = depthSensing.depthNear; - camera.far = depthSensing.depthFar; - } - cameraXR.near = cameraR.near = cameraL.near = camera.near; - cameraXR.far = cameraR.far = cameraL.far = camera.far; - if (_currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far) { - session.updateRenderState({ - depthNear: cameraXR.near, - depthFar: cameraXR.far - }); - _currentDepthNear = cameraXR.near; - _currentDepthFar = cameraXR.far; - cameraL.near = _currentDepthNear; - cameraL.far = _currentDepthFar; - cameraR.near = _currentDepthNear; - cameraR.far = _currentDepthFar; - cameraL.updateProjectionMatrix(); - cameraR.updateProjectionMatrix(); - camera.updateProjectionMatrix(); - } - const parent = camera.parent; - const cameras2 = cameraXR.cameras; - updateCamera(cameraXR, parent); - for (let i = 0; i < cameras2.length; i++) { - updateCamera(cameras2[i], parent); - } - if (cameras2.length === 2) { - setProjectionFromUnion(cameraXR, cameraL, cameraR); - } else { - cameraXR.projectionMatrix.copy(cameraL.projectionMatrix); - } - updateUserCamera(camera, cameraXR, parent); - }; - function updateUserCamera(camera, cameraXR2, parent) { - if (parent === null) { - camera.matrix.copy(cameraXR2.matrixWorld); - } else { - camera.matrix.copy(parent.matrixWorld); - camera.matrix.invert(); - camera.matrix.multiply(cameraXR2.matrixWorld); - } - camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); - camera.updateMatrixWorld(true); - camera.projectionMatrix.copy(cameraXR2.projectionMatrix); - camera.projectionMatrixInverse.copy(cameraXR2.projectionMatrixInverse); - if (camera.isPerspectiveCamera) { - camera.fov = RAD2DEG * 2 * Math.atan(1 / camera.projectionMatrix.elements[5]); - camera.zoom = 1; - } - } - this.getCamera = function() { - return cameraXR; - }; - this.getFoveation = function() { - if (glProjLayer === null && glBaseLayer === null) { - return void 0; - } - return foveation; - }; - this.setFoveation = function(value) { - foveation = value; - if (glProjLayer !== null) { - glProjLayer.fixedFoveation = value; - } - if (glBaseLayer !== null && glBaseLayer.fixedFoveation !== void 0) { - glBaseLayer.fixedFoveation = value; - } - }; - this.hasDepthSensing = function() { - return depthSensing.texture !== null; - }; - this.getDepthSensingMesh = function() { - return depthSensing.getMesh(cameraXR); - }; - let onAnimationFrameCallback = null; - function onAnimationFrame(time, frame) { - pose = frame.getViewerPose(customReferenceSpace || referenceSpace); - xrFrame = frame; - if (pose !== null) { - const views = pose.views; - if (glBaseLayer !== null) { - renderer.setRenderTargetFramebuffer(newRenderTarget, glBaseLayer.framebuffer); - renderer.setRenderTarget(newRenderTarget); - } - let cameraXRNeedsUpdate = false; - if (views.length !== cameraXR.cameras.length) { - cameraXR.cameras.length = 0; - cameraXRNeedsUpdate = true; - } - for (let i = 0; i < views.length; i++) { - const view = views[i]; - let viewport = null; - if (glBaseLayer !== null) { - viewport = glBaseLayer.getViewport(view); - } else { - const glSubImage = glBinding.getViewSubImage(glProjLayer, view); - viewport = glSubImage.viewport; - if (i === 0) { - renderer.setRenderTargetTextures( - newRenderTarget, - glSubImage.colorTexture, - glProjLayer.ignoreDepthValues ? void 0 : glSubImage.depthStencilTexture - ); - renderer.setRenderTarget(newRenderTarget); - } - } - let camera = cameras[i]; - if (camera === void 0) { - camera = new PerspectiveCamera(); - camera.layers.enable(i); - camera.viewport = new Vector4(); - cameras[i] = camera; - } - camera.matrix.fromArray(view.transform.matrix); - camera.matrix.decompose(camera.position, camera.quaternion, camera.scale); - camera.projectionMatrix.fromArray(view.projectionMatrix); - camera.projectionMatrixInverse.copy(camera.projectionMatrix).invert(); - camera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height); - if (i === 0) { - cameraXR.matrix.copy(camera.matrix); - cameraXR.matrix.decompose(cameraXR.position, cameraXR.quaternion, cameraXR.scale); - } - if (cameraXRNeedsUpdate === true) { - cameraXR.cameras.push(camera); - } - } - const enabledFeatures = session.enabledFeatures; - if (enabledFeatures && enabledFeatures.includes("depth-sensing")) { - const depthData = glBinding.getDepthInformation(views[0]); - if (depthData && depthData.isValid && depthData.texture) { - depthSensing.init(renderer, depthData, session.renderState); - } - } - } - for (let i = 0; i < controllers.length; i++) { - const inputSource = controllerInputSources[i]; - const controller = controllers[i]; - if (inputSource !== null && controller !== void 0) { - controller.update(inputSource, frame, customReferenceSpace || referenceSpace); - } - } - if (onAnimationFrameCallback) onAnimationFrameCallback(time, frame); - if (frame.detectedPlanes) { - scope.dispatchEvent({ type: "planesdetected", data: frame }); - } - xrFrame = null; - } - const animation = new WebGLAnimation(); - animation.setAnimationLoop(onAnimationFrame); - this.setAnimationLoop = function(callback) { - onAnimationFrameCallback = callback; - }; - this.dispose = function() { - }; - } -}; -var _e1 = new Euler(); -var _m1 = new Matrix4(); -function WebGLMaterials(renderer, properties) { - function refreshTransformUniform(map, uniform) { - if (map.matrixAutoUpdate === true) { - map.updateMatrix(); - } - uniform.value.copy(map.matrix); - } - function refreshFogUniforms(uniforms, fog) { - fog.color.getRGB(uniforms.fogColor.value, getUnlitUniformColorSpace(renderer)); - if (fog.isFog) { - uniforms.fogNear.value = fog.near; - uniforms.fogFar.value = fog.far; - } else if (fog.isFogExp2) { - uniforms.fogDensity.value = fog.density; - } - } - function refreshMaterialUniforms(uniforms, material, pixelRatio, height, transmissionRenderTarget) { - if (material.isMeshBasicMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshLambertMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshToonMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsToon(uniforms, material); - } else if (material.isMeshPhongMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsPhong(uniforms, material); - } else if (material.isMeshStandardMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsStandard(uniforms, material); - if (material.isMeshPhysicalMaterial) { - refreshUniformsPhysical(uniforms, material, transmissionRenderTarget); - } - } else if (material.isMeshMatcapMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsMatcap(uniforms, material); - } else if (material.isMeshDepthMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshDistanceMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsDistance(uniforms, material); - } else if (material.isMeshNormalMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isLineBasicMaterial) { - refreshUniformsLine(uniforms, material); - if (material.isLineDashedMaterial) { - refreshUniformsDash(uniforms, material); - } - } else if (material.isPointsMaterial) { - refreshUniformsPoints(uniforms, material, pixelRatio, height); - } else if (material.isSpriteMaterial) { - refreshUniformsSprites(uniforms, material); - } else if (material.isShadowMaterial) { - uniforms.color.value.copy(material.color); - uniforms.opacity.value = material.opacity; - } else if (material.isShaderMaterial) { - material.uniformsNeedUpdate = false; - } - } - function refreshUniformsCommon(uniforms, material) { - uniforms.opacity.value = material.opacity; - if (material.color) { - uniforms.diffuse.value.copy(material.color); - } - if (material.emissive) { - uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity); - } - if (material.map) { - uniforms.map.value = material.map; - refreshTransformUniform(material.map, uniforms.mapTransform); - } - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); - } - if (material.bumpMap) { - uniforms.bumpMap.value = material.bumpMap; - refreshTransformUniform(material.bumpMap, uniforms.bumpMapTransform); - uniforms.bumpScale.value = material.bumpScale; - if (material.side === BackSide) { - uniforms.bumpScale.value *= -1; - } - } - if (material.normalMap) { - uniforms.normalMap.value = material.normalMap; - refreshTransformUniform(material.normalMap, uniforms.normalMapTransform); - uniforms.normalScale.value.copy(material.normalScale); - if (material.side === BackSide) { - uniforms.normalScale.value.negate(); - } - } - if (material.displacementMap) { - uniforms.displacementMap.value = material.displacementMap; - refreshTransformUniform(material.displacementMap, uniforms.displacementMapTransform); - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - } - if (material.emissiveMap) { - uniforms.emissiveMap.value = material.emissiveMap; - refreshTransformUniform(material.emissiveMap, uniforms.emissiveMapTransform); - } - if (material.specularMap) { - uniforms.specularMap.value = material.specularMap; - refreshTransformUniform(material.specularMap, uniforms.specularMapTransform); - } - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } - const materialProperties = properties.get(material); - const envMap = materialProperties.envMap; - const envMapRotation = materialProperties.envMapRotation; - if (envMap) { - uniforms.envMap.value = envMap; - _e1.copy(envMapRotation); - _e1.x *= -1; - _e1.y *= -1; - _e1.z *= -1; - if (envMap.isCubeTexture && envMap.isRenderTargetTexture === false) { - _e1.y *= -1; - _e1.z *= -1; - } - uniforms.envMapRotation.value.setFromMatrix4(_m1.makeRotationFromEuler(_e1)); - uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; - uniforms.reflectivity.value = material.reflectivity; - uniforms.ior.value = material.ior; - uniforms.refractionRatio.value = material.refractionRatio; - } - if (material.lightMap) { - uniforms.lightMap.value = material.lightMap; - uniforms.lightMapIntensity.value = material.lightMapIntensity; - refreshTransformUniform(material.lightMap, uniforms.lightMapTransform); - } - if (material.aoMap) { - uniforms.aoMap.value = material.aoMap; - uniforms.aoMapIntensity.value = material.aoMapIntensity; - refreshTransformUniform(material.aoMap, uniforms.aoMapTransform); - } - } - function refreshUniformsLine(uniforms, material) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - if (material.map) { - uniforms.map.value = material.map; - refreshTransformUniform(material.map, uniforms.mapTransform); - } - } - function refreshUniformsDash(uniforms, material) { - uniforms.dashSize.value = material.dashSize; - uniforms.totalSize.value = material.dashSize + material.gapSize; - uniforms.scale.value = material.scale; - } - function refreshUniformsPoints(uniforms, material, pixelRatio, height) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - uniforms.size.value = material.size * pixelRatio; - uniforms.scale.value = height * 0.5; - if (material.map) { - uniforms.map.value = material.map; - refreshTransformUniform(material.map, uniforms.uvTransform); - } - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); - } - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } - } - function refreshUniformsSprites(uniforms, material) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - uniforms.rotation.value = material.rotation; - if (material.map) { - uniforms.map.value = material.map; - refreshTransformUniform(material.map, uniforms.mapTransform); - } - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - refreshTransformUniform(material.alphaMap, uniforms.alphaMapTransform); - } - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } - } - function refreshUniformsPhong(uniforms, material) { - uniforms.specular.value.copy(material.specular); - uniforms.shininess.value = Math.max(material.shininess, 1e-4); - } - function refreshUniformsToon(uniforms, material) { - if (material.gradientMap) { - uniforms.gradientMap.value = material.gradientMap; - } - } - function refreshUniformsStandard(uniforms, material) { - uniforms.metalness.value = material.metalness; - if (material.metalnessMap) { - uniforms.metalnessMap.value = material.metalnessMap; - refreshTransformUniform(material.metalnessMap, uniforms.metalnessMapTransform); - } - uniforms.roughness.value = material.roughness; - if (material.roughnessMap) { - uniforms.roughnessMap.value = material.roughnessMap; - refreshTransformUniform(material.roughnessMap, uniforms.roughnessMapTransform); - } - if (material.envMap) { - uniforms.envMapIntensity.value = material.envMapIntensity; - } - } - function refreshUniformsPhysical(uniforms, material, transmissionRenderTarget) { - uniforms.ior.value = material.ior; - if (material.sheen > 0) { - uniforms.sheenColor.value.copy(material.sheenColor).multiplyScalar(material.sheen); - uniforms.sheenRoughness.value = material.sheenRoughness; - if (material.sheenColorMap) { - uniforms.sheenColorMap.value = material.sheenColorMap; - refreshTransformUniform(material.sheenColorMap, uniforms.sheenColorMapTransform); - } - if (material.sheenRoughnessMap) { - uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; - refreshTransformUniform(material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform); - } - } - if (material.clearcoat > 0) { - uniforms.clearcoat.value = material.clearcoat; - uniforms.clearcoatRoughness.value = material.clearcoatRoughness; - if (material.clearcoatMap) { - uniforms.clearcoatMap.value = material.clearcoatMap; - refreshTransformUniform(material.clearcoatMap, uniforms.clearcoatMapTransform); - } - if (material.clearcoatRoughnessMap) { - uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; - refreshTransformUniform(material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform); - } - if (material.clearcoatNormalMap) { - uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; - refreshTransformUniform(material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform); - uniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale); - if (material.side === BackSide) { - uniforms.clearcoatNormalScale.value.negate(); - } - } - } - if (material.dispersion > 0) { - uniforms.dispersion.value = material.dispersion; - } - if (material.iridescence > 0) { - uniforms.iridescence.value = material.iridescence; - uniforms.iridescenceIOR.value = material.iridescenceIOR; - uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[0]; - uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[1]; - if (material.iridescenceMap) { - uniforms.iridescenceMap.value = material.iridescenceMap; - refreshTransformUniform(material.iridescenceMap, uniforms.iridescenceMapTransform); - } - if (material.iridescenceThicknessMap) { - uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap; - refreshTransformUniform(material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform); - } - } - if (material.transmission > 0) { - uniforms.transmission.value = material.transmission; - uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; - uniforms.transmissionSamplerSize.value.set(transmissionRenderTarget.width, transmissionRenderTarget.height); - if (material.transmissionMap) { - uniforms.transmissionMap.value = material.transmissionMap; - refreshTransformUniform(material.transmissionMap, uniforms.transmissionMapTransform); - } - uniforms.thickness.value = material.thickness; - if (material.thicknessMap) { - uniforms.thicknessMap.value = material.thicknessMap; - refreshTransformUniform(material.thicknessMap, uniforms.thicknessMapTransform); - } - uniforms.attenuationDistance.value = material.attenuationDistance; - uniforms.attenuationColor.value.copy(material.attenuationColor); - } - if (material.anisotropy > 0) { - uniforms.anisotropyVector.value.set(material.anisotropy * Math.cos(material.anisotropyRotation), material.anisotropy * Math.sin(material.anisotropyRotation)); - if (material.anisotropyMap) { - uniforms.anisotropyMap.value = material.anisotropyMap; - refreshTransformUniform(material.anisotropyMap, uniforms.anisotropyMapTransform); - } - } - uniforms.specularIntensity.value = material.specularIntensity; - uniforms.specularColor.value.copy(material.specularColor); - if (material.specularColorMap) { - uniforms.specularColorMap.value = material.specularColorMap; - refreshTransformUniform(material.specularColorMap, uniforms.specularColorMapTransform); - } - if (material.specularIntensityMap) { - uniforms.specularIntensityMap.value = material.specularIntensityMap; - refreshTransformUniform(material.specularIntensityMap, uniforms.specularIntensityMapTransform); - } - } - function refreshUniformsMatcap(uniforms, material) { - if (material.matcap) { - uniforms.matcap.value = material.matcap; - } - } - function refreshUniformsDistance(uniforms, material) { - const light = properties.get(material).light; - uniforms.referencePosition.value.setFromMatrixPosition(light.matrixWorld); - uniforms.nearDistance.value = light.shadow.camera.near; - uniforms.farDistance.value = light.shadow.camera.far; - } - return { - refreshFogUniforms, - refreshMaterialUniforms - }; -} -function WebGLUniformsGroups(gl, info, capabilities, state) { - let buffers = {}; - let updateList = {}; - let allocatedBindingPoints = []; - const maxBindingPoints = gl.getParameter(gl.MAX_UNIFORM_BUFFER_BINDINGS); - function bind(uniformsGroup, program) { - const webglProgram = program.program; - state.uniformBlockBinding(uniformsGroup, webglProgram); - } - function update(uniformsGroup, program) { - let buffer = buffers[uniformsGroup.id]; - if (buffer === void 0) { - prepareUniformsGroup(uniformsGroup); - buffer = createBuffer(uniformsGroup); - buffers[uniformsGroup.id] = buffer; - uniformsGroup.addEventListener("dispose", onUniformsGroupsDispose); - } - const webglProgram = program.program; - state.updateUBOMapping(uniformsGroup, webglProgram); - const frame = info.render.frame; - if (updateList[uniformsGroup.id] !== frame) { - updateBufferData(uniformsGroup); - updateList[uniformsGroup.id] = frame; - } - } - function createBuffer(uniformsGroup) { - const bindingPointIndex = allocateBindingPointIndex(); - uniformsGroup.__bindingPointIndex = bindingPointIndex; - const buffer = gl.createBuffer(); - const size = uniformsGroup.__size; - const usage = uniformsGroup.usage; - gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); - gl.bufferData(gl.UNIFORM_BUFFER, size, usage); - gl.bindBuffer(gl.UNIFORM_BUFFER, null); - gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPointIndex, buffer); - return buffer; - } - function allocateBindingPointIndex() { - for (let i = 0; i < maxBindingPoints; i++) { - if (allocatedBindingPoints.indexOf(i) === -1) { - allocatedBindingPoints.push(i); - return i; - } - } - console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."); - return 0; - } - function updateBufferData(uniformsGroup) { - const buffer = buffers[uniformsGroup.id]; - const uniforms = uniformsGroup.uniforms; - const cache = uniformsGroup.__cache; - gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); - for (let i = 0, il = uniforms.length; i < il; i++) { - const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; - for (let j = 0, jl = uniformArray.length; j < jl; j++) { - const uniform = uniformArray[j]; - if (hasUniformChanged(uniform, i, j, cache) === true) { - const offset = uniform.__offset; - const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; - let arrayOffset = 0; - for (let k = 0; k < values.length; k++) { - const value = values[k]; - const info2 = getUniformSize(value); - if (typeof value === "number" || typeof value === "boolean") { - uniform.__data[0] = value; - gl.bufferSubData(gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data); - } else if (value.isMatrix3) { - uniform.__data[0] = value.elements[0]; - uniform.__data[1] = value.elements[1]; - uniform.__data[2] = value.elements[2]; - uniform.__data[3] = 0; - uniform.__data[4] = value.elements[3]; - uniform.__data[5] = value.elements[4]; - uniform.__data[6] = value.elements[5]; - uniform.__data[7] = 0; - uniform.__data[8] = value.elements[6]; - uniform.__data[9] = value.elements[7]; - uniform.__data[10] = value.elements[8]; - uniform.__data[11] = 0; - } else { - value.toArray(uniform.__data, arrayOffset); - arrayOffset += info2.storage / Float32Array.BYTES_PER_ELEMENT; - } - } - gl.bufferSubData(gl.UNIFORM_BUFFER, offset, uniform.__data); - } - } - } - gl.bindBuffer(gl.UNIFORM_BUFFER, null); - } - function hasUniformChanged(uniform, index, indexArray, cache) { - const value = uniform.value; - const indexString = index + "_" + indexArray; - if (cache[indexString] === void 0) { - if (typeof value === "number" || typeof value === "boolean") { - cache[indexString] = value; - } else { - cache[indexString] = value.clone(); - } - return true; - } else { - const cachedObject = cache[indexString]; - if (typeof value === "number" || typeof value === "boolean") { - if (cachedObject !== value) { - cache[indexString] = value; - return true; - } - } else { - if (cachedObject.equals(value) === false) { - cachedObject.copy(value); - return true; - } - } - } - return false; - } - function prepareUniformsGroup(uniformsGroup) { - const uniforms = uniformsGroup.uniforms; - let offset = 0; - const chunkSize = 16; - for (let i = 0, l = uniforms.length; i < l; i++) { - const uniformArray = Array.isArray(uniforms[i]) ? uniforms[i] : [uniforms[i]]; - for (let j = 0, jl = uniformArray.length; j < jl; j++) { - const uniform = uniformArray[j]; - const values = Array.isArray(uniform.value) ? uniform.value : [uniform.value]; - for (let k = 0, kl = values.length; k < kl; k++) { - const value = values[k]; - const info2 = getUniformSize(value); - const chunkOffset2 = offset % chunkSize; - const chunkPadding = chunkOffset2 % info2.boundary; - const chunkStart = chunkOffset2 + chunkPadding; - offset += chunkPadding; - if (chunkStart !== 0 && chunkSize - chunkStart < info2.storage) { - offset += chunkSize - chunkStart; - } - uniform.__data = new Float32Array(info2.storage / Float32Array.BYTES_PER_ELEMENT); - uniform.__offset = offset; - offset += info2.storage; - } - } - } - const chunkOffset = offset % chunkSize; - if (chunkOffset > 0) offset += chunkSize - chunkOffset; - uniformsGroup.__size = offset; - uniformsGroup.__cache = {}; - return this; - } - function getUniformSize(value) { - const info2 = { - boundary: 0, - // bytes - storage: 0 - // bytes - }; - if (typeof value === "number" || typeof value === "boolean") { - info2.boundary = 4; - info2.storage = 4; - } else if (value.isVector2) { - info2.boundary = 8; - info2.storage = 8; - } else if (value.isVector3 || value.isColor) { - info2.boundary = 16; - info2.storage = 12; - } else if (value.isVector4) { - info2.boundary = 16; - info2.storage = 16; - } else if (value.isMatrix3) { - info2.boundary = 48; - info2.storage = 48; - } else if (value.isMatrix4) { - info2.boundary = 64; - info2.storage = 64; - } else if (value.isTexture) { - console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."); - } else { - console.warn("THREE.WebGLRenderer: Unsupported uniform value type.", value); - } - return info2; - } - function onUniformsGroupsDispose(event) { - const uniformsGroup = event.target; - uniformsGroup.removeEventListener("dispose", onUniformsGroupsDispose); - const index = allocatedBindingPoints.indexOf(uniformsGroup.__bindingPointIndex); - allocatedBindingPoints.splice(index, 1); - gl.deleteBuffer(buffers[uniformsGroup.id]); - delete buffers[uniformsGroup.id]; - delete updateList[uniformsGroup.id]; - } - function dispose() { - for (const id in buffers) { - gl.deleteBuffer(buffers[id]); - } - allocatedBindingPoints = []; - buffers = {}; - updateList = {}; - } - return { - bind, - update, - dispose - }; -} -var WebGLRenderer = class { - constructor(parameters = {}) { - const { - canvas = createCanvasElement(), - context = null, - depth = true, - stencil = false, - alpha = false, - antialias = false, - premultipliedAlpha = true, - preserveDrawingBuffer = false, - powerPreference = "default", - failIfMajorPerformanceCaveat = false - } = parameters; - this.isWebGLRenderer = true; - let _alpha; - if (context !== null) { - if (typeof WebGLRenderingContext !== "undefined" && context instanceof WebGLRenderingContext) { - throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163."); - } - _alpha = context.getContextAttributes().alpha; - } else { - _alpha = alpha; - } - const uintClearColor = new Uint32Array(4); - const intClearColor = new Int32Array(4); - let currentRenderList = null; - let currentRenderState = null; - const renderListStack = []; - const renderStateStack = []; - this.domElement = canvas; - this.debug = { - /** - * Enables error checking and reporting when shader programs are being compiled - * @type {boolean} - */ - checkShaderErrors: true, - /** - * Callback for custom error reporting. - * @type {?Function} - */ - onShaderError: null - }; - this.autoClear = true; - this.autoClearColor = true; - this.autoClearDepth = true; - this.autoClearStencil = true; - this.sortObjects = true; - this.clippingPlanes = []; - this.localClippingEnabled = false; - this._outputColorSpace = SRGBColorSpace; - this.toneMapping = NoToneMapping; - this.toneMappingExposure = 1; - const _this = this; - let _isContextLost = false; - let _currentActiveCubeFace = 0; - let _currentActiveMipmapLevel = 0; - let _currentRenderTarget = null; - let _currentMaterialId = -1; - let _currentCamera = null; - const _currentViewport = new Vector4(); - const _currentScissor = new Vector4(); - let _currentScissorTest = null; - const _currentClearColor = new Color(0); - let _currentClearAlpha = 0; - let _width = canvas.width; - let _height = canvas.height; - let _pixelRatio = 1; - let _opaqueSort = null; - let _transparentSort = null; - const _viewport = new Vector4(0, 0, _width, _height); - const _scissor = new Vector4(0, 0, _width, _height); - let _scissorTest = false; - const _frustum2 = new Frustum(); - let _clippingEnabled = false; - let _localClippingEnabled = false; - const _projScreenMatrix2 = new Matrix4(); - const _vector32 = new Vector3(); - const _vector4 = new Vector4(); - const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; - let _renderBackground = false; - function getTargetPixelRatio() { - return _currentRenderTarget === null ? _pixelRatio : 1; - } - let _gl = context; - function getContext(contextName, contextAttributes) { - return canvas.getContext(contextName, contextAttributes); - } - try { - const contextAttributes = { - alpha: true, - depth, - stencil, - antialias, - premultipliedAlpha, - preserveDrawingBuffer, - powerPreference, - failIfMajorPerformanceCaveat - }; - if ("setAttribute" in canvas) canvas.setAttribute("data-engine", `three.js r${REVISION}`); - canvas.addEventListener("webglcontextlost", onContextLost, false); - canvas.addEventListener("webglcontextrestored", onContextRestore, false); - canvas.addEventListener("webglcontextcreationerror", onContextCreationError, false); - if (_gl === null) { - const contextName = "webgl2"; - _gl = getContext(contextName, contextAttributes); - if (_gl === null) { - if (getContext(contextName)) { - throw new Error("Error creating WebGL context with your selected attributes."); - } else { - throw new Error("Error creating WebGL context."); - } - } - } - } catch (error) { - console.error("THREE.WebGLRenderer: " + error.message); - throw error; - } - let extensions, capabilities, state, info; - let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; - let programCache, materials, renderLists, renderStates, clipping, shadowMap; - let background, morphtargets, bufferRenderer, indexedBufferRenderer; - let utils, bindingStates, uniformsGroups; - function initGLContext() { - extensions = new WebGLExtensions(_gl); - extensions.init(); - utils = new WebGLUtils(_gl, extensions); - capabilities = new WebGLCapabilities(_gl, extensions, parameters, utils); - state = new WebGLState(_gl); - info = new WebGLInfo(_gl); - properties = new WebGLProperties(); - textures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info); - cubemaps = new WebGLCubeMaps(_this); - cubeuvmaps = new WebGLCubeUVMaps(_this); - attributes = new WebGLAttributes(_gl); - bindingStates = new WebGLBindingStates(_gl, attributes); - geometries = new WebGLGeometries(_gl, attributes, info, bindingStates); - objects = new WebGLObjects(_gl, geometries, attributes, info); - morphtargets = new WebGLMorphtargets(_gl, capabilities, textures); - clipping = new WebGLClipping(properties); - programCache = new WebGLPrograms(_this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping); - materials = new WebGLMaterials(_this, properties); - renderLists = new WebGLRenderLists(); - renderStates = new WebGLRenderStates(extensions); - background = new WebGLBackground(_this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha); - shadowMap = new WebGLShadowMap(_this, objects, capabilities); - uniformsGroups = new WebGLUniformsGroups(_gl, info, capabilities, state); - bufferRenderer = new WebGLBufferRenderer(_gl, extensions, info); - indexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info); - info.programs = programCache.programs; - _this.capabilities = capabilities; - _this.extensions = extensions; - _this.properties = properties; - _this.renderLists = renderLists; - _this.shadowMap = shadowMap; - _this.state = state; - _this.info = info; - } - initGLContext(); - const xr = new WebXRManager(_this, _gl); - this.xr = xr; - this.getContext = function() { - return _gl; - }; - this.getContextAttributes = function() { - return _gl.getContextAttributes(); - }; - this.forceContextLoss = function() { - const extension = extensions.get("WEBGL_lose_context"); - if (extension) extension.loseContext(); - }; - this.forceContextRestore = function() { - const extension = extensions.get("WEBGL_lose_context"); - if (extension) extension.restoreContext(); - }; - this.getPixelRatio = function() { - return _pixelRatio; - }; - this.setPixelRatio = function(value) { - if (value === void 0) return; - _pixelRatio = value; - this.setSize(_width, _height, false); - }; - this.getSize = function(target) { - return target.set(_width, _height); - }; - this.setSize = function(width, height, updateStyle = true) { - if (xr.isPresenting) { - console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."); - return; - } - _width = width; - _height = height; - canvas.width = Math.floor(width * _pixelRatio); - canvas.height = Math.floor(height * _pixelRatio); - if (updateStyle === true) { - canvas.style.width = width + "px"; - canvas.style.height = height + "px"; - } - this.setViewport(0, 0, width, height); - }; - this.getDrawingBufferSize = function(target) { - return target.set(_width * _pixelRatio, _height * _pixelRatio).floor(); - }; - this.setDrawingBufferSize = function(width, height, pixelRatio) { - _width = width; - _height = height; - _pixelRatio = pixelRatio; - canvas.width = Math.floor(width * pixelRatio); - canvas.height = Math.floor(height * pixelRatio); - this.setViewport(0, 0, width, height); - }; - this.getCurrentViewport = function(target) { - return target.copy(_currentViewport); - }; - this.getViewport = function(target) { - return target.copy(_viewport); - }; - this.setViewport = function(x, y, width, height) { - if (x.isVector4) { - _viewport.set(x.x, x.y, x.z, x.w); - } else { - _viewport.set(x, y, width, height); - } - state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).round()); - }; - this.getScissor = function(target) { - return target.copy(_scissor); - }; - this.setScissor = function(x, y, width, height) { - if (x.isVector4) { - _scissor.set(x.x, x.y, x.z, x.w); - } else { - _scissor.set(x, y, width, height); - } - state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).round()); - }; - this.getScissorTest = function() { - return _scissorTest; - }; - this.setScissorTest = function(boolean) { - state.setScissorTest(_scissorTest = boolean); - }; - this.setOpaqueSort = function(method) { - _opaqueSort = method; - }; - this.setTransparentSort = function(method) { - _transparentSort = method; - }; - this.getClearColor = function(target) { - return target.copy(background.getClearColor()); - }; - this.setClearColor = function() { - background.setClearColor.apply(background, arguments); - }; - this.getClearAlpha = function() { - return background.getClearAlpha(); - }; - this.setClearAlpha = function() { - background.setClearAlpha.apply(background, arguments); - }; - this.clear = function(color = true, depth2 = true, stencil2 = true) { - let bits = 0; - if (color) { - let isIntegerFormat = false; - if (_currentRenderTarget !== null) { - const targetFormat = _currentRenderTarget.texture.format; - isIntegerFormat = targetFormat === RGBAIntegerFormat || targetFormat === RGIntegerFormat || targetFormat === RedIntegerFormat; - } - if (isIntegerFormat) { - const targetType = _currentRenderTarget.texture.type; - const isUnsignedType = targetType === UnsignedByteType || targetType === UnsignedIntType || targetType === UnsignedShortType || targetType === UnsignedInt248Type || targetType === UnsignedShort4444Type || targetType === UnsignedShort5551Type; - const clearColor = background.getClearColor(); - const a = background.getClearAlpha(); - const r = clearColor.r; - const g = clearColor.g; - const b = clearColor.b; - if (isUnsignedType) { - uintClearColor[0] = r; - uintClearColor[1] = g; - uintClearColor[2] = b; - uintClearColor[3] = a; - _gl.clearBufferuiv(_gl.COLOR, 0, uintClearColor); - } else { - intClearColor[0] = r; - intClearColor[1] = g; - intClearColor[2] = b; - intClearColor[3] = a; - _gl.clearBufferiv(_gl.COLOR, 0, intClearColor); - } - } else { - bits |= _gl.COLOR_BUFFER_BIT; - } - } - if (depth2) bits |= _gl.DEPTH_BUFFER_BIT; - if (stencil2) { - bits |= _gl.STENCIL_BUFFER_BIT; - this.state.buffers.stencil.setMask(4294967295); - } - _gl.clear(bits); - }; - this.clearColor = function() { - this.clear(true, false, false); - }; - this.clearDepth = function() { - this.clear(false, true, false); - }; - this.clearStencil = function() { - this.clear(false, false, true); - }; - this.dispose = function() { - canvas.removeEventListener("webglcontextlost", onContextLost, false); - canvas.removeEventListener("webglcontextrestored", onContextRestore, false); - canvas.removeEventListener("webglcontextcreationerror", onContextCreationError, false); - renderLists.dispose(); - renderStates.dispose(); - properties.dispose(); - cubemaps.dispose(); - cubeuvmaps.dispose(); - objects.dispose(); - bindingStates.dispose(); - uniformsGroups.dispose(); - programCache.dispose(); - xr.dispose(); - xr.removeEventListener("sessionstart", onXRSessionStart); - xr.removeEventListener("sessionend", onXRSessionEnd); - animation.stop(); - }; - function onContextLost(event) { - event.preventDefault(); - console.log("THREE.WebGLRenderer: Context Lost."); - _isContextLost = true; - } - function onContextRestore() { - console.log("THREE.WebGLRenderer: Context Restored."); - _isContextLost = false; - const infoAutoReset = info.autoReset; - const shadowMapEnabled = shadowMap.enabled; - const shadowMapAutoUpdate = shadowMap.autoUpdate; - const shadowMapNeedsUpdate = shadowMap.needsUpdate; - const shadowMapType = shadowMap.type; - initGLContext(); - info.autoReset = infoAutoReset; - shadowMap.enabled = shadowMapEnabled; - shadowMap.autoUpdate = shadowMapAutoUpdate; - shadowMap.needsUpdate = shadowMapNeedsUpdate; - shadowMap.type = shadowMapType; - } - function onContextCreationError(event) { - console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ", event.statusMessage); - } - function onMaterialDispose(event) { - const material = event.target; - material.removeEventListener("dispose", onMaterialDispose); - deallocateMaterial(material); - } - function deallocateMaterial(material) { - releaseMaterialProgramReferences(material); - properties.remove(material); - } - function releaseMaterialProgramReferences(material) { - const programs = properties.get(material).programs; - if (programs !== void 0) { - programs.forEach(function(program) { - programCache.releaseProgram(program); - }); - if (material.isShaderMaterial) { - programCache.releaseShaderCache(material); - } - } - } - this.renderBufferDirect = function(camera, scene, geometry, material, object, group) { - if (scene === null) scene = _emptyScene; - const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0; - const program = setProgram(camera, scene, geometry, material, object); - state.setMaterial(material, frontFaceCW); - let index = geometry.index; - let rangeFactor = 1; - if (material.wireframe === true) { - index = geometries.getWireframeAttribute(geometry); - if (index === void 0) return; - rangeFactor = 2; - } - const drawRange = geometry.drawRange; - const position = geometry.attributes.position; - let drawStart = drawRange.start * rangeFactor; - let drawEnd = (drawRange.start + drawRange.count) * rangeFactor; - if (group !== null) { - drawStart = Math.max(drawStart, group.start * rangeFactor); - drawEnd = Math.min(drawEnd, (group.start + group.count) * rangeFactor); - } - if (index !== null) { - drawStart = Math.max(drawStart, 0); - drawEnd = Math.min(drawEnd, index.count); - } else if (position !== void 0 && position !== null) { - drawStart = Math.max(drawStart, 0); - drawEnd = Math.min(drawEnd, position.count); - } - const drawCount = drawEnd - drawStart; - if (drawCount < 0 || drawCount === Infinity) return; - bindingStates.setup(object, material, program, geometry, index); - let attribute; - let renderer = bufferRenderer; - if (index !== null) { - attribute = attributes.get(index); - renderer = indexedBufferRenderer; - renderer.setIndex(attribute); - } - if (object.isMesh) { - if (material.wireframe === true) { - state.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio()); - renderer.setMode(_gl.LINES); - } else { - renderer.setMode(_gl.TRIANGLES); - } - } else if (object.isLine) { - let lineWidth = material.linewidth; - if (lineWidth === void 0) lineWidth = 1; - state.setLineWidth(lineWidth * getTargetPixelRatio()); - if (object.isLineSegments) { - renderer.setMode(_gl.LINES); - } else if (object.isLineLoop) { - renderer.setMode(_gl.LINE_LOOP); - } else { - renderer.setMode(_gl.LINE_STRIP); - } - } else if (object.isPoints) { - renderer.setMode(_gl.POINTS); - } else if (object.isSprite) { - renderer.setMode(_gl.TRIANGLES); - } - if (object.isBatchedMesh) { - if (object._multiDrawInstances !== null) { - renderer.renderMultiDrawInstances(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances); - } else { - if (!extensions.get("WEBGL_multi_draw")) { - const starts = object._multiDrawStarts; - const counts = object._multiDrawCounts; - const drawCount2 = object._multiDrawCount; - const bytesPerElement = index ? attributes.get(index).bytesPerElement : 1; - const uniforms = properties.get(material).currentProgram.getUniforms(); - for (let i = 0; i < drawCount2; i++) { - uniforms.setValue(_gl, "_gl_DrawID", i); - renderer.render(starts[i] / bytesPerElement, counts[i]); - } - } else { - renderer.renderMultiDraw(object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount); - } - } - } else if (object.isInstancedMesh) { - renderer.renderInstances(drawStart, drawCount, object.count); - } else if (geometry.isInstancedBufferGeometry) { - const maxInstanceCount = geometry._maxInstanceCount !== void 0 ? geometry._maxInstanceCount : Infinity; - const instanceCount = Math.min(geometry.instanceCount, maxInstanceCount); - renderer.renderInstances(drawStart, drawCount, instanceCount); - } else { - renderer.render(drawStart, drawCount); - } - }; - function prepareMaterial(material, scene, object) { - if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { - material.side = BackSide; - material.needsUpdate = true; - getProgram(material, scene, object); - material.side = FrontSide; - material.needsUpdate = true; - getProgram(material, scene, object); - material.side = DoubleSide; - } else { - getProgram(material, scene, object); - } - } - this.compile = function(scene, camera, targetScene = null) { - if (targetScene === null) targetScene = scene; - currentRenderState = renderStates.get(targetScene); - currentRenderState.init(camera); - renderStateStack.push(currentRenderState); - targetScene.traverseVisible(function(object) { - if (object.isLight && object.layers.test(camera.layers)) { - currentRenderState.pushLight(object); - if (object.castShadow) { - currentRenderState.pushShadow(object); - } - } - }); - if (scene !== targetScene) { - scene.traverseVisible(function(object) { - if (object.isLight && object.layers.test(camera.layers)) { - currentRenderState.pushLight(object); - if (object.castShadow) { - currentRenderState.pushShadow(object); - } - } - }); - } - currentRenderState.setupLights(); - const materials2 = /* @__PURE__ */ new Set(); - scene.traverse(function(object) { - const material = object.material; - if (material) { - if (Array.isArray(material)) { - for (let i = 0; i < material.length; i++) { - const material2 = material[i]; - prepareMaterial(material2, targetScene, object); - materials2.add(material2); - } - } else { - prepareMaterial(material, targetScene, object); - materials2.add(material); - } - } - }); - renderStateStack.pop(); - currentRenderState = null; - return materials2; - }; - this.compileAsync = function(scene, camera, targetScene = null) { - const materials2 = this.compile(scene, camera, targetScene); - return new Promise((resolve) => { - function checkMaterialsReady() { - materials2.forEach(function(material) { - const materialProperties = properties.get(material); - const program = materialProperties.currentProgram; - if (program.isReady()) { - materials2.delete(material); - } - }); - if (materials2.size === 0) { - resolve(scene); - return; - } - setTimeout(checkMaterialsReady, 10); - } - if (extensions.get("KHR_parallel_shader_compile") !== null) { - checkMaterialsReady(); - } else { - setTimeout(checkMaterialsReady, 10); - } - }); - }; - let onAnimationFrameCallback = null; - function onAnimationFrame(time) { - if (onAnimationFrameCallback) onAnimationFrameCallback(time); - } - function onXRSessionStart() { - animation.stop(); - } - function onXRSessionEnd() { - animation.start(); - } - const animation = new WebGLAnimation(); - animation.setAnimationLoop(onAnimationFrame); - if (typeof self !== "undefined") animation.setContext(self); - this.setAnimationLoop = function(callback) { - onAnimationFrameCallback = callback; - xr.setAnimationLoop(callback); - callback === null ? animation.stop() : animation.start(); - }; - xr.addEventListener("sessionstart", onXRSessionStart); - xr.addEventListener("sessionend", onXRSessionEnd); - this.render = function(scene, camera) { - if (camera !== void 0 && camera.isCamera !== true) { - console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); - return; - } - if (_isContextLost === true) return; - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - if (xr.enabled === true && xr.isPresenting === true) { - if (xr.cameraAutoUpdate === true) xr.updateCamera(camera); - camera = xr.getCamera(); - } - if (scene.isScene === true) scene.onBeforeRender(_this, scene, camera, _currentRenderTarget); - currentRenderState = renderStates.get(scene, renderStateStack.length); - currentRenderState.init(camera); - renderStateStack.push(currentRenderState); - _projScreenMatrix2.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - _frustum2.setFromProjectionMatrix(_projScreenMatrix2); - _localClippingEnabled = this.localClippingEnabled; - _clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled); - currentRenderList = renderLists.get(scene, renderListStack.length); - currentRenderList.init(); - renderListStack.push(currentRenderList); - if (xr.enabled === true && xr.isPresenting === true) { - const depthSensingMesh = _this.xr.getDepthSensingMesh(); - if (depthSensingMesh !== null) { - projectObject(depthSensingMesh, camera, -Infinity, _this.sortObjects); - } - } - projectObject(scene, camera, 0, _this.sortObjects); - currentRenderList.finish(); - if (_this.sortObjects === true) { - currentRenderList.sort(_opaqueSort, _transparentSort); - } - _renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false; - if (_renderBackground) { - background.addToRenderList(currentRenderList, scene); - } - this.info.render.frame++; - if (_clippingEnabled === true) clipping.beginShadows(); - const shadowsArray = currentRenderState.state.shadowsArray; - shadowMap.render(shadowsArray, scene, camera); - if (_clippingEnabled === true) clipping.endShadows(); - if (this.info.autoReset === true) this.info.reset(); - const opaqueObjects = currentRenderList.opaque; - const transmissiveObjects = currentRenderList.transmissive; - currentRenderState.setupLights(); - if (camera.isArrayCamera) { - const cameras = camera.cameras; - if (transmissiveObjects.length > 0) { - for (let i = 0, l = cameras.length; i < l; i++) { - const camera2 = cameras[i]; - renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera2); - } - } - if (_renderBackground) background.render(scene); - for (let i = 0, l = cameras.length; i < l; i++) { - const camera2 = cameras[i]; - renderScene(currentRenderList, scene, camera2, camera2.viewport); - } - } else { - if (transmissiveObjects.length > 0) renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera); - if (_renderBackground) background.render(scene); - renderScene(currentRenderList, scene, camera); - } - if (_currentRenderTarget !== null) { - textures.updateMultisampleRenderTarget(_currentRenderTarget); - textures.updateRenderTargetMipmap(_currentRenderTarget); - } - if (scene.isScene === true) scene.onAfterRender(_this, scene, camera); - bindingStates.resetDefaultState(); - _currentMaterialId = -1; - _currentCamera = null; - renderStateStack.pop(); - if (renderStateStack.length > 0) { - currentRenderState = renderStateStack[renderStateStack.length - 1]; - if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, currentRenderState.state.camera); - } else { - currentRenderState = null; - } - renderListStack.pop(); - if (renderListStack.length > 0) { - currentRenderList = renderListStack[renderListStack.length - 1]; - } else { - currentRenderList = null; - } - }; - function projectObject(object, camera, groupOrder, sortObjects) { - if (object.visible === false) return; - const visible = object.layers.test(camera.layers); - if (visible) { - if (object.isGroup) { - groupOrder = object.renderOrder; - } else if (object.isLOD) { - if (object.autoUpdate === true) object.update(camera); - } else if (object.isLight) { - currentRenderState.pushLight(object); - if (object.castShadow) { - currentRenderState.pushShadow(object); - } - } else if (object.isSprite) { - if (!object.frustumCulled || _frustum2.intersectsSprite(object)) { - if (sortObjects) { - _vector4.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix2); - } - const geometry = objects.update(object); - const material = object.material; - if (material.visible) { - currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); - } - } - } else if (object.isMesh || object.isLine || object.isPoints) { - if (!object.frustumCulled || _frustum2.intersectsObject(object)) { - const geometry = objects.update(object); - const material = object.material; - if (sortObjects) { - if (object.boundingSphere !== void 0) { - if (object.boundingSphere === null) object.computeBoundingSphere(); - _vector4.copy(object.boundingSphere.center); - } else { - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _vector4.copy(geometry.boundingSphere.center); - } - _vector4.applyMatrix4(object.matrixWorld).applyMatrix4(_projScreenMatrix2); - } - if (Array.isArray(material)) { - const groups = geometry.groups; - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - if (groupMaterial && groupMaterial.visible) { - currentRenderList.push(object, geometry, groupMaterial, groupOrder, _vector4.z, group); - } - } - } else if (material.visible) { - currentRenderList.push(object, geometry, material, groupOrder, _vector4.z, null); - } - } - } - } - const children = object.children; - for (let i = 0, l = children.length; i < l; i++) { - projectObject(children[i], camera, groupOrder, sortObjects); - } - } - function renderScene(currentRenderList2, scene, camera, viewport) { - const opaqueObjects = currentRenderList2.opaque; - const transmissiveObjects = currentRenderList2.transmissive; - const transparentObjects = currentRenderList2.transparent; - currentRenderState.setupLightsView(camera); - if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); - if (viewport) state.viewport(_currentViewport.copy(viewport)); - if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera); - if (transmissiveObjects.length > 0) renderObjects(transmissiveObjects, scene, camera); - if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); - state.buffers.depth.setTest(true); - state.buffers.depth.setMask(true); - state.buffers.color.setMask(true); - state.setPolygonOffset(false); - } - function renderTransmissionPass(opaqueObjects, transmissiveObjects, scene, camera) { - const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; - if (overrideMaterial !== null) { - return; - } - if (currentRenderState.state.transmissionRenderTarget[camera.id] === void 0) { - currentRenderState.state.transmissionRenderTarget[camera.id] = new WebGLRenderTarget(1, 1, { - generateMipmaps: true, - type: extensions.has("EXT_color_buffer_half_float") || extensions.has("EXT_color_buffer_float") ? HalfFloatType : UnsignedByteType, - minFilter: LinearMipmapLinearFilter, - samples: 4, - stencilBuffer: stencil, - resolveDepthBuffer: false, - resolveStencilBuffer: false, - colorSpace: ColorManagement.workingColorSpace - }); - } - const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[camera.id]; - const activeViewport = camera.viewport || _currentViewport; - transmissionRenderTarget.setSize(activeViewport.z, activeViewport.w); - const currentRenderTarget = _this.getRenderTarget(); - _this.setRenderTarget(transmissionRenderTarget); - _this.getClearColor(_currentClearColor); - _currentClearAlpha = _this.getClearAlpha(); - if (_currentClearAlpha < 1) _this.setClearColor(16777215, 0.5); - _this.clear(); - if (_renderBackground) background.render(scene); - const currentToneMapping = _this.toneMapping; - _this.toneMapping = NoToneMapping; - const currentCameraViewport = camera.viewport; - if (camera.viewport !== void 0) camera.viewport = void 0; - currentRenderState.setupLightsView(camera); - if (_clippingEnabled === true) clipping.setGlobalState(_this.clippingPlanes, camera); - renderObjects(opaqueObjects, scene, camera); - textures.updateMultisampleRenderTarget(transmissionRenderTarget); - textures.updateRenderTargetMipmap(transmissionRenderTarget); - if (extensions.has("WEBGL_multisampled_render_to_texture") === false) { - let renderTargetNeedsUpdate = false; - for (let i = 0, l = transmissiveObjects.length; i < l; i++) { - const renderItem = transmissiveObjects[i]; - const object = renderItem.object; - const geometry = renderItem.geometry; - const material = renderItem.material; - const group = renderItem.group; - if (material.side === DoubleSide && object.layers.test(camera.layers)) { - const currentSide = material.side; - material.side = BackSide; - material.needsUpdate = true; - renderObject(object, scene, camera, geometry, material, group); - material.side = currentSide; - material.needsUpdate = true; - renderTargetNeedsUpdate = true; - } - } - if (renderTargetNeedsUpdate === true) { - textures.updateMultisampleRenderTarget(transmissionRenderTarget); - textures.updateRenderTargetMipmap(transmissionRenderTarget); - } - } - _this.setRenderTarget(currentRenderTarget); - _this.setClearColor(_currentClearColor, _currentClearAlpha); - if (currentCameraViewport !== void 0) camera.viewport = currentCameraViewport; - _this.toneMapping = currentToneMapping; - } - function renderObjects(renderList, scene, camera) { - const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; - for (let i = 0, l = renderList.length; i < l; i++) { - const renderItem = renderList[i]; - const object = renderItem.object; - const geometry = renderItem.geometry; - const material = overrideMaterial === null ? renderItem.material : overrideMaterial; - const group = renderItem.group; - if (object.layers.test(camera.layers)) { - renderObject(object, scene, camera, geometry, material, group); - } - } - } - function renderObject(object, scene, camera, geometry, material, group) { - object.onBeforeRender(_this, scene, camera, geometry, material, group); - object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); - object.normalMatrix.getNormalMatrix(object.modelViewMatrix); - if (material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false) { - material.side = BackSide; - material.needsUpdate = true; - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - material.side = FrontSide; - material.needsUpdate = true; - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - material.side = DoubleSide; - } else { - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - } - object.onAfterRender(_this, scene, camera, geometry, material, group); - } - function getProgram(material, scene, object) { - if (scene.isScene !== true) scene = _emptyScene; - const materialProperties = properties.get(material); - const lights = currentRenderState.state.lights; - const shadowsArray = currentRenderState.state.shadowsArray; - const lightsStateVersion = lights.state.version; - const parameters2 = programCache.getParameters(material, lights.state, shadowsArray, scene, object); - const programCacheKey = programCache.getProgramCacheKey(parameters2); - let programs = materialProperties.programs; - materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; - materialProperties.fog = scene.fog; - materialProperties.envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || materialProperties.environment); - materialProperties.envMapRotation = materialProperties.environment !== null && material.envMap === null ? scene.environmentRotation : material.envMapRotation; - if (programs === void 0) { - material.addEventListener("dispose", onMaterialDispose); - programs = /* @__PURE__ */ new Map(); - materialProperties.programs = programs; - } - let program = programs.get(programCacheKey); - if (program !== void 0) { - if (materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion) { - updateCommonMaterialProperties(material, parameters2); - return program; - } - } else { - parameters2.uniforms = programCache.getUniforms(material); - material.onBeforeCompile(parameters2, _this); - program = programCache.acquireProgram(parameters2, programCacheKey); - programs.set(programCacheKey, program); - materialProperties.uniforms = parameters2.uniforms; - } - const uniforms = materialProperties.uniforms; - if (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) { - uniforms.clippingPlanes = clipping.uniform; - } - updateCommonMaterialProperties(material, parameters2); - materialProperties.needsLights = materialNeedsLights(material); - materialProperties.lightsStateVersion = lightsStateVersion; - if (materialProperties.needsLights) { - uniforms.ambientLightColor.value = lights.state.ambient; - uniforms.lightProbe.value = lights.state.probe; - uniforms.directionalLights.value = lights.state.directional; - uniforms.directionalLightShadows.value = lights.state.directionalShadow; - uniforms.spotLights.value = lights.state.spot; - uniforms.spotLightShadows.value = lights.state.spotShadow; - uniforms.rectAreaLights.value = lights.state.rectArea; - uniforms.ltc_1.value = lights.state.rectAreaLTC1; - uniforms.ltc_2.value = lights.state.rectAreaLTC2; - uniforms.pointLights.value = lights.state.point; - uniforms.pointLightShadows.value = lights.state.pointShadow; - uniforms.hemisphereLights.value = lights.state.hemi; - uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; - uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; - uniforms.spotShadowMap.value = lights.state.spotShadowMap; - uniforms.spotLightMatrix.value = lights.state.spotLightMatrix; - uniforms.spotLightMap.value = lights.state.spotLightMap; - uniforms.pointShadowMap.value = lights.state.pointShadowMap; - uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; - } - materialProperties.currentProgram = program; - materialProperties.uniformsList = null; - return program; - } - function getUniformList(materialProperties) { - if (materialProperties.uniformsList === null) { - const progUniforms = materialProperties.currentProgram.getUniforms(); - materialProperties.uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, materialProperties.uniforms); - } - return materialProperties.uniformsList; - } - function updateCommonMaterialProperties(material, parameters2) { - const materialProperties = properties.get(material); - materialProperties.outputColorSpace = parameters2.outputColorSpace; - materialProperties.batching = parameters2.batching; - materialProperties.batchingColor = parameters2.batchingColor; - materialProperties.instancing = parameters2.instancing; - materialProperties.instancingColor = parameters2.instancingColor; - materialProperties.instancingMorph = parameters2.instancingMorph; - materialProperties.skinning = parameters2.skinning; - materialProperties.morphTargets = parameters2.morphTargets; - materialProperties.morphNormals = parameters2.morphNormals; - materialProperties.morphColors = parameters2.morphColors; - materialProperties.morphTargetsCount = parameters2.morphTargetsCount; - materialProperties.numClippingPlanes = parameters2.numClippingPlanes; - materialProperties.numIntersection = parameters2.numClipIntersection; - materialProperties.vertexAlphas = parameters2.vertexAlphas; - materialProperties.vertexTangents = parameters2.vertexTangents; - materialProperties.toneMapping = parameters2.toneMapping; - } - function setProgram(camera, scene, geometry, material, object) { - if (scene.isScene !== true) scene = _emptyScene; - textures.resetTextureUnits(); - const fog = scene.fog; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const colorSpace = _currentRenderTarget === null ? _this.outputColorSpace : _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace; - const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); - const vertexAlphas = material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4; - const vertexTangents = !!geometry.attributes.tangent && (!!material.normalMap || material.anisotropy > 0); - const morphTargets = !!geometry.morphAttributes.position; - const morphNormals = !!geometry.morphAttributes.normal; - const morphColors = !!geometry.morphAttributes.color; - let toneMapping = NoToneMapping; - if (material.toneMapped) { - if (_currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true) { - toneMapping = _this.toneMapping; - } - } - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== void 0 ? morphAttribute.length : 0; - const materialProperties = properties.get(material); - const lights = currentRenderState.state.lights; - if (_clippingEnabled === true) { - if (_localClippingEnabled === true || camera !== _currentCamera) { - const useCache = camera === _currentCamera && material.id === _currentMaterialId; - clipping.setState(material, camera, useCache); - } - } - let needsProgramChange = false; - if (material.version === materialProperties.__version) { - if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) { - needsProgramChange = true; - } else if (materialProperties.outputColorSpace !== colorSpace) { - needsProgramChange = true; - } else if (object.isBatchedMesh && materialProperties.batching === false) { - needsProgramChange = true; - } else if (!object.isBatchedMesh && materialProperties.batching === true) { - needsProgramChange = true; - } else if (object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null) { - needsProgramChange = true; - } else if (object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancing === false) { - needsProgramChange = true; - } else if (!object.isInstancedMesh && materialProperties.instancing === true) { - needsProgramChange = true; - } else if (object.isSkinnedMesh && materialProperties.skinning === false) { - needsProgramChange = true; - } else if (!object.isSkinnedMesh && materialProperties.skinning === true) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null) { - needsProgramChange = true; - } else if (materialProperties.envMap !== envMap) { - needsProgramChange = true; - } else if (material.fog === true && materialProperties.fog !== fog) { - needsProgramChange = true; - } else if (materialProperties.numClippingPlanes !== void 0 && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) { - needsProgramChange = true; - } else if (materialProperties.vertexAlphas !== vertexAlphas) { - needsProgramChange = true; - } else if (materialProperties.vertexTangents !== vertexTangents) { - needsProgramChange = true; - } else if (materialProperties.morphTargets !== morphTargets) { - needsProgramChange = true; - } else if (materialProperties.morphNormals !== morphNormals) { - needsProgramChange = true; - } else if (materialProperties.morphColors !== morphColors) { - needsProgramChange = true; - } else if (materialProperties.toneMapping !== toneMapping) { - needsProgramChange = true; - } else if (materialProperties.morphTargetsCount !== morphTargetsCount) { - needsProgramChange = true; - } - } else { - needsProgramChange = true; - materialProperties.__version = material.version; - } - let program = materialProperties.currentProgram; - if (needsProgramChange === true) { - program = getProgram(material, scene, object); - } - let refreshProgram = false; - let refreshMaterial = false; - let refreshLights = false; - const p_uniforms = program.getUniforms(), m_uniforms = materialProperties.uniforms; - if (state.useProgram(program.program)) { - refreshProgram = true; - refreshMaterial = true; - refreshLights = true; - } - if (material.id !== _currentMaterialId) { - _currentMaterialId = material.id; - refreshMaterial = true; - } - if (refreshProgram || _currentCamera !== camera) { - p_uniforms.setValue(_gl, "projectionMatrix", camera.projectionMatrix); - p_uniforms.setValue(_gl, "viewMatrix", camera.matrixWorldInverse); - const uCamPos = p_uniforms.map.cameraPosition; - if (uCamPos !== void 0) { - uCamPos.setValue(_gl, _vector32.setFromMatrixPosition(camera.matrixWorld)); - } - if (capabilities.logarithmicDepthBuffer) { - p_uniforms.setValue( - _gl, - "logDepthBufFC", - 2 / (Math.log(camera.far + 1) / Math.LN2) - ); - } - if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) { - p_uniforms.setValue(_gl, "isOrthographic", camera.isOrthographicCamera === true); - } - if (_currentCamera !== camera) { - _currentCamera = camera; - refreshMaterial = true; - refreshLights = true; - } - } - if (object.isSkinnedMesh) { - p_uniforms.setOptional(_gl, object, "bindMatrix"); - p_uniforms.setOptional(_gl, object, "bindMatrixInverse"); - const skeleton = object.skeleton; - if (skeleton) { - if (skeleton.boneTexture === null) skeleton.computeBoneTexture(); - p_uniforms.setValue(_gl, "boneTexture", skeleton.boneTexture, textures); - } - } - if (object.isBatchedMesh) { - p_uniforms.setOptional(_gl, object, "batchingTexture"); - p_uniforms.setValue(_gl, "batchingTexture", object._matricesTexture, textures); - p_uniforms.setOptional(_gl, object, "batchingIdTexture"); - p_uniforms.setValue(_gl, "batchingIdTexture", object._indirectTexture, textures); - p_uniforms.setOptional(_gl, object, "batchingColorTexture"); - if (object._colorsTexture !== null) { - p_uniforms.setValue(_gl, "batchingColorTexture", object._colorsTexture, textures); - } - } - const morphAttributes = geometry.morphAttributes; - if (morphAttributes.position !== void 0 || morphAttributes.normal !== void 0 || morphAttributes.color !== void 0) { - morphtargets.update(object, geometry, program); - } - if (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) { - materialProperties.receiveShadow = object.receiveShadow; - p_uniforms.setValue(_gl, "receiveShadow", object.receiveShadow); - } - if (material.isMeshGouraudMaterial && material.envMap !== null) { - m_uniforms.envMap.value = envMap; - m_uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; - } - if (material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null) { - m_uniforms.envMapIntensity.value = scene.environmentIntensity; - } - if (refreshMaterial) { - p_uniforms.setValue(_gl, "toneMappingExposure", _this.toneMappingExposure); - if (materialProperties.needsLights) { - markUniformsLightsNeedsUpdate(m_uniforms, refreshLights); - } - if (fog && material.fog === true) { - materials.refreshFogUniforms(m_uniforms, fog); - } - materials.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[camera.id]); - WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); - } - if (material.isShaderMaterial && material.uniformsNeedUpdate === true) { - WebGLUniforms.upload(_gl, getUniformList(materialProperties), m_uniforms, textures); - material.uniformsNeedUpdate = false; - } - if (material.isSpriteMaterial) { - p_uniforms.setValue(_gl, "center", object.center); - } - p_uniforms.setValue(_gl, "modelViewMatrix", object.modelViewMatrix); - p_uniforms.setValue(_gl, "normalMatrix", object.normalMatrix); - p_uniforms.setValue(_gl, "modelMatrix", object.matrixWorld); - if (material.isShaderMaterial || material.isRawShaderMaterial) { - const groups = material.uniformsGroups; - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - uniformsGroups.update(group, program); - uniformsGroups.bind(group, program); - } - } - return program; - } - function markUniformsLightsNeedsUpdate(uniforms, value) { - uniforms.ambientLightColor.needsUpdate = value; - uniforms.lightProbe.needsUpdate = value; - uniforms.directionalLights.needsUpdate = value; - uniforms.directionalLightShadows.needsUpdate = value; - uniforms.pointLights.needsUpdate = value; - uniforms.pointLightShadows.needsUpdate = value; - uniforms.spotLights.needsUpdate = value; - uniforms.spotLightShadows.needsUpdate = value; - uniforms.rectAreaLights.needsUpdate = value; - uniforms.hemisphereLights.needsUpdate = value; - } - function materialNeedsLights(material) { - return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true; - } - this.getActiveCubeFace = function() { - return _currentActiveCubeFace; - }; - this.getActiveMipmapLevel = function() { - return _currentActiveMipmapLevel; - }; - this.getRenderTarget = function() { - return _currentRenderTarget; - }; - this.setRenderTargetTextures = function(renderTarget, colorTexture, depthTexture) { - properties.get(renderTarget.texture).__webglTexture = colorTexture; - properties.get(renderTarget.depthTexture).__webglTexture = depthTexture; - const renderTargetProperties = properties.get(renderTarget); - renderTargetProperties.__hasExternalTextures = true; - renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === void 0; - if (!renderTargetProperties.__autoAllocateDepthBuffer) { - if (extensions.has("WEBGL_multisampled_render_to_texture") === true) { - console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"); - renderTargetProperties.__useRenderToTexture = false; - } - } - }; - this.setRenderTargetFramebuffer = function(renderTarget, defaultFramebuffer) { - const renderTargetProperties = properties.get(renderTarget); - renderTargetProperties.__webglFramebuffer = defaultFramebuffer; - renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === void 0; - }; - this.setRenderTarget = function(renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) { - _currentRenderTarget = renderTarget; - _currentActiveCubeFace = activeCubeFace; - _currentActiveMipmapLevel = activeMipmapLevel; - let useDefaultFramebuffer = true; - let framebuffer = null; - let isCube = false; - let isRenderTarget3D = false; - if (renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - if (renderTargetProperties.__useDefaultFramebuffer !== void 0) { - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - useDefaultFramebuffer = false; - } else if (renderTargetProperties.__webglFramebuffer === void 0) { - textures.setupRenderTarget(renderTarget); - } else if (renderTargetProperties.__hasExternalTextures) { - textures.rebindTextures(renderTarget, properties.get(renderTarget.texture).__webglTexture, properties.get(renderTarget.depthTexture).__webglTexture); - } - const texture = renderTarget.texture; - if (texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture) { - isRenderTarget3D = true; - } - const __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer; - if (renderTarget.isWebGLCubeRenderTarget) { - if (Array.isArray(__webglFramebuffer[activeCubeFace])) { - framebuffer = __webglFramebuffer[activeCubeFace][activeMipmapLevel]; - } else { - framebuffer = __webglFramebuffer[activeCubeFace]; - } - isCube = true; - } else if (renderTarget.samples > 0 && textures.useMultisampledRTT(renderTarget) === false) { - framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; - } else { - if (Array.isArray(__webglFramebuffer)) { - framebuffer = __webglFramebuffer[activeMipmapLevel]; - } else { - framebuffer = __webglFramebuffer; - } - } - _currentViewport.copy(renderTarget.viewport); - _currentScissor.copy(renderTarget.scissor); - _currentScissorTest = renderTarget.scissorTest; - } else { - _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor(); - _currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor(); - _currentScissorTest = _scissorTest; - } - const framebufferBound = state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - if (framebufferBound && useDefaultFramebuffer) { - state.drawBuffers(renderTarget, framebuffer); - } - state.viewport(_currentViewport); - state.scissor(_currentScissor); - state.setScissorTest(_currentScissorTest); - if (isCube) { - const textureProperties = properties.get(renderTarget.texture); - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel); - } else if (isRenderTarget3D) { - const textureProperties = properties.get(renderTarget.texture); - const layer = activeCubeFace || 0; - _gl.framebufferTextureLayer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer); - } - _currentMaterialId = -1; - }; - this.readRenderTargetPixels = function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { - if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { - console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); - return; - } - let framebuffer = properties.get(renderTarget).__webglFramebuffer; - if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { - framebuffer = framebuffer[activeCubeFaceIndex]; - } - if (framebuffer) { - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - try { - const texture = renderTarget.texture; - const textureFormat = texture.format; - const textureType = texture.type; - if (!capabilities.textureFormatReadable(textureFormat)) { - console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); - return; - } - if (!capabilities.textureTypeReadable(textureType)) { - console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); - return; - } - if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { - _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer); - } - } finally { - const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2); - } - } - }; - this.readRenderTargetPixelsAsync = async function(renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { - if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { - throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); - } - let framebuffer = properties.get(renderTarget).__webglFramebuffer; - if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== void 0) { - framebuffer = framebuffer[activeCubeFaceIndex]; - } - if (framebuffer) { - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - try { - const texture = renderTarget.texture; - const textureFormat = texture.format; - const textureType = texture.type; - if (!capabilities.textureFormatReadable(textureFormat)) { - throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format."); - } - if (!capabilities.textureTypeReadable(textureType)) { - throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type."); - } - if (x >= 0 && x <= renderTarget.width - width && (y >= 0 && y <= renderTarget.height - height)) { - const glBuffer = _gl.createBuffer(); - _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); - _gl.bufferData(_gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ); - _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), 0); - _gl.flush(); - const sync = _gl.fenceSync(_gl.SYNC_GPU_COMMANDS_COMPLETE, 0); - await probeAsync(_gl, sync, 4); - try { - _gl.bindBuffer(_gl.PIXEL_PACK_BUFFER, glBuffer); - _gl.getBufferSubData(_gl.PIXEL_PACK_BUFFER, 0, buffer); - } finally { - _gl.deleteBuffer(glBuffer); - _gl.deleteSync(sync); - } - return buffer; - } - } finally { - const framebuffer2 = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer2); - } - } - }; - this.copyFramebufferToTexture = function(texture, position = null, level = 0) { - if (texture.isTexture !== true) { - warnOnce("WebGLRenderer: copyFramebufferToTexture function signature has changed."); - position = arguments[0] || null; - texture = arguments[1]; - } - const levelScale = Math.pow(2, -level); - const width = Math.floor(texture.image.width * levelScale); - const height = Math.floor(texture.image.height * levelScale); - const x = position !== null ? position.x : 0; - const y = position !== null ? position.y : 0; - textures.setTexture2D(texture, 0); - _gl.copyTexSubImage2D(_gl.TEXTURE_2D, level, 0, 0, x, y, width, height); - state.unbindTexture(); - }; - this.copyTextureToTexture = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { - if (srcTexture.isTexture !== true) { - warnOnce("WebGLRenderer: copyTextureToTexture function signature has changed."); - dstPosition = arguments[0] || null; - srcTexture = arguments[1]; - dstTexture = arguments[2]; - level = arguments[3] || 0; - srcRegion = null; - } - let width, height, minX, minY; - let dstX, dstY; - if (srcRegion !== null) { - width = srcRegion.max.x - srcRegion.min.x; - height = srcRegion.max.y - srcRegion.min.y; - minX = srcRegion.min.x; - minY = srcRegion.min.y; - } else { - width = srcTexture.image.width; - height = srcTexture.image.height; - minX = 0; - minY = 0; - } - if (dstPosition !== null) { - dstX = dstPosition.x; - dstY = dstPosition.y; - } else { - dstX = 0; - dstY = 0; - } - const glFormat = utils.convert(dstTexture.format); - const glType = utils.convert(dstTexture.type); - textures.setTexture2D(dstTexture, 0); - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - const currentUnpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); - const currentUnpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); - const currentUnpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); - const currentUnpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); - const currentUnpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); - const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, minX); - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, minY); - if (srcTexture.isDataTexture) { - _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data); - } else { - if (srcTexture.isCompressedTexture) { - _gl.compressedTexSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data); - } else { - _gl.texSubImage2D(_gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image); - } - } - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); - _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); - if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(_gl.TEXTURE_2D); - state.unbindTexture(); - }; - this.copyTextureToTexture3D = function(srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0) { - if (srcTexture.isTexture !== true) { - warnOnce("WebGLRenderer: copyTextureToTexture3D function signature has changed."); - srcRegion = arguments[0] || null; - dstPosition = arguments[1] || null; - srcTexture = arguments[2]; - dstTexture = arguments[3]; - level = arguments[4] || 0; - } - let width, height, depth2, minX, minY, minZ; - let dstX, dstY, dstZ; - const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[level] : srcTexture.image; - if (srcRegion !== null) { - width = srcRegion.max.x - srcRegion.min.x; - height = srcRegion.max.y - srcRegion.min.y; - depth2 = srcRegion.max.z - srcRegion.min.z; - minX = srcRegion.min.x; - minY = srcRegion.min.y; - minZ = srcRegion.min.z; - } else { - width = image.width; - height = image.height; - depth2 = image.depth; - minX = 0; - minY = 0; - minZ = 0; - } - if (dstPosition !== null) { - dstX = dstPosition.x; - dstY = dstPosition.y; - dstZ = dstPosition.z; - } else { - dstX = 0; - dstY = 0; - dstZ = 0; - } - const glFormat = utils.convert(dstTexture.format); - const glType = utils.convert(dstTexture.type); - let glTarget; - if (dstTexture.isData3DTexture) { - textures.setTexture3D(dstTexture, 0); - glTarget = _gl.TEXTURE_3D; - } else if (dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture) { - textures.setTexture2DArray(dstTexture, 0); - glTarget = _gl.TEXTURE_2D_ARRAY; - } else { - console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray."); - return; - } - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - const currentUnpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); - const currentUnpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); - const currentUnpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); - const currentUnpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); - const currentUnpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, minX); - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, minY); - _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, minZ); - if (srcTexture.isDataTexture || srcTexture.isData3DTexture) { - _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image.data); - } else { - if (dstTexture.isCompressedArrayTexture) { - _gl.compressedTexSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, image.data); - } else { - _gl.texSubImage3D(glTarget, level, dstX, dstY, dstZ, width, height, depth2, glFormat, glType, image); - } - } - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, currentUnpackRowLen); - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight); - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels); - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows); - _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages); - if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(glTarget); - state.unbindTexture(); - }; - this.initRenderTarget = function(target) { - if (properties.get(target).__webglFramebuffer === void 0) { - textures.setupRenderTarget(target); - } - }; - this.initTexture = function(texture) { - if (texture.isCubeTexture) { - textures.setTextureCube(texture, 0); - } else if (texture.isData3DTexture) { - textures.setTexture3D(texture, 0); - } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { - textures.setTexture2DArray(texture, 0); - } else { - textures.setTexture2D(texture, 0); - } - state.unbindTexture(); - }; - this.resetState = function() { - _currentActiveCubeFace = 0; - _currentActiveMipmapLevel = 0; - _currentRenderTarget = null; - state.reset(); - bindingStates.reset(); - }; - if (typeof __THREE_DEVTOOLS__ !== "undefined") { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); - } - } - get coordinateSystem() { - return WebGLCoordinateSystem; - } - get outputColorSpace() { - return this._outputColorSpace; - } - set outputColorSpace(colorSpace) { - this._outputColorSpace = colorSpace; - const gl = this.getContext(); - gl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? "display-p3" : "srgb"; - gl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? "display-p3" : "srgb"; - } -}; -var FogExp2 = class _FogExp2 { - constructor(color, density = 25e-5) { - this.isFogExp2 = true; - this.name = ""; - this.color = new Color(color); - this.density = density; - } - clone() { - return new _FogExp2(this.color, this.density); - } - toJSON() { - return { - type: "FogExp2", - name: this.name, - color: this.color.getHex(), - density: this.density - }; - } -}; -var Fog = class _Fog { - constructor(color, near = 1, far = 1e3) { - this.isFog = true; - this.name = ""; - this.color = new Color(color); - this.near = near; - this.far = far; - } - clone() { - return new _Fog(this.color, this.near, this.far); - } - toJSON() { - return { - type: "Fog", - name: this.name, - color: this.color.getHex(), - near: this.near, - far: this.far - }; - } -}; -var Scene = class extends Object3D { - constructor() { - super(); - this.isScene = true; - this.type = "Scene"; - this.background = null; - this.environment = null; - this.fog = null; - this.backgroundBlurriness = 0; - this.backgroundIntensity = 1; - this.backgroundRotation = new Euler(); - this.environmentIntensity = 1; - this.environmentRotation = new Euler(); - this.overrideMaterial = null; - if (typeof __THREE_DEVTOOLS__ !== "undefined") { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { detail: this })); - } - } - copy(source, recursive) { - super.copy(source, recursive); - if (source.background !== null) this.background = source.background.clone(); - if (source.environment !== null) this.environment = source.environment.clone(); - if (source.fog !== null) this.fog = source.fog.clone(); - this.backgroundBlurriness = source.backgroundBlurriness; - this.backgroundIntensity = source.backgroundIntensity; - this.backgroundRotation.copy(source.backgroundRotation); - this.environmentIntensity = source.environmentIntensity; - this.environmentRotation.copy(source.environmentRotation); - if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone(); - this.matrixAutoUpdate = source.matrixAutoUpdate; - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - if (this.fog !== null) data.object.fog = this.fog.toJSON(); - if (this.backgroundBlurriness > 0) data.object.backgroundBlurriness = this.backgroundBlurriness; - if (this.backgroundIntensity !== 1) data.object.backgroundIntensity = this.backgroundIntensity; - data.object.backgroundRotation = this.backgroundRotation.toArray(); - if (this.environmentIntensity !== 1) data.object.environmentIntensity = this.environmentIntensity; - data.object.environmentRotation = this.environmentRotation.toArray(); - return data; - } -}; -var InterleavedBuffer = class { - constructor(array, stride) { - this.isInterleavedBuffer = true; - this.array = array; - this.stride = stride; - this.count = array !== void 0 ? array.length / stride : 0; - this.usage = StaticDrawUsage; - this._updateRange = { offset: 0, count: -1 }; - this.updateRanges = []; - this.version = 0; - this.uuid = generateUUID(); - } - onUploadCallback() { - } - set needsUpdate(value) { - if (value === true) this.version++; - } - get updateRange() { - warnOnce("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."); - return this._updateRange; - } - setUsage(value) { - this.usage = value; - return this; - } - addUpdateRange(start, count) { - this.updateRanges.push({ start, count }); - } - clearUpdateRanges() { - this.updateRanges.length = 0; - } - copy(source) { - this.array = new source.array.constructor(source.array); - this.count = source.count; - this.stride = source.stride; - this.usage = source.usage; - return this; - } - copyAt(index1, attribute, index2) { - index1 *= this.stride; - index2 *= attribute.stride; - for (let i = 0, l = this.stride; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - return this; - } - set(value, offset = 0) { - this.array.set(value, offset); - return this; - } - clone(data) { - if (data.arrayBuffers === void 0) { - data.arrayBuffers = {}; - } - if (this.array.buffer._uuid === void 0) { - this.array.buffer._uuid = generateUUID(); - } - if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { - data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer; - } - const array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]); - const ib = new this.constructor(array, this.stride); - ib.setUsage(this.usage); - return ib; - } - onUpload(callback) { - this.onUploadCallback = callback; - return this; - } - toJSON(data) { - if (data.arrayBuffers === void 0) { - data.arrayBuffers = {}; - } - if (this.array.buffer._uuid === void 0) { - this.array.buffer._uuid = generateUUID(); - } - if (data.arrayBuffers[this.array.buffer._uuid] === void 0) { - data.arrayBuffers[this.array.buffer._uuid] = Array.from(new Uint32Array(this.array.buffer)); - } - return { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - }; - } -}; -var _vector$6 = new Vector3(); -var InterleavedBufferAttribute = class _InterleavedBufferAttribute { - constructor(interleavedBuffer, itemSize, offset, normalized = false) { - this.isInterleavedBufferAttribute = true; - this.name = ""; - this.data = interleavedBuffer; - this.itemSize = itemSize; - this.offset = offset; - this.normalized = normalized; - } - get count() { - return this.data.count; - } - get array() { - return this.data.array; - } - set needsUpdate(value) { - this.data.needsUpdate = value; - } - applyMatrix4(m) { - for (let i = 0, l = this.data.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - _vector$6.applyMatrix4(m); - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - return this; - } - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - _vector$6.applyNormalMatrix(m); - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - return this; - } - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - _vector$6.transformDirection(m); - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - return this; - } - getComponent(index, component) { - let value = this.array[index * this.data.stride + this.offset + component]; - if (this.normalized) value = denormalize(value, this.array); - return value; - } - setComponent(index, component, value) { - if (this.normalized) value = normalize(value, this.array); - this.data.array[index * this.data.stride + this.offset + component] = value; - return this; - } - setX(index, x) { - if (this.normalized) x = normalize(x, this.array); - this.data.array[index * this.data.stride + this.offset] = x; - return this; - } - setY(index, y) { - if (this.normalized) y = normalize(y, this.array); - this.data.array[index * this.data.stride + this.offset + 1] = y; - return this; - } - setZ(index, z) { - if (this.normalized) z = normalize(z, this.array); - this.data.array[index * this.data.stride + this.offset + 2] = z; - return this; - } - setW(index, w) { - if (this.normalized) w = normalize(w, this.array); - this.data.array[index * this.data.stride + this.offset + 3] = w; - return this; - } - getX(index) { - let x = this.data.array[index * this.data.stride + this.offset]; - if (this.normalized) x = denormalize(x, this.array); - return x; - } - getY(index) { - let y = this.data.array[index * this.data.stride + this.offset + 1]; - if (this.normalized) y = denormalize(y, this.array); - return y; - } - getZ(index) { - let z = this.data.array[index * this.data.stride + this.offset + 2]; - if (this.normalized) z = denormalize(z, this.array); - return z; - } - getW(index) { - let w = this.data.array[index * this.data.stride + this.offset + 3]; - if (this.normalized) w = denormalize(w, this.array); - return w; - } - setXY(index, x, y) { - index = index * this.data.stride + this.offset; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - } - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - return this; - } - setXYZ(index, x, y, z) { - index = index * this.data.stride + this.offset; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - } - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - return this; - } - setXYZW(index, x, y, z, w) { - index = index * this.data.stride + this.offset; - if (this.normalized) { - x = normalize(x, this.array); - y = normalize(y, this.array); - z = normalize(z, this.array); - w = normalize(w, this.array); - } - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - this.data.array[index + 3] = w; - return this; - } - clone(data) { - if (data === void 0) { - console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data."); - const array = []; - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } - return new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized); - } else { - if (data.interleavedBuffers === void 0) { - data.interleavedBuffers = {}; - } - if (data.interleavedBuffers[this.data.uuid] === void 0) { - data.interleavedBuffers[this.data.uuid] = this.data.clone(data); - } - return new _InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized); - } - } - toJSON(data) { - if (data === void 0) { - console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data."); - const array = []; - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array, - normalized: this.normalized - }; - } else { - if (data.interleavedBuffers === void 0) { - data.interleavedBuffers = {}; - } - if (data.interleavedBuffers[this.data.uuid] === void 0) { - data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data); - } - return { - isInterleavedBufferAttribute: true, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - }; - } - } -}; -var SpriteMaterial = class extends Material { - constructor(parameters) { - super(); - this.isSpriteMaterial = true; - this.type = "SpriteMaterial"; - this.color = new Color(16777215); - this.map = null; - this.alphaMap = null; - this.rotation = 0; - this.sizeAttenuation = true; - this.transparent = true; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.alphaMap = source.alphaMap; - this.rotation = source.rotation; - this.sizeAttenuation = source.sizeAttenuation; - this.fog = source.fog; - return this; - } -}; -var _geometry; -var _intersectPoint = new Vector3(); -var _worldScale = new Vector3(); -var _mvPosition = new Vector3(); -var _alignedPosition = new Vector2(); -var _rotatedPosition = new Vector2(); -var _viewWorldMatrix = new Matrix4(); -var _vA = new Vector3(); -var _vB = new Vector3(); -var _vC = new Vector3(); -var _uvA = new Vector2(); -var _uvB = new Vector2(); -var _uvC = new Vector2(); -var Sprite = class extends Object3D { - constructor(material = new SpriteMaterial()) { - super(); - this.isSprite = true; - this.type = "Sprite"; - if (_geometry === void 0) { - _geometry = new BufferGeometry(); - const float32Array = new Float32Array([ - -0.5, - -0.5, - 0, - 0, - 0, - 0.5, - -0.5, - 0, - 1, - 0, - 0.5, - 0.5, - 0, - 1, - 1, - -0.5, - 0.5, - 0, - 0, - 1 - ]); - const interleavedBuffer = new InterleavedBuffer(float32Array, 5); - _geometry.setIndex([0, 1, 2, 0, 2, 3]); - _geometry.setAttribute("position", new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); - _geometry.setAttribute("uv", new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); - } - this.geometry = _geometry; - this.material = material; - this.center = new Vector2(0.5, 0.5); - } - raycast(raycaster, intersects2) { - if (raycaster.camera === null) { - console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'); - } - _worldScale.setFromMatrixScale(this.matrixWorld); - _viewWorldMatrix.copy(raycaster.camera.matrixWorld); - this.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld); - _mvPosition.setFromMatrixPosition(this.modelViewMatrix); - if (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) { - _worldScale.multiplyScalar(-_mvPosition.z); - } - const rotation = this.material.rotation; - let sin, cos; - if (rotation !== 0) { - cos = Math.cos(rotation); - sin = Math.sin(rotation); - } - const center = this.center; - transformVertex(_vA.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vB.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vC.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - _uvA.set(0, 0); - _uvB.set(1, 0); - _uvC.set(1, 1); - let intersect2 = raycaster.ray.intersectTriangle(_vA, _vB, _vC, false, _intersectPoint); - if (intersect2 === null) { - transformVertex(_vB.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - _uvB.set(0, 1); - intersect2 = raycaster.ray.intersectTriangle(_vA, _vC, _vB, false, _intersectPoint); - if (intersect2 === null) { - return; - } - } - const distance = raycaster.ray.origin.distanceTo(_intersectPoint); - if (distance < raycaster.near || distance > raycaster.far) return; - intersects2.push({ - distance, - point: _intersectPoint.clone(), - uv: Triangle.getInterpolation(_intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()), - face: null, - object: this - }); - } - copy(source, recursive) { - super.copy(source, recursive); - if (source.center !== void 0) this.center.copy(source.center); - this.material = source.material; - return this; - } -}; -function transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) { - _alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); - if (sin !== void 0) { - _rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y; - _rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y; - } else { - _rotatedPosition.copy(_alignedPosition); - } - vertexPosition.copy(mvPosition); - vertexPosition.x += _rotatedPosition.x; - vertexPosition.y += _rotatedPosition.y; - vertexPosition.applyMatrix4(_viewWorldMatrix); -} -var _v1$2 = new Vector3(); -var _v2$1 = new Vector3(); -var LOD = class extends Object3D { - constructor() { - super(); - this._currentLevel = 0; - this.type = "LOD"; - Object.defineProperties(this, { - levels: { - enumerable: true, - value: [] - }, - isLOD: { - value: true - } - }); - this.autoUpdate = true; - } - copy(source) { - super.copy(source, false); - const levels = source.levels; - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - this.addLevel(level.object.clone(), level.distance, level.hysteresis); - } - this.autoUpdate = source.autoUpdate; - return this; - } - addLevel(object, distance = 0, hysteresis = 0) { - distance = Math.abs(distance); - const levels = this.levels; - let l; - for (l = 0; l < levels.length; l++) { - if (distance < levels[l].distance) { - break; - } - } - levels.splice(l, 0, { distance, hysteresis, object }); - this.add(object); - return this; - } - getCurrentLevel() { - return this._currentLevel; - } - getObjectForDistance(distance) { - const levels = this.levels; - if (levels.length > 0) { - let i, l; - for (i = 1, l = levels.length; i < l; i++) { - let levelDistance = levels[i].distance; - if (levels[i].object.visible) { - levelDistance -= levelDistance * levels[i].hysteresis; - } - if (distance < levelDistance) { - break; - } - } - return levels[i - 1].object; - } - return null; - } - raycast(raycaster, intersects2) { - const levels = this.levels; - if (levels.length > 0) { - _v1$2.setFromMatrixPosition(this.matrixWorld); - const distance = raycaster.ray.origin.distanceTo(_v1$2); - this.getObjectForDistance(distance).raycast(raycaster, intersects2); - } - } - update(camera) { - const levels = this.levels; - if (levels.length > 1) { - _v1$2.setFromMatrixPosition(camera.matrixWorld); - _v2$1.setFromMatrixPosition(this.matrixWorld); - const distance = _v1$2.distanceTo(_v2$1) / camera.zoom; - levels[0].object.visible = true; - let i, l; - for (i = 1, l = levels.length; i < l; i++) { - let levelDistance = levels[i].distance; - if (levels[i].object.visible) { - levelDistance -= levelDistance * levels[i].hysteresis; - } - if (distance >= levelDistance) { - levels[i - 1].object.visible = false; - levels[i].object.visible = true; - } else { - break; - } - } - this._currentLevel = i - 1; - for (; i < l; i++) { - levels[i].object.visible = false; - } - } - } - toJSON(meta) { - const data = super.toJSON(meta); - if (this.autoUpdate === false) data.object.autoUpdate = false; - data.object.levels = []; - const levels = this.levels; - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - data.object.levels.push({ - object: level.object.uuid, - distance: level.distance, - hysteresis: level.hysteresis - }); - } - return data; - } -}; -var _basePosition = new Vector3(); -var _skinIndex = new Vector4(); -var _skinWeight = new Vector4(); -var _vector3 = new Vector3(); -var _matrix4 = new Matrix4(); -var _vertex = new Vector3(); -var _sphere$4 = new Sphere(); -var _inverseMatrix$2 = new Matrix4(); -var _ray$2 = new Ray(); -var SkinnedMesh = class extends Mesh { - constructor(geometry, material) { - super(geometry, material); - this.isSkinnedMesh = true; - this.type = "SkinnedMesh"; - this.bindMode = AttachedBindMode; - this.bindMatrix = new Matrix4(); - this.bindMatrixInverse = new Matrix4(); - this.boundingBox = null; - this.boundingSphere = null; - } - computeBoundingBox() { - const geometry = this.geometry; - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - this.boundingBox.makeEmpty(); - const positionAttribute = geometry.getAttribute("position"); - for (let i = 0; i < positionAttribute.count; i++) { - this.getVertexPosition(i, _vertex); - this.boundingBox.expandByPoint(_vertex); - } - } - computeBoundingSphere() { - const geometry = this.geometry; - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - this.boundingSphere.makeEmpty(); - const positionAttribute = geometry.getAttribute("position"); - for (let i = 0; i < positionAttribute.count; i++) { - this.getVertexPosition(i, _vertex); - this.boundingSphere.expandByPoint(_vertex); - } - } - copy(source, recursive) { - super.copy(source, recursive); - this.bindMode = source.bindMode; - this.bindMatrix.copy(source.bindMatrix); - this.bindMatrixInverse.copy(source.bindMatrixInverse); - this.skeleton = source.skeleton; - if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); - if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); - return this; - } - raycast(raycaster, intersects2) { - const material = this.material; - const matrixWorld = this.matrixWorld; - if (material === void 0) return; - if (this.boundingSphere === null) this.computeBoundingSphere(); - _sphere$4.copy(this.boundingSphere); - _sphere$4.applyMatrix4(matrixWorld); - if (raycaster.ray.intersectsSphere(_sphere$4) === false) return; - _inverseMatrix$2.copy(matrixWorld).invert(); - _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); - if (this.boundingBox !== null) { - if (_ray$2.intersectsBox(this.boundingBox) === false) return; - } - this._computeIntersections(raycaster, intersects2, _ray$2); - } - getVertexPosition(index, target) { - super.getVertexPosition(index, target); - this.applyBoneTransform(index, target); - return target; - } - bind(skeleton, bindMatrix) { - this.skeleton = skeleton; - if (bindMatrix === void 0) { - this.updateMatrixWorld(true); - this.skeleton.calculateInverses(); - bindMatrix = this.matrixWorld; - } - this.bindMatrix.copy(bindMatrix); - this.bindMatrixInverse.copy(bindMatrix).invert(); - } - pose() { - this.skeleton.pose(); - } - normalizeSkinWeights() { - const vector = new Vector4(); - const skinWeight = this.geometry.attributes.skinWeight; - for (let i = 0, l = skinWeight.count; i < l; i++) { - vector.fromBufferAttribute(skinWeight, i); - const scale = 1 / vector.manhattanLength(); - if (scale !== Infinity) { - vector.multiplyScalar(scale); - } else { - vector.set(1, 0, 0, 0); - } - skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w); - } - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.bindMode === AttachedBindMode) { - this.bindMatrixInverse.copy(this.matrixWorld).invert(); - } else if (this.bindMode === DetachedBindMode) { - this.bindMatrixInverse.copy(this.bindMatrix).invert(); - } else { - console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode); - } - } - applyBoneTransform(index, vector) { - const skeleton = this.skeleton; - const geometry = this.geometry; - _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index); - _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index); - _basePosition.copy(vector).applyMatrix4(this.bindMatrix); - vector.set(0, 0, 0); - for (let i = 0; i < 4; i++) { - const weight = _skinWeight.getComponent(i); - if (weight !== 0) { - const boneIndex = _skinIndex.getComponent(i); - _matrix4.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]); - vector.addScaledVector(_vector3.copy(_basePosition).applyMatrix4(_matrix4), weight); - } - } - return vector.applyMatrix4(this.bindMatrixInverse); - } -}; -var Bone = class extends Object3D { - constructor() { - super(); - this.isBone = true; - this.type = "Bone"; - } -}; -var DataTexture = class extends Texture { - constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - this.isDataTexture = true; - this.image = { data, width, height }; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } -}; -var _offsetMatrix = new Matrix4(); -var _identityMatrix$1 = new Matrix4(); -var Skeleton = class _Skeleton { - constructor(bones = [], boneInverses = []) { - this.uuid = generateUUID(); - this.bones = bones.slice(0); - this.boneInverses = boneInverses; - this.boneMatrices = null; - this.boneTexture = null; - this.init(); - } - init() { - const bones = this.bones; - const boneInverses = this.boneInverses; - this.boneMatrices = new Float32Array(bones.length * 16); - if (boneInverses.length === 0) { - this.calculateInverses(); - } else { - if (bones.length !== boneInverses.length) { - console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."); - this.boneInverses = []; - for (let i = 0, il = this.bones.length; i < il; i++) { - this.boneInverses.push(new Matrix4()); - } - } - } - } - calculateInverses() { - this.boneInverses.length = 0; - for (let i = 0, il = this.bones.length; i < il; i++) { - const inverse = new Matrix4(); - if (this.bones[i]) { - inverse.copy(this.bones[i].matrixWorld).invert(); - } - this.boneInverses.push(inverse); - } - } - pose() { - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - if (bone) { - bone.matrixWorld.copy(this.boneInverses[i]).invert(); - } - } - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - if (bone) { - if (bone.parent && bone.parent.isBone) { - bone.matrix.copy(bone.parent.matrixWorld).invert(); - bone.matrix.multiply(bone.matrixWorld); - } else { - bone.matrix.copy(bone.matrixWorld); - } - bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); - } - } - } - update() { - const bones = this.bones; - const boneInverses = this.boneInverses; - const boneMatrices = this.boneMatrices; - const boneTexture = this.boneTexture; - for (let i = 0, il = bones.length; i < il; i++) { - const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix$1; - _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]); - _offsetMatrix.toArray(boneMatrices, i * 16); - } - if (boneTexture !== null) { - boneTexture.needsUpdate = true; - } - } - clone() { - return new _Skeleton(this.bones, this.boneInverses); - } - computeBoneTexture() { - let size = Math.sqrt(this.bones.length * 4); - size = Math.ceil(size / 4) * 4; - size = Math.max(size, 4); - const boneMatrices = new Float32Array(size * size * 4); - boneMatrices.set(this.boneMatrices); - const boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType); - boneTexture.needsUpdate = true; - this.boneMatrices = boneMatrices; - this.boneTexture = boneTexture; - return this; - } - getBoneByName(name) { - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - if (bone.name === name) { - return bone; - } - } - return void 0; - } - dispose() { - if (this.boneTexture !== null) { - this.boneTexture.dispose(); - this.boneTexture = null; - } - } - fromJSON(json, bones) { - this.uuid = json.uuid; - for (let i = 0, l = json.bones.length; i < l; i++) { - const uuid = json.bones[i]; - let bone = bones[uuid]; - if (bone === void 0) { - console.warn("THREE.Skeleton: No bone found with UUID:", uuid); - bone = new Bone(); - } - this.bones.push(bone); - this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i])); - } - this.init(); - return this; - } - toJSON() { - const data = { - metadata: { - version: 4.6, - type: "Skeleton", - generator: "Skeleton.toJSON" - }, - bones: [], - boneInverses: [] - }; - data.uuid = this.uuid; - const bones = this.bones; - const boneInverses = this.boneInverses; - for (let i = 0, l = bones.length; i < l; i++) { - const bone = bones[i]; - data.bones.push(bone.uuid); - const boneInverse = boneInverses[i]; - data.boneInverses.push(boneInverse.toArray()); - } - return data; - } -}; -var InstancedBufferAttribute = class extends BufferAttribute { - constructor(array, itemSize, normalized, meshPerAttribute = 1) { - super(array, itemSize, normalized); - this.isInstancedBufferAttribute = true; - this.meshPerAttribute = meshPerAttribute; - } - copy(source) { - super.copy(source); - this.meshPerAttribute = source.meshPerAttribute; - return this; - } - toJSON() { - const data = super.toJSON(); - data.meshPerAttribute = this.meshPerAttribute; - data.isInstancedBufferAttribute = true; - return data; - } -}; -var _instanceLocalMatrix = new Matrix4(); -var _instanceWorldMatrix = new Matrix4(); -var _instanceIntersects = []; -var _box3 = new Box3(); -var _identity = new Matrix4(); -var _mesh$1 = new Mesh(); -var _sphere$3 = new Sphere(); -var InstancedMesh = class extends Mesh { - constructor(geometry, material, count) { - super(geometry, material); - this.isInstancedMesh = true; - this.instanceMatrix = new InstancedBufferAttribute(new Float32Array(count * 16), 16); - this.instanceColor = null; - this.morphTexture = null; - this.count = count; - this.boundingBox = null; - this.boundingSphere = null; - for (let i = 0; i < count; i++) { - this.setMatrixAt(i, _identity); - } - } - computeBoundingBox() { - const geometry = this.geometry; - const count = this.count; - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - if (geometry.boundingBox === null) { - geometry.computeBoundingBox(); - } - this.boundingBox.makeEmpty(); - for (let i = 0; i < count; i++) { - this.getMatrixAt(i, _instanceLocalMatrix); - _box3.copy(geometry.boundingBox).applyMatrix4(_instanceLocalMatrix); - this.boundingBox.union(_box3); - } - } - computeBoundingSphere() { - const geometry = this.geometry; - const count = this.count; - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - if (geometry.boundingSphere === null) { - geometry.computeBoundingSphere(); - } - this.boundingSphere.makeEmpty(); - for (let i = 0; i < count; i++) { - this.getMatrixAt(i, _instanceLocalMatrix); - _sphere$3.copy(geometry.boundingSphere).applyMatrix4(_instanceLocalMatrix); - this.boundingSphere.union(_sphere$3); - } - } - copy(source, recursive) { - super.copy(source, recursive); - this.instanceMatrix.copy(source.instanceMatrix); - if (source.morphTexture !== null) this.morphTexture = source.morphTexture.clone(); - if (source.instanceColor !== null) this.instanceColor = source.instanceColor.clone(); - this.count = source.count; - if (source.boundingBox !== null) this.boundingBox = source.boundingBox.clone(); - if (source.boundingSphere !== null) this.boundingSphere = source.boundingSphere.clone(); - return this; - } - getColorAt(index, color) { - color.fromArray(this.instanceColor.array, index * 3); - } - getMatrixAt(index, matrix) { - matrix.fromArray(this.instanceMatrix.array, index * 16); - } - getMorphAt(index, object) { - const objectInfluences = object.morphTargetInfluences; - const array = this.morphTexture.source.data.data; - const len = objectInfluences.length + 1; - const dataIndex = index * len + 1; - for (let i = 0; i < objectInfluences.length; i++) { - objectInfluences[i] = array[dataIndex + i]; - } - } - raycast(raycaster, intersects2) { - const matrixWorld = this.matrixWorld; - const raycastTimes = this.count; - _mesh$1.geometry = this.geometry; - _mesh$1.material = this.material; - if (_mesh$1.material === void 0) return; - if (this.boundingSphere === null) this.computeBoundingSphere(); - _sphere$3.copy(this.boundingSphere); - _sphere$3.applyMatrix4(matrixWorld); - if (raycaster.ray.intersectsSphere(_sphere$3) === false) return; - for (let instanceId = 0; instanceId < raycastTimes; instanceId++) { - this.getMatrixAt(instanceId, _instanceLocalMatrix); - _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); - _mesh$1.matrixWorld = _instanceWorldMatrix; - _mesh$1.raycast(raycaster, _instanceIntersects); - for (let i = 0, l = _instanceIntersects.length; i < l; i++) { - const intersect2 = _instanceIntersects[i]; - intersect2.instanceId = instanceId; - intersect2.object = this; - intersects2.push(intersect2); - } - _instanceIntersects.length = 0; - } - } - setColorAt(index, color) { - if (this.instanceColor === null) { - this.instanceColor = new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count * 3).fill(1), 3); - } - color.toArray(this.instanceColor.array, index * 3); - } - setMatrixAt(index, matrix) { - matrix.toArray(this.instanceMatrix.array, index * 16); - } - setMorphAt(index, object) { - const objectInfluences = object.morphTargetInfluences; - const len = objectInfluences.length + 1; - if (this.morphTexture === null) { - this.morphTexture = new DataTexture(new Float32Array(len * this.count), len, this.count, RedFormat, FloatType); - } - const array = this.morphTexture.source.data.data; - let morphInfluencesSum = 0; - for (let i = 0; i < objectInfluences.length; i++) { - morphInfluencesSum += objectInfluences[i]; - } - const morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - const dataIndex = len * index; - array[dataIndex] = morphBaseInfluence; - array.set(objectInfluences, dataIndex + 1); - } - updateMorphTargets() { - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - if (this.morphTexture !== null) { - this.morphTexture.dispose(); - this.morphTexture = null; - } - return this; - } -}; -function sortOpaque(a, b) { - return a.z - b.z; -} -function sortTransparent(a, b) { - return b.z - a.z; -} -var MultiDrawRenderList = class { - constructor() { - this.index = 0; - this.pool = []; - this.list = []; - } - push(drawRange, z, index) { - const pool = this.pool; - const list = this.list; - if (this.index >= pool.length) { - pool.push({ - start: -1, - count: -1, - z: -1, - index: -1 - }); - } - const item = pool[this.index]; - list.push(item); - this.index++; - item.start = drawRange.start; - item.count = drawRange.count; - item.z = z; - item.index = index; - } - reset() { - this.list.length = 0; - this.index = 0; - } -}; -var _matrix$1 = new Matrix4(); -var _invMatrixWorld = new Matrix4(); -var _identityMatrix = new Matrix4(); -var _whiteColor = new Color(1, 1, 1); -var _projScreenMatrix$2 = new Matrix4(); -var _frustum = new Frustum(); -var _box$1 = new Box3(); -var _sphere$2 = new Sphere(); -var _vector$5 = new Vector3(); -var _forward = new Vector3(); -var _temp = new Vector3(); -var _renderList = new MultiDrawRenderList(); -var _mesh = new Mesh(); -var _batchIntersects = []; -function copyAttributeData(src, target, targetOffset = 0) { - const itemSize = target.itemSize; - if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) { - const vertexCount = src.count; - for (let i = 0; i < vertexCount; i++) { - for (let c = 0; c < itemSize; c++) { - target.setComponent(i + targetOffset, c, src.getComponent(i, c)); - } - } - } else { - target.array.set(src.array, targetOffset * itemSize); - } - target.needsUpdate = true; -} -var BatchedMesh = class extends Mesh { - get maxInstanceCount() { - return this._maxInstanceCount; - } - constructor(maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) { - super(new BufferGeometry(), material); - this.isBatchedMesh = true; - this.perObjectFrustumCulled = true; - this.sortObjects = true; - this.boundingBox = null; - this.boundingSphere = null; - this.customSort = null; - this._drawInfo = []; - this._drawRanges = []; - this._reservedRanges = []; - this._bounds = []; - this._maxInstanceCount = maxInstanceCount; - this._maxVertexCount = maxVertexCount; - this._maxIndexCount = maxIndexCount; - this._geometryInitialized = false; - this._geometryCount = 0; - this._multiDrawCounts = new Int32Array(maxInstanceCount); - this._multiDrawStarts = new Int32Array(maxInstanceCount); - this._multiDrawCount = 0; - this._multiDrawInstances = null; - this._visibilityChanged = true; - this._matricesTexture = null; - this._indirectTexture = null; - this._colorsTexture = null; - this._initMatricesTexture(); - this._initIndirectTexture(); - } - _initMatricesTexture() { - let size = Math.sqrt(this._maxInstanceCount * 4); - size = Math.ceil(size / 4) * 4; - size = Math.max(size, 4); - const matricesArray = new Float32Array(size * size * 4); - const matricesTexture = new DataTexture(matricesArray, size, size, RGBAFormat, FloatType); - this._matricesTexture = matricesTexture; - } - _initIndirectTexture() { - let size = Math.sqrt(this._maxInstanceCount); - size = Math.ceil(size); - const indirectArray = new Uint32Array(size * size); - const indirectTexture = new DataTexture(indirectArray, size, size, RedIntegerFormat, UnsignedIntType); - this._indirectTexture = indirectTexture; - } - _initColorsTexture() { - let size = Math.sqrt(this._maxIndexCount); - size = Math.ceil(size); - const colorsArray = new Float32Array(size * size * 4).fill(1); - const colorsTexture = new DataTexture(colorsArray, size, size, RGBAFormat, FloatType); - colorsTexture.colorSpace = ColorManagement.workingColorSpace; - this._colorsTexture = colorsTexture; - } - _initializeGeometry(reference) { - const geometry = this.geometry; - const maxVertexCount = this._maxVertexCount; - const maxIndexCount = this._maxIndexCount; - if (this._geometryInitialized === false) { - for (const attributeName in reference.attributes) { - const srcAttribute = reference.getAttribute(attributeName); - const { array, itemSize, normalized } = srcAttribute; - const dstArray = new array.constructor(maxVertexCount * itemSize); - const dstAttribute = new BufferAttribute(dstArray, itemSize, normalized); - geometry.setAttribute(attributeName, dstAttribute); - } - if (reference.getIndex() !== null) { - const indexArray = maxVertexCount > 65535 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount); - geometry.setIndex(new BufferAttribute(indexArray, 1)); - } - this._geometryInitialized = true; - } - } - // Make sure the geometry is compatible with the existing combined geometry attributes - _validateGeometry(geometry) { - const batchGeometry = this.geometry; - if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) { - throw new Error('BatchedMesh: All geometries must consistently have "index".'); - } - for (const attributeName in batchGeometry.attributes) { - if (!geometry.hasAttribute(attributeName)) { - throw new Error(`BatchedMesh: Added geometry missing "${attributeName}". All geometries must have consistent attributes.`); - } - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) { - throw new Error("BatchedMesh: All attributes must have a consistent itemSize and normalized value."); - } - } - } - setCustomSort(func) { - this.customSort = func; - return this; - } - computeBoundingBox() { - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - const geometryCount = this._geometryCount; - const boundingBox = this.boundingBox; - const drawInfo = this._drawInfo; - boundingBox.makeEmpty(); - for (let i = 0; i < geometryCount; i++) { - if (drawInfo[i].active === false) continue; - const geometryId = drawInfo[i].geometryIndex; - this.getMatrixAt(i, _matrix$1); - this.getBoundingBoxAt(geometryId, _box$1).applyMatrix4(_matrix$1); - boundingBox.union(_box$1); - } - } - computeBoundingSphere() { - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - const boundingSphere = this.boundingSphere; - const drawInfo = this._drawInfo; - boundingSphere.makeEmpty(); - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].active === false) continue; - const geometryId = drawInfo[i].geometryIndex; - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - boundingSphere.union(_sphere$2); - } - } - addInstance(geometryId) { - if (this._drawInfo.length >= this._maxInstanceCount) { - throw new Error("BatchedMesh: Maximum item count reached."); - } - this._drawInfo.push({ - visible: true, - active: true, - geometryIndex: geometryId - }); - const drawId = this._drawInfo.length - 1; - const matricesTexture = this._matricesTexture; - const matricesArray = matricesTexture.image.data; - _identityMatrix.toArray(matricesArray, drawId * 16); - matricesTexture.needsUpdate = true; - const colorsTexture = this._colorsTexture; - if (colorsTexture) { - _whiteColor.toArray(colorsTexture.image.data, drawId * 4); - colorsTexture.needsUpdate = true; - } - return drawId; - } - addGeometry(geometry, vertexCount = -1, indexCount = -1) { - this._initializeGeometry(geometry); - this._validateGeometry(geometry); - if (this._drawInfo.length >= this._maxInstanceCount) { - throw new Error("BatchedMesh: Maximum item count reached."); - } - const reservedRange = { - vertexStart: -1, - vertexCount: -1, - indexStart: -1, - indexCount: -1 - }; - let lastRange = null; - const reservedRanges = this._reservedRanges; - const drawRanges = this._drawRanges; - const bounds = this._bounds; - if (this._geometryCount !== 0) { - lastRange = reservedRanges[reservedRanges.length - 1]; - } - if (vertexCount === -1) { - reservedRange.vertexCount = geometry.getAttribute("position").count; - } else { - reservedRange.vertexCount = vertexCount; - } - if (lastRange === null) { - reservedRange.vertexStart = 0; - } else { - reservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount; - } - const index = geometry.getIndex(); - const hasIndex = index !== null; - if (hasIndex) { - if (indexCount === -1) { - reservedRange.indexCount = index.count; - } else { - reservedRange.indexCount = indexCount; - } - if (lastRange === null) { - reservedRange.indexStart = 0; - } else { - reservedRange.indexStart = lastRange.indexStart + lastRange.indexCount; - } - } - if (reservedRange.indexStart !== -1 && reservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount || reservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount) { - throw new Error("BatchedMesh: Reserved space request exceeds the maximum buffer size."); - } - const geometryId = this._geometryCount; - this._geometryCount++; - reservedRanges.push(reservedRange); - drawRanges.push({ - start: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart, - count: -1 - }); - bounds.push({ - boxInitialized: false, - box: new Box3(), - sphereInitialized: false, - sphere: new Sphere() - }); - this.setGeometryAt(geometryId, geometry); - return geometryId; - } - setGeometryAt(geometryId, geometry) { - if (geometryId >= this._geometryCount) { - throw new Error("BatchedMesh: Maximum geometry count reached."); - } - this._validateGeometry(geometry); - const batchGeometry = this.geometry; - const hasIndex = batchGeometry.getIndex() !== null; - const dstIndex = batchGeometry.getIndex(); - const srcIndex = geometry.getIndex(); - const reservedRange = this._reservedRanges[geometryId]; - if (hasIndex && srcIndex.count > reservedRange.indexCount || geometry.attributes.position.count > reservedRange.vertexCount) { - throw new Error("BatchedMesh: Reserved space not large enough for provided geometry."); - } - const vertexStart = reservedRange.vertexStart; - const vertexCount = reservedRange.vertexCount; - for (const attributeName in batchGeometry.attributes) { - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - copyAttributeData(srcAttribute, dstAttribute, vertexStart); - const itemSize = srcAttribute.itemSize; - for (let i = srcAttribute.count, l = vertexCount; i < l; i++) { - const index = vertexStart + i; - for (let c = 0; c < itemSize; c++) { - dstAttribute.setComponent(index, c, 0); - } - } - dstAttribute.needsUpdate = true; - dstAttribute.addUpdateRange(vertexStart * itemSize, vertexCount * itemSize); - } - if (hasIndex) { - const indexStart = reservedRange.indexStart; - for (let i = 0; i < srcIndex.count; i++) { - dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i)); - } - for (let i = srcIndex.count, l = reservedRange.indexCount; i < l; i++) { - dstIndex.setX(indexStart + i, vertexStart); - } - dstIndex.needsUpdate = true; - dstIndex.addUpdateRange(indexStart, reservedRange.indexCount); - } - const bound = this._bounds[geometryId]; - if (geometry.boundingBox !== null) { - bound.box.copy(geometry.boundingBox); - bound.boxInitialized = true; - } else { - bound.boxInitialized = false; - } - if (geometry.boundingSphere !== null) { - bound.sphere.copy(geometry.boundingSphere); - bound.sphereInitialized = true; - } else { - bound.sphereInitialized = false; - } - const drawRange = this._drawRanges[geometryId]; - const posAttr = geometry.getAttribute("position"); - drawRange.count = hasIndex ? srcIndex.count : posAttr.count; - this._visibilityChanged = true; - return geometryId; - } - /* - deleteGeometry( geometryId ) { - - // TODO: delete geometry and associated instances - - } - */ - /* - deleteInstance( instanceId ) { - - // Note: User needs to call optimize() afterward to pack the data. - - const drawInfo = this._drawInfo; - if ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) { - - return this; - - } - - drawInfo[ instanceId ].active = false; - this._visibilityChanged = true; - - return this; - - } - */ - // get bounding box and compute it if it doesn't exist - getBoundingBoxAt(geometryId, target) { - if (geometryId >= this._geometryCount) { - return null; - } - const bound = this._bounds[geometryId]; - const box = bound.box; - const geometry = this.geometry; - if (bound.boxInitialized === false) { - box.makeEmpty(); - const index = geometry.index; - const position = geometry.attributes.position; - const drawRange = this._drawRanges[geometryId]; - for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { - let iv = i; - if (index) { - iv = index.getX(iv); - } - box.expandByPoint(_vector$5.fromBufferAttribute(position, iv)); - } - bound.boxInitialized = true; - } - target.copy(box); - return target; - } - // get bounding sphere and compute it if it doesn't exist - getBoundingSphereAt(geometryId, target) { - if (geometryId >= this._geometryCount) { - return null; - } - const bound = this._bounds[geometryId]; - const sphere = bound.sphere; - const geometry = this.geometry; - if (bound.sphereInitialized === false) { - sphere.makeEmpty(); - this.getBoundingBoxAt(geometryId, _box$1); - _box$1.getCenter(sphere.center); - const index = geometry.index; - const position = geometry.attributes.position; - const drawRange = this._drawRanges[geometryId]; - let maxRadiusSq = 0; - for (let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i++) { - let iv = i; - if (index) { - iv = index.getX(iv); - } - _vector$5.fromBufferAttribute(position, iv); - maxRadiusSq = Math.max(maxRadiusSq, sphere.center.distanceToSquared(_vector$5)); - } - sphere.radius = Math.sqrt(maxRadiusSq); - bound.sphereInitialized = true; - } - target.copy(sphere); - return target; - } - setMatrixAt(instanceId, matrix) { - const drawInfo = this._drawInfo; - const matricesTexture = this._matricesTexture; - const matricesArray = this._matricesTexture.image.data; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return this; - } - matrix.toArray(matricesArray, instanceId * 16); - matricesTexture.needsUpdate = true; - return this; - } - getMatrixAt(instanceId, matrix) { - const drawInfo = this._drawInfo; - const matricesArray = this._matricesTexture.image.data; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return null; - } - return matrix.fromArray(matricesArray, instanceId * 16); - } - setColorAt(instanceId, color) { - if (this._colorsTexture === null) { - this._initColorsTexture(); - } - const colorsTexture = this._colorsTexture; - const colorsArray = this._colorsTexture.image.data; - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return this; - } - color.toArray(colorsArray, instanceId * 4); - colorsTexture.needsUpdate = true; - return this; - } - getColorAt(instanceId, color) { - const colorsArray = this._colorsTexture.image.data; - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return null; - } - return color.fromArray(colorsArray, instanceId * 4); - } - setVisibleAt(instanceId, value) { - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false || drawInfo[instanceId].visible === value) { - return this; - } - drawInfo[instanceId].visible = value; - this._visibilityChanged = true; - return this; - } - getVisibleAt(instanceId) { - const drawInfo = this._drawInfo; - if (instanceId >= drawInfo.length || drawInfo[instanceId].active === false) { - return false; - } - return drawInfo[instanceId].visible; - } - raycast(raycaster, intersects2) { - const drawInfo = this._drawInfo; - const drawRanges = this._drawRanges; - const matrixWorld = this.matrixWorld; - const batchGeometry = this.geometry; - _mesh.material = this.material; - _mesh.geometry.index = batchGeometry.index; - _mesh.geometry.attributes = batchGeometry.attributes; - if (_mesh.geometry.boundingBox === null) { - _mesh.geometry.boundingBox = new Box3(); - } - if (_mesh.geometry.boundingSphere === null) { - _mesh.geometry.boundingSphere = new Sphere(); - } - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (!drawInfo[i].visible || !drawInfo[i].active) { - continue; - } - const geometryId = drawInfo[i].geometryIndex; - const drawRange = drawRanges[geometryId]; - _mesh.geometry.setDrawRange(drawRange.start, drawRange.count); - this.getMatrixAt(i, _mesh.matrixWorld).premultiply(matrixWorld); - this.getBoundingBoxAt(geometryId, _mesh.geometry.boundingBox); - this.getBoundingSphereAt(geometryId, _mesh.geometry.boundingSphere); - _mesh.raycast(raycaster, _batchIntersects); - for (let j = 0, l2 = _batchIntersects.length; j < l2; j++) { - const intersect2 = _batchIntersects[j]; - intersect2.object = this; - intersect2.batchId = i; - intersects2.push(intersect2); - } - _batchIntersects.length = 0; - } - _mesh.material = null; - _mesh.geometry.index = null; - _mesh.geometry.attributes = {}; - _mesh.geometry.setDrawRange(0, Infinity); - } - copy(source) { - super.copy(source); - this.geometry = source.geometry.clone(); - this.perObjectFrustumCulled = source.perObjectFrustumCulled; - this.sortObjects = source.sortObjects; - this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null; - this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null; - this._drawRanges = source._drawRanges.map((range) => ({ ...range })); - this._reservedRanges = source._reservedRanges.map((range) => ({ ...range })); - this._drawInfo = source._drawInfo.map((inf) => ({ ...inf })); - this._bounds = source._bounds.map((bound) => ({ - boxInitialized: bound.boxInitialized, - box: bound.box.clone(), - sphereInitialized: bound.sphereInitialized, - sphere: bound.sphere.clone() - })); - this._maxInstanceCount = source._maxInstanceCount; - this._maxVertexCount = source._maxVertexCount; - this._maxIndexCount = source._maxIndexCount; - this._geometryInitialized = source._geometryInitialized; - this._geometryCount = source._geometryCount; - this._multiDrawCounts = source._multiDrawCounts.slice(); - this._multiDrawStarts = source._multiDrawStarts.slice(); - this._matricesTexture = source._matricesTexture.clone(); - this._matricesTexture.image.data = this._matricesTexture.image.data.slice(); - if (this._colorsTexture !== null) { - this._colorsTexture = source._colorsTexture.clone(); - this._colorsTexture.image.data = this._colorsTexture.image.data.slice(); - } - return this; - } - dispose() { - this.geometry.dispose(); - this._matricesTexture.dispose(); - this._matricesTexture = null; - this._indirectTexture.dispose(); - this._indirectTexture = null; - if (this._colorsTexture !== null) { - this._colorsTexture.dispose(); - this._colorsTexture = null; - } - return this; - } - onBeforeRender(renderer, scene, camera, geometry, material) { - if (!this._visibilityChanged && !this.perObjectFrustumCulled && !this.sortObjects) { - return; - } - const index = geometry.getIndex(); - const bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT; - const drawInfo = this._drawInfo; - const multiDrawStarts = this._multiDrawStarts; - const multiDrawCounts = this._multiDrawCounts; - const drawRanges = this._drawRanges; - const perObjectFrustumCulled = this.perObjectFrustumCulled; - const indirectTexture = this._indirectTexture; - const indirectArray = indirectTexture.image.data; - if (perObjectFrustumCulled) { - _projScreenMatrix$2.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse).multiply(this.matrixWorld); - _frustum.setFromProjectionMatrix( - _projScreenMatrix$2, - renderer.coordinateSystem - ); - } - let count = 0; - if (this.sortObjects) { - _invMatrixWorld.copy(this.matrixWorld).invert(); - _vector$5.setFromMatrixPosition(camera.matrixWorld).applyMatrix4(_invMatrixWorld); - _forward.set(0, 0, -1).transformDirection(camera.matrixWorld).transformDirection(_invMatrixWorld); - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].visible && drawInfo[i].active) { - const geometryId = drawInfo[i].geometryIndex; - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - let culled = false; - if (perObjectFrustumCulled) { - culled = !_frustum.intersectsSphere(_sphere$2); - } - if (!culled) { - const z = _temp.subVectors(_sphere$2.center, _vector$5).dot(_forward); - _renderList.push(drawRanges[geometryId], z, i); - } - } - } - const list = _renderList.list; - const customSort = this.customSort; - if (customSort === null) { - list.sort(material.transparent ? sortTransparent : sortOpaque); - } else { - customSort.call(this, list, camera); - } - for (let i = 0, l = list.length; i < l; i++) { - const item = list[i]; - multiDrawStarts[count] = item.start * bytesPerElement; - multiDrawCounts[count] = item.count; - indirectArray[count] = item.index; - count++; - } - _renderList.reset(); - } else { - for (let i = 0, l = drawInfo.length; i < l; i++) { - if (drawInfo[i].visible && drawInfo[i].active) { - const geometryId = drawInfo[i].geometryIndex; - let culled = false; - if (perObjectFrustumCulled) { - this.getMatrixAt(i, _matrix$1); - this.getBoundingSphereAt(geometryId, _sphere$2).applyMatrix4(_matrix$1); - culled = !_frustum.intersectsSphere(_sphere$2); - } - if (!culled) { - const range = drawRanges[geometryId]; - multiDrawStarts[count] = range.start * bytesPerElement; - multiDrawCounts[count] = range.count; - indirectArray[count] = i; - count++; - } - } - } - } - indirectTexture.needsUpdate = true; - this._multiDrawCount = count; - this._visibilityChanged = false; - } - onBeforeShadow(renderer, object, camera, shadowCamera, geometry, depthMaterial) { - this.onBeforeRender(renderer, null, shadowCamera, geometry, depthMaterial); - } -}; -var LineBasicMaterial = class extends Material { - constructor(parameters) { - super(); - this.isLineBasicMaterial = true; - this.type = "LineBasicMaterial"; - this.color = new Color(16777215); - this.map = null; - this.linewidth = 1; - this.linecap = "round"; - this.linejoin = "round"; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.linewidth = source.linewidth; - this.linecap = source.linecap; - this.linejoin = source.linejoin; - this.fog = source.fog; - return this; - } -}; -var _vStart = new Vector3(); -var _vEnd = new Vector3(); -var _inverseMatrix$1 = new Matrix4(); -var _ray$1 = new Ray(); -var _sphere$1 = new Sphere(); -var _intersectPointOnRay = new Vector3(); -var _intersectPointOnSegment = new Vector3(); -var Line = class extends Object3D { - constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) { - super(); - this.isLine = true; - this.type = "Line"; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - return this; - } - computeLineDistances() { - const geometry = this.geometry; - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = [0]; - for (let i = 1, l = positionAttribute.count; i < l; i++) { - _vStart.fromBufferAttribute(positionAttribute, i - 1); - _vEnd.fromBufferAttribute(positionAttribute, i); - lineDistances[i] = lineDistances[i - 1]; - lineDistances[i] += _vStart.distanceTo(_vEnd); - } - geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - } - return this; - } - raycast(raycaster, intersects2) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Line.threshold; - const drawRange = geometry.drawRange; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _sphere$1.copy(geometry.boundingSphere); - _sphere$1.applyMatrix4(matrixWorld); - _sphere$1.radius += threshold; - if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; - _inverseMatrix$1.copy(matrixWorld).invert(); - _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - const step = this.isLineSegments ? 2 : 1; - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - for (let i = start, l = end - 1; i < l; i += step) { - const a = index.getX(i); - const b = index.getX(i + 1); - const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); - if (intersect2) { - intersects2.push(intersect2); - } - } - if (this.isLineLoop) { - const a = index.getX(end - 1); - const b = index.getX(start); - const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, a, b); - if (intersect2) { - intersects2.push(intersect2); - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - for (let i = start, l = end - 1; i < l; i += step) { - const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, i, i + 1); - if (intersect2) { - intersects2.push(intersect2); - } - } - if (this.isLineLoop) { - const intersect2 = checkIntersection(this, raycaster, _ray$1, localThresholdSq, end - 1, start); - if (intersect2) { - intersects2.push(intersect2); - } - } - } - } - updateMorphTargets() { - const geometry = this.geometry; - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - if (morphAttribute !== void 0) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } -}; -function checkIntersection(object, raycaster, ray, thresholdSq, a, b) { - const positionAttribute = object.geometry.attributes.position; - _vStart.fromBufferAttribute(positionAttribute, a); - _vEnd.fromBufferAttribute(positionAttribute, b); - const distSq = ray.distanceSqToSegment(_vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment); - if (distSq > thresholdSq) return; - _intersectPointOnRay.applyMatrix4(object.matrixWorld); - const distance = raycaster.ray.origin.distanceTo(_intersectPointOnRay); - if (distance < raycaster.near || distance > raycaster.far) return; - return { - distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: _intersectPointOnSegment.clone().applyMatrix4(object.matrixWorld), - index: a, - face: null, - faceIndex: null, - object - }; -} -var _start = new Vector3(); -var _end = new Vector3(); -var LineSegments = class extends Line { - constructor(geometry, material) { - super(geometry, material); - this.isLineSegments = true; - this.type = "LineSegments"; - } - computeLineDistances() { - const geometry = this.geometry; - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = []; - for (let i = 0, l = positionAttribute.count; i < l; i += 2) { - _start.fromBufferAttribute(positionAttribute, i); - _end.fromBufferAttribute(positionAttribute, i + 1); - lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1]; - lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end); - } - geometry.setAttribute("lineDistance", new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); - } - return this; - } -}; -var LineLoop = class extends Line { - constructor(geometry, material) { - super(geometry, material); - this.isLineLoop = true; - this.type = "LineLoop"; - } -}; -var PointsMaterial = class extends Material { - constructor(parameters) { - super(); - this.isPointsMaterial = true; - this.type = "PointsMaterial"; - this.color = new Color(16777215); - this.map = null; - this.alphaMap = null; - this.size = 1; - this.sizeAttenuation = true; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.alphaMap = source.alphaMap; - this.size = source.size; - this.sizeAttenuation = source.sizeAttenuation; - this.fog = source.fog; - return this; - } -}; -var _inverseMatrix = new Matrix4(); -var _ray = new Ray(); -var _sphere = new Sphere(); -var _position$2 = new Vector3(); -var Points = class extends Object3D { - constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) { - super(); - this.isPoints = true; - this.type = "Points"; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.material = Array.isArray(source.material) ? source.material.slice() : source.material; - this.geometry = source.geometry; - return this; - } - raycast(raycaster, intersects2) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Points.threshold; - const drawRange = geometry.drawRange; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _sphere.copy(geometry.boundingSphere); - _sphere.applyMatrix4(matrixWorld); - _sphere.radius += threshold; - if (raycaster.ray.intersectsSphere(_sphere) === false) return; - _inverseMatrix.copy(matrixWorld).invert(); - _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - for (let i = start, il = end; i < il; i++) { - const a = index.getX(i); - _position$2.fromBufferAttribute(positionAttribute, a); - testPoint(_position$2, a, localThresholdSq, matrixWorld, raycaster, intersects2, this); - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - for (let i = start, l = end; i < l; i++) { - _position$2.fromBufferAttribute(positionAttribute, i); - testPoint(_position$2, i, localThresholdSq, matrixWorld, raycaster, intersects2, this); - } - } - } - updateMorphTargets() { - const geometry = this.geometry; - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - if (morphAttribute !== void 0) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } -}; -function testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects2, object) { - const rayPointDistanceSq = _ray.distanceSqToPoint(point); - if (rayPointDistanceSq < localThresholdSq) { - const intersectPoint = new Vector3(); - _ray.closestPointToPoint(point, intersectPoint); - intersectPoint.applyMatrix4(matrixWorld); - const distance = raycaster.ray.origin.distanceTo(intersectPoint); - if (distance < raycaster.near || distance > raycaster.far) return; - intersects2.push({ - distance, - distanceToRay: Math.sqrt(rayPointDistanceSq), - point: intersectPoint, - index, - face: null, - object - }); - } -} -var VideoTexture = class extends Texture { - constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.isVideoTexture = true; - this.minFilter = minFilter !== void 0 ? minFilter : LinearFilter; - this.magFilter = magFilter !== void 0 ? magFilter : LinearFilter; - this.generateMipmaps = false; - const scope = this; - function updateVideo() { - scope.needsUpdate = true; - video.requestVideoFrameCallback(updateVideo); - } - if ("requestVideoFrameCallback" in video) { - video.requestVideoFrameCallback(updateVideo); - } - } - clone() { - return new this.constructor(this.image).copy(this); - } - update() { - const video = this.image; - const hasVideoFrameCallback = "requestVideoFrameCallback" in video; - if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { - this.needsUpdate = true; - } - } -}; -var FramebufferTexture = class extends Texture { - constructor(width, height) { - super({ width, height }); - this.isFramebufferTexture = true; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.generateMipmaps = false; - this.needsUpdate = true; - } -}; -var CompressedTexture = class extends Texture { - constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace); - this.isCompressedTexture = true; - this.image = { width, height }; - this.mipmaps = mipmaps; - this.flipY = false; - this.generateMipmaps = false; - } -}; -var CompressedArrayTexture = class extends CompressedTexture { - constructor(mipmaps, width, height, depth, format, type) { - super(mipmaps, width, height, format, type); - this.isCompressedArrayTexture = true; - this.image.depth = depth; - this.wrapR = ClampToEdgeWrapping; - this.layerUpdates = /* @__PURE__ */ new Set(); - } - addLayerUpdate(layerIndex) { - this.layerUpdates.add(layerIndex); - } - clearLayerUpdates() { - this.layerUpdates.clear(); - } -}; -var CompressedCubeTexture = class extends CompressedTexture { - constructor(images, format, type) { - super(void 0, images[0].width, images[0].height, format, type, CubeReflectionMapping); - this.isCompressedCubeTexture = true; - this.isCubeTexture = true; - this.image = images; - } -}; -var CanvasTexture = class extends Texture { - constructor(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.isCanvasTexture = true; - this.needsUpdate = true; - } -}; -var Curve = class { - constructor() { - this.type = "Curve"; - this.arcLengthDivisions = 200; - } - // Virtual base class method to overwrite and implement in subclasses - // - t [0 .. 1] - getPoint() { - console.warn("THREE.Curve: .getPoint() not implemented."); - return null; - } - // Get point at relative position in curve according to arc length - // - u [0 .. 1] - getPointAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getPoint(t, optionalTarget); - } - // Get sequence of points using getPoint( t ) - getPoints(divisions = 5) { - const points = []; - for (let d = 0; d <= divisions; d++) { - points.push(this.getPoint(d / divisions)); - } - return points; - } - // Get sequence of points using getPointAt( u ) - getSpacedPoints(divisions = 5) { - const points = []; - for (let d = 0; d <= divisions; d++) { - points.push(this.getPointAt(d / divisions)); - } - return points; - } - // Get total curve arc length - getLength() { - const lengths = this.getLengths(); - return lengths[lengths.length - 1]; - } - // Get list of cumulative segment lengths - getLengths(divisions = this.arcLengthDivisions) { - if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) { - return this.cacheArcLengths; - } - this.needsUpdate = false; - const cache = []; - let current, last = this.getPoint(0); - let sum = 0; - cache.push(0); - for (let p = 1; p <= divisions; p++) { - current = this.getPoint(p / divisions); - sum += current.distanceTo(last); - cache.push(sum); - last = current; - } - this.cacheArcLengths = cache; - return cache; - } - updateArcLengths() { - this.needsUpdate = true; - this.getLengths(); - } - // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant - getUtoTmapping(u, distance) { - const arcLengths = this.getLengths(); - let i = 0; - const il = arcLengths.length; - let targetArcLength; - if (distance) { - targetArcLength = distance; - } else { - targetArcLength = u * arcLengths[il - 1]; - } - let low = 0, high = il - 1, comparison; - while (low <= high) { - i = Math.floor(low + (high - low) / 2); - comparison = arcLengths[i] - targetArcLength; - if (comparison < 0) { - low = i + 1; - } else if (comparison > 0) { - high = i - 1; - } else { - high = i; - break; - } - } - i = high; - if (arcLengths[i] === targetArcLength) { - return i / (il - 1); - } - const lengthBefore = arcLengths[i]; - const lengthAfter = arcLengths[i + 1]; - const segmentLength = lengthAfter - lengthBefore; - const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; - const t = (i + segmentFraction) / (il - 1); - return t; - } - // Returns a unit vector tangent at t - // In case any sub curve does not implement its tangent derivation, - // 2 points a small delta apart will be used to find its gradient - // which seems to give a reasonable approximation - getTangent(t, optionalTarget) { - const delta = 1e-4; - let t1 = t - delta; - let t2 = t + delta; - if (t1 < 0) t1 = 0; - if (t2 > 1) t2 = 1; - const pt1 = this.getPoint(t1); - const pt2 = this.getPoint(t2); - const tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3()); - tangent.copy(pt2).sub(pt1).normalize(); - return tangent; - } - getTangentAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getTangent(t, optionalTarget); - } - computeFrenetFrames(segments, closed) { - const normal = new Vector3(); - const tangents = []; - const normals = []; - const binormals = []; - const vec = new Vector3(); - const mat = new Matrix4(); - for (let i = 0; i <= segments; i++) { - const u = i / segments; - tangents[i] = this.getTangentAt(u, new Vector3()); - } - normals[0] = new Vector3(); - binormals[0] = new Vector3(); - let min = Number.MAX_VALUE; - const tx = Math.abs(tangents[0].x); - const ty = Math.abs(tangents[0].y); - const tz = Math.abs(tangents[0].z); - if (tx <= min) { - min = tx; - normal.set(1, 0, 0); - } - if (ty <= min) { - min = ty; - normal.set(0, 1, 0); - } - if (tz <= min) { - normal.set(0, 0, 1); - } - vec.crossVectors(tangents[0], normal).normalize(); - normals[0].crossVectors(tangents[0], vec); - binormals[0].crossVectors(tangents[0], normals[0]); - for (let i = 1; i <= segments; i++) { - normals[i] = normals[i - 1].clone(); - binormals[i] = binormals[i - 1].clone(); - vec.crossVectors(tangents[i - 1], tangents[i]); - if (vec.length() > Number.EPSILON) { - vec.normalize(); - const theta = Math.acos(clamp(tangents[i - 1].dot(tangents[i]), -1, 1)); - normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta)); - } - binormals[i].crossVectors(tangents[i], normals[i]); - } - if (closed === true) { - let theta = Math.acos(clamp(normals[0].dot(normals[segments]), -1, 1)); - theta /= segments; - if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) { - theta = -theta; - } - for (let i = 1; i <= segments; i++) { - normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i)); - binormals[i].crossVectors(tangents[i], normals[i]); - } - } - return { - tangents, - normals, - binormals - }; - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.arcLengthDivisions = source.arcLengthDivisions; - return this; - } - toJSON() { - const data = { - metadata: { - version: 4.6, - type: "Curve", - generator: "Curve.toJSON" - } - }; - data.arcLengthDivisions = this.arcLengthDivisions; - data.type = this.type; - return data; - } - fromJSON(json) { - this.arcLengthDivisions = json.arcLengthDivisions; - return this; - } -}; -var EllipseCurve = class extends Curve { - constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0) { - super(); - this.isEllipseCurve = true; - this.type = "EllipseCurve"; - this.aX = aX; - this.aY = aY; - this.xRadius = xRadius; - this.yRadius = yRadius; - this.aStartAngle = aStartAngle; - this.aEndAngle = aEndAngle; - this.aClockwise = aClockwise; - this.aRotation = aRotation; - } - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const twoPi = Math.PI * 2; - let deltaAngle = this.aEndAngle - this.aStartAngle; - const samePoints = Math.abs(deltaAngle) < Number.EPSILON; - while (deltaAngle < 0) deltaAngle += twoPi; - while (deltaAngle > twoPi) deltaAngle -= twoPi; - if (deltaAngle < Number.EPSILON) { - if (samePoints) { - deltaAngle = 0; - } else { - deltaAngle = twoPi; - } - } - if (this.aClockwise === true && !samePoints) { - if (deltaAngle === twoPi) { - deltaAngle = -twoPi; - } else { - deltaAngle = deltaAngle - twoPi; - } - } - const angle = this.aStartAngle + t * deltaAngle; - let x = this.aX + this.xRadius * Math.cos(angle); - let y = this.aY + this.yRadius * Math.sin(angle); - if (this.aRotation !== 0) { - const cos = Math.cos(this.aRotation); - const sin = Math.sin(this.aRotation); - const tx = x - this.aX; - const ty = y - this.aY; - x = tx * cos - ty * sin + this.aX; - y = tx * sin + ty * cos + this.aY; - } - return point.set(x, y); - } - copy(source) { - super.copy(source); - this.aX = source.aX; - this.aY = source.aY; - this.xRadius = source.xRadius; - this.yRadius = source.yRadius; - this.aStartAngle = source.aStartAngle; - this.aEndAngle = source.aEndAngle; - this.aClockwise = source.aClockwise; - this.aRotation = source.aRotation; - return this; - } - toJSON() { - const data = super.toJSON(); - data.aX = this.aX; - data.aY = this.aY; - data.xRadius = this.xRadius; - data.yRadius = this.yRadius; - data.aStartAngle = this.aStartAngle; - data.aEndAngle = this.aEndAngle; - data.aClockwise = this.aClockwise; - data.aRotation = this.aRotation; - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.aX = json.aX; - this.aY = json.aY; - this.xRadius = json.xRadius; - this.yRadius = json.yRadius; - this.aStartAngle = json.aStartAngle; - this.aEndAngle = json.aEndAngle; - this.aClockwise = json.aClockwise; - this.aRotation = json.aRotation; - return this; - } -}; -var ArcCurve = class extends EllipseCurve { - constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - super(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - this.isArcCurve = true; - this.type = "ArcCurve"; - } -}; -function CubicPoly() { - let c0 = 0, c1 = 0, c2 = 0, c3 = 0; - function init(x0, x1, t0, t1) { - c0 = x0; - c1 = t0; - c2 = -3 * x0 + 3 * x1 - 2 * t0 - t1; - c3 = 2 * x0 - 2 * x1 + t0 + t1; - } - return { - initCatmullRom: function(x0, x1, x2, x3, tension) { - init(x1, x2, tension * (x2 - x0), tension * (x3 - x1)); - }, - initNonuniformCatmullRom: function(x0, x1, x2, x3, dt0, dt1, dt2) { - let t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1; - let t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; - t1 *= dt1; - t2 *= dt1; - init(x1, x2, t1, t2); - }, - calc: function(t) { - const t2 = t * t; - const t3 = t2 * t; - return c0 + c1 * t + c2 * t2 + c3 * t3; - } - }; -} -var tmp = new Vector3(); -var px = new CubicPoly(); -var py = new CubicPoly(); -var pz = new CubicPoly(); -var CatmullRomCurve3 = class extends Curve { - constructor(points = [], closed = false, curveType = "centripetal", tension = 0.5) { - super(); - this.isCatmullRomCurve3 = true; - this.type = "CatmullRomCurve3"; - this.points = points; - this.closed = closed; - this.curveType = curveType; - this.tension = tension; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const points = this.points; - const l = points.length; - const p = (l - (this.closed ? 0 : 1)) * t; - let intPoint = Math.floor(p); - let weight = p - intPoint; - if (this.closed) { - intPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l; - } else if (weight === 0 && intPoint === l - 1) { - intPoint = l - 2; - weight = 1; - } - let p0, p3; - if (this.closed || intPoint > 0) { - p0 = points[(intPoint - 1) % l]; - } else { - tmp.subVectors(points[0], points[1]).add(points[0]); - p0 = tmp; - } - const p1 = points[intPoint % l]; - const p2 = points[(intPoint + 1) % l]; - if (this.closed || intPoint + 2 < l) { - p3 = points[(intPoint + 2) % l]; - } else { - tmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]); - p3 = tmp; - } - if (this.curveType === "centripetal" || this.curveType === "chordal") { - const pow = this.curveType === "chordal" ? 0.5 : 0.25; - let dt0 = Math.pow(p0.distanceToSquared(p1), pow); - let dt1 = Math.pow(p1.distanceToSquared(p2), pow); - let dt2 = Math.pow(p2.distanceToSquared(p3), pow); - if (dt1 < 1e-4) dt1 = 1; - if (dt0 < 1e-4) dt0 = dt1; - if (dt2 < 1e-4) dt2 = dt1; - px.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2); - py.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2); - pz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2); - } else if (this.curveType === "catmullrom") { - px.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension); - py.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension); - pz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension); - } - point.set( - px.calc(weight), - py.calc(weight), - pz.calc(weight) - ); - return point; - } - copy(source) { - super.copy(source); - this.points = []; - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - this.points.push(point.clone()); - } - this.closed = source.closed; - this.curveType = source.curveType; - this.tension = source.tension; - return this; - } - toJSON() { - const data = super.toJSON(); - data.points = []; - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - data.closed = this.closed; - data.curveType = this.curveType; - data.tension = this.tension; - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.points = []; - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector3().fromArray(point)); - } - this.closed = json.closed; - this.curveType = json.curveType; - this.tension = json.tension; - return this; - } -}; -function CatmullRom(t, p0, p1, p2, p3) { - const v0 = (p2 - p0) * 0.5; - const v1 = (p3 - p1) * 0.5; - const t2 = t * t; - const t3 = t * t2; - return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; -} -function QuadraticBezierP0(t, p) { - const k = 1 - t; - return k * k * p; -} -function QuadraticBezierP1(t, p) { - return 2 * (1 - t) * t * p; -} -function QuadraticBezierP2(t, p) { - return t * t * p; -} -function QuadraticBezier(t, p0, p1, p2) { - return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2); -} -function CubicBezierP0(t, p) { - const k = 1 - t; - return k * k * k * p; -} -function CubicBezierP1(t, p) { - const k = 1 - t; - return 3 * k * k * t * p; -} -function CubicBezierP2(t, p) { - return 3 * (1 - t) * t * t * p; -} -function CubicBezierP3(t, p) { - return t * t * t * p; -} -function CubicBezier(t, p0, p1, p2, p3) { - return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3); -} -var CubicBezierCurve = class extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2()) { - super(); - this.isCubicBezierCurve = true; - this.type = "CubicBezierCurve"; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - point.set( - CubicBezier(t, v0.x, v1.x, v2.x, v3.x), - CubicBezier(t, v0.y, v1.y, v2.y, v3.y) - ); - return point; - } - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - return this; - } -}; -var CubicBezierCurve3 = class extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3()) { - super(); - this.isCubicBezierCurve3 = true; - this.type = "CubicBezierCurve3"; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - point.set( - CubicBezier(t, v0.x, v1.x, v2.x, v3.x), - CubicBezier(t, v0.y, v1.y, v2.y, v3.y), - CubicBezier(t, v0.z, v1.z, v2.z, v3.z) - ); - return point; - } - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - return this; - } -}; -var LineCurve = class extends Curve { - constructor(v1 = new Vector2(), v2 = new Vector2()) { - super(); - this.isLineCurve = true; - this.type = "LineCurve"; - this.v1 = v1; - this.v2 = v2; - } - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - return point; - } - // Line curve is linear, so we can overwrite default getPointAt - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - getTangent(t, optionalTarget = new Vector2()) { - return optionalTarget.subVectors(this.v2, this.v1).normalize(); - } - getTangentAt(u, optionalTarget) { - return this.getTangent(u, optionalTarget); - } - copy(source) { - super.copy(source); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } -}; -var LineCurve3 = class extends Curve { - constructor(v1 = new Vector3(), v2 = new Vector3()) { - super(); - this.isLineCurve3 = true; - this.type = "LineCurve3"; - this.v1 = v1; - this.v2 = v2; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - return point; - } - // Line curve is linear, so we can overwrite default getPointAt - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - getTangent(t, optionalTarget = new Vector3()) { - return optionalTarget.subVectors(this.v2, this.v1).normalize(); - } - getTangentAt(u, optionalTarget) { - return this.getTangent(u, optionalTarget); - } - copy(source) { - super.copy(source); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } -}; -var QuadraticBezierCurve = class extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) { - super(); - this.isQuadraticBezierCurve = true; - this.type = "QuadraticBezierCurve"; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - point.set( - QuadraticBezier(t, v0.x, v1.x, v2.x), - QuadraticBezier(t, v0.y, v1.y, v2.y) - ); - return point; - } - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } -}; -var QuadraticBezierCurve3 = class extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) { - super(); - this.isQuadraticBezierCurve3 = true; - this.type = "QuadraticBezierCurve3"; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - point.set( - QuadraticBezier(t, v0.x, v1.x, v2.x), - QuadraticBezier(t, v0.y, v1.y, v2.y), - QuadraticBezier(t, v0.z, v1.z, v2.z) - ); - return point; - } - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } -}; -var SplineCurve = class extends Curve { - constructor(points = []) { - super(); - this.isSplineCurve = true; - this.type = "SplineCurve"; - this.points = points; - } - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const points = this.points; - const p = (points.length - 1) * t; - const intPoint = Math.floor(p); - const weight = p - intPoint; - const p0 = points[intPoint === 0 ? intPoint : intPoint - 1]; - const p1 = points[intPoint]; - const p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1]; - const p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2]; - point.set( - CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), - CatmullRom(weight, p0.y, p1.y, p2.y, p3.y) - ); - return point; - } - copy(source) { - super.copy(source); - this.points = []; - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - this.points.push(point.clone()); - } - return this; - } - toJSON() { - const data = super.toJSON(); - data.points = []; - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.points = []; - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector2().fromArray(point)); - } - return this; - } -}; -var Curves = Object.freeze({ - __proto__: null, +import { + ACESFilmicToneMapping, + AddEquation, + AddOperation, + AdditiveAnimationBlendMode, + AdditiveBlending, + AgXToneMapping, + AlphaFormat, + AlwaysCompare, + AlwaysDepth, + AlwaysStencilFunc, + AmbientLight, + AnimationAction, + AnimationClip, + AnimationLoader, + AnimationMixer, + AnimationObjectGroup, + AnimationUtils, ArcCurve, - CatmullRomCurve3, - CubicBezierCurve, - CubicBezierCurve3, - EllipseCurve, - LineCurve, - LineCurve3, - QuadraticBezierCurve, - QuadraticBezierCurve3, - SplineCurve -}); -var CurvePath = class extends Curve { - constructor() { - super(); - this.type = "CurvePath"; - this.curves = []; - this.autoClose = false; - } - add(curve) { - this.curves.push(curve); - } - closePath() { - const startPoint = this.curves[0].getPoint(0); - const endPoint = this.curves[this.curves.length - 1].getPoint(1); - if (!startPoint.equals(endPoint)) { - const lineType = startPoint.isVector2 === true ? "LineCurve" : "LineCurve3"; - this.curves.push(new Curves[lineType](endPoint, startPoint)); - } - return this; - } - // To get accurate point with reference to - // entire path distance at time t, - // following has to be done: - // 1. Length of each sub path have to be known - // 2. Locate and identify type of curve - // 3. Get t for the curve - // 4. Return curve.getPointAt(t') - getPoint(t, optionalTarget) { - const d = t * this.getLength(); - const curveLengths = this.getCurveLengths(); - let i = 0; - while (i < curveLengths.length) { - if (curveLengths[i] >= d) { - const diff = curveLengths[i] - d; - const curve = this.curves[i]; - const segmentLength = curve.getLength(); - const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; - return curve.getPointAt(u, optionalTarget); - } - i++; - } - return null; - } - // We cannot use the default THREE.Curve getPoint() with getLength() because in - // THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath - // getPoint() depends on getLength - getLength() { - const lens = this.getCurveLengths(); - return lens[lens.length - 1]; - } - // cacheLengths must be recalculated. - updateArcLengths() { - this.needsUpdate = true; - this.cacheLengths = null; - this.getCurveLengths(); - } - // Compute lengths and cache them - // We cannot overwrite getLengths() because UtoT mapping uses it. - getCurveLengths() { - if (this.cacheLengths && this.cacheLengths.length === this.curves.length) { - return this.cacheLengths; - } - const lengths = []; - let sums = 0; - for (let i = 0, l = this.curves.length; i < l; i++) { - sums += this.curves[i].getLength(); - lengths.push(sums); - } - this.cacheLengths = lengths; - return lengths; - } - getSpacedPoints(divisions = 40) { - const points = []; - for (let i = 0; i <= divisions; i++) { - points.push(this.getPoint(i / divisions)); - } - if (this.autoClose) { - points.push(points[0]); - } - return points; - } - getPoints(divisions = 12) { - const points = []; - let last; - for (let i = 0, curves = this.curves; i < curves.length; i++) { - const curve = curves[i]; - const resolution = curve.isEllipseCurve ? divisions * 2 : curve.isLineCurve || curve.isLineCurve3 ? 1 : curve.isSplineCurve ? divisions * curve.points.length : divisions; - const pts = curve.getPoints(resolution); - for (let j = 0; j < pts.length; j++) { - const point = pts[j]; - if (last && last.equals(point)) continue; - points.push(point); - last = point; - } - } - if (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0])) { - points.push(points[0]); - } - return points; - } - copy(source) { - super.copy(source); - this.curves = []; - for (let i = 0, l = source.curves.length; i < l; i++) { - const curve = source.curves[i]; - this.curves.push(curve.clone()); - } - this.autoClose = source.autoClose; - return this; - } - toJSON() { - const data = super.toJSON(); - data.autoClose = this.autoClose; - data.curves = []; - for (let i = 0, l = this.curves.length; i < l; i++) { - const curve = this.curves[i]; - data.curves.push(curve.toJSON()); - } - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.autoClose = json.autoClose; - this.curves = []; - for (let i = 0, l = json.curves.length; i < l; i++) { - const curve = json.curves[i]; - this.curves.push(new Curves[curve.type]().fromJSON(curve)); - } - return this; - } -}; -var Path = class extends CurvePath { - constructor(points) { - super(); - this.type = "Path"; - this.currentPoint = new Vector2(); - if (points) { - this.setFromPoints(points); - } - } - setFromPoints(points) { - this.moveTo(points[0].x, points[0].y); - for (let i = 1, l = points.length; i < l; i++) { - this.lineTo(points[i].x, points[i].y); - } - return this; - } - moveTo(x, y) { - this.currentPoint.set(x, y); - return this; - } - lineTo(x, y) { - const curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y)); - this.curves.push(curve); - this.currentPoint.set(x, y); - return this; - } - quadraticCurveTo(aCPx, aCPy, aX, aY) { - const curve = new QuadraticBezierCurve( - this.currentPoint.clone(), - new Vector2(aCPx, aCPy), - new Vector2(aX, aY) - ); - this.curves.push(curve); - this.currentPoint.set(aX, aY); - return this; - } - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - const curve = new CubicBezierCurve( - this.currentPoint.clone(), - new Vector2(aCP1x, aCP1y), - new Vector2(aCP2x, aCP2y), - new Vector2(aX, aY) - ); - this.curves.push(curve); - this.currentPoint.set(aX, aY); - return this; - } - splineThru(pts) { - const npts = [this.currentPoint.clone()].concat(pts); - const curve = new SplineCurve(npts); - this.curves.push(curve); - this.currentPoint.copy(pts[pts.length - 1]); - return this; - } - arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - this.absarc( - aX + x0, - aY + y0, - aRadius, - aStartAngle, - aEndAngle, - aClockwise - ); - return this; - } - absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - this.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - return this; - } - ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - this.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - return this; - } - absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - if (this.curves.length > 0) { - const firstPoint = curve.getPoint(0); - if (!firstPoint.equals(this.currentPoint)) { - this.lineTo(firstPoint.x, firstPoint.y); - } - } - this.curves.push(curve); - const lastPoint = curve.getPoint(1); - this.currentPoint.copy(lastPoint); - return this; - } - copy(source) { - super.copy(source); - this.currentPoint.copy(source.currentPoint); - return this; - } - toJSON() { - const data = super.toJSON(); - data.currentPoint = this.currentPoint.toArray(); - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.currentPoint.fromArray(json.currentPoint); - return this; - } -}; -var LatheGeometry = class _LatheGeometry extends BufferGeometry { - constructor(points = [new Vector2(0, -0.5), new Vector2(0.5, 0), new Vector2(0, 0.5)], segments = 12, phiStart = 0, phiLength = Math.PI * 2) { - super(); - this.type = "LatheGeometry"; - this.parameters = { - points, - segments, - phiStart, - phiLength - }; - segments = Math.floor(segments); - phiLength = clamp(phiLength, 0, Math.PI * 2); - const indices = []; - const vertices = []; - const uvs = []; - const initNormals = []; - const normals = []; - const inverseSegments = 1 / segments; - const vertex2 = new Vector3(); - const uv = new Vector2(); - const normal = new Vector3(); - const curNormal = new Vector3(); - const prevNormal = new Vector3(); - let dx = 0; - let dy = 0; - for (let j = 0; j <= points.length - 1; j++) { - switch (j) { - case 0: - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - normal.x = dy * 1; - normal.y = -dx; - normal.z = dy * 0; - prevNormal.copy(normal); - normal.normalize(); - initNormals.push(normal.x, normal.y, normal.z); - break; - case points.length - 1: - initNormals.push(prevNormal.x, prevNormal.y, prevNormal.z); - break; - default: - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - normal.x = dy * 1; - normal.y = -dx; - normal.z = dy * 0; - curNormal.copy(normal); - normal.x += prevNormal.x; - normal.y += prevNormal.y; - normal.z += prevNormal.z; - normal.normalize(); - initNormals.push(normal.x, normal.y, normal.z); - prevNormal.copy(curNormal); - } - } - for (let i = 0; i <= segments; i++) { - const phi = phiStart + i * inverseSegments * phiLength; - const sin = Math.sin(phi); - const cos = Math.cos(phi); - for (let j = 0; j <= points.length - 1; j++) { - vertex2.x = points[j].x * sin; - vertex2.y = points[j].y; - vertex2.z = points[j].x * cos; - vertices.push(vertex2.x, vertex2.y, vertex2.z); - uv.x = i / segments; - uv.y = j / (points.length - 1); - uvs.push(uv.x, uv.y); - const x = initNormals[3 * j + 0] * sin; - const y = initNormals[3 * j + 1]; - const z = initNormals[3 * j + 0] * cos; - normals.push(x, y, z); - } - } - for (let i = 0; i < segments; i++) { - for (let j = 0; j < points.length - 1; j++) { - const base = j + i * points.length; - const a = base; - const b = base + points.length; - const c = base + points.length + 1; - const d = base + 1; - indices.push(a, b, d); - indices.push(c, d, b); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _LatheGeometry(data.points, data.segments, data.phiStart, data.phiLength); - } -}; -var CapsuleGeometry = class _CapsuleGeometry extends LatheGeometry { - constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { - const path = new Path(); - path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); - path.absarc(0, length / 2, radius, 0, Math.PI * 0.5); - super(path.getPoints(capSegments), radialSegments); - this.type = "CapsuleGeometry"; - this.parameters = { - radius, - length, - capSegments, - radialSegments - }; - } - static fromJSON(data) { - return new _CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments); - } -}; -var CircleGeometry = class _CircleGeometry extends BufferGeometry { - constructor(radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = "CircleGeometry"; - this.parameters = { - radius, - segments, - thetaStart, - thetaLength - }; - segments = Math.max(3, segments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - const vertex2 = new Vector3(); - const uv = new Vector2(); - vertices.push(0, 0, 0); - normals.push(0, 0, 1); - uvs.push(0.5, 0.5); - for (let s = 0, i = 3; s <= segments; s++, i += 3) { - const segment = thetaStart + s / segments * thetaLength; - vertex2.x = radius * Math.cos(segment); - vertex2.y = radius * Math.sin(segment); - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normals.push(0, 0, 1); - uv.x = (vertices[i] / radius + 1) / 2; - uv.y = (vertices[i + 1] / radius + 1) / 2; - uvs.push(uv.x, uv.y); - } - for (let i = 1; i <= segments; i++) { - indices.push(i, i + 1, 0); - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _CircleGeometry(data.radius, data.segments, data.thetaStart, data.thetaLength); - } -}; -var CylinderGeometry = class _CylinderGeometry extends BufferGeometry { - constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = "CylinderGeometry"; - this.parameters = { - radiusTop, - radiusBottom, - height, - radialSegments, - heightSegments, - openEnded, - thetaStart, - thetaLength - }; - const scope = this; - radialSegments = Math.floor(radialSegments); - heightSegments = Math.floor(heightSegments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; - generateTorso(); - if (openEnded === false) { - if (radiusTop > 0) generateCap(true); - if (radiusBottom > 0) generateCap(false); - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function generateTorso() { - const normal = new Vector3(); - const vertex2 = new Vector3(); - let groupCount = 0; - const slope = (radiusBottom - radiusTop) / height; - for (let y = 0; y <= heightSegments; y++) { - const indexRow = []; - const v = y / heightSegments; - const radius = v * (radiusBottom - radiusTop) + radiusTop; - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - const sinTheta = Math.sin(theta); - const cosTheta = Math.cos(theta); - vertex2.x = radius * sinTheta; - vertex2.y = -v * height + halfHeight; - vertex2.z = radius * cosTheta; - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normal.set(sinTheta, slope, cosTheta).normalize(); - normals.push(normal.x, normal.y, normal.z); - uvs.push(u, 1 - v); - indexRow.push(index++); - } - indexArray.push(indexRow); - } - for (let x = 0; x < radialSegments; x++) { - for (let y = 0; y < heightSegments; y++) { - const a = indexArray[y][x]; - const b = indexArray[y + 1][x]; - const c = indexArray[y + 1][x + 1]; - const d = indexArray[y][x + 1]; - indices.push(a, b, d); - indices.push(b, c, d); - groupCount += 6; - } - } - scope.addGroup(groupStart, groupCount, 0); - groupStart += groupCount; - } - function generateCap(top) { - const centerIndexStart = index; - const uv = new Vector2(); - const vertex2 = new Vector3(); - let groupCount = 0; - const radius = top === true ? radiusTop : radiusBottom; - const sign2 = top === true ? 1 : -1; - for (let x = 1; x <= radialSegments; x++) { - vertices.push(0, halfHeight * sign2, 0); - normals.push(0, sign2, 0); - uvs.push(0.5, 0.5); - index++; - } - const centerIndexEnd = index; - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - const cosTheta = Math.cos(theta); - const sinTheta = Math.sin(theta); - vertex2.x = radius * sinTheta; - vertex2.y = halfHeight * sign2; - vertex2.z = radius * cosTheta; - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normals.push(0, sign2, 0); - uv.x = cosTheta * 0.5 + 0.5; - uv.y = sinTheta * 0.5 * sign2 + 0.5; - uvs.push(uv.x, uv.y); - index++; - } - for (let x = 0; x < radialSegments; x++) { - const c = centerIndexStart + x; - const i = centerIndexEnd + x; - if (top === true) { - indices.push(i, i + 1, c); - } else { - indices.push(i + 1, i, c); - } - groupCount += 3; - } - scope.addGroup(groupStart, groupCount, top === true ? 1 : 2); - groupStart += groupCount; - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _CylinderGeometry(data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } -}; -var ConeGeometry = class _ConeGeometry extends CylinderGeometry { - constructor(radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength); - this.type = "ConeGeometry"; - this.parameters = { - radius, - height, - radialSegments, - heightSegments, - openEnded, - thetaStart, - thetaLength - }; - } - static fromJSON(data) { - return new _ConeGeometry(data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } -}; -var PolyhedronGeometry = class _PolyhedronGeometry extends BufferGeometry { - constructor(vertices = [], indices = [], radius = 1, detail = 0) { - super(); - this.type = "PolyhedronGeometry"; - this.parameters = { - vertices, - indices, - radius, - detail - }; - const vertexBuffer = []; - const uvBuffer = []; - subdivide(detail); - applyRadius(radius); - generateUVs(); - this.setAttribute("position", new Float32BufferAttribute(vertexBuffer, 3)); - this.setAttribute("normal", new Float32BufferAttribute(vertexBuffer.slice(), 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvBuffer, 2)); - if (detail === 0) { - this.computeVertexNormals(); - } else { - this.normalizeNormals(); - } - function subdivide(detail2) { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - for (let i = 0; i < indices.length; i += 3) { - getVertexByIndex(indices[i + 0], a); - getVertexByIndex(indices[i + 1], b); - getVertexByIndex(indices[i + 2], c); - subdivideFace(a, b, c, detail2); - } - } - function subdivideFace(a, b, c, detail2) { - const cols = detail2 + 1; - const v = []; - for (let i = 0; i <= cols; i++) { - v[i] = []; - const aj = a.clone().lerp(c, i / cols); - const bj = b.clone().lerp(c, i / cols); - const rows = cols - i; - for (let j = 0; j <= rows; j++) { - if (j === 0 && i === cols) { - v[i][j] = aj; - } else { - v[i][j] = aj.clone().lerp(bj, j / rows); - } - } - } - for (let i = 0; i < cols; i++) { - for (let j = 0; j < 2 * (cols - i) - 1; j++) { - const k = Math.floor(j / 2); - if (j % 2 === 0) { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k]); - pushVertex(v[i][k]); - } else { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k + 1]); - pushVertex(v[i + 1][k]); - } - } - } - } - function applyRadius(radius2) { - const vertex2 = new Vector3(); - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex2.x = vertexBuffer[i + 0]; - vertex2.y = vertexBuffer[i + 1]; - vertex2.z = vertexBuffer[i + 2]; - vertex2.normalize().multiplyScalar(radius2); - vertexBuffer[i + 0] = vertex2.x; - vertexBuffer[i + 1] = vertex2.y; - vertexBuffer[i + 2] = vertex2.z; - } - } - function generateUVs() { - const vertex2 = new Vector3(); - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex2.x = vertexBuffer[i + 0]; - vertex2.y = vertexBuffer[i + 1]; - vertex2.z = vertexBuffer[i + 2]; - const u = azimuth(vertex2) / 2 / Math.PI + 0.5; - const v = inclination(vertex2) / Math.PI + 0.5; - uvBuffer.push(u, 1 - v); - } - correctUVs(); - correctSeam(); - } - function correctSeam() { - for (let i = 0; i < uvBuffer.length; i += 6) { - const x0 = uvBuffer[i + 0]; - const x1 = uvBuffer[i + 2]; - const x2 = uvBuffer[i + 4]; - const max = Math.max(x0, x1, x2); - const min = Math.min(x0, x1, x2); - if (max > 0.9 && min < 0.1) { - if (x0 < 0.2) uvBuffer[i + 0] += 1; - if (x1 < 0.2) uvBuffer[i + 2] += 1; - if (x2 < 0.2) uvBuffer[i + 4] += 1; - } - } - } - function pushVertex(vertex2) { - vertexBuffer.push(vertex2.x, vertex2.y, vertex2.z); - } - function getVertexByIndex(index, vertex2) { - const stride = index * 3; - vertex2.x = vertices[stride + 0]; - vertex2.y = vertices[stride + 1]; - vertex2.z = vertices[stride + 2]; - } - function correctUVs() { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - const centroid = new Vector3(); - const uvA = new Vector2(); - const uvB = new Vector2(); - const uvC = new Vector2(); - for (let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) { - a.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]); - b.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]); - c.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]); - uvA.set(uvBuffer[j + 0], uvBuffer[j + 1]); - uvB.set(uvBuffer[j + 2], uvBuffer[j + 3]); - uvC.set(uvBuffer[j + 4], uvBuffer[j + 5]); - centroid.copy(a).add(b).add(c).divideScalar(3); - const azi = azimuth(centroid); - correctUV(uvA, j + 0, a, azi); - correctUV(uvB, j + 2, b, azi); - correctUV(uvC, j + 4, c, azi); - } - } - function correctUV(uv, stride, vector, azimuth2) { - if (azimuth2 < 0 && uv.x === 1) { - uvBuffer[stride] = uv.x - 1; - } - if (vector.x === 0 && vector.z === 0) { - uvBuffer[stride] = azimuth2 / 2 / Math.PI + 0.5; - } - } - function azimuth(vector) { - return Math.atan2(vector.z, -vector.x); - } - function inclination(vector) { - return Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z)); - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _PolyhedronGeometry(data.vertices, data.indices, data.radius, data.details); - } -}; -var DodecahedronGeometry = class _DodecahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - const r = 1 / t; - const vertices = [ - // (±1, ±1, ±1) - -1, - -1, - -1, - -1, - -1, - 1, - -1, - 1, - -1, - -1, - 1, - 1, - 1, - -1, - -1, - 1, - -1, - 1, - 1, - 1, - -1, - 1, - 1, - 1, - // (0, ±1/φ, ±φ) - 0, - -r, - -t, - 0, - -r, - t, - 0, - r, - -t, - 0, - r, - t, - // (±1/φ, ±φ, 0) - -r, - -t, - 0, - -r, - t, - 0, - r, - -t, - 0, - r, - t, - 0, - // (±φ, 0, ±1/φ) - -t, - 0, - -r, - t, - 0, - -r, - -t, - 0, - r, - t, - 0, - r - ]; - const indices = [ - 3, - 11, - 7, - 3, - 7, - 15, - 3, - 15, - 13, - 7, - 19, - 17, - 7, - 17, - 6, - 7, - 6, - 15, - 17, - 4, - 8, - 17, - 8, - 10, - 17, - 10, - 6, - 8, - 0, - 16, - 8, - 16, - 2, - 8, - 2, - 10, - 0, - 12, - 1, - 0, - 1, - 18, - 0, - 18, - 16, - 6, - 10, - 2, - 6, - 2, - 13, - 6, - 13, - 15, - 2, - 16, - 18, - 2, - 18, - 3, - 2, - 3, - 13, - 18, - 1, - 9, - 18, - 9, - 11, - 18, - 11, - 3, - 4, - 14, - 12, - 4, - 12, - 0, - 4, - 0, - 8, - 11, - 9, - 5, - 11, - 5, - 19, - 11, - 19, - 7, - 19, - 5, - 14, - 19, - 14, - 4, - 19, - 4, - 17, - 1, - 12, - 14, - 1, - 14, - 5, - 1, - 5, - 9 - ]; - super(vertices, indices, radius, detail); - this.type = "DodecahedronGeometry"; - this.parameters = { - radius, - detail - }; - } - static fromJSON(data) { - return new _DodecahedronGeometry(data.radius, data.detail); - } -}; -var _v0 = new Vector3(); -var _v1$1 = new Vector3(); -var _normal = new Vector3(); -var _triangle = new Triangle(); -var EdgesGeometry = class extends BufferGeometry { - constructor(geometry = null, thresholdAngle = 1) { - super(); - this.type = "EdgesGeometry"; - this.parameters = { - geometry, - thresholdAngle - }; - if (geometry !== null) { - const precisionPoints = 4; - const precision = Math.pow(10, precisionPoints); - const thresholdDot = Math.cos(DEG2RAD * thresholdAngle); - const indexAttr = geometry.getIndex(); - const positionAttr = geometry.getAttribute("position"); - const indexCount = indexAttr ? indexAttr.count : positionAttr.count; - const indexArr = [0, 0, 0]; - const vertKeys = ["a", "b", "c"]; - const hashes = new Array(3); - const edgeData = {}; - const vertices = []; - for (let i = 0; i < indexCount; i += 3) { - if (indexAttr) { - indexArr[0] = indexAttr.getX(i); - indexArr[1] = indexAttr.getX(i + 1); - indexArr[2] = indexAttr.getX(i + 2); - } else { - indexArr[0] = i; - indexArr[1] = i + 1; - indexArr[2] = i + 2; - } - const { a, b, c } = _triangle; - a.fromBufferAttribute(positionAttr, indexArr[0]); - b.fromBufferAttribute(positionAttr, indexArr[1]); - c.fromBufferAttribute(positionAttr, indexArr[2]); - _triangle.getNormal(_normal); - hashes[0] = `${Math.round(a.x * precision)},${Math.round(a.y * precision)},${Math.round(a.z * precision)}`; - hashes[1] = `${Math.round(b.x * precision)},${Math.round(b.y * precision)},${Math.round(b.z * precision)}`; - hashes[2] = `${Math.round(c.x * precision)},${Math.round(c.y * precision)},${Math.round(c.z * precision)}`; - if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) { - continue; - } - for (let j = 0; j < 3; j++) { - const jNext = (j + 1) % 3; - const vecHash0 = hashes[j]; - const vecHash1 = hashes[jNext]; - const v0 = _triangle[vertKeys[j]]; - const v1 = _triangle[vertKeys[jNext]]; - const hash = `${vecHash0}_${vecHash1}`; - const reverseHash = `${vecHash1}_${vecHash0}`; - if (reverseHash in edgeData && edgeData[reverseHash]) { - if (_normal.dot(edgeData[reverseHash].normal) <= thresholdDot) { - vertices.push(v0.x, v0.y, v0.z); - vertices.push(v1.x, v1.y, v1.z); - } - edgeData[reverseHash] = null; - } else if (!(hash in edgeData)) { - edgeData[hash] = { - index0: indexArr[j], - index1: indexArr[jNext], - normal: _normal.clone() - }; - } - } - } - for (const key in edgeData) { - if (edgeData[key]) { - const { index0, index1 } = edgeData[key]; - _v0.fromBufferAttribute(positionAttr, index0); - _v1$1.fromBufferAttribute(positionAttr, index1); - vertices.push(_v0.x, _v0.y, _v0.z); - vertices.push(_v1$1.x, _v1$1.y, _v1$1.z); - } - } - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } -}; -var Shape = class extends Path { - constructor(points) { - super(points); - this.uuid = generateUUID(); - this.type = "Shape"; - this.holes = []; - } - getPointsHoles(divisions) { - const holesPts = []; - for (let i = 0, l = this.holes.length; i < l; i++) { - holesPts[i] = this.holes[i].getPoints(divisions); - } - return holesPts; - } - // get points of shape and holes (keypoints based on segments parameter) - extractPoints(divisions) { - return { - shape: this.getPoints(divisions), - holes: this.getPointsHoles(divisions) - }; - } - copy(source) { - super.copy(source); - this.holes = []; - for (let i = 0, l = source.holes.length; i < l; i++) { - const hole = source.holes[i]; - this.holes.push(hole.clone()); - } - return this; - } - toJSON() { - const data = super.toJSON(); - data.uuid = this.uuid; - data.holes = []; - for (let i = 0, l = this.holes.length; i < l; i++) { - const hole = this.holes[i]; - data.holes.push(hole.toJSON()); - } - return data; - } - fromJSON(json) { - super.fromJSON(json); - this.uuid = json.uuid; - this.holes = []; - for (let i = 0, l = json.holes.length; i < l; i++) { - const hole = json.holes[i]; - this.holes.push(new Path().fromJSON(hole)); - } - return this; - } -}; -var Earcut = { - triangulate: function(data, holeIndices, dim = 2) { - const hasHoles = holeIndices && holeIndices.length; - const outerLen = hasHoles ? holeIndices[0] * dim : data.length; - let outerNode = linkedList(data, 0, outerLen, dim, true); - const triangles = []; - if (!outerNode || outerNode.next === outerNode.prev) return triangles; - let minX, minY, maxX, maxY, x, y, invSize; - if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - for (let i = dim; i < outerLen; i += dim) { - x = data[i]; - y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize !== 0 ? 32767 / invSize : 0; - } - earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0); - return triangles; - } -}; -function linkedList(data, start, end, dim, clockwise) { - let i, last; - if (clockwise === signedArea(data, start, end, dim) > 0) { - for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); - } else { - for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); - } - if (last && equals(last, last.next)) { - removeNode(last); - last = last.next; - } - return last; -} -function filterPoints(start, end) { - if (!start) return start; - if (!end) end = start; - let p = start, again; - do { - again = false; - if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { - removeNode(p); - p = end = p.prev; - if (p === p.next) break; - again = true; - } else { - p = p.next; - } - } while (again || p !== end); - return end; -} -function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { - if (!ear) return; - if (!pass && invSize) indexCurve(ear, minX, minY, invSize); - let stop = ear, prev, next; - while (ear.prev !== ear.next) { - prev = ear.prev; - next = ear.next; - if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - triangles.push(prev.i / dim | 0); - triangles.push(ear.i / dim | 0); - triangles.push(next.i / dim | 0); - removeNode(ear); - ear = next.next; - stop = next.next; - continue; - } - ear = next; - if (ear === stop) { - if (!pass) { - earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); - } else if (pass === 1) { - ear = cureLocalIntersections(filterPoints(ear), triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); - } else if (pass === 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - break; - } - } -} -function isEar(ear) { - const a = ear.prev, b = ear, c = ear.next; - if (area(a, b, c) >= 0) return false; - const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; - let p = c.next; - while (p !== a) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.next; - } - return true; -} -function isEarHashed(ear, minX, minY, invSize) { - const a = ear.prev, b = ear, c = ear.next; - if (area(a, b, c) >= 0) return false; - const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - const x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx, y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy, x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx, y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; - const minZ = zOrder(x0, y0, minX, minY, invSize), maxZ = zOrder(x1, y1, minX, minY, invSize); - let p = ear.prevZ, n = ear.nextZ; - while (p && p.z >= minZ && n && n.z <= maxZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - while (p && p.z >= minZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - } - while (n && n.z <= maxZ) { - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - return true; -} -function cureLocalIntersections(start, triangles, dim) { - let p = start; - do { - const a = p.prev, b = p.next.next; - if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - triangles.push(a.i / dim | 0); - triangles.push(p.i / dim | 0); - triangles.push(b.i / dim | 0); - removeNode(p); - removeNode(p.next); - p = start = b; - } - p = p.next; - } while (p !== start); - return filterPoints(p); -} -function splitEarcut(start, triangles, dim, minX, minY, invSize) { - let a = start; - do { - let b = a.next.next; - while (b !== a.prev) { - if (a.i !== b.i && isValidDiagonal(a, b)) { - let c = splitPolygon(a, b); - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); - earcutLinked(a, triangles, dim, minX, minY, invSize, 0); - earcutLinked(c, triangles, dim, minX, minY, invSize, 0); - return; - } - b = b.next; - } - a = a.next; - } while (a !== start); -} -function eliminateHoles(data, holeIndices, outerNode, dim) { - const queue = []; - let i, len, start, end, list; - for (i = 0, len = holeIndices.length; i < len; i++) { - start = holeIndices[i] * dim; - end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - list = linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; - queue.push(getLeftmost(list)); - } - queue.sort(compareX); - for (i = 0; i < queue.length; i++) { - outerNode = eliminateHole(queue[i], outerNode); - } - return outerNode; -} -function compareX(a, b) { - return a.x - b.x; -} -function eliminateHole(hole, outerNode) { - const bridge = findHoleBridge(hole, outerNode); - if (!bridge) { - return outerNode; - } - const bridgeReverse = splitPolygon(bridge, hole); - filterPoints(bridgeReverse, bridgeReverse.next); - return filterPoints(bridge, bridge.next); -} -function findHoleBridge(hole, outerNode) { - let p = outerNode, qx = -Infinity, m; - const hx = hole.x, hy = hole.y; - do { - if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { - const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); - if (x <= hx && x > qx) { - qx = x; - m = p.x < p.next.x ? p : p.next; - if (x === hx) return m; - } - } - p = p.next; - } while (p !== outerNode); - if (!m) return null; - const stop = m, mx = m.x, my = m.y; - let tanMin = Infinity, tan; - p = m; - do { - if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - tan = Math.abs(hy - p.y) / (hx - p.x); - if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) { - m = p; - tanMin = tan; - } - } - p = p.next; - } while (p !== stop); - return m; -} -function sectorContainsSector(m, p) { - return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; -} -function indexCurve(start, minX, minY, invSize) { - let p = start; - do { - if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p !== start); - p.prevZ.nextZ = null; - p.prevZ = null; - sortLinked(p); -} -function sortLinked(list) { - let i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; - do { - p = list; - list = null; - tail = null; - numMerges = 0; - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - qSize = inSize; - while (pSize > 0 || qSize > 0 && q) { - if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - if (tail) tail.nextZ = e; - else list = e; - e.prevZ = tail; - tail = e; - } - p = q; - } - tail.nextZ = null; - inSize *= 2; - } while (numMerges > 1); - return list; -} -function zOrder(x, y, minX, minY, invSize) { - x = (x - minX) * invSize | 0; - y = (y - minY) * invSize | 0; - x = (x | x << 8) & 16711935; - x = (x | x << 4) & 252645135; - x = (x | x << 2) & 858993459; - x = (x | x << 1) & 1431655765; - y = (y | y << 8) & 16711935; - y = (y | y << 4) & 252645135; - y = (y | y << 2) & 858993459; - y = (y | y << 1) & 1431655765; - return x | y << 1; -} -function getLeftmost(start) { - let p = start, leftmost = start; - do { - if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p; - p = p.next; - } while (p !== start); - return leftmost; -} -function pointInTriangle(ax, ay, bx, by, cx, cy, px2, py2) { - return (cx - px2) * (ay - py2) >= (ax - px2) * (cy - py2) && (ax - px2) * (by - py2) >= (bx - px2) * (ay - py2) && (bx - px2) * (cy - py2) >= (cx - px2) * (by - py2); -} -function isValidDiagonal(a, b) { - return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges - (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible - (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors - equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); -} -function area(p, q, r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); -} -function equals(p1, p2) { - return p1.x === p2.x && p1.y === p2.y; -} -function intersects(p1, q1, p2, q2) { - const o1 = sign(area(p1, q1, p2)); - const o2 = sign(area(p1, q1, q2)); - const o3 = sign(area(p2, q2, p1)); - const o4 = sign(area(p2, q2, q1)); - if (o1 !== o2 && o3 !== o4) return true; - if (o1 === 0 && onSegment(p1, p2, q1)) return true; - if (o2 === 0 && onSegment(p1, q2, q1)) return true; - if (o3 === 0 && onSegment(p2, p1, q2)) return true; - if (o4 === 0 && onSegment(p2, q1, q2)) return true; - return false; -} -function onSegment(p, q, r) { - return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); -} -function sign(num) { - return num > 0 ? 1 : num < 0 ? -1 : 0; -} -function intersectsPolygon(a, b) { - let p = a; - do { - if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; - p = p.next; - } while (p !== a); - return false; -} -function locallyInside(a, b) { - return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; -} -function middleInside(a, b) { - let p = a, inside = false; - const px2 = (a.x + b.x) / 2, py2 = (a.y + b.y) / 2; - do { - if (p.y > py2 !== p.next.y > py2 && p.next.y !== p.y && px2 < (p.next.x - p.x) * (py2 - p.y) / (p.next.y - p.y) + p.x) - inside = !inside; - p = p.next; - } while (p !== a); - return inside; -} -function splitPolygon(a, b) { - const a2 = new Node(a.i, a.x, a.y), b2 = new Node(b.i, b.x, b.y), an = a.next, bp = b.prev; - a.next = b; - b.prev = a; - a2.next = an; - an.prev = a2; - b2.next = a2; - a2.prev = b2; - bp.next = b2; - b2.prev = bp; - return b2; -} -function insertNode(i, x, y, last) { - const p = new Node(i, x, y); - if (!last) { - p.prev = p; - p.next = p; - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - } - return p; -} -function removeNode(p) { - p.next.prev = p.prev; - p.prev.next = p.next; - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; -} -function Node(i, x, y) { - this.i = i; - this.x = x; - this.y = y; - this.prev = null; - this.next = null; - this.z = 0; - this.prevZ = null; - this.nextZ = null; - this.steiner = false; -} -function signedArea(data, start, end, dim) { - let sum = 0; - for (let i = start, j = end - dim; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - return sum; -} -var ShapeUtils = class _ShapeUtils { - // calculate area of the contour polygon - static area(contour) { - const n = contour.length; - let a = 0; - for (let p = n - 1, q = 0; q < n; p = q++) { - a += contour[p].x * contour[q].y - contour[q].x * contour[p].y; - } - return a * 0.5; - } - static isClockWise(pts) { - return _ShapeUtils.area(pts) < 0; - } - static triangulateShape(contour, holes) { - const vertices = []; - const holeIndices = []; - const faces = []; - removeDupEndPts(contour); - addContour(vertices, contour); - let holeIndex = contour.length; - holes.forEach(removeDupEndPts); - for (let i = 0; i < holes.length; i++) { - holeIndices.push(holeIndex); - holeIndex += holes[i].length; - addContour(vertices, holes[i]); - } - const triangles = Earcut.triangulate(vertices, holeIndices); - for (let i = 0; i < triangles.length; i += 3) { - faces.push(triangles.slice(i, i + 3)); - } - return faces; - } -}; -function removeDupEndPts(points) { - const l = points.length; - if (l > 2 && points[l - 1].equals(points[0])) { - points.pop(); - } -} -function addContour(vertices, contour) { - for (let i = 0; i < contour.length; i++) { - vertices.push(contour[i].x); - vertices.push(contour[i].y); - } -} -var ExtrudeGeometry = class _ExtrudeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), options = {}) { - super(); - this.type = "ExtrudeGeometry"; - this.parameters = { - shapes, - options - }; - shapes = Array.isArray(shapes) ? shapes : [shapes]; - const scope = this; - const verticesArray = []; - const uvArray = []; - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - addShape(shape); - } - this.setAttribute("position", new Float32BufferAttribute(verticesArray, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvArray, 2)); - this.computeVertexNormals(); - function addShape(shape) { - const placeholder = []; - const curveSegments = options.curveSegments !== void 0 ? options.curveSegments : 12; - const steps = options.steps !== void 0 ? options.steps : 1; - const depth = options.depth !== void 0 ? options.depth : 1; - let bevelEnabled = options.bevelEnabled !== void 0 ? options.bevelEnabled : true; - let bevelThickness = options.bevelThickness !== void 0 ? options.bevelThickness : 0.2; - let bevelSize = options.bevelSize !== void 0 ? options.bevelSize : bevelThickness - 0.1; - let bevelOffset = options.bevelOffset !== void 0 ? options.bevelOffset : 0; - let bevelSegments = options.bevelSegments !== void 0 ? options.bevelSegments : 3; - const extrudePath = options.extrudePath; - const uvgen = options.UVGenerator !== void 0 ? options.UVGenerator : WorldUVGenerator; - let extrudePts, extrudeByPath = false; - let splineTube, binormal, normal, position2; - if (extrudePath) { - extrudePts = extrudePath.getSpacedPoints(steps); - extrudeByPath = true; - bevelEnabled = false; - splineTube = extrudePath.computeFrenetFrames(steps, false); - binormal = new Vector3(); - normal = new Vector3(); - position2 = new Vector3(); - } - if (!bevelEnabled) { - bevelSegments = 0; - bevelThickness = 0; - bevelSize = 0; - bevelOffset = 0; - } - const shapePoints = shape.extractPoints(curveSegments); - let vertices = shapePoints.shape; - const holes = shapePoints.holes; - const reverse = !ShapeUtils.isClockWise(vertices); - if (reverse) { - vertices = vertices.reverse(); - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - if (ShapeUtils.isClockWise(ahole)) { - holes[h] = ahole.reverse(); - } - } - } - const faces = ShapeUtils.triangulateShape(vertices, holes); - const contour = vertices; - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - vertices = vertices.concat(ahole); - } - function scalePt2(pt, vec, size) { - if (!vec) console.error("THREE.ExtrudeGeometry: vec does not exist"); - return pt.clone().addScaledVector(vec, size); - } - const vlen = vertices.length, flen = faces.length; - function getBevelVec(inPt, inPrev, inNext) { - let v_trans_x, v_trans_y, shrink_by; - const v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y; - const v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y; - const v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; - const collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x; - if (Math.abs(collinear0) > Number.EPSILON) { - const v_prev_len = Math.sqrt(v_prev_lensq); - const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); - const ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len; - const ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len; - const ptNextShift_x = inNext.x - v_next_y / v_next_len; - const ptNextShift_y = inNext.y + v_next_x / v_next_len; - const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); - v_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x; - v_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; - const v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y; - if (v_trans_lensq <= 2) { - return new Vector2(v_trans_x, v_trans_y); - } else { - shrink_by = Math.sqrt(v_trans_lensq / 2); - } - } else { - let direction_eq = false; - if (v_prev_x > Number.EPSILON) { - if (v_next_x > Number.EPSILON) { - direction_eq = true; - } - } else { - if (v_prev_x < -Number.EPSILON) { - if (v_next_x < -Number.EPSILON) { - direction_eq = true; - } - } else { - if (Math.sign(v_prev_y) === Math.sign(v_next_y)) { - direction_eq = true; - } - } - } - if (direction_eq) { - v_trans_x = -v_prev_y; - v_trans_y = v_prev_x; - shrink_by = Math.sqrt(v_prev_lensq); - } else { - v_trans_x = v_prev_x; - v_trans_y = v_prev_y; - shrink_by = Math.sqrt(v_prev_lensq / 2); - } - } - return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by); - } - const contourMovements = []; - for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; - contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]); - } - const holesMovements = []; - let oneHoleMovements, verticesMovements = contourMovements.concat(); - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = []; - for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; - oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]); - } - holesMovements.push(oneHoleMovements); - verticesMovements = verticesMovements.concat(oneHoleMovements); - } - for (let b = 0; b < bevelSegments; b++) { - const t = b / bevelSegments; - const z = bevelThickness * Math.cos(t * Math.PI / 2); - const bs2 = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs2); - v(vert.x, vert.y, -z); - } - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); - v(vert.x, vert.y, -z); - } - } - } - const bs = bevelSize + bevelOffset; - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - if (!extrudeByPath) { - v(vert.x, vert.y, 0); - } else { - normal.copy(splineTube.normals[0]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y); - position2.copy(extrudePts[0]).add(normal).add(binormal); - v(position2.x, position2.y, position2.z); - } - } - for (let s = 1; s <= steps; s++) { - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - if (!extrudeByPath) { - v(vert.x, vert.y, depth / steps * s); - } else { - normal.copy(splineTube.normals[s]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y); - position2.copy(extrudePts[s]).add(normal).add(binormal); - v(position2.x, position2.y, position2.z); - } - } - } - for (let b = bevelSegments - 1; b >= 0; b--) { - const t = b / bevelSegments; - const z = bevelThickness * Math.cos(t * Math.PI / 2); - const bs2 = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs2); - v(vert.x, vert.y, depth + z); - } - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2); - if (!extrudeByPath) { - v(vert.x, vert.y, depth + z); - } else { - v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z); - } - } - } - } - buildLidFaces(); - buildSideFaces(); - function buildLidFaces() { - const start = verticesArray.length / 3; - if (bevelEnabled) { - let layer = 0; - let offset = vlen * layer; - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2] + offset, face[1] + offset, face[0] + offset); - } - layer = steps + bevelSegments * 2; - offset = vlen * layer; - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + offset, face[1] + offset, face[2] + offset); - } - } else { - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2], face[1], face[0]); - } - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps); - } - } - scope.addGroup(start, verticesArray.length / 3 - start, 0); - } - function buildSideFaces() { - const start = verticesArray.length / 3; - let layeroffset = 0; - sidewalls(contour, layeroffset); - layeroffset += contour.length; - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - sidewalls(ahole, layeroffset); - layeroffset += ahole.length; - } - scope.addGroup(start, verticesArray.length / 3 - start, 1); - } - function sidewalls(contour2, layeroffset) { - let i = contour2.length; - while (--i >= 0) { - const j = i; - let k = i - 1; - if (k < 0) k = contour2.length - 1; - for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s++) { - const slen1 = vlen * s; - const slen2 = vlen * (s + 1); - const a = layeroffset + j + slen1, b = layeroffset + k + slen1, c = layeroffset + k + slen2, d = layeroffset + j + slen2; - f4(a, b, c, d); - } - } - } - function v(x, y, z) { - placeholder.push(x); - placeholder.push(y); - placeholder.push(z); - } - function f3(a, b, c) { - addVertex(a); - addVertex(b); - addVertex(c); - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1); - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[2]); - } - function f4(a, b, c, d) { - addVertex(a); - addVertex(b); - addVertex(d); - addVertex(b); - addVertex(c); - addVertex(d); - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1); - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[3]); - addUV(uvs[1]); - addUV(uvs[2]); - addUV(uvs[3]); - } - function addVertex(index) { - verticesArray.push(placeholder[index * 3 + 0]); - verticesArray.push(placeholder[index * 3 + 1]); - verticesArray.push(placeholder[index * 3 + 2]); - } - function addUV(vector2) { - uvArray.push(vector2.x); - uvArray.push(vector2.y); - } - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - toJSON() { - const data = super.toJSON(); - const shapes = this.parameters.shapes; - const options = this.parameters.options; - return toJSON$1(shapes, options, data); - } - static fromJSON(data, shapes) { - const geometryShapes = []; - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - geometryShapes.push(shape); - } - const extrudePath = data.options.extrudePath; - if (extrudePath !== void 0) { - data.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath); - } - return new _ExtrudeGeometry(geometryShapes, data.options); - } -}; -var WorldUVGenerator = { - generateTopUV: function(geometry, vertices, indexA, indexB, indexC) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - return [ - new Vector2(a_x, a_y), - new Vector2(b_x, b_y), - new Vector2(c_x, c_y) - ]; - }, - generateSideWallUV: function(geometry, vertices, indexA, indexB, indexC, indexD) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const a_z = vertices[indexA * 3 + 2]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const b_z = vertices[indexB * 3 + 2]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - const c_z = vertices[indexC * 3 + 2]; - const d_x = vertices[indexD * 3]; - const d_y = vertices[indexD * 3 + 1]; - const d_z = vertices[indexD * 3 + 2]; - if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { - return [ - new Vector2(a_x, 1 - a_z), - new Vector2(b_x, 1 - b_z), - new Vector2(c_x, 1 - c_z), - new Vector2(d_x, 1 - d_z) - ]; - } else { - return [ - new Vector2(a_y, 1 - a_z), - new Vector2(b_y, 1 - b_z), - new Vector2(c_y, 1 - c_z), - new Vector2(d_y, 1 - d_z) - ]; - } - } -}; -function toJSON$1(shapes, options, data) { - data.shapes = []; - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - data.options = Object.assign({}, options); - if (options.extrudePath !== void 0) data.options.extrudePath = options.extrudePath.toJSON(); - return data; -} -var IcosahedronGeometry = class _IcosahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - const vertices = [ - -1, - t, - 0, - 1, - t, - 0, - -1, - -t, - 0, - 1, - -t, - 0, - 0, - -1, - t, - 0, - 1, - t, - 0, - -1, - -t, - 0, - 1, - -t, - t, - 0, - -1, - t, - 0, - 1, - -t, - 0, - -1, - -t, - 0, - 1 - ]; - const indices = [ - 0, - 11, - 5, - 0, - 5, - 1, - 0, - 1, - 7, - 0, - 7, - 10, - 0, - 10, - 11, - 1, - 5, - 9, - 5, - 11, - 4, - 11, - 10, - 2, - 10, - 7, - 6, - 7, - 1, - 8, - 3, - 9, - 4, - 3, - 4, - 2, - 3, - 2, - 6, - 3, - 6, - 8, - 3, - 8, - 9, - 4, - 9, - 5, - 2, - 4, - 11, - 6, - 2, - 10, - 8, - 6, - 7, - 9, - 8, - 1 - ]; - super(vertices, indices, radius, detail); - this.type = "IcosahedronGeometry"; - this.parameters = { - radius, - detail - }; - } - static fromJSON(data) { - return new _IcosahedronGeometry(data.radius, data.detail); - } -}; -var OctahedronGeometry = class _OctahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [ - 1, - 0, - 0, - -1, - 0, - 0, - 0, - 1, - 0, - 0, - -1, - 0, - 0, - 0, - 1, - 0, - 0, - -1 - ]; - const indices = [ - 0, - 2, - 4, - 0, - 4, - 3, - 0, - 3, - 5, - 0, - 5, - 2, - 1, - 2, - 5, - 1, - 5, - 3, - 1, - 3, - 4, - 1, - 4, - 2 - ]; - super(vertices, indices, radius, detail); - this.type = "OctahedronGeometry"; - this.parameters = { - radius, - detail - }; - } - static fromJSON(data) { - return new _OctahedronGeometry(data.radius, data.detail); - } -}; -var RingGeometry = class _RingGeometry extends BufferGeometry { - constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = "RingGeometry"; - this.parameters = { - innerRadius, - outerRadius, - thetaSegments, - phiSegments, - thetaStart, - thetaLength - }; - thetaSegments = Math.max(3, thetaSegments); - phiSegments = Math.max(1, phiSegments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - let radius = innerRadius; - const radiusStep = (outerRadius - innerRadius) / phiSegments; - const vertex2 = new Vector3(); - const uv = new Vector2(); - for (let j = 0; j <= phiSegments; j++) { - for (let i = 0; i <= thetaSegments; i++) { - const segment = thetaStart + i / thetaSegments * thetaLength; - vertex2.x = radius * Math.cos(segment); - vertex2.y = radius * Math.sin(segment); - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normals.push(0, 0, 1); - uv.x = (vertex2.x / outerRadius + 1) / 2; - uv.y = (vertex2.y / outerRadius + 1) / 2; - uvs.push(uv.x, uv.y); - } - radius += radiusStep; - } - for (let j = 0; j < phiSegments; j++) { - const thetaSegmentLevel = j * (thetaSegments + 1); - for (let i = 0; i < thetaSegments; i++) { - const segment = i + thetaSegmentLevel; - const a = segment; - const b = segment + thetaSegments + 1; - const c = segment + thetaSegments + 2; - const d = segment + 1; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _RingGeometry(data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength); - } -}; -var ShapeGeometry = class _ShapeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), curveSegments = 12) { - super(); - this.type = "ShapeGeometry"; - this.parameters = { - shapes, - curveSegments - }; - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - let groupStart = 0; - let groupCount = 0; - if (Array.isArray(shapes) === false) { - addShape(shapes); - } else { - for (let i = 0; i < shapes.length; i++) { - addShape(shapes[i]); - this.addGroup(groupStart, groupCount, i); - groupStart += groupCount; - groupCount = 0; - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function addShape(shape) { - const indexOffset = vertices.length / 3; - const points = shape.extractPoints(curveSegments); - let shapeVertices = points.shape; - const shapeHoles = points.holes; - if (ShapeUtils.isClockWise(shapeVertices) === false) { - shapeVertices = shapeVertices.reverse(); - } - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - if (ShapeUtils.isClockWise(shapeHole) === true) { - shapeHoles[i] = shapeHole.reverse(); - } - } - const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - shapeVertices = shapeVertices.concat(shapeHole); - } - for (let i = 0, l = shapeVertices.length; i < l; i++) { - const vertex2 = shapeVertices[i]; - vertices.push(vertex2.x, vertex2.y, 0); - normals.push(0, 0, 1); - uvs.push(vertex2.x, vertex2.y); - } - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - const a = face[0] + indexOffset; - const b = face[1] + indexOffset; - const c = face[2] + indexOffset; - indices.push(a, b, c); - groupCount += 3; - } - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - toJSON() { - const data = super.toJSON(); - const shapes = this.parameters.shapes; - return toJSON(shapes, data); - } - static fromJSON(data, shapes) { - const geometryShapes = []; - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - geometryShapes.push(shape); - } - return new _ShapeGeometry(geometryShapes, data.curveSegments); - } -}; -function toJSON(shapes, data) { - data.shapes = []; - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - return data; -} -var SphereGeometry = class _SphereGeometry extends BufferGeometry { - constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) { - super(); - this.type = "SphereGeometry"; - this.parameters = { - radius, - widthSegments, - heightSegments, - phiStart, - phiLength, - thetaStart, - thetaLength - }; - widthSegments = Math.max(3, Math.floor(widthSegments)); - heightSegments = Math.max(2, Math.floor(heightSegments)); - const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); - let index = 0; - const grid = []; - const vertex2 = new Vector3(); - const normal = new Vector3(); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - for (let iy = 0; iy <= heightSegments; iy++) { - const verticesRow = []; - const v = iy / heightSegments; - let uOffset = 0; - if (iy === 0 && thetaStart === 0) { - uOffset = 0.5 / widthSegments; - } else if (iy === heightSegments && thetaEnd === Math.PI) { - uOffset = -0.5 / widthSegments; - } - for (let ix = 0; ix <= widthSegments; ix++) { - const u = ix / widthSegments; - vertex2.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - vertex2.y = radius * Math.cos(thetaStart + v * thetaLength); - vertex2.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normal.copy(vertex2).normalize(); - normals.push(normal.x, normal.y, normal.z); - uvs.push(u + uOffset, 1 - v); - verticesRow.push(index++); - } - grid.push(verticesRow); - } - for (let iy = 0; iy < heightSegments; iy++) { - for (let ix = 0; ix < widthSegments; ix++) { - const a = grid[iy][ix + 1]; - const b = grid[iy][ix]; - const c = grid[iy + 1][ix]; - const d = grid[iy + 1][ix + 1]; - if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); - if (iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _SphereGeometry(data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength); - } -}; -var TetrahedronGeometry = class _TetrahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [ - 1, - 1, - 1, - -1, - -1, - 1, - -1, - 1, - -1, - 1, - -1, - -1 - ]; - const indices = [ - 2, - 1, - 0, - 0, - 3, - 2, - 1, - 3, - 0, - 2, - 3, - 1 - ]; - super(vertices, indices, radius, detail); - this.type = "TetrahedronGeometry"; - this.parameters = { - radius, - detail - }; - } - static fromJSON(data) { - return new _TetrahedronGeometry(data.radius, data.detail); - } -}; -var TorusGeometry = class _TorusGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2) { - super(); - this.type = "TorusGeometry"; - this.parameters = { - radius, - tube, - radialSegments, - tubularSegments, - arc - }; - radialSegments = Math.floor(radialSegments); - tubularSegments = Math.floor(tubularSegments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - const center = new Vector3(); - const vertex2 = new Vector3(); - const normal = new Vector3(); - for (let j = 0; j <= radialSegments; j++) { - for (let i = 0; i <= tubularSegments; i++) { - const u = i / tubularSegments * arc; - const v = j / radialSegments * Math.PI * 2; - vertex2.x = (radius + tube * Math.cos(v)) * Math.cos(u); - vertex2.y = (radius + tube * Math.cos(v)) * Math.sin(u); - vertex2.z = tube * Math.sin(v); - vertices.push(vertex2.x, vertex2.y, vertex2.z); - center.x = radius * Math.cos(u); - center.y = radius * Math.sin(u); - normal.subVectors(vertex2, center).normalize(); - normals.push(normal.x, normal.y, normal.z); - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } - for (let j = 1; j <= radialSegments; j++) { - for (let i = 1; i <= tubularSegments; i++) { - const a = (tubularSegments + 1) * j + i - 1; - const b = (tubularSegments + 1) * (j - 1) + i - 1; - const c = (tubularSegments + 1) * (j - 1) + i; - const d = (tubularSegments + 1) * j + i; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _TorusGeometry(data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc); - } -}; -var TorusKnotGeometry = class _TorusKnotGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3) { - super(); - this.type = "TorusKnotGeometry"; - this.parameters = { - radius, - tube, - tubularSegments, - radialSegments, - p, - q - }; - tubularSegments = Math.floor(tubularSegments); - radialSegments = Math.floor(radialSegments); - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - const vertex2 = new Vector3(); - const normal = new Vector3(); - const P1 = new Vector3(); - const P2 = new Vector3(); - const B = new Vector3(); - const T = new Vector3(); - const N = new Vector3(); - for (let i = 0; i <= tubularSegments; ++i) { - const u = i / tubularSegments * p * Math.PI * 2; - calculatePositionOnCurve(u, p, q, radius, P1); - calculatePositionOnCurve(u + 0.01, p, q, radius, P2); - T.subVectors(P2, P1); - N.addVectors(P2, P1); - B.crossVectors(T, N); - N.crossVectors(B, T); - B.normalize(); - N.normalize(); - for (let j = 0; j <= radialSegments; ++j) { - const v = j / radialSegments * Math.PI * 2; - const cx = -tube * Math.cos(v); - const cy = tube * Math.sin(v); - vertex2.x = P1.x + (cx * N.x + cy * B.x); - vertex2.y = P1.y + (cx * N.y + cy * B.y); - vertex2.z = P1.z + (cx * N.z + cy * B.z); - vertices.push(vertex2.x, vertex2.y, vertex2.z); - normal.subVectors(vertex2, P1).normalize(); - normals.push(normal.x, normal.y, normal.z); - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function calculatePositionOnCurve(u, p2, q2, radius2, position) { - const cu = Math.cos(u); - const su = Math.sin(u); - const quOverP = q2 / p2 * u; - const cs = Math.cos(quOverP); - position.x = radius2 * (2 + cs) * 0.5 * cu; - position.y = radius2 * (2 + cs) * su * 0.5; - position.z = radius2 * Math.sin(quOverP) * 0.5; - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - static fromJSON(data) { - return new _TorusKnotGeometry(data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q); - } -}; -var TubeGeometry = class _TubeGeometry extends BufferGeometry { - constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) { - super(); - this.type = "TubeGeometry"; - this.parameters = { - path, - tubularSegments, - radius, - radialSegments, - closed - }; - const frames = path.computeFrenetFrames(tubularSegments, closed); - this.tangents = frames.tangents; - this.normals = frames.normals; - this.binormals = frames.binormals; - const vertex2 = new Vector3(); - const normal = new Vector3(); - const uv = new Vector2(); - let P = new Vector3(); - const vertices = []; - const normals = []; - const uvs = []; - const indices = []; - generateBufferData(); - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function generateBufferData() { - for (let i = 0; i < tubularSegments; i++) { - generateSegment(i); - } - generateSegment(closed === false ? tubularSegments : 0); - generateUVs(); - generateIndices(); - } - function generateSegment(i) { - P = path.getPointAt(i / tubularSegments, P); - const N = frames.normals[i]; - const B = frames.binormals[i]; - for (let j = 0; j <= radialSegments; j++) { - const v = j / radialSegments * Math.PI * 2; - const sin = Math.sin(v); - const cos = -Math.cos(v); - normal.x = cos * N.x + sin * B.x; - normal.y = cos * N.y + sin * B.y; - normal.z = cos * N.z + sin * B.z; - normal.normalize(); - normals.push(normal.x, normal.y, normal.z); - vertex2.x = P.x + radius * normal.x; - vertex2.y = P.y + radius * normal.y; - vertex2.z = P.z + radius * normal.z; - vertices.push(vertex2.x, vertex2.y, vertex2.z); - } - } - function generateIndices() { - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - } - function generateUVs() { - for (let i = 0; i <= tubularSegments; i++) { - for (let j = 0; j <= radialSegments; j++) { - uv.x = i / tubularSegments; - uv.y = j / radialSegments; - uvs.push(uv.x, uv.y); - } - } - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } - toJSON() { - const data = super.toJSON(); - data.path = this.parameters.path.toJSON(); - return data; - } - static fromJSON(data) { - return new _TubeGeometry( - new Curves[data.path.type]().fromJSON(data.path), - data.tubularSegments, - data.radius, - data.radialSegments, - data.closed - ); - } -}; -var WireframeGeometry = class extends BufferGeometry { - constructor(geometry = null) { - super(); - this.type = "WireframeGeometry"; - this.parameters = { - geometry - }; - if (geometry !== null) { - const vertices = []; - const edges = /* @__PURE__ */ new Set(); - const start = new Vector3(); - const end = new Vector3(); - if (geometry.index !== null) { - const position = geometry.attributes.position; - const indices = geometry.index; - let groups = geometry.groups; - if (groups.length === 0) { - groups = [{ start: 0, count: indices.count, materialIndex: 0 }]; - } - for (let o = 0, ol = groups.length; o < ol; ++o) { - const group = groups[o]; - const groupStart = group.start; - const groupCount = group.count; - for (let i = groupStart, l = groupStart + groupCount; i < l; i += 3) { - for (let j = 0; j < 3; j++) { - const index1 = indices.getX(i + j); - const index2 = indices.getX(i + (j + 1) % 3); - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } - } else { - const position = geometry.attributes.position; - for (let i = 0, l = position.count / 3; i < l; i++) { - for (let j = 0; j < 3; j++) { - const index1 = 3 * i + j; - const index2 = 3 * i + (j + 1) % 3; - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - } - } - copy(source) { - super.copy(source); - this.parameters = Object.assign({}, source.parameters); - return this; - } -}; -function isUniqueEdge(start, end, edges) { - const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; - const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; - if (edges.has(hash1) === true || edges.has(hash2) === true) { - return false; - } else { - edges.add(hash1); - edges.add(hash2); - return true; - } -} -var Geometries = Object.freeze({ - __proto__: null, + ArrayCamera, + ArrowHelper, + AttachedBindMode, + Audio, + AudioAnalyser, + AudioContext, + AudioListener, + AudioLoader, + AxesHelper, + BackSide, + BasicDepthPacking, + BasicShadowMap, + BatchedMesh, + Bone, + BooleanKeyframeTrack, + Box2, + Box3, + Box3Helper, BoxGeometry, + BoxHelper, + BufferAttribute, + BufferGeometry, + BufferGeometryLoader, + ByteType, + Cache, + Camera, + CameraHelper, + CanvasTexture, CapsuleGeometry, + CatmullRomCurve3, + CineonToneMapping, CircleGeometry, + ClampToEdgeWrapping, + Clock, + Color, + ColorKeyframeTrack, + ColorManagement, + CompressedArrayTexture, + CompressedCubeTexture, + CompressedTexture, + CompressedTextureLoader, ConeGeometry, - CylinderGeometry, - DodecahedronGeometry, - EdgesGeometry, - ExtrudeGeometry, - IcosahedronGeometry, - LatheGeometry, - OctahedronGeometry, - PlaneGeometry, - PolyhedronGeometry, - RingGeometry, - ShapeGeometry, - SphereGeometry, - TetrahedronGeometry, - TorusGeometry, - TorusKnotGeometry, - TubeGeometry, - WireframeGeometry -}); -var ShadowMaterial = class extends Material { - constructor(parameters) { - super(); - this.isShadowMaterial = true; - this.type = "ShadowMaterial"; - this.color = new Color(0); - this.transparent = true; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.fog = source.fog; - return this; - } -}; -var RawShaderMaterial = class extends ShaderMaterial { - constructor(parameters) { - super(parameters); - this.isRawShaderMaterial = true; - this.type = "RawShaderMaterial"; - } -}; -var MeshStandardMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshStandardMaterial = true; - this.defines = { "STANDARD": "" }; - this.type = "MeshStandardMaterial"; - this.color = new Color(16777215); - this.roughness = 1; - this.metalness = 0; - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1; - this.aoMap = null; - this.aoMapIntensity = 1; - this.emissive = new Color(0); - this.emissiveIntensity = 1; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.roughnessMap = null; - this.metalnessMap = null; - this.alphaMap = null; - this.envMap = null; - this.envMapRotation = new Euler(); - this.envMapIntensity = 1; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = "round"; - this.wireframeLinejoin = "round"; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.defines = { "STANDARD": "" }; - this.color.copy(source.color); - this.roughness = source.roughness; - this.metalness = source.metalness; - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.roughnessMap = source.roughnessMap; - this.metalnessMap = source.metalnessMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.envMapIntensity = source.envMapIntensity; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } -}; -var MeshPhysicalMaterial = class extends MeshStandardMaterial { - constructor(parameters) { - super(); - this.isMeshPhysicalMaterial = true; - this.defines = { - "STANDARD": "", - "PHYSICAL": "" - }; - this.type = "MeshPhysicalMaterial"; - this.anisotropyRotation = 0; - this.anisotropyMap = null; - this.clearcoatMap = null; - this.clearcoatRoughness = 0; - this.clearcoatRoughnessMap = null; - this.clearcoatNormalScale = new Vector2(1, 1); - this.clearcoatNormalMap = null; - this.ior = 1.5; - Object.defineProperty(this, "reflectivity", { - get: function() { - return clamp(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1); - }, - set: function(reflectivity) { - this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity); - } - }); - this.iridescenceMap = null; - this.iridescenceIOR = 1.3; - this.iridescenceThicknessRange = [100, 400]; - this.iridescenceThicknessMap = null; - this.sheenColor = new Color(0); - this.sheenColorMap = null; - this.sheenRoughness = 1; - this.sheenRoughnessMap = null; - this.transmissionMap = null; - this.thickness = 0; - this.thicknessMap = null; - this.attenuationDistance = Infinity; - this.attenuationColor = new Color(1, 1, 1); - this.specularIntensity = 1; - this.specularIntensityMap = null; - this.specularColor = new Color(1, 1, 1); - this.specularColorMap = null; - this._anisotropy = 0; - this._clearcoat = 0; - this._dispersion = 0; - this._iridescence = 0; - this._sheen = 0; - this._transmission = 0; - this.setValues(parameters); - } - get anisotropy() { - return this._anisotropy; - } - set anisotropy(value) { - if (this._anisotropy > 0 !== value > 0) { - this.version++; - } - this._anisotropy = value; - } - get clearcoat() { - return this._clearcoat; - } - set clearcoat(value) { - if (this._clearcoat > 0 !== value > 0) { - this.version++; - } - this._clearcoat = value; - } - get iridescence() { - return this._iridescence; - } - set iridescence(value) { - if (this._iridescence > 0 !== value > 0) { - this.version++; - } - this._iridescence = value; - } - get dispersion() { - return this._dispersion; - } - set dispersion(value) { - if (this._dispersion > 0 !== value > 0) { - this.version++; - } - this._dispersion = value; - } - get sheen() { - return this._sheen; - } - set sheen(value) { - if (this._sheen > 0 !== value > 0) { - this.version++; - } - this._sheen = value; - } - get transmission() { - return this._transmission; - } - set transmission(value) { - if (this._transmission > 0 !== value > 0) { - this.version++; - } - this._transmission = value; - } - copy(source) { - super.copy(source); - this.defines = { - "STANDARD": "", - "PHYSICAL": "" - }; - this.anisotropy = source.anisotropy; - this.anisotropyRotation = source.anisotropyRotation; - this.anisotropyMap = source.anisotropyMap; - this.clearcoat = source.clearcoat; - this.clearcoatMap = source.clearcoatMap; - this.clearcoatRoughness = source.clearcoatRoughness; - this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; - this.clearcoatNormalMap = source.clearcoatNormalMap; - this.clearcoatNormalScale.copy(source.clearcoatNormalScale); - this.dispersion = source.dispersion; - this.ior = source.ior; - this.iridescence = source.iridescence; - this.iridescenceMap = source.iridescenceMap; - this.iridescenceIOR = source.iridescenceIOR; - this.iridescenceThicknessRange = [...source.iridescenceThicknessRange]; - this.iridescenceThicknessMap = source.iridescenceThicknessMap; - this.sheen = source.sheen; - this.sheenColor.copy(source.sheenColor); - this.sheenColorMap = source.sheenColorMap; - this.sheenRoughness = source.sheenRoughness; - this.sheenRoughnessMap = source.sheenRoughnessMap; - this.transmission = source.transmission; - this.transmissionMap = source.transmissionMap; - this.thickness = source.thickness; - this.thicknessMap = source.thicknessMap; - this.attenuationDistance = source.attenuationDistance; - this.attenuationColor.copy(source.attenuationColor); - this.specularIntensity = source.specularIntensity; - this.specularIntensityMap = source.specularIntensityMap; - this.specularColor.copy(source.specularColor); - this.specularColorMap = source.specularColorMap; - return this; - } -}; -var MeshPhongMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshPhongMaterial = true; - this.type = "MeshPhongMaterial"; - this.color = new Color(16777215); - this.specular = new Color(1118481); - this.shininess = 30; - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1; - this.aoMap = null; - this.aoMapIntensity = 1; - this.emissive = new Color(0); - this.emissiveIntensity = 1; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = "round"; - this.wireframeLinejoin = "round"; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.specular.copy(source.specular); - this.shininess = source.shininess; - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } -}; -var MeshToonMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshToonMaterial = true; - this.defines = { "TOON": "" }; - this.type = "MeshToonMaterial"; - this.color = new Color(16777215); - this.map = null; - this.gradientMap = null; - this.lightMap = null; - this.lightMapIntensity = 1; - this.aoMap = null; - this.aoMapIntensity = 1; - this.emissive = new Color(0); - this.emissiveIntensity = 1; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.alphaMap = null; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = "round"; - this.wireframeLinejoin = "round"; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.gradientMap = source.gradientMap; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.alphaMap = source.alphaMap; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.fog = source.fog; - return this; - } -}; -var MeshNormalMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshNormalMaterial = true; - this.type = "MeshNormalMaterial"; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.flatShading = false; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.flatShading = source.flatShading; - return this; - } -}; -var MeshLambertMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshLambertMaterial = true; - this.type = "MeshLambertMaterial"; - this.color = new Color(16777215); - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1; - this.aoMap = null; - this.aoMapIntensity = 1; - this.emissive = new Color(0); - this.emissiveIntensity = 1; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.envMapRotation = new Euler(); - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = "round"; - this.wireframeLinejoin = "round"; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.envMapRotation.copy(source.envMapRotation); - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } -}; -var MeshMatcapMaterial = class extends Material { - constructor(parameters) { - super(); - this.isMeshMatcapMaterial = true; - this.defines = { "MATCAP": "" }; - this.type = "MeshMatcapMaterial"; - this.color = new Color(16777215); - this.matcap = null; - this.map = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.alphaMap = null; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.defines = { "MATCAP": "" }; - this.color.copy(source.color); - this.matcap = source.matcap; - this.map = source.map; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.alphaMap = source.alphaMap; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } -}; -var LineDashedMaterial = class extends LineBasicMaterial { - constructor(parameters) { - super(); - this.isLineDashedMaterial = true; - this.type = "LineDashedMaterial"; - this.scale = 1; - this.dashSize = 3; - this.gapSize = 1; - this.setValues(parameters); - } - copy(source) { - super.copy(source); - this.scale = source.scale; - this.dashSize = source.dashSize; - this.gapSize = source.gapSize; - return this; - } -}; -function convertArray(array, type, forceClone) { - if (!array || // let 'undefined' and 'null' pass - !forceClone && array.constructor === type) return array; - if (typeof type.BYTES_PER_ELEMENT === "number") { - return new type(array); - } - return Array.prototype.slice.call(array); -} -function isTypedArray(object) { - return ArrayBuffer.isView(object) && !(object instanceof DataView); -} -function getKeyframeOrder(times) { - function compareTime(i, j) { - return times[i] - times[j]; - } - const n = times.length; - const result = new Array(n); - for (let i = 0; i !== n; ++i) result[i] = i; - result.sort(compareTime); - return result; -} -function sortedArray(values, stride, order) { - const nValues = values.length; - const result = new values.constructor(nValues); - for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) { - const srcOffset = order[i] * stride; - for (let j = 0; j !== stride; ++j) { - result[dstOffset++] = values[srcOffset + j]; - } - } - return result; -} -function flattenJSON(jsonKeys, times, values, valuePropertyName) { - let i = 1, key = jsonKeys[0]; - while (key !== void 0 && key[valuePropertyName] === void 0) { - key = jsonKeys[i++]; - } - if (key === void 0) return; - let value = key[valuePropertyName]; - if (value === void 0) return; - if (Array.isArray(value)) { - do { - value = key[valuePropertyName]; - if (value !== void 0) { - times.push(key.time); - values.push.apply(values, value); - } - key = jsonKeys[i++]; - } while (key !== void 0); - } else if (value.toArray !== void 0) { - do { - value = key[valuePropertyName]; - if (value !== void 0) { - times.push(key.time); - value.toArray(values, values.length); - } - key = jsonKeys[i++]; - } while (key !== void 0); - } else { - do { - value = key[valuePropertyName]; - if (value !== void 0) { - times.push(key.time); - values.push(value); - } - key = jsonKeys[i++]; - } while (key !== void 0); - } -} -function subclip(sourceClip, name, startFrame, endFrame, fps = 30) { - const clip = sourceClip.clone(); - clip.name = name; - const tracks = []; - for (let i = 0; i < clip.tracks.length; ++i) { - const track = clip.tracks[i]; - const valueSize = track.getValueSize(); - const times = []; - const values = []; - for (let j = 0; j < track.times.length; ++j) { - const frame = track.times[j] * fps; - if (frame < startFrame || frame >= endFrame) continue; - times.push(track.times[j]); - for (let k = 0; k < valueSize; ++k) { - values.push(track.values[j * valueSize + k]); - } - } - if (times.length === 0) continue; - track.times = convertArray(times, track.times.constructor); - track.values = convertArray(values, track.values.constructor); - tracks.push(track); - } - clip.tracks = tracks; - let minStartTime = Infinity; - for (let i = 0; i < clip.tracks.length; ++i) { - if (minStartTime > clip.tracks[i].times[0]) { - minStartTime = clip.tracks[i].times[0]; - } - } - for (let i = 0; i < clip.tracks.length; ++i) { - clip.tracks[i].shift(-1 * minStartTime); - } - clip.resetDuration(); - return clip; -} -function makeClipAdditive(targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30) { - if (fps <= 0) fps = 30; - const numTracks = referenceClip.tracks.length; - const referenceTime = referenceFrame / fps; - for (let i = 0; i < numTracks; ++i) { - const referenceTrack = referenceClip.tracks[i]; - const referenceTrackType = referenceTrack.ValueTypeName; - if (referenceTrackType === "bool" || referenceTrackType === "string") continue; - const targetTrack = targetClip.tracks.find(function(track) { - return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; - }); - if (targetTrack === void 0) continue; - let referenceOffset = 0; - const referenceValueSize = referenceTrack.getValueSize(); - if (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - referenceOffset = referenceValueSize / 3; - } - let targetOffset = 0; - const targetValueSize = targetTrack.getValueSize(); - if (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - targetOffset = targetValueSize / 3; - } - const lastIndex = referenceTrack.times.length - 1; - let referenceValue; - if (referenceTime <= referenceTrack.times[0]) { - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - referenceValue = referenceTrack.values.slice(startIndex, endIndex); - } else if (referenceTime >= referenceTrack.times[lastIndex]) { - const startIndex = lastIndex * referenceValueSize + referenceOffset; - const endIndex = startIndex + referenceValueSize - referenceOffset; - referenceValue = referenceTrack.values.slice(startIndex, endIndex); - } else { - const interpolant = referenceTrack.createInterpolant(); - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - interpolant.evaluate(referenceTime); - referenceValue = interpolant.resultBuffer.slice(startIndex, endIndex); - } - if (referenceTrackType === "quaternion") { - const referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate(); - referenceQuat.toArray(referenceValue); - } - const numTimes = targetTrack.times.length; - for (let j = 0; j < numTimes; ++j) { - const valueStart = j * targetValueSize + targetOffset; - if (referenceTrackType === "quaternion") { - Quaternion.multiplyQuaternionsFlat( - targetTrack.values, - valueStart, - referenceValue, - 0, - targetTrack.values, - valueStart - ); - } else { - const valueEnd = targetValueSize - targetOffset * 2; - for (let k = 0; k < valueEnd; ++k) { - targetTrack.values[valueStart + k] -= referenceValue[k]; - } - } - } - } - targetClip.blendMode = AdditiveAnimationBlendMode; - return targetClip; -} -var AnimationUtils = { - convertArray, - isTypedArray, - getKeyframeOrder, - sortedArray, - flattenJSON, - subclip, - makeClipAdditive -}; -var Interpolant = class { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - this.parameterPositions = parameterPositions; - this._cachedIndex = 0; - this.resultBuffer = resultBuffer !== void 0 ? resultBuffer : new sampleValues.constructor(sampleSize); - this.sampleValues = sampleValues; - this.valueSize = sampleSize; - this.settings = null; - this.DefaultSettings_ = {}; - } - evaluate(t) { - const pp = this.parameterPositions; - let i1 = this._cachedIndex, t1 = pp[i1], t0 = pp[i1 - 1]; - validate_interval: { - seek: { - let right; - linear_scan: { - forward_scan: if (!(t < t1)) { - for (let giveUpAt = i1 + 2; ; ) { - if (t1 === void 0) { - if (t < t0) break forward_scan; - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_(i1 - 1); - } - if (i1 === giveUpAt) break; - t0 = t1; - t1 = pp[++i1]; - if (t < t1) { - break seek; - } - } - right = pp.length; - break linear_scan; - } - if (!(t >= t0)) { - const t1global = pp[1]; - if (t < t1global) { - i1 = 2; - t0 = t1global; - } - for (let giveUpAt = i1 - 2; ; ) { - if (t0 === void 0) { - this._cachedIndex = 0; - return this.copySampleValue_(0); - } - if (i1 === giveUpAt) break; - t1 = t0; - t0 = pp[--i1 - 1]; - if (t >= t0) { - break seek; - } - } - right = i1; - i1 = 0; - break linear_scan; - } - break validate_interval; - } - while (i1 < right) { - const mid = i1 + right >>> 1; - if (t < pp[mid]) { - right = mid; - } else { - i1 = mid + 1; - } - } - t1 = pp[i1]; - t0 = pp[i1 - 1]; - if (t0 === void 0) { - this._cachedIndex = 0; - return this.copySampleValue_(0); - } - if (t1 === void 0) { - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_(i1 - 1); - } - } - this._cachedIndex = i1; - this.intervalChanged_(i1, t0, t1); - } - return this.interpolate_(i1, t0, t, t1); - } - getSettings_() { - return this.settings || this.DefaultSettings_; - } - copySampleValue_(index) { - const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride; - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset + i]; - } - return result; - } - // Template methods for derived classes: - interpolate_() { - throw new Error("call to abstract method"); - } - intervalChanged_() { - } -}; -var CubicInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - this._weightPrev = -0; - this._offsetPrev = -0; - this._weightNext = -0; - this._offsetNext = -0; - this.DefaultSettings_ = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - } - intervalChanged_(i1, t0, t1) { - const pp = this.parameterPositions; - let iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[iPrev], tNext = pp[iNext]; - if (tPrev === void 0) { - switch (this.getSettings_().endingStart) { - case ZeroSlopeEnding: - iPrev = i1; - tPrev = 2 * t0 - t1; - break; - case WrapAroundEnding: - iPrev = pp.length - 2; - tPrev = t0 + pp[iPrev] - pp[iPrev + 1]; - break; - default: - iPrev = i1; - tPrev = t1; - } - } - if (tNext === void 0) { - switch (this.getSettings_().endingEnd) { - case ZeroSlopeEnding: - iNext = i1; - tNext = 2 * t1 - t0; - break; - case WrapAroundEnding: - iNext = 1; - tNext = t1 + pp[1] - pp[0]; - break; - default: - iNext = i1 - 1; - tNext = t0; - } - } - const halfDt = (t1 - t0) * 0.5, stride = this.valueSize; - this._weightPrev = halfDt / (t0 - tPrev); - this._weightNext = halfDt / (tNext - t1); - this._offsetPrev = iPrev * stride; - this._offsetNext = iNext * stride; - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = (t - t0) / (t1 - t0), pp = p * p, ppp = pp * p; - const sP = -wP * ppp + 2 * wP * pp - wP * p; - const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1; - const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p; - const sN = wN * ppp - wN * pp; - for (let i = 0; i !== stride; ++i) { - result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i]; - } - return result; - } -}; -var LinearInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset1 = i1 * stride, offset0 = offset1 - stride, weight1 = (t - t0) / (t1 - t0), weight0 = 1 - weight1; - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1; - } - return result; - } -}; -var DiscreteInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - interpolate_(i1) { - return this.copySampleValue_(i1 - 1); - } -}; -var KeyframeTrack = class { - constructor(name, times, values, interpolation) { - if (name === void 0) throw new Error("THREE.KeyframeTrack: track name is undefined"); - if (times === void 0 || times.length === 0) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + name); - this.name = name; - this.times = convertArray(times, this.TimeBufferType); - this.values = convertArray(values, this.ValueBufferType); - this.setInterpolation(interpolation || this.DefaultInterpolation); - } - // Serialization (in static context, because of constructor invocation - // and automatic invocation of .toJSON): - static toJSON(track) { - const trackType = track.constructor; - let json; - if (trackType.toJSON !== this.toJSON) { - json = trackType.toJSON(track); - } else { - json = { - "name": track.name, - "times": convertArray(track.times, Array), - "values": convertArray(track.values, Array) - }; - const interpolation = track.getInterpolation(); - if (interpolation !== track.DefaultInterpolation) { - json.interpolation = interpolation; - } - } - json.type = track.ValueTypeName; - return json; - } - InterpolantFactoryMethodDiscrete(result) { - return new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result); - } - InterpolantFactoryMethodLinear(result) { - return new LinearInterpolant(this.times, this.values, this.getValueSize(), result); - } - InterpolantFactoryMethodSmooth(result) { - return new CubicInterpolant(this.times, this.values, this.getValueSize(), result); - } - setInterpolation(interpolation) { - let factoryMethod; - switch (interpolation) { - case InterpolateDiscrete: - factoryMethod = this.InterpolantFactoryMethodDiscrete; - break; - case InterpolateLinear: - factoryMethod = this.InterpolantFactoryMethodLinear; - break; - case InterpolateSmooth: - factoryMethod = this.InterpolantFactoryMethodSmooth; - break; - } - if (factoryMethod === void 0) { - const message = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; - if (this.createInterpolant === void 0) { - if (interpolation !== this.DefaultInterpolation) { - this.setInterpolation(this.DefaultInterpolation); - } else { - throw new Error(message); - } - } - console.warn("THREE.KeyframeTrack:", message); - return this; - } - this.createInterpolant = factoryMethod; - return this; - } - getInterpolation() { - switch (this.createInterpolant) { - case this.InterpolantFactoryMethodDiscrete: - return InterpolateDiscrete; - case this.InterpolantFactoryMethodLinear: - return InterpolateLinear; - case this.InterpolantFactoryMethodSmooth: - return InterpolateSmooth; - } - } - getValueSize() { - return this.values.length / this.times.length; - } - // move all keyframes either forwards or backwards in time - shift(timeOffset) { - if (timeOffset !== 0) { - const times = this.times; - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] += timeOffset; - } - } - return this; - } - // scale all keyframe times by a factor (useful for frame <-> seconds conversions) - scale(timeScale) { - if (timeScale !== 1) { - const times = this.times; - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] *= timeScale; - } - } - return this; - } - // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. - // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values - trim(startTime, endTime) { - const times = this.times, nKeys = times.length; - let from = 0, to = nKeys - 1; - while (from !== nKeys && times[from] < startTime) { - ++from; - } - while (to !== -1 && times[to] > endTime) { - --to; - } - ++to; - if (from !== 0 || to !== nKeys) { - if (from >= to) { - to = Math.max(to, 1); - from = to - 1; - } - const stride = this.getValueSize(); - this.times = times.slice(from, to); - this.values = this.values.slice(from * stride, to * stride); - } - return this; - } - // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable - validate() { - let valid = true; - const valueSize = this.getValueSize(); - if (valueSize - Math.floor(valueSize) !== 0) { - console.error("THREE.KeyframeTrack: Invalid value size in track.", this); - valid = false; - } - const times = this.times, values = this.values, nKeys = times.length; - if (nKeys === 0) { - console.error("THREE.KeyframeTrack: Track is empty.", this); - valid = false; - } - let prevTime = null; - for (let i = 0; i !== nKeys; i++) { - const currTime = times[i]; - if (typeof currTime === "number" && isNaN(currTime)) { - console.error("THREE.KeyframeTrack: Time is not a valid number.", this, i, currTime); - valid = false; - break; - } - if (prevTime !== null && prevTime > currTime) { - console.error("THREE.KeyframeTrack: Out of order keys.", this, i, currTime, prevTime); - valid = false; - break; - } - prevTime = currTime; - } - if (values !== void 0) { - if (isTypedArray(values)) { - for (let i = 0, n = values.length; i !== n; ++i) { - const value = values[i]; - if (isNaN(value)) { - console.error("THREE.KeyframeTrack: Value is not a valid number.", this, i, value); - valid = false; - break; - } - } - } - } - return valid; - } - // removes equivalent sequential keys as common in morph target sequences - // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) - optimize() { - const times = this.times.slice(), values = this.values.slice(), stride = this.getValueSize(), smoothInterpolation = this.getInterpolation() === InterpolateSmooth, lastIndex = times.length - 1; - let writeIndex = 1; - for (let i = 1; i < lastIndex; ++i) { - let keep = false; - const time = times[i]; - const timeNext = times[i + 1]; - if (time !== timeNext && (i !== 1 || time !== times[0])) { - if (!smoothInterpolation) { - const offset = i * stride, offsetP = offset - stride, offsetN = offset + stride; - for (let j = 0; j !== stride; ++j) { - const value = values[offset + j]; - if (value !== values[offsetP + j] || value !== values[offsetN + j]) { - keep = true; - break; - } - } - } else { - keep = true; - } - } - if (keep) { - if (i !== writeIndex) { - times[writeIndex] = times[i]; - const readOffset = i * stride, writeOffset = writeIndex * stride; - for (let j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - } - ++writeIndex; - } - } - if (lastIndex > 0) { - times[writeIndex] = times[lastIndex]; - for (let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - ++writeIndex; - } - if (writeIndex !== times.length) { - this.times = times.slice(0, writeIndex); - this.values = values.slice(0, writeIndex * stride); - } else { - this.times = times; - this.values = values; - } - return this; - } - clone() { - const times = this.times.slice(); - const values = this.values.slice(); - const TypedKeyframeTrack = this.constructor; - const track = new TypedKeyframeTrack(this.name, times, values); - track.createInterpolant = this.createInterpolant; - return track; - } -}; -KeyframeTrack.prototype.TimeBufferType = Float32Array; -KeyframeTrack.prototype.ValueBufferType = Float32Array; -KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; -var BooleanKeyframeTrack = class extends KeyframeTrack { - // No interpolation parameter because only InterpolateDiscrete is valid. - constructor(name, times, values) { - super(name, times, values); - } -}; -BooleanKeyframeTrack.prototype.ValueTypeName = "bool"; -BooleanKeyframeTrack.prototype.ValueBufferType = Array; -BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; -BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; -BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; -var ColorKeyframeTrack = class extends KeyframeTrack { -}; -ColorKeyframeTrack.prototype.ValueTypeName = "color"; -var NumberKeyframeTrack = class extends KeyframeTrack { -}; -NumberKeyframeTrack.prototype.ValueTypeName = "number"; -var QuaternionLinearInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, alpha = (t - t0) / (t1 - t0); - let offset = i1 * stride; - for (let end = offset + stride; offset !== end; offset += 4) { - Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha); - } - return result; - } -}; -var QuaternionKeyframeTrack = class extends KeyframeTrack { - InterpolantFactoryMethodLinear(result) { - return new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result); - } -}; -QuaternionKeyframeTrack.prototype.ValueTypeName = "quaternion"; -QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; -var StringKeyframeTrack = class extends KeyframeTrack { - // No interpolation parameter because only InterpolateDiscrete is valid. - constructor(name, times, values) { - super(name, times, values); - } -}; -StringKeyframeTrack.prototype.ValueTypeName = "string"; -StringKeyframeTrack.prototype.ValueBufferType = Array; -StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; -StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = void 0; -StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = void 0; -var VectorKeyframeTrack = class extends KeyframeTrack { -}; -VectorKeyframeTrack.prototype.ValueTypeName = "vector"; -var AnimationClip = class { - constructor(name = "", duration = -1, tracks = [], blendMode = NormalAnimationBlendMode) { - this.name = name; - this.tracks = tracks; - this.duration = duration; - this.blendMode = blendMode; - this.uuid = generateUUID(); - if (this.duration < 0) { - this.resetDuration(); - } - } - static parse(json) { - const tracks = [], jsonTracks = json.tracks, frameTime = 1 / (json.fps || 1); - for (let i = 0, n = jsonTracks.length; i !== n; ++i) { - tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime)); - } - const clip = new this(json.name, json.duration, tracks, json.blendMode); - clip.uuid = json.uuid; - return clip; - } - static toJSON(clip) { - const tracks = [], clipTracks = clip.tracks; - const json = { - "name": clip.name, - "duration": clip.duration, - "tracks": tracks, - "uuid": clip.uuid, - "blendMode": clip.blendMode - }; - for (let i = 0, n = clipTracks.length; i !== n; ++i) { - tracks.push(KeyframeTrack.toJSON(clipTracks[i])); - } - return json; - } - static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) { - const numMorphTargets = morphTargetSequence.length; - const tracks = []; - for (let i = 0; i < numMorphTargets; i++) { - let times = []; - let values = []; - times.push( - (i + numMorphTargets - 1) % numMorphTargets, - i, - (i + 1) % numMorphTargets - ); - values.push(0, 1, 0); - const order = getKeyframeOrder(times); - times = sortedArray(times, 1, order); - values = sortedArray(values, 1, order); - if (!noLoop && times[0] === 0) { - times.push(numMorphTargets); - values.push(values[0]); - } - tracks.push( - new NumberKeyframeTrack( - ".morphTargetInfluences[" + morphTargetSequence[i].name + "]", - times, - values - ).scale(1 / fps) - ); - } - return new this(name, -1, tracks); - } - static findByName(objectOrClipArray, name) { - let clipArray = objectOrClipArray; - if (!Array.isArray(objectOrClipArray)) { - const o = objectOrClipArray; - clipArray = o.geometry && o.geometry.animations || o.animations; - } - for (let i = 0; i < clipArray.length; i++) { - if (clipArray[i].name === name) { - return clipArray[i]; - } - } - return null; - } - static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) { - const animationToMorphTargets = {}; - const pattern = /^([\w-]*?)([\d]+)$/; - for (let i = 0, il = morphTargets.length; i < il; i++) { - const morphTarget = morphTargets[i]; - const parts = morphTarget.name.match(pattern); - if (parts && parts.length > 1) { - const name = parts[1]; - let animationMorphTargets = animationToMorphTargets[name]; - if (!animationMorphTargets) { - animationToMorphTargets[name] = animationMorphTargets = []; - } - animationMorphTargets.push(morphTarget); - } - } - const clips = []; - for (const name in animationToMorphTargets) { - clips.push(this.CreateFromMorphTargetSequence(name, animationToMorphTargets[name], fps, noLoop)); - } - return clips; - } - // parse the animation.hierarchy format - static parseAnimation(animation, bones) { - if (!animation) { - console.error("THREE.AnimationClip: No animation in JSONLoader data."); - return null; - } - const addNonemptyTrack = function(trackType, trackName, animationKeys, propertyName, destTracks) { - if (animationKeys.length !== 0) { - const times = []; - const values = []; - flattenJSON(animationKeys, times, values, propertyName); - if (times.length !== 0) { - destTracks.push(new trackType(trackName, times, values)); - } - } - }; - const tracks = []; - const clipName = animation.name || "default"; - const fps = animation.fps || 30; - const blendMode = animation.blendMode; - let duration = animation.length || -1; - const hierarchyTracks = animation.hierarchy || []; - for (let h = 0; h < hierarchyTracks.length; h++) { - const animationKeys = hierarchyTracks[h].keys; - if (!animationKeys || animationKeys.length === 0) continue; - if (animationKeys[0].morphTargets) { - const morphTargetNames = {}; - let k; - for (k = 0; k < animationKeys.length; k++) { - if (animationKeys[k].morphTargets) { - for (let m = 0; m < animationKeys[k].morphTargets.length; m++) { - morphTargetNames[animationKeys[k].morphTargets[m]] = -1; - } - } - } - for (const morphTargetName in morphTargetNames) { - const times = []; - const values = []; - for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) { - const animationKey = animationKeys[k]; - times.push(animationKey.time); - values.push(animationKey.morphTarget === morphTargetName ? 1 : 0); - } - tracks.push(new NumberKeyframeTrack(".morphTargetInfluence[" + morphTargetName + "]", times, values)); - } - duration = morphTargetNames.length * fps; - } else { - const boneName = ".bones[" + bones[h].name + "]"; - addNonemptyTrack( - VectorKeyframeTrack, - boneName + ".position", - animationKeys, - "pos", - tracks - ); - addNonemptyTrack( - QuaternionKeyframeTrack, - boneName + ".quaternion", - animationKeys, - "rot", - tracks - ); - addNonemptyTrack( - VectorKeyframeTrack, - boneName + ".scale", - animationKeys, - "scl", - tracks - ); - } - } - if (tracks.length === 0) { - return null; - } - const clip = new this(clipName, duration, tracks, blendMode); - return clip; - } - resetDuration() { - const tracks = this.tracks; - let duration = 0; - for (let i = 0, n = tracks.length; i !== n; ++i) { - const track = this.tracks[i]; - duration = Math.max(duration, track.times[track.times.length - 1]); - } - this.duration = duration; - return this; - } - trim() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].trim(0, this.duration); - } - return this; - } - validate() { - let valid = true; - for (let i = 0; i < this.tracks.length; i++) { - valid = valid && this.tracks[i].validate(); - } - return valid; - } - optimize() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].optimize(); - } - return this; - } - clone() { - const tracks = []; - for (let i = 0; i < this.tracks.length; i++) { - tracks.push(this.tracks[i].clone()); - } - return new this.constructor(this.name, this.duration, tracks, this.blendMode); - } - toJSON() { - return this.constructor.toJSON(this); - } -}; -function getTrackTypeForValueTypeName(typeName) { - switch (typeName.toLowerCase()) { - case "scalar": - case "double": - case "float": - case "number": - case "integer": - return NumberKeyframeTrack; - case "vector": - case "vector2": - case "vector3": - case "vector4": - return VectorKeyframeTrack; - case "color": - return ColorKeyframeTrack; - case "quaternion": - return QuaternionKeyframeTrack; - case "bool": - case "boolean": - return BooleanKeyframeTrack; - case "string": - return StringKeyframeTrack; - } - throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + typeName); -} -function parseKeyframeTrack(json) { - if (json.type === void 0) { - throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); - } - const trackType = getTrackTypeForValueTypeName(json.type); - if (json.times === void 0) { - const times = [], values = []; - flattenJSON(json.keys, times, values, "value"); - json.times = times; - json.values = values; - } - if (trackType.parse !== void 0) { - return trackType.parse(json); - } else { - return new trackType(json.name, json.times, json.values, json.interpolation); - } -} -var Cache = { - enabled: false, - files: {}, - add: function(key, file) { - if (this.enabled === false) return; - this.files[key] = file; - }, - get: function(key) { - if (this.enabled === false) return; - return this.files[key]; - }, - remove: function(key) { - delete this.files[key]; - }, - clear: function() { - this.files = {}; - } -}; -var LoadingManager = class { - constructor(onLoad, onProgress, onError) { - const scope = this; - let isLoading = false; - let itemsLoaded = 0; - let itemsTotal = 0; - let urlModifier = void 0; - const handlers = []; - this.onStart = void 0; - this.onLoad = onLoad; - this.onProgress = onProgress; - this.onError = onError; - this.itemStart = function(url) { - itemsTotal++; - if (isLoading === false) { - if (scope.onStart !== void 0) { - scope.onStart(url, itemsLoaded, itemsTotal); - } - } - isLoading = true; - }; - this.itemEnd = function(url) { - itemsLoaded++; - if (scope.onProgress !== void 0) { - scope.onProgress(url, itemsLoaded, itemsTotal); - } - if (itemsLoaded === itemsTotal) { - isLoading = false; - if (scope.onLoad !== void 0) { - scope.onLoad(); - } - } - }; - this.itemError = function(url) { - if (scope.onError !== void 0) { - scope.onError(url); - } - }; - this.resolveURL = function(url) { - if (urlModifier) { - return urlModifier(url); - } - return url; - }; - this.setURLModifier = function(transform) { - urlModifier = transform; - return this; - }; - this.addHandler = function(regex, loader) { - handlers.push(regex, loader); - return this; - }; - this.removeHandler = function(regex) { - const index = handlers.indexOf(regex); - if (index !== -1) { - handlers.splice(index, 2); - } - return this; - }; - this.getHandler = function(file) { - for (let i = 0, l = handlers.length; i < l; i += 2) { - const regex = handlers[i]; - const loader = handlers[i + 1]; - if (regex.global) regex.lastIndex = 0; - if (regex.test(file)) { - return loader; - } - } - return null; - }; - } -}; -var DefaultLoadingManager = new LoadingManager(); -var Loader = class { - constructor(manager) { - this.manager = manager !== void 0 ? manager : DefaultLoadingManager; - this.crossOrigin = "anonymous"; - this.withCredentials = false; - this.path = ""; - this.resourcePath = ""; - this.requestHeader = {}; - } - load() { - } - loadAsync(url, onProgress) { - const scope = this; - return new Promise(function(resolve, reject) { - scope.load(url, resolve, onProgress, reject); - }); - } - parse() { - } - setCrossOrigin(crossOrigin) { - this.crossOrigin = crossOrigin; - return this; - } - setWithCredentials(value) { - this.withCredentials = value; - return this; - } - setPath(path) { - this.path = path; - return this; - } - setResourcePath(resourcePath) { - this.resourcePath = resourcePath; - return this; - } - setRequestHeader(requestHeader) { - this.requestHeader = requestHeader; - return this; - } -}; -Loader.DEFAULT_MATERIAL_NAME = "__DEFAULT"; -var loading = {}; -var HttpError = class extends Error { - constructor(message, response) { - super(message); - this.response = response; - } -}; -var FileLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - if (url === void 0) url = ""; - if (this.path !== void 0) url = this.path + url; - url = this.manager.resolveURL(url); - const cached = Cache.get(url); - if (cached !== void 0) { - this.manager.itemStart(url); - setTimeout(() => { - if (onLoad) onLoad(cached); - this.manager.itemEnd(url); - }, 0); - return cached; - } - if (loading[url] !== void 0) { - loading[url].push({ - onLoad, - onProgress, - onError - }); - return; - } - loading[url] = []; - loading[url].push({ - onLoad, - onProgress, - onError - }); - const req = new Request(url, { - headers: new Headers(this.requestHeader), - credentials: this.withCredentials ? "include" : "same-origin" - // An abort controller could be added within a future PR - }); - const mimeType = this.mimeType; - const responseType = this.responseType; - fetch(req).then((response) => { - if (response.status === 200 || response.status === 0) { - if (response.status === 0) { - console.warn("THREE.FileLoader: HTTP Status 0 received."); - } - if (typeof ReadableStream === "undefined" || response.body === void 0 || response.body.getReader === void 0) { - return response; - } - const callbacks = loading[url]; - const reader = response.body.getReader(); - const contentLength = response.headers.get("X-File-Size") || response.headers.get("Content-Length"); - const total = contentLength ? parseInt(contentLength) : 0; - const lengthComputable = total !== 0; - let loaded = 0; - const stream = new ReadableStream({ - start(controller) { - readData(); - function readData() { - reader.read().then(({ done, value }) => { - if (done) { - controller.close(); - } else { - loaded += value.byteLength; - const event = new ProgressEvent("progress", { lengthComputable, loaded, total }); - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onProgress) callback.onProgress(event); - } - controller.enqueue(value); - readData(); - } - }, (e) => { - controller.error(e); - }); - } - } - }); - return new Response(stream); - } else { - throw new HttpError(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response); - } - }).then((response) => { - switch (responseType) { - case "arraybuffer": - return response.arrayBuffer(); - case "blob": - return response.blob(); - case "document": - return response.text().then((text) => { - const parser = new DOMParser(); - return parser.parseFromString(text, mimeType); - }); - case "json": - return response.json(); - default: - if (mimeType === void 0) { - return response.text(); - } else { - const re = /charset="?([^;"\s]*)"?/i; - const exec = re.exec(mimeType); - const label = exec && exec[1] ? exec[1].toLowerCase() : void 0; - const decoder = new TextDecoder(label); - return response.arrayBuffer().then((ab) => decoder.decode(ab)); - } - } - }).then((data) => { - Cache.add(url, data); - const callbacks = loading[url]; - delete loading[url]; - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onLoad) callback.onLoad(data); - } - }).catch((err) => { - const callbacks = loading[url]; - if (callbacks === void 0) { - this.manager.itemError(url); - throw err; - } - delete loading[url]; - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onError) callback.onError(err); - } - this.manager.itemError(url); - }).finally(() => { - this.manager.itemEnd(url); - }); - this.manager.itemStart(url); - } - setResponseType(value) { - this.responseType = value; - return this; - } - setMimeType(value) { - this.mimeType = value; - return this; - } -}; -var AnimationLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(json) { - const animations = []; - for (let i = 0; i < json.length; i++) { - const clip = AnimationClip.parse(json[i]); - animations.push(clip); - } - return animations; - } -}; -var CompressedTextureLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const images = []; - const texture = new CompressedTexture(); - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(scope.withCredentials); - let loaded = 0; - function loadTexture(i) { - loader.load(url[i], function(buffer) { - const texDatas = scope.parse(buffer, true); - images[i] = { - width: texDatas.width, - height: texDatas.height, - format: texDatas.format, - mipmaps: texDatas.mipmaps - }; - loaded += 1; - if (loaded === 6) { - if (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter; - texture.image = images; - texture.format = texDatas.format; - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - } - }, onProgress, onError); - } - if (Array.isArray(url)) { - for (let i = 0, il = url.length; i < il; ++i) { - loadTexture(i); - } - } else { - loader.load(url, function(buffer) { - const texDatas = scope.parse(buffer, true); - if (texDatas.isCubemap) { - const faces = texDatas.mipmaps.length / texDatas.mipmapCount; - for (let f = 0; f < faces; f++) { - images[f] = { mipmaps: [] }; - for (let i = 0; i < texDatas.mipmapCount; i++) { - images[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + i]); - images[f].format = texDatas.format; - images[f].width = texDatas.width; - images[f].height = texDatas.height; - } - } - texture.image = images; - } else { - texture.image.width = texDatas.width; - texture.image.height = texDatas.height; - texture.mipmaps = texDatas.mipmaps; - } - if (texDatas.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - texture.format = texDatas.format; - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - }, onProgress, onError); - } - return texture; - } -}; -var ImageLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - if (this.path !== void 0) url = this.path + url; - url = this.manager.resolveURL(url); - const scope = this; - const cached = Cache.get(url); - if (cached !== void 0) { - scope.manager.itemStart(url); - setTimeout(function() { - if (onLoad) onLoad(cached); - scope.manager.itemEnd(url); - }, 0); - return cached; - } - const image = createElementNS("img"); - function onImageLoad() { - removeEventListeners(); - Cache.add(url, this); - if (onLoad) onLoad(this); - scope.manager.itemEnd(url); - } - function onImageError(event) { - removeEventListeners(); - if (onError) onError(event); - scope.manager.itemError(url); - scope.manager.itemEnd(url); - } - function removeEventListeners() { - image.removeEventListener("load", onImageLoad, false); - image.removeEventListener("error", onImageError, false); - } - image.addEventListener("load", onImageLoad, false); - image.addEventListener("error", onImageError, false); - if (url.slice(0, 5) !== "data:") { - if (this.crossOrigin !== void 0) image.crossOrigin = this.crossOrigin; - } - scope.manager.itemStart(url); - image.src = url; - return image; - } -}; -var CubeTextureLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(urls, onLoad, onProgress, onError) { - const texture = new CubeTexture(); - texture.colorSpace = SRGBColorSpace; - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - let loaded = 0; - function loadTexture(i) { - loader.load(urls[i], function(image) { - texture.images[i] = image; - loaded++; - if (loaded === 6) { - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - } - }, void 0, onError); - } - for (let i = 0; i < urls.length; ++i) { - loadTexture(i); - } - return texture; - } -}; -var DataTextureLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const texture = new DataTexture(); - const loader = new FileLoader(this.manager); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setPath(this.path); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(buffer) { - let texData; - try { - texData = scope.parse(buffer); - } catch (error) { - if (onError !== void 0) { - onError(error); - } else { - console.error(error); - return; - } - } - if (texData.image !== void 0) { - texture.image = texData.image; - } else if (texData.data !== void 0) { - texture.image.width = texData.width; - texture.image.height = texData.height; - texture.image.data = texData.data; - } - texture.wrapS = texData.wrapS !== void 0 ? texData.wrapS : ClampToEdgeWrapping; - texture.wrapT = texData.wrapT !== void 0 ? texData.wrapT : ClampToEdgeWrapping; - texture.magFilter = texData.magFilter !== void 0 ? texData.magFilter : LinearFilter; - texture.minFilter = texData.minFilter !== void 0 ? texData.minFilter : LinearFilter; - texture.anisotropy = texData.anisotropy !== void 0 ? texData.anisotropy : 1; - if (texData.colorSpace !== void 0) { - texture.colorSpace = texData.colorSpace; - } - if (texData.flipY !== void 0) { - texture.flipY = texData.flipY; - } - if (texData.format !== void 0) { - texture.format = texData.format; - } - if (texData.type !== void 0) { - texture.type = texData.type; - } - if (texData.mipmaps !== void 0) { - texture.mipmaps = texData.mipmaps; - texture.minFilter = LinearMipmapLinearFilter; - } - if (texData.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - if (texData.generateMipmaps !== void 0) { - texture.generateMipmaps = texData.generateMipmaps; - } - texture.needsUpdate = true; - if (onLoad) onLoad(texture, texData); - }, onProgress, onError); - return texture; - } -}; -var TextureLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const texture = new Texture(); - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - loader.load(url, function(image) { - texture.image = image; - texture.needsUpdate = true; - if (onLoad !== void 0) { - onLoad(texture); - } - }, onProgress, onError); - return texture; - } -}; -var Light = class extends Object3D { - constructor(color, intensity = 1) { - super(); - this.isLight = true; - this.type = "Light"; - this.color = new Color(color); - this.intensity = intensity; - } - dispose() { - } - copy(source, recursive) { - super.copy(source, recursive); - this.color.copy(source.color); - this.intensity = source.intensity; - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - data.object.color = this.color.getHex(); - data.object.intensity = this.intensity; - if (this.groundColor !== void 0) data.object.groundColor = this.groundColor.getHex(); - if (this.distance !== void 0) data.object.distance = this.distance; - if (this.angle !== void 0) data.object.angle = this.angle; - if (this.decay !== void 0) data.object.decay = this.decay; - if (this.penumbra !== void 0) data.object.penumbra = this.penumbra; - if (this.shadow !== void 0) data.object.shadow = this.shadow.toJSON(); - if (this.target !== void 0) data.object.target = this.target.uuid; - return data; - } -}; -var HemisphereLight = class extends Light { - constructor(skyColor, groundColor, intensity) { - super(skyColor, intensity); - this.isHemisphereLight = true; - this.type = "HemisphereLight"; - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - this.groundColor = new Color(groundColor); - } - copy(source, recursive) { - super.copy(source, recursive); - this.groundColor.copy(source.groundColor); - return this; - } -}; -var _projScreenMatrix$1 = new Matrix4(); -var _lightPositionWorld$1 = new Vector3(); -var _lookTarget$1 = new Vector3(); -var LightShadow = class { - constructor(camera) { - this.camera = camera; - this.intensity = 1; - this.bias = 0; - this.normalBias = 0; - this.radius = 1; - this.blurSamples = 8; - this.mapSize = new Vector2(512, 512); - this.map = null; - this.mapPass = null; - this.matrix = new Matrix4(); - this.autoUpdate = true; - this.needsUpdate = false; - this._frustum = new Frustum(); - this._frameExtents = new Vector2(1, 1); - this._viewportCount = 1; - this._viewports = [ - new Vector4(0, 0, 1, 1) - ]; - } - getViewportCount() { - return this._viewportCount; - } - getFrustum() { - return this._frustum; - } - updateMatrices(light) { - const shadowCamera = this.camera; - const shadowMatrix = this.matrix; - _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld); - shadowCamera.position.copy(_lightPositionWorld$1); - _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld); - shadowCamera.lookAt(_lookTarget$1); - shadowCamera.updateMatrixWorld(); - _projScreenMatrix$1.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse); - this._frustum.setFromProjectionMatrix(_projScreenMatrix$1); - shadowMatrix.set( - 0.5, - 0, - 0, - 0.5, - 0, - 0.5, - 0, - 0.5, - 0, - 0, - 0.5, - 0.5, - 0, - 0, - 0, - 1 - ); - shadowMatrix.multiply(_projScreenMatrix$1); - } - getViewport(viewportIndex) { - return this._viewports[viewportIndex]; - } - getFrameExtents() { - return this._frameExtents; - } - dispose() { - if (this.map) { - this.map.dispose(); - } - if (this.mapPass) { - this.mapPass.dispose(); - } - } - copy(source) { - this.camera = source.camera.clone(); - this.intensity = source.intensity; - this.bias = source.bias; - this.radius = source.radius; - this.mapSize.copy(source.mapSize); - return this; - } - clone() { - return new this.constructor().copy(this); - } - toJSON() { - const object = {}; - if (this.intensity !== 1) object.intensity = this.intensity; - if (this.bias !== 0) object.bias = this.bias; - if (this.normalBias !== 0) object.normalBias = this.normalBias; - if (this.radius !== 1) object.radius = this.radius; - if (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray(); - object.camera = this.camera.toJSON(false).object; - delete object.camera.matrix; - return object; - } -}; -var SpotLightShadow = class extends LightShadow { - constructor() { - super(new PerspectiveCamera(50, 1, 0.5, 500)); - this.isSpotLightShadow = true; - this.focus = 1; - } - updateMatrices(light) { - const camera = this.camera; - const fov2 = RAD2DEG * 2 * light.angle * this.focus; - const aspect2 = this.mapSize.width / this.mapSize.height; - const far = light.distance || camera.far; - if (fov2 !== camera.fov || aspect2 !== camera.aspect || far !== camera.far) { - camera.fov = fov2; - camera.aspect = aspect2; - camera.far = far; - camera.updateProjectionMatrix(); - } - super.updateMatrices(light); - } - copy(source) { - super.copy(source); - this.focus = source.focus; - return this; - } -}; -var SpotLight = class extends Light { - constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2) { - super(color, intensity); - this.isSpotLight = true; - this.type = "SpotLight"; - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - this.target = new Object3D(); - this.distance = distance; - this.angle = angle; - this.penumbra = penumbra; - this.decay = decay; - this.map = null; - this.shadow = new SpotLightShadow(); - } - get power() { - return this.intensity * Math.PI; - } - set power(power) { - this.intensity = power / Math.PI; - } - dispose() { - this.shadow.dispose(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.distance = source.distance; - this.angle = source.angle; - this.penumbra = source.penumbra; - this.decay = source.decay; - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - return this; - } -}; -var _projScreenMatrix = new Matrix4(); -var _lightPositionWorld = new Vector3(); -var _lookTarget = new Vector3(); -var PointLightShadow = class extends LightShadow { - constructor() { - super(new PerspectiveCamera(90, 1, 0.5, 500)); - this.isPointLightShadow = true; - this._frameExtents = new Vector2(4, 2); - this._viewportCount = 6; - this._viewports = [ - // These viewports map a cube-map onto a 2D texture with the - // following orientation: - // - // xzXZ - // y Y - // - // X - Positive x direction - // x - Negative x direction - // Y - Positive y direction - // y - Negative y direction - // Z - Positive z direction - // z - Negative z direction - // positive X - new Vector4(2, 1, 1, 1), - // negative X - new Vector4(0, 1, 1, 1), - // positive Z - new Vector4(3, 1, 1, 1), - // negative Z - new Vector4(1, 1, 1, 1), - // positive Y - new Vector4(3, 0, 1, 1), - // negative Y - new Vector4(1, 0, 1, 1) - ]; - this._cubeDirections = [ - new Vector3(1, 0, 0), - new Vector3(-1, 0, 0), - new Vector3(0, 0, 1), - new Vector3(0, 0, -1), - new Vector3(0, 1, 0), - new Vector3(0, -1, 0) - ]; - this._cubeUps = [ - new Vector3(0, 1, 0), - new Vector3(0, 1, 0), - new Vector3(0, 1, 0), - new Vector3(0, 1, 0), - new Vector3(0, 0, 1), - new Vector3(0, 0, -1) - ]; - } - updateMatrices(light, viewportIndex = 0) { - const camera = this.camera; - const shadowMatrix = this.matrix; - const far = light.distance || camera.far; - if (far !== camera.far) { - camera.far = far; - camera.updateProjectionMatrix(); - } - _lightPositionWorld.setFromMatrixPosition(light.matrixWorld); - camera.position.copy(_lightPositionWorld); - _lookTarget.copy(camera.position); - _lookTarget.add(this._cubeDirections[viewportIndex]); - camera.up.copy(this._cubeUps[viewportIndex]); - camera.lookAt(_lookTarget); - camera.updateMatrixWorld(); - shadowMatrix.makeTranslation(-_lightPositionWorld.x, -_lightPositionWorld.y, -_lightPositionWorld.z); - _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - this._frustum.setFromProjectionMatrix(_projScreenMatrix); - } -}; -var PointLight = class extends Light { - constructor(color, intensity, distance = 0, decay = 2) { - super(color, intensity); - this.isPointLight = true; - this.type = "PointLight"; - this.distance = distance; - this.decay = decay; - this.shadow = new PointLightShadow(); - } - get power() { - return this.intensity * 4 * Math.PI; - } - set power(power) { - this.intensity = power / (4 * Math.PI); - } - dispose() { - this.shadow.dispose(); - } - copy(source, recursive) { - super.copy(source, recursive); - this.distance = source.distance; - this.decay = source.decay; - this.shadow = source.shadow.clone(); - return this; - } -}; -var DirectionalLightShadow = class extends LightShadow { - constructor() { - super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500)); - this.isDirectionalLightShadow = true; - } -}; -var DirectionalLight = class extends Light { - constructor(color, intensity) { - super(color, intensity); - this.isDirectionalLight = true; - this.type = "DirectionalLight"; - this.position.copy(Object3D.DEFAULT_UP); - this.updateMatrix(); - this.target = new Object3D(); - this.shadow = new DirectionalLightShadow(); - } - dispose() { - this.shadow.dispose(); - } - copy(source) { - super.copy(source); - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - return this; - } -}; -var AmbientLight = class extends Light { - constructor(color, intensity) { - super(color, intensity); - this.isAmbientLight = true; - this.type = "AmbientLight"; - } -}; -var RectAreaLight = class extends Light { - constructor(color, intensity, width = 10, height = 10) { - super(color, intensity); - this.isRectAreaLight = true; - this.type = "RectAreaLight"; - this.width = width; - this.height = height; - } - get power() { - return this.intensity * this.width * this.height * Math.PI; - } - set power(power) { - this.intensity = power / (this.width * this.height * Math.PI); - } - copy(source) { - super.copy(source); - this.width = source.width; - this.height = source.height; - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - data.object.width = this.width; - data.object.height = this.height; - return data; - } -}; -var SphericalHarmonics3 = class { - constructor() { - this.isSphericalHarmonics3 = true; - this.coefficients = []; - for (let i = 0; i < 9; i++) { - this.coefficients.push(new Vector3()); - } - } - set(coefficients) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].copy(coefficients[i]); - } - return this; - } - zero() { - for (let i = 0; i < 9; i++) { - this.coefficients[i].set(0, 0, 0); - } - return this; - } - // get the radiance in the direction of the normal - // target is a Vector3 - getAt(normal, target) { - const x = normal.x, y = normal.y, z = normal.z; - const coeff = this.coefficients; - target.copy(coeff[0]).multiplyScalar(0.282095); - target.addScaledVector(coeff[1], 0.488603 * y); - target.addScaledVector(coeff[2], 0.488603 * z); - target.addScaledVector(coeff[3], 0.488603 * x); - target.addScaledVector(coeff[4], 1.092548 * (x * y)); - target.addScaledVector(coeff[5], 1.092548 * (y * z)); - target.addScaledVector(coeff[6], 0.315392 * (3 * z * z - 1)); - target.addScaledVector(coeff[7], 1.092548 * (x * z)); - target.addScaledVector(coeff[8], 0.546274 * (x * x - y * y)); - return target; - } - // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal - // target is a Vector3 - // https://graphics.stanford.edu/papers/envmap/envmap.pdf - getIrradianceAt(normal, target) { - const x = normal.x, y = normal.y, z = normal.z; - const coeff = this.coefficients; - target.copy(coeff[0]).multiplyScalar(0.886227); - target.addScaledVector(coeff[1], 2 * 0.511664 * y); - target.addScaledVector(coeff[2], 2 * 0.511664 * z); - target.addScaledVector(coeff[3], 2 * 0.511664 * x); - target.addScaledVector(coeff[4], 2 * 0.429043 * x * y); - target.addScaledVector(coeff[5], 2 * 0.429043 * y * z); - target.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); - target.addScaledVector(coeff[7], 2 * 0.429043 * x * z); - target.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); - return target; - } - add(sh) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].add(sh.coefficients[i]); - } - return this; - } - addScaledSH(sh, s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].addScaledVector(sh.coefficients[i], s); - } - return this; - } - scale(s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].multiplyScalar(s); - } - return this; - } - lerp(sh, alpha) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].lerp(sh.coefficients[i], alpha); - } - return this; - } - equals(sh) { - for (let i = 0; i < 9; i++) { - if (!this.coefficients[i].equals(sh.coefficients[i])) { - return false; - } - } - return true; - } - copy(sh) { - return this.set(sh.coefficients); - } - clone() { - return new this.constructor().copy(this); - } - fromArray(array, offset = 0) { - const coefficients = this.coefficients; - for (let i = 0; i < 9; i++) { - coefficients[i].fromArray(array, offset + i * 3); - } - return this; - } - toArray(array = [], offset = 0) { - const coefficients = this.coefficients; - for (let i = 0; i < 9; i++) { - coefficients[i].toArray(array, offset + i * 3); - } - return array; - } - // evaluate the basis functions - // shBasis is an Array[ 9 ] - static getBasisAt(normal, shBasis) { - const x = normal.x, y = normal.y, z = normal.z; - shBasis[0] = 0.282095; - shBasis[1] = 0.488603 * y; - shBasis[2] = 0.488603 * z; - shBasis[3] = 0.488603 * x; - shBasis[4] = 1.092548 * x * y; - shBasis[5] = 1.092548 * y * z; - shBasis[6] = 0.315392 * (3 * z * z - 1); - shBasis[7] = 1.092548 * x * z; - shBasis[8] = 0.546274 * (x * x - y * y); - } -}; -var LightProbe = class extends Light { - constructor(sh = new SphericalHarmonics3(), intensity = 1) { - super(void 0, intensity); - this.isLightProbe = true; - this.sh = sh; - } - copy(source) { - super.copy(source); - this.sh.copy(source.sh); - return this; - } - fromJSON(json) { - this.intensity = json.intensity; - this.sh.fromArray(json.sh); - return this; - } - toJSON(meta) { - const data = super.toJSON(meta); - data.object.sh = this.sh.toArray(); - return data; - } -}; -var MaterialLoader = class _MaterialLoader extends Loader { - constructor(manager) { - super(manager); - this.textures = {}; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(json) { - const textures = this.textures; - function getTexture(name) { - if (textures[name] === void 0) { - console.warn("THREE.MaterialLoader: Undefined texture", name); - } - return textures[name]; - } - const material = _MaterialLoader.createMaterialFromType(json.type); - if (json.uuid !== void 0) material.uuid = json.uuid; - if (json.name !== void 0) material.name = json.name; - if (json.color !== void 0 && material.color !== void 0) material.color.setHex(json.color); - if (json.roughness !== void 0) material.roughness = json.roughness; - if (json.metalness !== void 0) material.metalness = json.metalness; - if (json.sheen !== void 0) material.sheen = json.sheen; - if (json.sheenColor !== void 0) material.sheenColor = new Color().setHex(json.sheenColor); - if (json.sheenRoughness !== void 0) material.sheenRoughness = json.sheenRoughness; - if (json.emissive !== void 0 && material.emissive !== void 0) material.emissive.setHex(json.emissive); - if (json.specular !== void 0 && material.specular !== void 0) material.specular.setHex(json.specular); - if (json.specularIntensity !== void 0) material.specularIntensity = json.specularIntensity; - if (json.specularColor !== void 0 && material.specularColor !== void 0) material.specularColor.setHex(json.specularColor); - if (json.shininess !== void 0) material.shininess = json.shininess; - if (json.clearcoat !== void 0) material.clearcoat = json.clearcoat; - if (json.clearcoatRoughness !== void 0) material.clearcoatRoughness = json.clearcoatRoughness; - if (json.dispersion !== void 0) material.dispersion = json.dispersion; - if (json.iridescence !== void 0) material.iridescence = json.iridescence; - if (json.iridescenceIOR !== void 0) material.iridescenceIOR = json.iridescenceIOR; - if (json.iridescenceThicknessRange !== void 0) material.iridescenceThicknessRange = json.iridescenceThicknessRange; - if (json.transmission !== void 0) material.transmission = json.transmission; - if (json.thickness !== void 0) material.thickness = json.thickness; - if (json.attenuationDistance !== void 0) material.attenuationDistance = json.attenuationDistance; - if (json.attenuationColor !== void 0 && material.attenuationColor !== void 0) material.attenuationColor.setHex(json.attenuationColor); - if (json.anisotropy !== void 0) material.anisotropy = json.anisotropy; - if (json.anisotropyRotation !== void 0) material.anisotropyRotation = json.anisotropyRotation; - if (json.fog !== void 0) material.fog = json.fog; - if (json.flatShading !== void 0) material.flatShading = json.flatShading; - if (json.blending !== void 0) material.blending = json.blending; - if (json.combine !== void 0) material.combine = json.combine; - if (json.side !== void 0) material.side = json.side; - if (json.shadowSide !== void 0) material.shadowSide = json.shadowSide; - if (json.opacity !== void 0) material.opacity = json.opacity; - if (json.transparent !== void 0) material.transparent = json.transparent; - if (json.alphaTest !== void 0) material.alphaTest = json.alphaTest; - if (json.alphaHash !== void 0) material.alphaHash = json.alphaHash; - if (json.depthFunc !== void 0) material.depthFunc = json.depthFunc; - if (json.depthTest !== void 0) material.depthTest = json.depthTest; - if (json.depthWrite !== void 0) material.depthWrite = json.depthWrite; - if (json.colorWrite !== void 0) material.colorWrite = json.colorWrite; - if (json.blendSrc !== void 0) material.blendSrc = json.blendSrc; - if (json.blendDst !== void 0) material.blendDst = json.blendDst; - if (json.blendEquation !== void 0) material.blendEquation = json.blendEquation; - if (json.blendSrcAlpha !== void 0) material.blendSrcAlpha = json.blendSrcAlpha; - if (json.blendDstAlpha !== void 0) material.blendDstAlpha = json.blendDstAlpha; - if (json.blendEquationAlpha !== void 0) material.blendEquationAlpha = json.blendEquationAlpha; - if (json.blendColor !== void 0 && material.blendColor !== void 0) material.blendColor.setHex(json.blendColor); - if (json.blendAlpha !== void 0) material.blendAlpha = json.blendAlpha; - if (json.stencilWriteMask !== void 0) material.stencilWriteMask = json.stencilWriteMask; - if (json.stencilFunc !== void 0) material.stencilFunc = json.stencilFunc; - if (json.stencilRef !== void 0) material.stencilRef = json.stencilRef; - if (json.stencilFuncMask !== void 0) material.stencilFuncMask = json.stencilFuncMask; - if (json.stencilFail !== void 0) material.stencilFail = json.stencilFail; - if (json.stencilZFail !== void 0) material.stencilZFail = json.stencilZFail; - if (json.stencilZPass !== void 0) material.stencilZPass = json.stencilZPass; - if (json.stencilWrite !== void 0) material.stencilWrite = json.stencilWrite; - if (json.wireframe !== void 0) material.wireframe = json.wireframe; - if (json.wireframeLinewidth !== void 0) material.wireframeLinewidth = json.wireframeLinewidth; - if (json.wireframeLinecap !== void 0) material.wireframeLinecap = json.wireframeLinecap; - if (json.wireframeLinejoin !== void 0) material.wireframeLinejoin = json.wireframeLinejoin; - if (json.rotation !== void 0) material.rotation = json.rotation; - if (json.linewidth !== void 0) material.linewidth = json.linewidth; - if (json.dashSize !== void 0) material.dashSize = json.dashSize; - if (json.gapSize !== void 0) material.gapSize = json.gapSize; - if (json.scale !== void 0) material.scale = json.scale; - if (json.polygonOffset !== void 0) material.polygonOffset = json.polygonOffset; - if (json.polygonOffsetFactor !== void 0) material.polygonOffsetFactor = json.polygonOffsetFactor; - if (json.polygonOffsetUnits !== void 0) material.polygonOffsetUnits = json.polygonOffsetUnits; - if (json.dithering !== void 0) material.dithering = json.dithering; - if (json.alphaToCoverage !== void 0) material.alphaToCoverage = json.alphaToCoverage; - if (json.premultipliedAlpha !== void 0) material.premultipliedAlpha = json.premultipliedAlpha; - if (json.forceSinglePass !== void 0) material.forceSinglePass = json.forceSinglePass; - if (json.visible !== void 0) material.visible = json.visible; - if (json.toneMapped !== void 0) material.toneMapped = json.toneMapped; - if (json.userData !== void 0) material.userData = json.userData; - if (json.vertexColors !== void 0) { - if (typeof json.vertexColors === "number") { - material.vertexColors = json.vertexColors > 0 ? true : false; - } else { - material.vertexColors = json.vertexColors; - } - } - if (json.uniforms !== void 0) { - for (const name in json.uniforms) { - const uniform = json.uniforms[name]; - material.uniforms[name] = {}; - switch (uniform.type) { - case "t": - material.uniforms[name].value = getTexture(uniform.value); - break; - case "c": - material.uniforms[name].value = new Color().setHex(uniform.value); - break; - case "v2": - material.uniforms[name].value = new Vector2().fromArray(uniform.value); - break; - case "v3": - material.uniforms[name].value = new Vector3().fromArray(uniform.value); - break; - case "v4": - material.uniforms[name].value = new Vector4().fromArray(uniform.value); - break; - case "m3": - material.uniforms[name].value = new Matrix3().fromArray(uniform.value); - break; - case "m4": - material.uniforms[name].value = new Matrix4().fromArray(uniform.value); - break; - default: - material.uniforms[name].value = uniform.value; - } - } - } - if (json.defines !== void 0) material.defines = json.defines; - if (json.vertexShader !== void 0) material.vertexShader = json.vertexShader; - if (json.fragmentShader !== void 0) material.fragmentShader = json.fragmentShader; - if (json.glslVersion !== void 0) material.glslVersion = json.glslVersion; - if (json.extensions !== void 0) { - for (const key in json.extensions) { - material.extensions[key] = json.extensions[key]; - } - } - if (json.lights !== void 0) material.lights = json.lights; - if (json.clipping !== void 0) material.clipping = json.clipping; - if (json.size !== void 0) material.size = json.size; - if (json.sizeAttenuation !== void 0) material.sizeAttenuation = json.sizeAttenuation; - if (json.map !== void 0) material.map = getTexture(json.map); - if (json.matcap !== void 0) material.matcap = getTexture(json.matcap); - if (json.alphaMap !== void 0) material.alphaMap = getTexture(json.alphaMap); - if (json.bumpMap !== void 0) material.bumpMap = getTexture(json.bumpMap); - if (json.bumpScale !== void 0) material.bumpScale = json.bumpScale; - if (json.normalMap !== void 0) material.normalMap = getTexture(json.normalMap); - if (json.normalMapType !== void 0) material.normalMapType = json.normalMapType; - if (json.normalScale !== void 0) { - let normalScale = json.normalScale; - if (Array.isArray(normalScale) === false) { - normalScale = [normalScale, normalScale]; - } - material.normalScale = new Vector2().fromArray(normalScale); - } - if (json.displacementMap !== void 0) material.displacementMap = getTexture(json.displacementMap); - if (json.displacementScale !== void 0) material.displacementScale = json.displacementScale; - if (json.displacementBias !== void 0) material.displacementBias = json.displacementBias; - if (json.roughnessMap !== void 0) material.roughnessMap = getTexture(json.roughnessMap); - if (json.metalnessMap !== void 0) material.metalnessMap = getTexture(json.metalnessMap); - if (json.emissiveMap !== void 0) material.emissiveMap = getTexture(json.emissiveMap); - if (json.emissiveIntensity !== void 0) material.emissiveIntensity = json.emissiveIntensity; - if (json.specularMap !== void 0) material.specularMap = getTexture(json.specularMap); - if (json.specularIntensityMap !== void 0) material.specularIntensityMap = getTexture(json.specularIntensityMap); - if (json.specularColorMap !== void 0) material.specularColorMap = getTexture(json.specularColorMap); - if (json.envMap !== void 0) material.envMap = getTexture(json.envMap); - if (json.envMapRotation !== void 0) material.envMapRotation.fromArray(json.envMapRotation); - if (json.envMapIntensity !== void 0) material.envMapIntensity = json.envMapIntensity; - if (json.reflectivity !== void 0) material.reflectivity = json.reflectivity; - if (json.refractionRatio !== void 0) material.refractionRatio = json.refractionRatio; - if (json.lightMap !== void 0) material.lightMap = getTexture(json.lightMap); - if (json.lightMapIntensity !== void 0) material.lightMapIntensity = json.lightMapIntensity; - if (json.aoMap !== void 0) material.aoMap = getTexture(json.aoMap); - if (json.aoMapIntensity !== void 0) material.aoMapIntensity = json.aoMapIntensity; - if (json.gradientMap !== void 0) material.gradientMap = getTexture(json.gradientMap); - if (json.clearcoatMap !== void 0) material.clearcoatMap = getTexture(json.clearcoatMap); - if (json.clearcoatRoughnessMap !== void 0) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap); - if (json.clearcoatNormalMap !== void 0) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap); - if (json.clearcoatNormalScale !== void 0) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale); - if (json.iridescenceMap !== void 0) material.iridescenceMap = getTexture(json.iridescenceMap); - if (json.iridescenceThicknessMap !== void 0) material.iridescenceThicknessMap = getTexture(json.iridescenceThicknessMap); - if (json.transmissionMap !== void 0) material.transmissionMap = getTexture(json.transmissionMap); - if (json.thicknessMap !== void 0) material.thicknessMap = getTexture(json.thicknessMap); - if (json.anisotropyMap !== void 0) material.anisotropyMap = getTexture(json.anisotropyMap); - if (json.sheenColorMap !== void 0) material.sheenColorMap = getTexture(json.sheenColorMap); - if (json.sheenRoughnessMap !== void 0) material.sheenRoughnessMap = getTexture(json.sheenRoughnessMap); - return material; - } - setTextures(value) { - this.textures = value; - return this; - } - static createMaterialFromType(type) { - const materialLib = { - ShadowMaterial, - SpriteMaterial, - RawShaderMaterial, - ShaderMaterial, - PointsMaterial, - MeshPhysicalMaterial, - MeshStandardMaterial, - MeshPhongMaterial, - MeshToonMaterial, - MeshNormalMaterial, - MeshLambertMaterial, - MeshDepthMaterial, - MeshDistanceMaterial, - MeshBasicMaterial, - MeshMatcapMaterial, - LineDashedMaterial, - LineBasicMaterial, - Material - }; - return new materialLib[type](); - } -}; -var LoaderUtils = class { - static decodeText(array) { - console.warn("THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead."); - if (typeof TextDecoder !== "undefined") { - return new TextDecoder().decode(array); - } - let s = ""; - for (let i = 0, il = array.length; i < il; i++) { - s += String.fromCharCode(array[i]); - } - try { - return decodeURIComponent(escape(s)); - } catch (e) { - return s; - } - } - static extractUrlBase(url) { - const index = url.lastIndexOf("/"); - if (index === -1) return "./"; - return url.slice(0, index + 1); - } - static resolveURL(url, path) { - if (typeof url !== "string" || url === "") return ""; - if (/^https?:\/\//i.test(path) && /^\//.test(url)) { - path = path.replace(/(^https?:\/\/[^\/]+).*/i, "$1"); - } - if (/^(https?:)?\/\//i.test(url)) return url; - if (/^data:.*,.*$/i.test(url)) return url; - if (/^blob:.*$/i.test(url)) return url; - return path + url; - } -}; -var InstancedBufferGeometry = class extends BufferGeometry { - constructor() { - super(); - this.isInstancedBufferGeometry = true; - this.type = "InstancedBufferGeometry"; - this.instanceCount = Infinity; - } - copy(source) { - super.copy(source); - this.instanceCount = source.instanceCount; - return this; - } - toJSON() { - const data = super.toJSON(); - data.instanceCount = this.instanceCount; - data.isInstancedBufferGeometry = true; - return data; - } -}; -var BufferGeometryLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(json) { - const interleavedBufferMap = {}; - const arrayBufferMap = {}; - function getInterleavedBuffer(json2, uuid) { - if (interleavedBufferMap[uuid] !== void 0) return interleavedBufferMap[uuid]; - const interleavedBuffers = json2.interleavedBuffers; - const interleavedBuffer = interleavedBuffers[uuid]; - const buffer = getArrayBuffer(json2, interleavedBuffer.buffer); - const array = getTypedArray(interleavedBuffer.type, buffer); - const ib = new InterleavedBuffer(array, interleavedBuffer.stride); - ib.uuid = interleavedBuffer.uuid; - interleavedBufferMap[uuid] = ib; - return ib; - } - function getArrayBuffer(json2, uuid) { - if (arrayBufferMap[uuid] !== void 0) return arrayBufferMap[uuid]; - const arrayBuffers = json2.arrayBuffers; - const arrayBuffer = arrayBuffers[uuid]; - const ab = new Uint32Array(arrayBuffer).buffer; - arrayBufferMap[uuid] = ab; - return ab; - } - const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); - const index = json.data.index; - if (index !== void 0) { - const typedArray = getTypedArray(index.type, index.array); - geometry.setIndex(new BufferAttribute(typedArray, 1)); - } - const attributes = json.data.attributes; - for (const key in attributes) { - const attribute = attributes[key]; - let bufferAttribute; - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; - bufferAttribute = new bufferAttributeConstr(typedArray, attribute.itemSize, attribute.normalized); - } - if (attribute.name !== void 0) bufferAttribute.name = attribute.name; - if (attribute.usage !== void 0) bufferAttribute.setUsage(attribute.usage); - geometry.setAttribute(key, bufferAttribute); - } - const morphAttributes = json.data.morphAttributes; - if (morphAttributes) { - for (const key in morphAttributes) { - const attributeArray = morphAttributes[key]; - const array = []; - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - let bufferAttribute; - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - bufferAttribute = new BufferAttribute(typedArray, attribute.itemSize, attribute.normalized); - } - if (attribute.name !== void 0) bufferAttribute.name = attribute.name; - array.push(bufferAttribute); - } - geometry.morphAttributes[key] = array; - } - } - const morphTargetsRelative = json.data.morphTargetsRelative; - if (morphTargetsRelative) { - geometry.morphTargetsRelative = true; - } - const groups = json.data.groups || json.data.drawcalls || json.data.offsets; - if (groups !== void 0) { - for (let i = 0, n = groups.length; i !== n; ++i) { - const group = groups[i]; - geometry.addGroup(group.start, group.count, group.materialIndex); - } - } - const boundingSphere = json.data.boundingSphere; - if (boundingSphere !== void 0) { - const center = new Vector3(); - if (boundingSphere.center !== void 0) { - center.fromArray(boundingSphere.center); - } - geometry.boundingSphere = new Sphere(center, boundingSphere.radius); - } - if (json.name) geometry.name = json.name; - if (json.userData) geometry.userData = json.userData; - return geometry; - } -}; -var ObjectLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - let json = null; - try { - json = JSON.parse(text); - } catch (error) { - if (onError !== void 0) onError(error); - console.error("THREE:ObjectLoader: Can't parse " + url + ".", error.message); - return; - } - const metadata = json.metadata; - if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { - if (onError !== void 0) onError(new Error("THREE.ObjectLoader: Can't load " + url)); - console.error("THREE.ObjectLoader: Can't load " + url); - return; - } - scope.parse(json, onLoad); - }, onProgress, onError); - } - async loadAsync(url, onProgress) { - const scope = this; - const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - const text = await loader.loadAsync(url, onProgress); - const json = JSON.parse(text); - const metadata = json.metadata; - if (metadata === void 0 || metadata.type === void 0 || metadata.type.toLowerCase() === "geometry") { - throw new Error("THREE.ObjectLoader: Can't load " + url); - } - return await scope.parseAsync(json); - } - parse(json, onLoad) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - const images = this.parseImages(json.images, function() { - if (onLoad !== void 0) onLoad(object); - }); - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - this.bindSkeletons(object, skeletons); - this.bindLightTargets(object); - if (onLoad !== void 0) { - let hasImages = false; - for (const uuid in images) { - if (images[uuid].data instanceof HTMLImageElement) { - hasImages = true; - break; - } - } - if (hasImages === false) onLoad(object); - } - return object; - } - async parseAsync(json) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - const images = await this.parseImagesAsync(json.images); - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - this.bindSkeletons(object, skeletons); - this.bindLightTargets(object); - return object; - } - parseShapes(json) { - const shapes = {}; - if (json !== void 0) { - for (let i = 0, l = json.length; i < l; i++) { - const shape = new Shape().fromJSON(json[i]); - shapes[shape.uuid] = shape; - } - } - return shapes; - } - parseSkeletons(json, object) { - const skeletons = {}; - const bones = {}; - object.traverse(function(child) { - if (child.isBone) bones[child.uuid] = child; - }); - if (json !== void 0) { - for (let i = 0, l = json.length; i < l; i++) { - const skeleton = new Skeleton().fromJSON(json[i], bones); - skeletons[skeleton.uuid] = skeleton; - } - } - return skeletons; - } - parseGeometries(json, shapes) { - const geometries = {}; - if (json !== void 0) { - const bufferGeometryLoader = new BufferGeometryLoader(); - for (let i = 0, l = json.length; i < l; i++) { - let geometry; - const data = json[i]; - switch (data.type) { - case "BufferGeometry": - case "InstancedBufferGeometry": - geometry = bufferGeometryLoader.parse(data); - break; - default: - if (data.type in Geometries) { - geometry = Geometries[data.type].fromJSON(data, shapes); - } else { - console.warn(`THREE.ObjectLoader: Unsupported geometry type "${data.type}"`); - } - } - geometry.uuid = data.uuid; - if (data.name !== void 0) geometry.name = data.name; - if (data.userData !== void 0) geometry.userData = data.userData; - geometries[data.uuid] = geometry; - } - } - return geometries; - } - parseMaterials(json, textures) { - const cache = {}; - const materials = {}; - if (json !== void 0) { - const loader = new MaterialLoader(); - loader.setTextures(textures); - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - if (cache[data.uuid] === void 0) { - cache[data.uuid] = loader.parse(data); - } - materials[data.uuid] = cache[data.uuid]; - } - } - return materials; - } - parseAnimations(json) { - const animations = {}; - if (json !== void 0) { - for (let i = 0; i < json.length; i++) { - const data = json[i]; - const clip = AnimationClip.parse(data); - animations[clip.uuid] = clip; - } - } - return animations; - } - parseImages(json, onLoad) { - const scope = this; - const images = {}; - let loader; - function loadImage(url) { - scope.manager.itemStart(url); - return loader.load(url, function() { - scope.manager.itemEnd(url); - }, void 0, function() { - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }); - } - function deserializeImage(image) { - if (typeof image === "string") { - const url = image; - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - return loadImage(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height - }; - } else { - return null; - } - } - } - if (json !== void 0 && json.length > 0) { - const manager = new LoadingManager(onLoad); - loader = new ImageLoader(manager); - loader.setCrossOrigin(this.crossOrigin); - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - if (Array.isArray(url)) { - const imageArray = []; - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - const deserializedImage = deserializeImage(currentUrl); - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - images[image.uuid] = new Source(imageArray); - } else { - const deserializedImage = deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - return images; - } - async parseImagesAsync(json) { - const scope = this; - const images = {}; - let loader; - async function deserializeImage(image) { - if (typeof image === "string") { - const url = image; - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - return await loader.loadAsync(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height - }; - } else { - return null; - } - } - } - if (json !== void 0 && json.length > 0) { - loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - if (Array.isArray(url)) { - const imageArray = []; - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - const deserializedImage = await deserializeImage(currentUrl); - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - images[image.uuid] = new Source(imageArray); - } else { - const deserializedImage = await deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - return images; - } - parseTextures(json, images) { - function parseConstant(value, type) { - if (typeof value === "number") return value; - console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", value); - return type[value]; - } - const textures = {}; - if (json !== void 0) { - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - if (data.image === void 0) { - console.warn('THREE.ObjectLoader: No "image" specified for', data.uuid); - } - if (images[data.image] === void 0) { - console.warn("THREE.ObjectLoader: Undefined image", data.image); - } - const source = images[data.image]; - const image = source.data; - let texture; - if (Array.isArray(image)) { - texture = new CubeTexture(); - if (image.length === 6) texture.needsUpdate = true; - } else { - if (image && image.data) { - texture = new DataTexture(); - } else { - texture = new Texture(); - } - if (image) texture.needsUpdate = true; - } - texture.source = source; - texture.uuid = data.uuid; - if (data.name !== void 0) texture.name = data.name; - if (data.mapping !== void 0) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING); - if (data.channel !== void 0) texture.channel = data.channel; - if (data.offset !== void 0) texture.offset.fromArray(data.offset); - if (data.repeat !== void 0) texture.repeat.fromArray(data.repeat); - if (data.center !== void 0) texture.center.fromArray(data.center); - if (data.rotation !== void 0) texture.rotation = data.rotation; - if (data.wrap !== void 0) { - texture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING); - texture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING); - } - if (data.format !== void 0) texture.format = data.format; - if (data.internalFormat !== void 0) texture.internalFormat = data.internalFormat; - if (data.type !== void 0) texture.type = data.type; - if (data.colorSpace !== void 0) texture.colorSpace = data.colorSpace; - if (data.minFilter !== void 0) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER); - if (data.magFilter !== void 0) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER); - if (data.anisotropy !== void 0) texture.anisotropy = data.anisotropy; - if (data.flipY !== void 0) texture.flipY = data.flipY; - if (data.generateMipmaps !== void 0) texture.generateMipmaps = data.generateMipmaps; - if (data.premultiplyAlpha !== void 0) texture.premultiplyAlpha = data.premultiplyAlpha; - if (data.unpackAlignment !== void 0) texture.unpackAlignment = data.unpackAlignment; - if (data.compareFunction !== void 0) texture.compareFunction = data.compareFunction; - if (data.userData !== void 0) texture.userData = data.userData; - textures[data.uuid] = texture; - } - } - return textures; - } - parseObject(data, geometries, materials, textures, animations) { - let object; - function getGeometry(name) { - if (geometries[name] === void 0) { - console.warn("THREE.ObjectLoader: Undefined geometry", name); - } - return geometries[name]; - } - function getMaterial(name) { - if (name === void 0) return void 0; - if (Array.isArray(name)) { - const array = []; - for (let i = 0, l = name.length; i < l; i++) { - const uuid = name[i]; - if (materials[uuid] === void 0) { - console.warn("THREE.ObjectLoader: Undefined material", uuid); - } - array.push(materials[uuid]); - } - return array; - } - if (materials[name] === void 0) { - console.warn("THREE.ObjectLoader: Undefined material", name); - } - return materials[name]; - } - function getTexture(uuid) { - if (textures[uuid] === void 0) { - console.warn("THREE.ObjectLoader: Undefined texture", uuid); - } - return textures[uuid]; - } - let geometry, material; - switch (data.type) { - case "Scene": - object = new Scene(); - if (data.background !== void 0) { - if (Number.isInteger(data.background)) { - object.background = new Color(data.background); - } else { - object.background = getTexture(data.background); - } - } - if (data.environment !== void 0) { - object.environment = getTexture(data.environment); - } - if (data.fog !== void 0) { - if (data.fog.type === "Fog") { - object.fog = new Fog(data.fog.color, data.fog.near, data.fog.far); - } else if (data.fog.type === "FogExp2") { - object.fog = new FogExp2(data.fog.color, data.fog.density); - } - if (data.fog.name !== "") { - object.fog.name = data.fog.name; - } - } - if (data.backgroundBlurriness !== void 0) object.backgroundBlurriness = data.backgroundBlurriness; - if (data.backgroundIntensity !== void 0) object.backgroundIntensity = data.backgroundIntensity; - if (data.backgroundRotation !== void 0) object.backgroundRotation.fromArray(data.backgroundRotation); - if (data.environmentIntensity !== void 0) object.environmentIntensity = data.environmentIntensity; - if (data.environmentRotation !== void 0) object.environmentRotation.fromArray(data.environmentRotation); - break; - case "PerspectiveCamera": - object = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far); - if (data.focus !== void 0) object.focus = data.focus; - if (data.zoom !== void 0) object.zoom = data.zoom; - if (data.filmGauge !== void 0) object.filmGauge = data.filmGauge; - if (data.filmOffset !== void 0) object.filmOffset = data.filmOffset; - if (data.view !== void 0) object.view = Object.assign({}, data.view); - break; - case "OrthographicCamera": - object = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far); - if (data.zoom !== void 0) object.zoom = data.zoom; - if (data.view !== void 0) object.view = Object.assign({}, data.view); - break; - case "AmbientLight": - object = new AmbientLight(data.color, data.intensity); - break; - case "DirectionalLight": - object = new DirectionalLight(data.color, data.intensity); - object.target = data.target || ""; - break; - case "PointLight": - object = new PointLight(data.color, data.intensity, data.distance, data.decay); - break; - case "RectAreaLight": - object = new RectAreaLight(data.color, data.intensity, data.width, data.height); - break; - case "SpotLight": - object = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay); - object.target = data.target || ""; - break; - case "HemisphereLight": - object = new HemisphereLight(data.color, data.groundColor, data.intensity); - break; - case "LightProbe": - object = new LightProbe().fromJSON(data); - break; - case "SkinnedMesh": - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - object = new SkinnedMesh(geometry, material); - if (data.bindMode !== void 0) object.bindMode = data.bindMode; - if (data.bindMatrix !== void 0) object.bindMatrix.fromArray(data.bindMatrix); - if (data.skeleton !== void 0) object.skeleton = data.skeleton; - break; - case "Mesh": - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - object = new Mesh(geometry, material); - break; - case "InstancedMesh": - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - const count = data.count; - const instanceMatrix = data.instanceMatrix; - const instanceColor = data.instanceColor; - object = new InstancedMesh(geometry, material, count); - object.instanceMatrix = new InstancedBufferAttribute(new Float32Array(instanceMatrix.array), 16); - if (instanceColor !== void 0) object.instanceColor = new InstancedBufferAttribute(new Float32Array(instanceColor.array), instanceColor.itemSize); - break; - case "BatchedMesh": - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - object = new BatchedMesh(data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material); - object.geometry = geometry; - object.perObjectFrustumCulled = data.perObjectFrustumCulled; - object.sortObjects = data.sortObjects; - object._drawRanges = data.drawRanges; - object._reservedRanges = data.reservedRanges; - object._visibility = data.visibility; - object._active = data.active; - object._bounds = data.bounds.map((bound) => { - const box = new Box3(); - box.min.fromArray(bound.boxMin); - box.max.fromArray(bound.boxMax); - const sphere = new Sphere(); - sphere.radius = bound.sphereRadius; - sphere.center.fromArray(bound.sphereCenter); - return { - boxInitialized: bound.boxInitialized, - box, - sphereInitialized: bound.sphereInitialized, - sphere - }; - }); - object._maxInstanceCount = data.maxInstanceCount; - object._maxVertexCount = data.maxVertexCount; - object._maxIndexCount = data.maxIndexCount; - object._geometryInitialized = data.geometryInitialized; - object._geometryCount = data.geometryCount; - object._matricesTexture = getTexture(data.matricesTexture.uuid); - if (data.colorsTexture !== void 0) object._colorsTexture = getTexture(data.colorsTexture.uuid); - break; - case "LOD": - object = new LOD(); - break; - case "Line": - object = new Line(getGeometry(data.geometry), getMaterial(data.material)); - break; - case "LineLoop": - object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material)); - break; - case "LineSegments": - object = new LineSegments(getGeometry(data.geometry), getMaterial(data.material)); - break; - case "PointCloud": - case "Points": - object = new Points(getGeometry(data.geometry), getMaterial(data.material)); - break; - case "Sprite": - object = new Sprite(getMaterial(data.material)); - break; - case "Group": - object = new Group(); - break; - case "Bone": - object = new Bone(); - break; - default: - object = new Object3D(); - } - object.uuid = data.uuid; - if (data.name !== void 0) object.name = data.name; - if (data.matrix !== void 0) { - object.matrix.fromArray(data.matrix); - if (data.matrixAutoUpdate !== void 0) object.matrixAutoUpdate = data.matrixAutoUpdate; - if (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale); - } else { - if (data.position !== void 0) object.position.fromArray(data.position); - if (data.rotation !== void 0) object.rotation.fromArray(data.rotation); - if (data.quaternion !== void 0) object.quaternion.fromArray(data.quaternion); - if (data.scale !== void 0) object.scale.fromArray(data.scale); - } - if (data.up !== void 0) object.up.fromArray(data.up); - if (data.castShadow !== void 0) object.castShadow = data.castShadow; - if (data.receiveShadow !== void 0) object.receiveShadow = data.receiveShadow; - if (data.shadow) { - if (data.shadow.intensity !== void 0) object.shadow.intensity = data.shadow.intensity; - if (data.shadow.bias !== void 0) object.shadow.bias = data.shadow.bias; - if (data.shadow.normalBias !== void 0) object.shadow.normalBias = data.shadow.normalBias; - if (data.shadow.radius !== void 0) object.shadow.radius = data.shadow.radius; - if (data.shadow.mapSize !== void 0) object.shadow.mapSize.fromArray(data.shadow.mapSize); - if (data.shadow.camera !== void 0) object.shadow.camera = this.parseObject(data.shadow.camera); - } - if (data.visible !== void 0) object.visible = data.visible; - if (data.frustumCulled !== void 0) object.frustumCulled = data.frustumCulled; - if (data.renderOrder !== void 0) object.renderOrder = data.renderOrder; - if (data.userData !== void 0) object.userData = data.userData; - if (data.layers !== void 0) object.layers.mask = data.layers; - if (data.children !== void 0) { - const children = data.children; - for (let i = 0; i < children.length; i++) { - object.add(this.parseObject(children[i], geometries, materials, textures, animations)); - } - } - if (data.animations !== void 0) { - const objectAnimations = data.animations; - for (let i = 0; i < objectAnimations.length; i++) { - const uuid = objectAnimations[i]; - object.animations.push(animations[uuid]); - } - } - if (data.type === "LOD") { - if (data.autoUpdate !== void 0) object.autoUpdate = data.autoUpdate; - const levels = data.levels; - for (let l = 0; l < levels.length; l++) { - const level = levels[l]; - const child = object.getObjectByProperty("uuid", level.object); - if (child !== void 0) { - object.addLevel(child, level.distance, level.hysteresis); - } - } - } - return object; - } - bindSkeletons(object, skeletons) { - if (Object.keys(skeletons).length === 0) return; - object.traverse(function(child) { - if (child.isSkinnedMesh === true && child.skeleton !== void 0) { - const skeleton = skeletons[child.skeleton]; - if (skeleton === void 0) { - console.warn("THREE.ObjectLoader: No skeleton found with UUID:", child.skeleton); - } else { - child.bind(skeleton, child.bindMatrix); - } - } - }); - } - bindLightTargets(object) { - object.traverse(function(child) { - if (child.isDirectionalLight || child.isSpotLight) { - const uuid = child.target; - const target = object.getObjectByProperty("uuid", uuid); - if (target !== void 0) { - child.target = target; - } else { - child.target = new Object3D(); - } - } - }); - } -}; -var TEXTURE_MAPPING = { - UVMapping, + ConstantAlphaFactor, + ConstantColorFactor, + CubeCamera, CubeReflectionMapping, CubeRefractionMapping, + CubeTexture, + CubeTextureLoader, + CubeUVReflectionMapping, + CubicBezierCurve, + CubicBezierCurve3, + CubicInterpolant, + CullFaceBack, + CullFaceFront, + CullFaceFrontBack, + CullFaceNone, + Curve, + CurvePath, + CustomBlending, + CustomToneMapping, + CylinderGeometry, + Cylindrical, + Data3DTexture, + DataArrayTexture, + DataTexture, + DataTextureLoader, + DataUtils, + DecrementStencilOp, + DecrementWrapStencilOp, + DefaultLoadingManager, + DepthFormat, + DepthStencilFormat, + DepthTexture, + DetachedBindMode, + DirectionalLight, + DirectionalLightHelper, + DiscreteInterpolant, + DisplayP3ColorSpace, + DodecahedronGeometry, + DoubleSide, + DstAlphaFactor, + DstColorFactor, + DynamicCopyUsage, + DynamicDrawUsage, + DynamicReadUsage, + EdgesGeometry, + EllipseCurve, + EqualCompare, + EqualDepth, + EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, - CubeUVReflectionMapping -}; -var TEXTURE_WRAPPING = { - RepeatWrapping, - ClampToEdgeWrapping, - MirroredRepeatWrapping -}; -var TEXTURE_FILTER = { - NearestFilter, - NearestMipmapNearestFilter, - NearestMipmapLinearFilter, + Euler, + EventDispatcher, + ExtrudeGeometry, + FileLoader, + Float16BufferAttribute, + Float32BufferAttribute, + FloatType, + Fog, + FogExp2, + FramebufferTexture, + FrontSide, + Frustum, + GLBufferAttribute, + GLSL1, + GLSL3, + GreaterCompare, + GreaterDepth, + GreaterEqualCompare, + GreaterEqualDepth, + GreaterEqualStencilFunc, + GreaterStencilFunc, + GridHelper, + Group, + HalfFloatType, + HemisphereLight, + HemisphereLightHelper, + IcosahedronGeometry, + ImageBitmapLoader, + ImageLoader, + ImageUtils, + IncrementStencilOp, + IncrementWrapStencilOp, + InstancedBufferAttribute, + InstancedBufferGeometry, + InstancedInterleavedBuffer, + InstancedMesh, + Int16BufferAttribute, + Int32BufferAttribute, + Int8BufferAttribute, + IntType, + InterleavedBuffer, + InterleavedBufferAttribute, + Interpolant, + InterpolateDiscrete, + InterpolateLinear, + InterpolateSmooth, + InvertStencilOp, + KeepStencilOp, + KeyframeTrack, + LOD, + LatheGeometry, + Layers, + LessCompare, + LessDepth, + LessEqualCompare, + LessEqualDepth, + LessEqualStencilFunc, + LessStencilFunc, + Light, + LightProbe, + Line, + Line3, + LineBasicMaterial, + LineCurve, + LineCurve3, + LineDashedMaterial, + LineLoop, + LineSegments, + LinearDisplayP3ColorSpace, LinearFilter, + LinearInterpolant, + LinearMipMapLinearFilter, + LinearMipMapNearestFilter, + LinearMipmapLinearFilter, LinearMipmapNearestFilter, - LinearMipmapLinearFilter -}; -var ImageBitmapLoader = class extends Loader { - constructor(manager) { - super(manager); - this.isImageBitmapLoader = true; - if (typeof createImageBitmap === "undefined") { - console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."); - } - if (typeof fetch === "undefined") { - console.warn("THREE.ImageBitmapLoader: fetch() not supported."); - } - this.options = { premultiplyAlpha: "none" }; - } - setOptions(options) { - this.options = options; - return this; - } - load(url, onLoad, onProgress, onError) { - if (url === void 0) url = ""; - if (this.path !== void 0) url = this.path + url; - url = this.manager.resolveURL(url); - const scope = this; - const cached = Cache.get(url); - if (cached !== void 0) { - scope.manager.itemStart(url); - if (cached.then) { - cached.then((imageBitmap) => { - if (onLoad) onLoad(imageBitmap); - scope.manager.itemEnd(url); - }).catch((e) => { - if (onError) onError(e); - }); - return; - } - setTimeout(function() { - if (onLoad) onLoad(cached); - scope.manager.itemEnd(url); - }, 0); - return cached; - } - const fetchOptions = {}; - fetchOptions.credentials = this.crossOrigin === "anonymous" ? "same-origin" : "include"; - fetchOptions.headers = this.requestHeader; - const promise = fetch(url, fetchOptions).then(function(res) { - return res.blob(); - }).then(function(blob) { - return createImageBitmap(blob, Object.assign(scope.options, { colorSpaceConversion: "none" })); - }).then(function(imageBitmap) { - Cache.add(url, imageBitmap); - if (onLoad) onLoad(imageBitmap); - scope.manager.itemEnd(url); - return imageBitmap; - }).catch(function(e) { - if (onError) onError(e); - Cache.remove(url); - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }); - Cache.add(url, promise); - scope.manager.itemStart(url); - } -}; -var _context; -var AudioContext = class { - static getContext() { - if (_context === void 0) { - _context = new (window.AudioContext || window.webkitAudioContext)(); - } - return _context; - } - static setContext(value) { - _context = value; - } -}; -var AudioLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setResponseType("arraybuffer"); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(buffer) { - try { - const bufferCopy = buffer.slice(0); - const context = AudioContext.getContext(); - context.decodeAudioData(bufferCopy, function(audioBuffer) { - onLoad(audioBuffer); - }).catch(handleError); - } catch (e) { - handleError(e); - } - }, onProgress, onError); - function handleError(e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - scope.manager.itemError(url); - } - } -}; -var _eyeRight = new Matrix4(); -var _eyeLeft = new Matrix4(); -var _projectionMatrix = new Matrix4(); -var StereoCamera = class { - constructor() { - this.type = "StereoCamera"; - this.aspect = 1; - this.eyeSep = 0.064; - this.cameraL = new PerspectiveCamera(); - this.cameraL.layers.enable(1); - this.cameraL.matrixAutoUpdate = false; - this.cameraR = new PerspectiveCamera(); - this.cameraR.layers.enable(2); - this.cameraR.matrixAutoUpdate = false; - this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - }; - } - update(camera) { - const cache = this._cache; - const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; - if (needsUpdate) { - cache.focus = camera.focus; - cache.fov = camera.fov; - cache.aspect = camera.aspect * this.aspect; - cache.near = camera.near; - cache.far = camera.far; - cache.zoom = camera.zoom; - cache.eyeSep = this.eyeSep; - _projectionMatrix.copy(camera.projectionMatrix); - const eyeSepHalf = cache.eyeSep / 2; - const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; - const ymax = cache.near * Math.tan(DEG2RAD * cache.fov * 0.5) / cache.zoom; - let xmin, xmax; - _eyeLeft.elements[12] = -eyeSepHalf; - _eyeRight.elements[12] = eyeSepHalf; - xmin = -ymax * cache.aspect + eyeSepOnProjection; - xmax = ymax * cache.aspect + eyeSepOnProjection; - _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - this.cameraL.projectionMatrix.copy(_projectionMatrix); - xmin = -ymax * cache.aspect - eyeSepOnProjection; - xmax = ymax * cache.aspect - eyeSepOnProjection; - _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - this.cameraR.projectionMatrix.copy(_projectionMatrix); - } - this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft); - this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight); - } -}; -var Clock = class { - constructor(autoStart = true) { - this.autoStart = autoStart; - this.startTime = 0; - this.oldTime = 0; - this.elapsedTime = 0; - this.running = false; - } - start() { - this.startTime = now(); - this.oldTime = this.startTime; - this.elapsedTime = 0; - this.running = true; - } - stop() { - this.getElapsedTime(); - this.running = false; - this.autoStart = false; - } - getElapsedTime() { - this.getDelta(); - return this.elapsedTime; - } - getDelta() { - let diff = 0; - if (this.autoStart && !this.running) { - this.start(); - return 0; - } - if (this.running) { - const newTime = now(); - diff = (newTime - this.oldTime) / 1e3; - this.oldTime = newTime; - this.elapsedTime += diff; - } - return diff; - } -}; -function now() { - return (typeof performance === "undefined" ? Date : performance).now(); -} -var _position$1 = new Vector3(); -var _quaternion$1 = new Quaternion(); -var _scale$1 = new Vector3(); -var _orientation$1 = new Vector3(); -var AudioListener = class extends Object3D { - constructor() { - super(); - this.type = "AudioListener"; - this.context = AudioContext.getContext(); - this.gain = this.context.createGain(); - this.gain.connect(this.context.destination); - this.filter = null; - this.timeDelta = 0; - this._clock = new Clock(); - } - getInput() { - return this.gain; - } - removeFilter() { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - this.gain.connect(this.context.destination); - this.filter = null; - } - return this; - } - getFilter() { - return this.filter; - } - setFilter(value) { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - } else { - this.gain.disconnect(this.context.destination); - } - this.filter = value; - this.gain.connect(this.filter); - this.filter.connect(this.context.destination); - return this; - } - getMasterVolume() { - return this.gain.gain.value; - } - setMasterVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - return this; - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - const listener = this.context.listener; - const up = this.up; - this.timeDelta = this._clock.getDelta(); - this.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); - _orientation$1.set(0, 0, -1).applyQuaternion(_quaternion$1); - if (listener.positionX) { - const endTime = this.context.currentTime + this.timeDelta; - listener.positionX.linearRampToValueAtTime(_position$1.x, endTime); - listener.positionY.linearRampToValueAtTime(_position$1.y, endTime); - listener.positionZ.linearRampToValueAtTime(_position$1.z, endTime); - listener.forwardX.linearRampToValueAtTime(_orientation$1.x, endTime); - listener.forwardY.linearRampToValueAtTime(_orientation$1.y, endTime); - listener.forwardZ.linearRampToValueAtTime(_orientation$1.z, endTime); - listener.upX.linearRampToValueAtTime(up.x, endTime); - listener.upY.linearRampToValueAtTime(up.y, endTime); - listener.upZ.linearRampToValueAtTime(up.z, endTime); - } else { - listener.setPosition(_position$1.x, _position$1.y, _position$1.z); - listener.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z); - } - } -}; -var Audio = class extends Object3D { - constructor(listener) { - super(); - this.type = "Audio"; - this.listener = listener; - this.context = listener.context; - this.gain = this.context.createGain(); - this.gain.connect(listener.getInput()); - this.autoplay = false; - this.buffer = null; - this.detune = 0; - this.loop = false; - this.loopStart = 0; - this.loopEnd = 0; - this.offset = 0; - this.duration = void 0; - this.playbackRate = 1; - this.isPlaying = false; - this.hasPlaybackControl = true; - this.source = null; - this.sourceType = "empty"; - this._startedAt = 0; - this._progress = 0; - this._connected = false; - this.filters = []; - } - getOutput() { - return this.gain; - } - setNodeSource(audioNode) { - this.hasPlaybackControl = false; - this.sourceType = "audioNode"; - this.source = audioNode; - this.connect(); - return this; - } - setMediaElementSource(mediaElement) { - this.hasPlaybackControl = false; - this.sourceType = "mediaNode"; - this.source = this.context.createMediaElementSource(mediaElement); - this.connect(); - return this; - } - setMediaStreamSource(mediaStream) { - this.hasPlaybackControl = false; - this.sourceType = "mediaStreamNode"; - this.source = this.context.createMediaStreamSource(mediaStream); - this.connect(); - return this; - } - setBuffer(audioBuffer) { - this.buffer = audioBuffer; - this.sourceType = "buffer"; - if (this.autoplay) this.play(); - return this; - } - play(delay = 0) { - if (this.isPlaying === true) { - console.warn("THREE.Audio: Audio is already playing."); - return; - } - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return; - } - this._startedAt = this.context.currentTime + delay; - const source = this.context.createBufferSource(); - source.buffer = this.buffer; - source.loop = this.loop; - source.loopStart = this.loopStart; - source.loopEnd = this.loopEnd; - source.onended = this.onEnded.bind(this); - source.start(this._startedAt, this._progress + this.offset, this.duration); - this.isPlaying = true; - this.source = source; - this.setDetune(this.detune); - this.setPlaybackRate(this.playbackRate); - return this.connect(); - } - pause() { - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return; - } - if (this.isPlaying === true) { - this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate; - if (this.loop === true) { - this._progress = this._progress % (this.duration || this.buffer.duration); - } - this.source.stop(); - this.source.onended = null; - this.isPlaying = false; - } - return this; - } - stop() { - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return; - } - this._progress = 0; - if (this.source !== null) { - this.source.stop(); - this.source.onended = null; - } - this.isPlaying = false; - return this; - } - connect() { - if (this.filters.length > 0) { - this.source.connect(this.filters[0]); - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].connect(this.filters[i]); - } - this.filters[this.filters.length - 1].connect(this.getOutput()); - } else { - this.source.connect(this.getOutput()); - } - this._connected = true; - return this; - } - disconnect() { - if (this._connected === false) { - return; - } - if (this.filters.length > 0) { - this.source.disconnect(this.filters[0]); - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].disconnect(this.filters[i]); - } - this.filters[this.filters.length - 1].disconnect(this.getOutput()); - } else { - this.source.disconnect(this.getOutput()); - } - this._connected = false; - return this; - } - getFilters() { - return this.filters; - } - setFilters(value) { - if (!value) value = []; - if (this._connected === true) { - this.disconnect(); - this.filters = value.slice(); - this.connect(); - } else { - this.filters = value.slice(); - } - return this; - } - setDetune(value) { - this.detune = value; - if (this.isPlaying === true && this.source.detune !== void 0) { - this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01); - } - return this; - } - getDetune() { - return this.detune; - } - getFilter() { - return this.getFilters()[0]; - } - setFilter(filter) { - return this.setFilters(filter ? [filter] : []); - } - setPlaybackRate(value) { - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return; - } - this.playbackRate = value; - if (this.isPlaying === true) { - this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01); - } - return this; - } - getPlaybackRate() { - return this.playbackRate; - } - onEnded() { - this.isPlaying = false; - } - getLoop() { - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return false; - } - return this.loop; - } - setLoop(value) { - if (this.hasPlaybackControl === false) { - console.warn("THREE.Audio: this Audio has no playback control."); - return; - } - this.loop = value; - if (this.isPlaying === true) { - this.source.loop = this.loop; - } - return this; - } - setLoopStart(value) { - this.loopStart = value; - return this; - } - setLoopEnd(value) { - this.loopEnd = value; - return this; - } - getVolume() { - return this.gain.gain.value; - } - setVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - return this; - } -}; -var _position = new Vector3(); -var _quaternion = new Quaternion(); -var _scale = new Vector3(); -var _orientation = new Vector3(); -var PositionalAudio = class extends Audio { - constructor(listener) { - super(listener); - this.panner = this.context.createPanner(); - this.panner.panningModel = "HRTF"; - this.panner.connect(this.gain); - } - connect() { - super.connect(); - this.panner.connect(this.gain); - } - disconnect() { - super.disconnect(); - this.panner.disconnect(this.gain); - } - getOutput() { - return this.panner; - } - getRefDistance() { - return this.panner.refDistance; - } - setRefDistance(value) { - this.panner.refDistance = value; - return this; - } - getRolloffFactor() { - return this.panner.rolloffFactor; - } - setRolloffFactor(value) { - this.panner.rolloffFactor = value; - return this; - } - getDistanceModel() { - return this.panner.distanceModel; - } - setDistanceModel(value) { - this.panner.distanceModel = value; - return this; - } - getMaxDistance() { - return this.panner.maxDistance; - } - setMaxDistance(value) { - this.panner.maxDistance = value; - return this; - } - setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) { - this.panner.coneInnerAngle = coneInnerAngle; - this.panner.coneOuterAngle = coneOuterAngle; - this.panner.coneOuterGain = coneOuterGain; - return this; - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.hasPlaybackControl === true && this.isPlaying === false) return; - this.matrixWorld.decompose(_position, _quaternion, _scale); - _orientation.set(0, 0, 1).applyQuaternion(_quaternion); - const panner = this.panner; - if (panner.positionX) { - const endTime = this.context.currentTime + this.listener.timeDelta; - panner.positionX.linearRampToValueAtTime(_position.x, endTime); - panner.positionY.linearRampToValueAtTime(_position.y, endTime); - panner.positionZ.linearRampToValueAtTime(_position.z, endTime); - panner.orientationX.linearRampToValueAtTime(_orientation.x, endTime); - panner.orientationY.linearRampToValueAtTime(_orientation.y, endTime); - panner.orientationZ.linearRampToValueAtTime(_orientation.z, endTime); - } else { - panner.setPosition(_position.x, _position.y, _position.z); - panner.setOrientation(_orientation.x, _orientation.y, _orientation.z); - } - } -}; -var AudioAnalyser = class { - constructor(audio, fftSize = 2048) { - this.analyser = audio.context.createAnalyser(); - this.analyser.fftSize = fftSize; - this.data = new Uint8Array(this.analyser.frequencyBinCount); - audio.getOutput().connect(this.analyser); - } - getFrequencyData() { - this.analyser.getByteFrequencyData(this.data); - return this.data; - } - getAverageFrequency() { - let value = 0; - const data = this.getFrequencyData(); - for (let i = 0; i < data.length; i++) { - value += data[i]; - } - return value / data.length; - } -}; -var PropertyMixer = class { - constructor(binding, typeName, valueSize) { - this.binding = binding; - this.valueSize = valueSize; - let mixFunction, mixFunctionAdditive, setIdentity; - switch (typeName) { - case "quaternion": - mixFunction = this._slerp; - mixFunctionAdditive = this._slerpAdditive; - setIdentity = this._setAdditiveIdentityQuaternion; - this.buffer = new Float64Array(valueSize * 6); - this._workIndex = 5; - break; - case "string": - case "bool": - mixFunction = this._select; - mixFunctionAdditive = this._select; - setIdentity = this._setAdditiveIdentityOther; - this.buffer = new Array(valueSize * 5); - break; - default: - mixFunction = this._lerp; - mixFunctionAdditive = this._lerpAdditive; - setIdentity = this._setAdditiveIdentityNumeric; - this.buffer = new Float64Array(valueSize * 5); - } - this._mixBufferRegion = mixFunction; - this._mixBufferRegionAdditive = mixFunctionAdditive; - this._setIdentity = setIdentity; - this._origIndex = 3; - this._addIndex = 4; - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - this.useCount = 0; - this.referenceCount = 0; - } - // accumulate data in the 'incoming' region into 'accu' - accumulate(accuIndex, weight) { - const buffer = this.buffer, stride = this.valueSize, offset = accuIndex * stride + stride; - let currentWeight = this.cumulativeWeight; - if (currentWeight === 0) { - for (let i = 0; i !== stride; ++i) { - buffer[offset + i] = buffer[i]; - } - currentWeight = weight; - } else { - currentWeight += weight; - const mix = weight / currentWeight; - this._mixBufferRegion(buffer, offset, 0, mix, stride); - } - this.cumulativeWeight = currentWeight; - } - // accumulate data in the 'incoming' region into 'add' - accumulateAdditive(weight) { - const buffer = this.buffer, stride = this.valueSize, offset = stride * this._addIndex; - if (this.cumulativeWeightAdditive === 0) { - this._setIdentity(); - } - this._mixBufferRegionAdditive(buffer, offset, 0, weight, stride); - this.cumulativeWeightAdditive += weight; - } - // apply the state of 'accu' to the binding when accus differ - apply(accuIndex) { - const stride = this.valueSize, buffer = this.buffer, offset = accuIndex * stride + stride, weight = this.cumulativeWeight, weightAdditive = this.cumulativeWeightAdditive, binding = this.binding; - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - if (weight < 1) { - const originalValueOffset = stride * this._origIndex; - this._mixBufferRegion( - buffer, - offset, - originalValueOffset, - 1 - weight, - stride - ); - } - if (weightAdditive > 0) { - this._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride); - } - for (let i = stride, e = stride + stride; i !== e; ++i) { - if (buffer[i] !== buffer[i + stride]) { - binding.setValue(buffer, offset); - break; - } - } - } - // remember the state of the bound property and copy it to both accus - saveOriginalState() { - const binding = this.binding; - const buffer = this.buffer, stride = this.valueSize, originalValueOffset = stride * this._origIndex; - binding.getValue(buffer, originalValueOffset); - for (let i = stride, e = originalValueOffset; i !== e; ++i) { - buffer[i] = buffer[originalValueOffset + i % stride]; - } - this._setIdentity(); - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - } - // apply the state previously taken via 'saveOriginalState' to the binding - restoreOriginalState() { - const originalValueOffset = this.valueSize * 3; - this.binding.setValue(this.buffer, originalValueOffset); - } - _setAdditiveIdentityNumeric() { - const startIndex = this._addIndex * this.valueSize; - const endIndex = startIndex + this.valueSize; - for (let i = startIndex; i < endIndex; i++) { - this.buffer[i] = 0; - } - } - _setAdditiveIdentityQuaternion() { - this._setAdditiveIdentityNumeric(); - this.buffer[this._addIndex * this.valueSize + 3] = 1; - } - _setAdditiveIdentityOther() { - const startIndex = this._origIndex * this.valueSize; - const targetIndex = this._addIndex * this.valueSize; - for (let i = 0; i < this.valueSize; i++) { - this.buffer[targetIndex + i] = this.buffer[startIndex + i]; - } - } - // mix functions - _select(buffer, dstOffset, srcOffset, t, stride) { - if (t >= 0.5) { - for (let i = 0; i !== stride; ++i) { - buffer[dstOffset + i] = buffer[srcOffset + i]; - } - } - } - _slerp(buffer, dstOffset, srcOffset, t) { - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t); - } - _slerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - const workOffset = this._workIndex * stride; - Quaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t); - } - _lerp(buffer, dstOffset, srcOffset, t, stride) { - const s = 1 - t; - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - buffer[j] = buffer[j] * s + buffer[srcOffset + i] * t; - } - } - _lerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - buffer[j] = buffer[j] + buffer[srcOffset + i] * t; - } - } -}; -var _RESERVED_CHARS_RE = "\\[\\]\\.:\\/"; -var _reservedRe = new RegExp("[" + _RESERVED_CHARS_RE + "]", "g"); -var _wordChar = "[^" + _RESERVED_CHARS_RE + "]"; -var _wordCharOrDot = "[^" + _RESERVED_CHARS_RE.replace("\\.", "") + "]"; -var _directoryRe = /((?:WC+[\/:])*)/.source.replace("WC", _wordChar); -var _nodeRe = /(WCOD+)?/.source.replace("WCOD", _wordCharOrDot); -var _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", _wordChar); -var _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", _wordChar); -var _trackRe = new RegExp( - "^" + _directoryRe + _nodeRe + _objectRe + _propertyRe + "$" -); -var _supportedObjectNames = ["material", "materials", "bones", "map"]; -var Composite = class { - constructor(targetGroup, path, optionalParsedPath) { - const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path); - this._targetGroup = targetGroup; - this._bindings = targetGroup.subscribe_(path, parsedPath); - } - getValue(array, offset) { - this.bind(); - const firstValidIndex = this._targetGroup.nCachedObjects_, binding = this._bindings[firstValidIndex]; - if (binding !== void 0) binding.getValue(array, offset); - } - setValue(array, offset) { - const bindings = this._bindings; - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].setValue(array, offset); - } - } - bind() { - const bindings = this._bindings; - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].bind(); - } - } - unbind() { - const bindings = this._bindings; - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].unbind(); - } - } -}; -var PropertyBinding = class _PropertyBinding { - constructor(rootNode, path, parsedPath) { - this.path = path; - this.parsedPath = parsedPath || _PropertyBinding.parseTrackName(path); - this.node = _PropertyBinding.findNode(rootNode, this.parsedPath.nodeName); - this.rootNode = rootNode; - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } - static create(root, path, parsedPath) { - if (!(root && root.isAnimationObjectGroup)) { - return new _PropertyBinding(root, path, parsedPath); - } else { - return new _PropertyBinding.Composite(root, path, parsedPath); - } - } - /** - * Replaces spaces with underscores and removes unsupported characters from - * node names, to ensure compatibility with parseTrackName(). - * - * @param {string} name Node name to be sanitized. - * @return {string} - */ - static sanitizeNodeName(name) { - return name.replace(/\s/g, "_").replace(_reservedRe, ""); - } - static parseTrackName(trackName) { - const matches = _trackRe.exec(trackName); - if (matches === null) { - throw new Error("PropertyBinding: Cannot parse trackName: " + trackName); - } - const results = { - // directoryName: matches[ 1 ], // (tschw) currently unused - nodeName: matches[2], - objectName: matches[3], - objectIndex: matches[4], - propertyName: matches[5], - // required - propertyIndex: matches[6] - }; - const lastDot = results.nodeName && results.nodeName.lastIndexOf("."); - if (lastDot !== void 0 && lastDot !== -1) { - const objectName = results.nodeName.substring(lastDot + 1); - if (_supportedObjectNames.indexOf(objectName) !== -1) { - results.nodeName = results.nodeName.substring(0, lastDot); - results.objectName = objectName; - } - } - if (results.propertyName === null || results.propertyName.length === 0) { - throw new Error("PropertyBinding: can not parse propertyName from trackName: " + trackName); - } - return results; - } - static findNode(root, nodeName) { - if (nodeName === void 0 || nodeName === "" || nodeName === "." || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) { - return root; - } - if (root.skeleton) { - const bone = root.skeleton.getBoneByName(nodeName); - if (bone !== void 0) { - return bone; - } - } - if (root.children) { - const searchNodeSubtree = function(children) { - for (let i = 0; i < children.length; i++) { - const childNode = children[i]; - if (childNode.name === nodeName || childNode.uuid === nodeName) { - return childNode; - } - const result = searchNodeSubtree(childNode.children); - if (result) return result; - } - return null; - }; - const subTreeNode = searchNodeSubtree(root.children); - if (subTreeNode) { - return subTreeNode; - } - } - return null; - } - // these are used to "bind" a nonexistent property - _getValue_unavailable() { - } - _setValue_unavailable() { - } - // Getters - _getValue_direct(buffer, offset) { - buffer[offset] = this.targetObject[this.propertyName]; - } - _getValue_array(buffer, offset) { - const source = this.resolvedProperty; - for (let i = 0, n = source.length; i !== n; ++i) { - buffer[offset++] = source[i]; - } - } - _getValue_arrayElement(buffer, offset) { - buffer[offset] = this.resolvedProperty[this.propertyIndex]; - } - _getValue_toArray(buffer, offset) { - this.resolvedProperty.toArray(buffer, offset); - } - // Direct - _setValue_direct(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - } - _setValue_direct_setNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } - // EntireArray - _setValue_array(buffer, offset) { - const dest = this.resolvedProperty; - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - } - _setValue_array_setNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - this.targetObject.needsUpdate = true; - } - _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - this.targetObject.matrixWorldNeedsUpdate = true; - } - // ArrayElement - _setValue_arrayElement(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - } - _setValue_arrayElement_setNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } - // HasToFromArray - _setValue_fromArray(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - } - _setValue_fromArray_setNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.needsUpdate = true; - } - _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.matrixWorldNeedsUpdate = true; - } - _getValue_unbound(targetArray, offset) { - this.bind(); - this.getValue(targetArray, offset); - } - _setValue_unbound(sourceArray, offset) { - this.bind(); - this.setValue(sourceArray, offset); - } - // create getter / setter pair for a property in the scene graph - bind() { - let targetObject = this.node; - const parsedPath = this.parsedPath; - const objectName = parsedPath.objectName; - const propertyName = parsedPath.propertyName; - let propertyIndex = parsedPath.propertyIndex; - if (!targetObject) { - targetObject = _PropertyBinding.findNode(this.rootNode, parsedPath.nodeName); - this.node = targetObject; - } - this.getValue = this._getValue_unavailable; - this.setValue = this._setValue_unavailable; - if (!targetObject) { - console.warn("THREE.PropertyBinding: No target node found for track: " + this.path + "."); - return; - } - if (objectName) { - let objectIndex = parsedPath.objectIndex; - switch (objectName) { - case "materials": - if (!targetObject.material) { - console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); - return; - } - if (!targetObject.material.materials) { - console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); - return; - } - targetObject = targetObject.material.materials; - break; - case "bones": - if (!targetObject.skeleton) { - console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); - return; - } - targetObject = targetObject.skeleton.bones; - for (let i = 0; i < targetObject.length; i++) { - if (targetObject[i].name === objectIndex) { - objectIndex = i; - break; - } - } - break; - case "map": - if ("map" in targetObject) { - targetObject = targetObject.map; - break; - } - if (!targetObject.material) { - console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); - return; - } - if (!targetObject.material.map) { - console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.", this); - return; - } - targetObject = targetObject.material.map; - break; - default: - if (targetObject[objectName] === void 0) { - console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); - return; - } - targetObject = targetObject[objectName]; - } - if (objectIndex !== void 0) { - if (targetObject[objectIndex] === void 0) { - console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, targetObject); - return; - } - targetObject = targetObject[objectIndex]; - } - } - const nodeProperty = targetObject[propertyName]; - if (nodeProperty === void 0) { - const nodeName = parsedPath.nodeName; - console.error("THREE.PropertyBinding: Trying to update property for track: " + nodeName + "." + propertyName + " but it wasn't found.", targetObject); - return; - } - let versioning = this.Versioning.None; - this.targetObject = targetObject; - if (targetObject.needsUpdate !== void 0) { - versioning = this.Versioning.NeedsUpdate; - } else if (targetObject.matrixWorldNeedsUpdate !== void 0) { - versioning = this.Versioning.MatrixWorldNeedsUpdate; - } - let bindingType = this.BindingType.Direct; - if (propertyIndex !== void 0) { - if (propertyName === "morphTargetInfluences") { - if (!targetObject.geometry) { - console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); - return; - } - if (!targetObject.geometry.morphAttributes) { - console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); - return; - } - if (targetObject.morphTargetDictionary[propertyIndex] !== void 0) { - propertyIndex = targetObject.morphTargetDictionary[propertyIndex]; - } - } - bindingType = this.BindingType.ArrayElement; - this.resolvedProperty = nodeProperty; - this.propertyIndex = propertyIndex; - } else if (nodeProperty.fromArray !== void 0 && nodeProperty.toArray !== void 0) { - bindingType = this.BindingType.HasFromToArray; - this.resolvedProperty = nodeProperty; - } else if (Array.isArray(nodeProperty)) { - bindingType = this.BindingType.EntireArray; - this.resolvedProperty = nodeProperty; - } else { - this.propertyName = propertyName; - } - this.getValue = this.GetterByBindingType[bindingType]; - this.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning]; - } - unbind() { - this.node = null; - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } -}; -PropertyBinding.Composite = Composite; -PropertyBinding.prototype.BindingType = { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 -}; -PropertyBinding.prototype.Versioning = { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 -}; -PropertyBinding.prototype.GetterByBindingType = [ - PropertyBinding.prototype._getValue_direct, - PropertyBinding.prototype._getValue_array, - PropertyBinding.prototype._getValue_arrayElement, - PropertyBinding.prototype._getValue_toArray -]; -PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ - [ - // Direct - PropertyBinding.prototype._setValue_direct, - PropertyBinding.prototype._setValue_direct_setNeedsUpdate, - PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate - ], - [ - // EntireArray - PropertyBinding.prototype._setValue_array, - PropertyBinding.prototype._setValue_array_setNeedsUpdate, - PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate - ], - [ - // ArrayElement - PropertyBinding.prototype._setValue_arrayElement, - PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, - PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate - ], - [ - // HasToFromArray - PropertyBinding.prototype._setValue_fromArray, - PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, - PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate - ] -]; -var AnimationObjectGroup = class { - constructor() { - this.isAnimationObjectGroup = true; - this.uuid = generateUUID(); - this._objects = Array.prototype.slice.call(arguments); - this.nCachedObjects_ = 0; - const indices = {}; - this._indicesByUUID = indices; - for (let i = 0, n = arguments.length; i !== n; ++i) { - indices[arguments[i].uuid] = i; - } - this._paths = []; - this._parsedPaths = []; - this._bindings = []; - this._bindingsIndicesByPath = {}; - const scope = this; - this.stats = { - objects: { - get total() { - return scope._objects.length; - }, - get inUse() { - return this.total - scope.nCachedObjects_; - } - }, - get bindingsPerObject() { - return scope._bindings.length; - } - }; - } - add() { - const objects = this._objects, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length; - let knownObject = void 0, nObjects = objects.length, nCachedObjects = this.nCachedObjects_; - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], uuid = object.uuid; - let index = indicesByUUID[uuid]; - if (index === void 0) { - index = nObjects++; - indicesByUUID[uuid] = index; - objects.push(object); - for (let j = 0, m = nBindings; j !== m; ++j) { - bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j])); - } - } else if (index < nCachedObjects) { - knownObject = objects[index]; - const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex]; - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; - indicesByUUID[uuid] = firstActiveIndex; - objects[firstActiveIndex] = object; - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex]; - let binding = bindingsForPath[index]; - bindingsForPath[index] = lastCached; - if (binding === void 0) { - binding = new PropertyBinding(object, paths[j], parsedPaths[j]); - } - bindingsForPath[firstActiveIndex] = binding; - } - } else if (objects[index] !== knownObject) { - console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes."); - } - } - this.nCachedObjects_ = nCachedObjects; - } - remove() { - const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; - let nCachedObjects = this.nCachedObjects_; - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; - if (index !== void 0 && index >= nCachedObjects) { - const lastCachedIndex = nCachedObjects++, firstActiveObject = objects[lastCachedIndex]; - indicesByUUID[firstActiveObject.uuid] = index; - objects[index] = firstActiveObject; - indicesByUUID[uuid] = lastCachedIndex; - objects[lastCachedIndex] = object; - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], firstActive = bindingsForPath[lastCachedIndex], binding = bindingsForPath[index]; - bindingsForPath[index] = firstActive; - bindingsForPath[lastCachedIndex] = binding; - } - } - } - this.nCachedObjects_ = nCachedObjects; - } - // remove & forget - uncache() { - const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; - let nCachedObjects = this.nCachedObjects_, nObjects = objects.length; - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], uuid = object.uuid, index = indicesByUUID[uuid]; - if (index !== void 0) { - delete indicesByUUID[uuid]; - if (index < nCachedObjects) { - const firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex], lastIndex = --nObjects, lastObject = objects[lastIndex]; - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; - indicesByUUID[lastObject.uuid] = firstActiveIndex; - objects[firstActiveIndex] = lastObject; - objects.pop(); - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex], last = bindingsForPath[lastIndex]; - bindingsForPath[index] = lastCached; - bindingsForPath[firstActiveIndex] = last; - bindingsForPath.pop(); - } - } else { - const lastIndex = --nObjects, lastObject = objects[lastIndex]; - if (lastIndex > 0) { - indicesByUUID[lastObject.uuid] = index; - } - objects[index] = lastObject; - objects.pop(); - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j]; - bindingsForPath[index] = bindingsForPath[lastIndex]; - bindingsForPath.pop(); - } - } - } - } - this.nCachedObjects_ = nCachedObjects; - } - // Internal interface used by befriended PropertyBinding.Composite: - subscribe_(path, parsedPath) { - const indicesByPath = this._bindingsIndicesByPath; - let index = indicesByPath[path]; - const bindings = this._bindings; - if (index !== void 0) return bindings[index]; - const paths = this._paths, parsedPaths = this._parsedPaths, objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, bindingsForPath = new Array(nObjects); - index = bindings.length; - indicesByPath[path] = index; - paths.push(path); - parsedPaths.push(parsedPath); - bindings.push(bindingsForPath); - for (let i = nCachedObjects, n = objects.length; i !== n; ++i) { - const object = objects[i]; - bindingsForPath[i] = new PropertyBinding(object, path, parsedPath); - } - return bindingsForPath; - } - unsubscribe_(path) { - const indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[path]; - if (index !== void 0) { - const paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, lastBindingsIndex = bindings.length - 1, lastBindings = bindings[lastBindingsIndex], lastBindingsPath = path[lastBindingsIndex]; - indicesByPath[lastBindingsPath] = index; - bindings[index] = lastBindings; - bindings.pop(); - parsedPaths[index] = parsedPaths[lastBindingsIndex]; - parsedPaths.pop(); - paths[index] = paths[lastBindingsIndex]; - paths.pop(); - } - } -}; -var AnimationAction = class { - constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) { - this._mixer = mixer; - this._clip = clip; - this._localRoot = localRoot; - this.blendMode = blendMode; - const tracks = clip.tracks, nTracks = tracks.length, interpolants = new Array(nTracks); - const interpolantSettings = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - for (let i = 0; i !== nTracks; ++i) { - const interpolant = tracks[i].createInterpolant(null); - interpolants[i] = interpolant; - interpolant.settings = interpolantSettings; - } - this._interpolantSettings = interpolantSettings; - this._interpolants = interpolants; - this._propertyBindings = new Array(nTracks); - this._cacheIndex = null; - this._byClipCacheIndex = null; - this._timeScaleInterpolant = null; - this._weightInterpolant = null; - this.loop = LoopRepeat; - this._loopCount = -1; - this._startTime = null; - this.time = 0; - this.timeScale = 1; - this._effectiveTimeScale = 1; - this.weight = 1; - this._effectiveWeight = 1; - this.repetitions = Infinity; - this.paused = false; - this.enabled = true; - this.clampWhenFinished = false; - this.zeroSlopeAtStart = true; - this.zeroSlopeAtEnd = true; - } - // State & Scheduling - play() { - this._mixer._activateAction(this); - return this; - } - stop() { - this._mixer._deactivateAction(this); - return this.reset(); - } - reset() { - this.paused = false; - this.enabled = true; - this.time = 0; - this._loopCount = -1; - this._startTime = null; - return this.stopFading().stopWarping(); - } - isRunning() { - return this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this); - } - // return true when play has been called - isScheduled() { - return this._mixer._isActiveAction(this); - } - startAt(time) { - this._startTime = time; - return this; - } - setLoop(mode, repetitions) { - this.loop = mode; - this.repetitions = repetitions; - return this; - } - // Weight - // set the weight stopping any scheduled fading - // although .enabled = false yields an effective weight of zero, this - // method does *not* change .enabled, because it would be confusing - setEffectiveWeight(weight) { - this.weight = weight; - this._effectiveWeight = this.enabled ? weight : 0; - return this.stopFading(); - } - // return the weight considering fading and .enabled - getEffectiveWeight() { - return this._effectiveWeight; - } - fadeIn(duration) { - return this._scheduleFading(duration, 0, 1); - } - fadeOut(duration) { - return this._scheduleFading(duration, 1, 0); - } - crossFadeFrom(fadeOutAction, duration, warp) { - fadeOutAction.fadeOut(duration); - this.fadeIn(duration); - if (warp) { - const fadeInDuration = this._clip.duration, fadeOutDuration = fadeOutAction._clip.duration, startEndRatio = fadeOutDuration / fadeInDuration, endStartRatio = fadeInDuration / fadeOutDuration; - fadeOutAction.warp(1, startEndRatio, duration); - this.warp(endStartRatio, 1, duration); - } - return this; - } - crossFadeTo(fadeInAction, duration, warp) { - return fadeInAction.crossFadeFrom(this, duration, warp); - } - stopFading() { - const weightInterpolant = this._weightInterpolant; - if (weightInterpolant !== null) { - this._weightInterpolant = null; - this._mixer._takeBackControlInterpolant(weightInterpolant); - } - return this; - } - // Time Scale Control - // set the time scale stopping any scheduled warping - // although .paused = true yields an effective time scale of zero, this - // method does *not* change .paused, because it would be confusing - setEffectiveTimeScale(timeScale) { - this.timeScale = timeScale; - this._effectiveTimeScale = this.paused ? 0 : timeScale; - return this.stopWarping(); - } - // return the time scale considering warping and .paused - getEffectiveTimeScale() { - return this._effectiveTimeScale; - } - setDuration(duration) { - this.timeScale = this._clip.duration / duration; - return this.stopWarping(); - } - syncWith(action) { - this.time = action.time; - this.timeScale = action.timeScale; - return this.stopWarping(); - } - halt(duration) { - return this.warp(this._effectiveTimeScale, 0, duration); - } - warp(startTimeScale, endTimeScale, duration) { - const mixer = this._mixer, now2 = mixer.time, timeScale = this.timeScale; - let interpolant = this._timeScaleInterpolant; - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._timeScaleInterpolant = interpolant; - } - const times = interpolant.parameterPositions, values = interpolant.sampleValues; - times[0] = now2; - times[1] = now2 + duration; - values[0] = startTimeScale / timeScale; - values[1] = endTimeScale / timeScale; - return this; - } - stopWarping() { - const timeScaleInterpolant = this._timeScaleInterpolant; - if (timeScaleInterpolant !== null) { - this._timeScaleInterpolant = null; - this._mixer._takeBackControlInterpolant(timeScaleInterpolant); - } - return this; - } - // Object Accessors - getMixer() { - return this._mixer; - } - getClip() { - return this._clip; - } - getRoot() { - return this._localRoot || this._mixer._root; - } - // Interna - _update(time, deltaTime, timeDirection, accuIndex) { - if (!this.enabled) { - this._updateWeight(time); - return; - } - const startTime = this._startTime; - if (startTime !== null) { - const timeRunning = (time - startTime) * timeDirection; - if (timeRunning < 0 || timeDirection === 0) { - deltaTime = 0; - } else { - this._startTime = null; - deltaTime = timeDirection * timeRunning; - } - } - deltaTime *= this._updateTimeScale(time); - const clipTime = this._updateTime(deltaTime); - const weight = this._updateWeight(time); - if (weight > 0) { - const interpolants = this._interpolants; - const propertyMixers = this._propertyBindings; - switch (this.blendMode) { - case AdditiveAnimationBlendMode: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulateAdditive(weight); - } - break; - case NormalAnimationBlendMode: - default: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulate(accuIndex, weight); - } - } - } - } - _updateWeight(time) { - let weight = 0; - if (this.enabled) { - weight = this.weight; - const interpolant = this._weightInterpolant; - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - weight *= interpolantValue; - if (time > interpolant.parameterPositions[1]) { - this.stopFading(); - if (interpolantValue === 0) { - this.enabled = false; - } - } - } - } - this._effectiveWeight = weight; - return weight; - } - _updateTimeScale(time) { - let timeScale = 0; - if (!this.paused) { - timeScale = this.timeScale; - const interpolant = this._timeScaleInterpolant; - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - timeScale *= interpolantValue; - if (time > interpolant.parameterPositions[1]) { - this.stopWarping(); - if (timeScale === 0) { - this.paused = true; - } else { - this.timeScale = timeScale; - } - } - } - } - this._effectiveTimeScale = timeScale; - return timeScale; - } - _updateTime(deltaTime) { - const duration = this._clip.duration; - const loop = this.loop; - let time = this.time + deltaTime; - let loopCount = this._loopCount; - const pingPong = loop === LoopPingPong; - if (deltaTime === 0) { - if (loopCount === -1) return time; - return pingPong && (loopCount & 1) === 1 ? duration - time : time; - } - if (loop === LoopOnce) { - if (loopCount === -1) { - this._loopCount = 0; - this._setEndings(true, true, false); - } - handle_stop: { - if (time >= duration) { - time = duration; - } else if (time < 0) { - time = 0; - } else { - this.time = time; - break handle_stop; - } - if (this.clampWhenFinished) this.paused = true; - else this.enabled = false; - this.time = time; - this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: deltaTime < 0 ? -1 : 1 - }); - } - } else { - if (loopCount === -1) { - if (deltaTime >= 0) { - loopCount = 0; - this._setEndings(true, this.repetitions === 0, pingPong); - } else { - this._setEndings(this.repetitions === 0, true, pingPong); - } - } - if (time >= duration || time < 0) { - const loopDelta = Math.floor(time / duration); - time -= duration * loopDelta; - loopCount += Math.abs(loopDelta); - const pending = this.repetitions - loopCount; - if (pending <= 0) { - if (this.clampWhenFinished) this.paused = true; - else this.enabled = false; - time = deltaTime > 0 ? duration : 0; - this.time = time; - this._mixer.dispatchEvent({ - type: "finished", - action: this, - direction: deltaTime > 0 ? 1 : -1 - }); - } else { - if (pending === 1) { - const atStart = deltaTime < 0; - this._setEndings(atStart, !atStart, pingPong); - } else { - this._setEndings(false, false, pingPong); - } - this._loopCount = loopCount; - this.time = time; - this._mixer.dispatchEvent({ - type: "loop", - action: this, - loopDelta - }); - } - } else { - this.time = time; - } - if (pingPong && (loopCount & 1) === 1) { - return duration - time; - } - } - return time; - } - _setEndings(atStart, atEnd, pingPong) { - const settings = this._interpolantSettings; - if (pingPong) { - settings.endingStart = ZeroSlopeEnding; - settings.endingEnd = ZeroSlopeEnding; - } else { - if (atStart) { - settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingStart = WrapAroundEnding; - } - if (atEnd) { - settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingEnd = WrapAroundEnding; - } - } - } - _scheduleFading(duration, weightNow, weightThen) { - const mixer = this._mixer, now2 = mixer.time; - let interpolant = this._weightInterpolant; - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._weightInterpolant = interpolant; - } - const times = interpolant.parameterPositions, values = interpolant.sampleValues; - times[0] = now2; - values[0] = weightNow; - times[1] = now2 + duration; - values[1] = weightThen; - return this; - } -}; -var _controlInterpolantsResultBuffer = new Float32Array(1); -var AnimationMixer = class extends EventDispatcher { - constructor(root) { - super(); - this._root = root; - this._initMemoryManager(); - this._accuIndex = 0; - this.time = 0; - this.timeScale = 1; - } - _bindAction(action, prototypeAction) { - const root = action._localRoot || this._root, tracks = action._clip.tracks, nTracks = tracks.length, bindings = action._propertyBindings, interpolants = action._interpolants, rootUuid = root.uuid, bindingsByRoot = this._bindingsByRootAndName; - let bindingsByName = bindingsByRoot[rootUuid]; - if (bindingsByName === void 0) { - bindingsByName = {}; - bindingsByRoot[rootUuid] = bindingsByName; - } - for (let i = 0; i !== nTracks; ++i) { - const track = tracks[i], trackName = track.name; - let binding = bindingsByName[trackName]; - if (binding !== void 0) { - ++binding.referenceCount; - bindings[i] = binding; - } else { - binding = bindings[i]; - if (binding !== void 0) { - if (binding._cacheIndex === null) { - ++binding.referenceCount; - this._addInactiveBinding(binding, rootUuid, trackName); - } - continue; - } - const path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath; - binding = new PropertyMixer( - PropertyBinding.create(root, trackName, path), - track.ValueTypeName, - track.getValueSize() - ); - ++binding.referenceCount; - this._addInactiveBinding(binding, rootUuid, trackName); - bindings[i] = binding; - } - interpolants[i].resultBuffer = binding.buffer; - } - } - _activateAction(action) { - if (!this._isActiveAction(action)) { - if (action._cacheIndex === null) { - const rootUuid = (action._localRoot || this._root).uuid, clipUuid = action._clip.uuid, actionsForClip = this._actionsByClip[clipUuid]; - this._bindAction( - action, - actionsForClip && actionsForClip.knownActions[0] - ); - this._addInactiveAction(action, clipUuid, rootUuid); - } - const bindings = action._propertyBindings; - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - if (binding.useCount++ === 0) { - this._lendBinding(binding); - binding.saveOriginalState(); - } - } - this._lendAction(action); - } - } - _deactivateAction(action) { - if (this._isActiveAction(action)) { - const bindings = action._propertyBindings; - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - if (--binding.useCount === 0) { - binding.restoreOriginalState(); - this._takeBackBinding(binding); - } - } - this._takeBackAction(action); - } - } - // Memory manager - _initMemoryManager() { - this._actions = []; - this._nActiveActions = 0; - this._actionsByClip = {}; - this._bindings = []; - this._nActiveBindings = 0; - this._bindingsByRootAndName = {}; - this._controlInterpolants = []; - this._nActiveControlInterpolants = 0; - const scope = this; - this.stats = { - actions: { - get total() { - return scope._actions.length; - }, - get inUse() { - return scope._nActiveActions; - } - }, - bindings: { - get total() { - return scope._bindings.length; - }, - get inUse() { - return scope._nActiveBindings; - } - }, - controlInterpolants: { - get total() { - return scope._controlInterpolants.length; - }, - get inUse() { - return scope._nActiveControlInterpolants; - } - } - }; - } - // Memory management for AnimationAction objects - _isActiveAction(action) { - const index = action._cacheIndex; - return index !== null && index < this._nActiveActions; - } - _addInactiveAction(action, clipUuid, rootUuid) { - const actions = this._actions, actionsByClip = this._actionsByClip; - let actionsForClip = actionsByClip[clipUuid]; - if (actionsForClip === void 0) { - actionsForClip = { - knownActions: [action], - actionByRoot: {} - }; - action._byClipCacheIndex = 0; - actionsByClip[clipUuid] = actionsForClip; - } else { - const knownActions = actionsForClip.knownActions; - action._byClipCacheIndex = knownActions.length; - knownActions.push(action); - } - action._cacheIndex = actions.length; - actions.push(action); - actionsForClip.actionByRoot[rootUuid] = action; - } - _removeInactiveAction(action) { - const actions = this._actions, lastInactiveAction = actions[actions.length - 1], cacheIndex = action._cacheIndex; - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - action._cacheIndex = null; - const clipUuid = action._clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid], knownActionsForClip = actionsForClip.knownActions, lastKnownAction = knownActionsForClip[knownActionsForClip.length - 1], byClipCacheIndex = action._byClipCacheIndex; - lastKnownAction._byClipCacheIndex = byClipCacheIndex; - knownActionsForClip[byClipCacheIndex] = lastKnownAction; - knownActionsForClip.pop(); - action._byClipCacheIndex = null; - const actionByRoot = actionsForClip.actionByRoot, rootUuid = (action._localRoot || this._root).uuid; - delete actionByRoot[rootUuid]; - if (knownActionsForClip.length === 0) { - delete actionsByClip[clipUuid]; - } - this._removeInactiveBindingsForAction(action); - } - _removeInactiveBindingsForAction(action) { - const bindings = action._propertyBindings; - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - if (--binding.referenceCount === 0) { - this._removeInactiveBinding(binding); - } - } - } - _lendAction(action) { - const actions = this._actions, prevIndex = action._cacheIndex, lastActiveIndex = this._nActiveActions++, firstInactiveAction = actions[lastActiveIndex]; - action._cacheIndex = lastActiveIndex; - actions[lastActiveIndex] = action; - firstInactiveAction._cacheIndex = prevIndex; - actions[prevIndex] = firstInactiveAction; - } - _takeBackAction(action) { - const actions = this._actions, prevIndex = action._cacheIndex, firstInactiveIndex = --this._nActiveActions, lastActiveAction = actions[firstInactiveIndex]; - action._cacheIndex = firstInactiveIndex; - actions[firstInactiveIndex] = action; - lastActiveAction._cacheIndex = prevIndex; - actions[prevIndex] = lastActiveAction; - } - // Memory management for PropertyMixer objects - _addInactiveBinding(binding, rootUuid, trackName) { - const bindingsByRoot = this._bindingsByRootAndName, bindings = this._bindings; - let bindingByName = bindingsByRoot[rootUuid]; - if (bindingByName === void 0) { - bindingByName = {}; - bindingsByRoot[rootUuid] = bindingByName; - } - bindingByName[trackName] = binding; - binding._cacheIndex = bindings.length; - bindings.push(binding); - } - _removeInactiveBinding(binding) { - const bindings = this._bindings, propBinding = binding.binding, rootUuid = propBinding.rootNode.uuid, trackName = propBinding.path, bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid], lastInactiveBinding = bindings[bindings.length - 1], cacheIndex = binding._cacheIndex; - lastInactiveBinding._cacheIndex = cacheIndex; - bindings[cacheIndex] = lastInactiveBinding; - bindings.pop(); - delete bindingByName[trackName]; - if (Object.keys(bindingByName).length === 0) { - delete bindingsByRoot[rootUuid]; - } - } - _lendBinding(binding) { - const bindings = this._bindings, prevIndex = binding._cacheIndex, lastActiveIndex = this._nActiveBindings++, firstInactiveBinding = bindings[lastActiveIndex]; - binding._cacheIndex = lastActiveIndex; - bindings[lastActiveIndex] = binding; - firstInactiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = firstInactiveBinding; - } - _takeBackBinding(binding) { - const bindings = this._bindings, prevIndex = binding._cacheIndex, firstInactiveIndex = --this._nActiveBindings, lastActiveBinding = bindings[firstInactiveIndex]; - binding._cacheIndex = firstInactiveIndex; - bindings[firstInactiveIndex] = binding; - lastActiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = lastActiveBinding; - } - // Memory management of Interpolants for weight and time scale - _lendControlInterpolant() { - const interpolants = this._controlInterpolants, lastActiveIndex = this._nActiveControlInterpolants++; - let interpolant = interpolants[lastActiveIndex]; - if (interpolant === void 0) { - interpolant = new LinearInterpolant( - new Float32Array(2), - new Float32Array(2), - 1, - _controlInterpolantsResultBuffer - ); - interpolant.__cacheIndex = lastActiveIndex; - interpolants[lastActiveIndex] = interpolant; - } - return interpolant; - } - _takeBackControlInterpolant(interpolant) { - const interpolants = this._controlInterpolants, prevIndex = interpolant.__cacheIndex, firstInactiveIndex = --this._nActiveControlInterpolants, lastActiveInterpolant = interpolants[firstInactiveIndex]; - interpolant.__cacheIndex = firstInactiveIndex; - interpolants[firstInactiveIndex] = interpolant; - lastActiveInterpolant.__cacheIndex = prevIndex; - interpolants[prevIndex] = lastActiveInterpolant; - } - // return an action for a clip optionally using a custom root target - // object (this method allocates a lot of dynamic memory in case a - // previously unknown clip/root combination is specified) - clipAction(clip, optionalRoot, blendMode) { - const root = optionalRoot || this._root, rootUuid = root.uuid; - let clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip; - const clipUuid = clipObject !== null ? clipObject.uuid : clip; - const actionsForClip = this._actionsByClip[clipUuid]; - let prototypeAction = null; - if (blendMode === void 0) { - if (clipObject !== null) { - blendMode = clipObject.blendMode; - } else { - blendMode = NormalAnimationBlendMode; - } - } - if (actionsForClip !== void 0) { - const existingAction = actionsForClip.actionByRoot[rootUuid]; - if (existingAction !== void 0 && existingAction.blendMode === blendMode) { - return existingAction; - } - prototypeAction = actionsForClip.knownActions[0]; - if (clipObject === null) - clipObject = prototypeAction._clip; - } - if (clipObject === null) return null; - const newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode); - this._bindAction(newAction, prototypeAction); - this._addInactiveAction(newAction, clipUuid, rootUuid); - return newAction; - } - // get an existing action - existingAction(clip, optionalRoot) { - const root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === "string" ? AnimationClip.findByName(root, clip) : clip, clipUuid = clipObject ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[clipUuid]; - if (actionsForClip !== void 0) { - return actionsForClip.actionByRoot[rootUuid] || null; - } - return null; - } - // deactivates all previously scheduled actions - stopAllAction() { - const actions = this._actions, nActions = this._nActiveActions; - for (let i = nActions - 1; i >= 0; --i) { - actions[i].stop(); - } - return this; - } - // advance the time and update apply the animation - update(deltaTime) { - deltaTime *= this.timeScale; - const actions = this._actions, nActions = this._nActiveActions, time = this.time += deltaTime, timeDirection = Math.sign(deltaTime), accuIndex = this._accuIndex ^= 1; - for (let i = 0; i !== nActions; ++i) { - const action = actions[i]; - action._update(time, deltaTime, timeDirection, accuIndex); - } - const bindings = this._bindings, nBindings = this._nActiveBindings; - for (let i = 0; i !== nBindings; ++i) { - bindings[i].apply(accuIndex); - } - return this; - } - // Allows you to seek to a specific time in an animation. - setTime(timeInSeconds) { - this.time = 0; - for (let i = 0; i < this._actions.length; i++) { - this._actions[i].time = 0; - } - return this.update(timeInSeconds); - } - // return this mixer's root target object - getRoot() { - return this._root; - } - // free all resources specific to a particular clip - uncacheClip(clip) { - const actions = this._actions, clipUuid = clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[clipUuid]; - if (actionsForClip !== void 0) { - const actionsToRemove = actionsForClip.knownActions; - for (let i = 0, n = actionsToRemove.length; i !== n; ++i) { - const action = actionsToRemove[i]; - this._deactivateAction(action); - const cacheIndex = action._cacheIndex, lastInactiveAction = actions[actions.length - 1]; - action._cacheIndex = null; - action._byClipCacheIndex = null; - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - this._removeInactiveBindingsForAction(action); - } - delete actionsByClip[clipUuid]; - } - } - // free all resources specific to a particular root target object - uncacheRoot(root) { - const rootUuid = root.uuid, actionsByClip = this._actionsByClip; - for (const clipUuid in actionsByClip) { - const actionByRoot = actionsByClip[clipUuid].actionByRoot, action = actionByRoot[rootUuid]; - if (action !== void 0) { - this._deactivateAction(action); - this._removeInactiveAction(action); - } - } - const bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[rootUuid]; - if (bindingByName !== void 0) { - for (const trackName in bindingByName) { - const binding = bindingByName[trackName]; - binding.restoreOriginalState(); - this._removeInactiveBinding(binding); - } - } - } - // remove a targeted clip from the cache - uncacheAction(clip, optionalRoot) { - const action = this.existingAction(clip, optionalRoot); - if (action !== null) { - this._deactivateAction(action); - this._removeInactiveAction(action); - } - } -}; -var Uniform = class _Uniform { - constructor(value) { - this.value = value; - } - clone() { - return new _Uniform(this.value.clone === void 0 ? this.value : this.value.clone()); - } -}; -var _id = 0; -var UniformsGroup = class extends EventDispatcher { - constructor() { - super(); - this.isUniformsGroup = true; - Object.defineProperty(this, "id", { value: _id++ }); - this.name = ""; - this.usage = StaticDrawUsage; - this.uniforms = []; - } - add(uniform) { - this.uniforms.push(uniform); - return this; - } - remove(uniform) { - const index = this.uniforms.indexOf(uniform); - if (index !== -1) this.uniforms.splice(index, 1); - return this; - } - setName(name) { - this.name = name; - return this; - } - setUsage(value) { - this.usage = value; - return this; - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - return this; - } - copy(source) { - this.name = source.name; - this.usage = source.usage; - const uniformsSource = source.uniforms; - this.uniforms.length = 0; - for (let i = 0, l = uniformsSource.length; i < l; i++) { - const uniforms = Array.isArray(uniformsSource[i]) ? uniformsSource[i] : [uniformsSource[i]]; - for (let j = 0; j < uniforms.length; j++) { - this.uniforms.push(uniforms[j].clone()); - } - } - return this; - } - clone() { - return new this.constructor().copy(this); - } -}; -var InstancedInterleavedBuffer = class extends InterleavedBuffer { - constructor(array, stride, meshPerAttribute = 1) { - super(array, stride); - this.isInstancedInterleavedBuffer = true; - this.meshPerAttribute = meshPerAttribute; - } - copy(source) { - super.copy(source); - this.meshPerAttribute = source.meshPerAttribute; - return this; - } - clone(data) { - const ib = super.clone(data); - ib.meshPerAttribute = this.meshPerAttribute; - return ib; - } - toJSON(data) { - const json = super.toJSON(data); - json.isInstancedInterleavedBuffer = true; - json.meshPerAttribute = this.meshPerAttribute; - return json; - } -}; -var GLBufferAttribute = class { - constructor(buffer, type, itemSize, elementSize, count) { - this.isGLBufferAttribute = true; - this.name = ""; - this.buffer = buffer; - this.type = type; - this.itemSize = itemSize; - this.elementSize = elementSize; - this.count = count; - this.version = 0; - } - set needsUpdate(value) { - if (value === true) this.version++; - } - setBuffer(buffer) { - this.buffer = buffer; - return this; - } - setType(type, elementSize) { - this.type = type; - this.elementSize = elementSize; - return this; - } - setItemSize(itemSize) { - this.itemSize = itemSize; - return this; - } - setCount(count) { - this.count = count; - return this; - } -}; -var _matrix = new Matrix4(); -var Raycaster = class { - constructor(origin, direction, near = 0, far = Infinity) { - this.ray = new Ray(origin, direction); - this.near = near; - this.far = far; - this.camera = null; - this.layers = new Layers(); - this.params = { - Mesh: {}, - Line: { threshold: 1 }, - LOD: {}, - Points: { threshold: 1 }, - Sprite: {} - }; - } - set(origin, direction) { - this.ray.set(origin, direction); - } - setFromCamera(coords, camera) { - if (camera.isPerspectiveCamera) { - this.ray.origin.setFromMatrixPosition(camera.matrixWorld); - this.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize(); - this.camera = camera; - } else if (camera.isOrthographicCamera) { - this.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); - this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld); - this.camera = camera; - } else { - console.error("THREE.Raycaster: Unsupported camera type: " + camera.type); - } - } - setFromXRController(controller) { - _matrix.identity().extractRotation(controller.matrixWorld); - this.ray.origin.setFromMatrixPosition(controller.matrixWorld); - this.ray.direction.set(0, 0, -1).applyMatrix4(_matrix); - return this; - } - intersectObject(object, recursive = true, intersects2 = []) { - intersect(object, this, intersects2, recursive); - intersects2.sort(ascSort); - return intersects2; - } - intersectObjects(objects, recursive = true, intersects2 = []) { - for (let i = 0, l = objects.length; i < l; i++) { - intersect(objects[i], this, intersects2, recursive); - } - intersects2.sort(ascSort); - return intersects2; - } -}; -function ascSort(a, b) { - return a.distance - b.distance; -} -function intersect(object, raycaster, intersects2, recursive) { - let propagate = true; - if (object.layers.test(raycaster.layers)) { - const result = object.raycast(raycaster, intersects2); - if (result === false) propagate = false; - } - if (propagate === true && recursive === true) { - const children = object.children; - for (let i = 0, l = children.length; i < l; i++) { - intersect(children[i], raycaster, intersects2, true); - } - } -} -var Spherical = class { - constructor(radius = 1, phi = 0, theta = 0) { - this.radius = radius; - this.phi = phi; - this.theta = theta; - return this; - } - set(radius, phi, theta) { - this.radius = radius; - this.phi = phi; - this.theta = theta; - return this; - } - copy(other) { - this.radius = other.radius; - this.phi = other.phi; - this.theta = other.theta; - return this; - } - // restrict phi to be between EPS and PI-EPS - makeSafe() { - const EPS = 1e-6; - this.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi)); - return this; - } - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + y * y + z * z); - if (this.radius === 0) { - this.theta = 0; - this.phi = 0; - } else { - this.theta = Math.atan2(x, z); - this.phi = Math.acos(clamp(y / this.radius, -1, 1)); - } - return this; - } - clone() { - return new this.constructor().copy(this); - } -}; -var Cylindrical = class { - constructor(radius = 1, theta = 0, y = 0) { - this.radius = radius; - this.theta = theta; - this.y = y; - return this; - } - set(radius, theta, y) { - this.radius = radius; - this.theta = theta; - this.y = y; - return this; - } - copy(other) { - this.radius = other.radius; - this.theta = other.theta; - this.y = other.y; - return this; - } - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + z * z); - this.theta = Math.atan2(x, z); - this.y = y; - return this; - } - clone() { - return new this.constructor().copy(this); - } -}; -var Matrix2 = class _Matrix2 { - constructor(n11, n12, n21, n22) { - _Matrix2.prototype.isMatrix2 = true; - this.elements = [ - 1, - 0, - 0, - 1 - ]; - if (n11 !== void 0) { - this.set(n11, n12, n21, n22); - } - } - identity() { - this.set( - 1, - 0, - 0, - 1 - ); - return this; - } - fromArray(array, offset = 0) { - for (let i = 0; i < 4; i++) { - this.elements[i] = array[i + offset]; - } - return this; - } - set(n11, n12, n21, n22) { - const te = this.elements; - te[0] = n11; - te[2] = n12; - te[1] = n21; - te[3] = n22; - return this; - } -}; -var _vector$4 = new Vector2(); -var Box2 = class { - constructor(min = new Vector2(Infinity, Infinity), max = new Vector2(-Infinity, -Infinity)) { - this.isBox2 = true; - this.min = min; - this.max = max; - } - set(min, max) { - this.min.copy(min); - this.max.copy(max); - return this; - } - setFromPoints(points) { - this.makeEmpty(); - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - return this; - } - setFromCenterAndSize(center, size) { - const halfSize = _vector$4.copy(size).multiplyScalar(0.5); - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - return this; - } - clone() { - return new this.constructor().copy(this); - } - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - return this; - } - makeEmpty() { - this.min.x = this.min.y = Infinity; - this.max.x = this.max.y = -Infinity; - return this; - } - isEmpty() { - return this.max.x < this.min.x || this.max.y < this.min.y; - } - getCenter(target) { - return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - getSize(target) { - return this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min); - } - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - return this; - } - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - return this; - } - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - return this; - } - containsPoint(point) { - return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y; - } - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; - } - getParameter(point, target) { - return target.set( - (point.x - this.min.x) / (this.max.x - this.min.x), - (point.y - this.min.y) / (this.max.y - this.min.y) - ); - } - intersectsBox(box) { - return box.max.x >= this.min.x && box.min.x <= this.max.x && box.max.y >= this.min.y && box.min.y <= this.max.y; - } - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - distanceToPoint(point) { - return this.clampPoint(point, _vector$4).distanceTo(point); - } - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); - if (this.isEmpty()) this.makeEmpty(); - return this; - } - union(box) { - this.min.min(box.min); - this.max.max(box.max); - return this; - } - translate(offset) { - this.min.add(offset); - this.max.add(offset); - return this; - } - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } -}; -var _startP = new Vector3(); -var _startEnd = new Vector3(); -var Line3 = class { - constructor(start = new Vector3(), end = new Vector3()) { - this.start = start; - this.end = end; - } - set(start, end) { - this.start.copy(start); - this.end.copy(end); - return this; - } - copy(line) { - this.start.copy(line.start); - this.end.copy(line.end); - return this; - } - getCenter(target) { - return target.addVectors(this.start, this.end).multiplyScalar(0.5); - } - delta(target) { - return target.subVectors(this.end, this.start); - } - distanceSq() { - return this.start.distanceToSquared(this.end); - } - distance() { - return this.start.distanceTo(this.end); - } - at(t, target) { - return this.delta(target).multiplyScalar(t).add(this.start); - } - closestPointToPointParameter(point, clampToLine) { - _startP.subVectors(point, this.start); - _startEnd.subVectors(this.end, this.start); - const startEnd2 = _startEnd.dot(_startEnd); - const startEnd_startP = _startEnd.dot(_startP); - let t = startEnd_startP / startEnd2; - if (clampToLine) { - t = clamp(t, 0, 1); - } - return t; - } - closestPointToPoint(point, clampToLine, target) { - const t = this.closestPointToPointParameter(point, clampToLine); - return this.delta(target).multiplyScalar(t).add(this.start); - } - applyMatrix4(matrix) { - this.start.applyMatrix4(matrix); - this.end.applyMatrix4(matrix); - return this; - } - equals(line) { - return line.start.equals(this.start) && line.end.equals(this.end); - } - clone() { - return new this.constructor().copy(this); - } -}; -var _vector$3 = new Vector3(); -var SpotLightHelper = class extends Object3D { - constructor(light, color) { - super(); - this.light = light; - this.matrixAutoUpdate = false; - this.color = color; - this.type = "SpotLightHelper"; - const geometry = new BufferGeometry(); - const positions = [ - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - -1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - -1, - 1 - ]; - for (let i = 0, j = 1, l = 32; i < l; i++, j++) { - const p1 = i / l * Math.PI * 2; - const p2 = j / l * Math.PI * 2; - positions.push( - Math.cos(p1), - Math.sin(p1), - 1, - Math.cos(p2), - Math.sin(p2), - 1 - ); - } - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - const material = new LineBasicMaterial({ fog: false, toneMapped: false }); - this.cone = new LineSegments(geometry, material); - this.add(this.cone); - this.update(); - } - dispose() { - this.cone.geometry.dispose(); - this.cone.material.dispose(); - } - update() { - this.light.updateWorldMatrix(true, false); - this.light.target.updateWorldMatrix(true, false); - if (this.parent) { - this.parent.updateWorldMatrix(true); - this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld); - } else { - this.matrix.copy(this.light.matrixWorld); - } - this.matrixWorld.copy(this.light.matrixWorld); - const coneLength = this.light.distance ? this.light.distance : 1e3; - const coneWidth = coneLength * Math.tan(this.light.angle); - this.cone.scale.set(coneWidth, coneWidth, coneLength); - _vector$3.setFromMatrixPosition(this.light.target.matrixWorld); - this.cone.lookAt(_vector$3); - if (this.color !== void 0) { - this.cone.material.color.set(this.color); - } else { - this.cone.material.color.copy(this.light.color); - } - } -}; -var _vector$2 = new Vector3(); -var _boneMatrix = new Matrix4(); -var _matrixWorldInv = new Matrix4(); -var SkeletonHelper = class extends LineSegments { - constructor(object) { - const bones = getBoneList(object); - const geometry = new BufferGeometry(); - const vertices = []; - const colors = []; - const color1 = new Color(0, 0, 1); - const color2 = new Color(0, 1, 0); - for (let i = 0; i < bones.length; i++) { - const bone = bones[i]; - if (bone.parent && bone.parent.isBone) { - vertices.push(0, 0, 0); - vertices.push(0, 0, 0); - colors.push(color1.r, color1.g, color1.b); - colors.push(color2.r, color2.g, color2.b); - } - } - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true }); - super(geometry, material); - this.isSkeletonHelper = true; - this.type = "SkeletonHelper"; - this.root = object; - this.bones = bones; - this.matrix = object.matrixWorld; - this.matrixAutoUpdate = false; - } - updateMatrixWorld(force) { - const bones = this.bones; - const geometry = this.geometry; - const position = geometry.getAttribute("position"); - _matrixWorldInv.copy(this.root.matrixWorld).invert(); - for (let i = 0, j = 0; i < bones.length; i++) { - const bone = bones[i]; - if (bone.parent && bone.parent.isBone) { - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld); - _vector$2.setFromMatrixPosition(_boneMatrix); - position.setXYZ(j, _vector$2.x, _vector$2.y, _vector$2.z); - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld); - _vector$2.setFromMatrixPosition(_boneMatrix); - position.setXYZ(j + 1, _vector$2.x, _vector$2.y, _vector$2.z); - j += 2; - } - } - geometry.getAttribute("position").needsUpdate = true; - super.updateMatrixWorld(force); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -function getBoneList(object) { - const boneList = []; - if (object.isBone === true) { - boneList.push(object); - } - for (let i = 0; i < object.children.length; i++) { - boneList.push.apply(boneList, getBoneList(object.children[i])); - } - return boneList; -} -var PointLightHelper = class extends Mesh { - constructor(light, sphereSize, color) { - const geometry = new SphereGeometry(sphereSize, 4, 2); - const material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); - super(geometry, material); - this.light = light; - this.color = color; - this.type = "PointLightHelper"; - this.matrix = this.light.matrixWorld; - this.matrixAutoUpdate = false; - this.update(); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - update() { - this.light.updateWorldMatrix(true, false); - if (this.color !== void 0) { - this.material.color.set(this.color); - } else { - this.material.color.copy(this.light.color); - } - } -}; -var _vector$1 = new Vector3(); -var _color1 = new Color(); -var _color2 = new Color(); -var HemisphereLightHelper = class extends Object3D { - constructor(light, size, color) { - super(); - this.light = light; - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - this.color = color; - this.type = "HemisphereLightHelper"; - const geometry = new OctahedronGeometry(size); - geometry.rotateY(Math.PI * 0.5); - this.material = new MeshBasicMaterial({ wireframe: true, fog: false, toneMapped: false }); - if (this.color === void 0) this.material.vertexColors = true; - const position = geometry.getAttribute("position"); - const colors = new Float32Array(position.count * 3); - geometry.setAttribute("color", new BufferAttribute(colors, 3)); - this.add(new Mesh(geometry, this.material)); - this.update(); - } - dispose() { - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } - update() { - const mesh = this.children[0]; - if (this.color !== void 0) { - this.material.color.set(this.color); - } else { - const colors = mesh.geometry.getAttribute("color"); - _color1.copy(this.light.color); - _color2.copy(this.light.groundColor); - for (let i = 0, l = colors.count; i < l; i++) { - const color = i < l / 2 ? _color1 : _color2; - colors.setXYZ(i, color.r, color.g, color.b); - } - colors.needsUpdate = true; - } - this.light.updateWorldMatrix(true, false); - mesh.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate()); - } -}; -var GridHelper = class extends LineSegments { - constructor(size = 10, divisions = 10, color1 = 4473924, color2 = 8947848) { - color1 = new Color(color1); - color2 = new Color(color2); - const center = divisions / 2; - const step = size / divisions; - const halfSize = size / 2; - const vertices = [], colors = []; - for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) { - vertices.push(-halfSize, 0, k, halfSize, 0, k); - vertices.push(k, 0, -halfSize, k, 0, halfSize); - const color = i === center ? color1 : color2; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - super(geometry, material); - this.type = "GridHelper"; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -var PolarGridHelper = class extends LineSegments { - constructor(radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 4473924, color2 = 8947848) { - color1 = new Color(color1); - color2 = new Color(color2); - const vertices = []; - const colors = []; - if (sectors > 1) { - for (let i = 0; i < sectors; i++) { - const v = i / sectors * (Math.PI * 2); - const x = Math.sin(v) * radius; - const z = Math.cos(v) * radius; - vertices.push(0, 0, 0); - vertices.push(x, 0, z); - const color = i & 1 ? color1 : color2; - colors.push(color.r, color.g, color.b); - colors.push(color.r, color.g, color.b); - } - } - for (let i = 0; i < rings; i++) { - const color = i & 1 ? color1 : color2; - const r = radius - radius / rings * i; - for (let j = 0; j < divisions; j++) { - let v = j / divisions * (Math.PI * 2); - let x = Math.sin(v) * r; - let z = Math.cos(v) * r; - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); - v = (j + 1) / divisions * (Math.PI * 2); - x = Math.sin(v) * r; - z = Math.cos(v) * r; - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); - } - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - super(geometry, material); - this.type = "PolarGridHelper"; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -var _v1 = new Vector3(); -var _v2 = new Vector3(); -var _v3 = new Vector3(); -var DirectionalLightHelper = class extends Object3D { - constructor(light, size, color) { - super(); - this.light = light; - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - this.color = color; - this.type = "DirectionalLightHelper"; - if (size === void 0) size = 1; - let geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute([ - -size, - size, - 0, - size, - size, - 0, - size, - -size, - 0, - -size, - -size, - 0, - -size, - size, - 0 - ], 3)); - const material = new LineBasicMaterial({ fog: false, toneMapped: false }); - this.lightPlane = new Line(geometry, material); - this.add(this.lightPlane); - geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); - this.targetLine = new Line(geometry, material); - this.add(this.targetLine); - this.update(); - } - dispose() { - this.lightPlane.geometry.dispose(); - this.lightPlane.material.dispose(); - this.targetLine.geometry.dispose(); - this.targetLine.material.dispose(); - } - update() { - this.light.updateWorldMatrix(true, false); - this.light.target.updateWorldMatrix(true, false); - _v1.setFromMatrixPosition(this.light.matrixWorld); - _v2.setFromMatrixPosition(this.light.target.matrixWorld); - _v3.subVectors(_v2, _v1); - this.lightPlane.lookAt(_v2); - if (this.color !== void 0) { - this.lightPlane.material.color.set(this.color); - this.targetLine.material.color.set(this.color); - } else { - this.lightPlane.material.color.copy(this.light.color); - this.targetLine.material.color.copy(this.light.color); - } - this.targetLine.lookAt(_v2); - this.targetLine.scale.z = _v3.length(); - } -}; -var _vector = new Vector3(); -var _camera = new Camera(); -var CameraHelper = class extends LineSegments { - constructor(camera) { - const geometry = new BufferGeometry(); - const material = new LineBasicMaterial({ color: 16777215, vertexColors: true, toneMapped: false }); - const vertices = []; - const colors = []; - const pointMap = {}; - addLine("n1", "n2"); - addLine("n2", "n4"); - addLine("n4", "n3"); - addLine("n3", "n1"); - addLine("f1", "f2"); - addLine("f2", "f4"); - addLine("f4", "f3"); - addLine("f3", "f1"); - addLine("n1", "f1"); - addLine("n2", "f2"); - addLine("n3", "f3"); - addLine("n4", "f4"); - addLine("p", "n1"); - addLine("p", "n2"); - addLine("p", "n3"); - addLine("p", "n4"); - addLine("u1", "u2"); - addLine("u2", "u3"); - addLine("u3", "u1"); - addLine("c", "t"); - addLine("p", "c"); - addLine("cn1", "cn2"); - addLine("cn3", "cn4"); - addLine("cf1", "cf2"); - addLine("cf3", "cf4"); - function addLine(a, b) { - addPoint(a); - addPoint(b); - } - function addPoint(id) { - vertices.push(0, 0, 0); - colors.push(0, 0, 0); - if (pointMap[id] === void 0) { - pointMap[id] = []; - } - pointMap[id].push(vertices.length / 3 - 1); - } - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - super(geometry, material); - this.type = "CameraHelper"; - this.camera = camera; - if (this.camera.updateProjectionMatrix) this.camera.updateProjectionMatrix(); - this.matrix = camera.matrixWorld; - this.matrixAutoUpdate = false; - this.pointMap = pointMap; - this.update(); - const colorFrustum = new Color(16755200); - const colorCone = new Color(16711680); - const colorUp = new Color(43775); - const colorTarget = new Color(16777215); - const colorCross = new Color(3355443); - this.setColors(colorFrustum, colorCone, colorUp, colorTarget, colorCross); - } - setColors(frustum, cone, up, target, cross) { - const geometry = this.geometry; - const colorAttribute = geometry.getAttribute("color"); - colorAttribute.setXYZ(0, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(1, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(2, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(3, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(4, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(5, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(6, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(7, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(8, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(9, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(10, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(11, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(12, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(13, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(14, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(15, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(16, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(17, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(18, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(19, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(20, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(21, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(22, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(23, frustum.r, frustum.g, frustum.b); - colorAttribute.setXYZ(24, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(25, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(26, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(27, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(28, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(29, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(30, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(31, cone.r, cone.g, cone.b); - colorAttribute.setXYZ(32, up.r, up.g, up.b); - colorAttribute.setXYZ(33, up.r, up.g, up.b); - colorAttribute.setXYZ(34, up.r, up.g, up.b); - colorAttribute.setXYZ(35, up.r, up.g, up.b); - colorAttribute.setXYZ(36, up.r, up.g, up.b); - colorAttribute.setXYZ(37, up.r, up.g, up.b); - colorAttribute.setXYZ(38, target.r, target.g, target.b); - colorAttribute.setXYZ(39, target.r, target.g, target.b); - colorAttribute.setXYZ(40, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(41, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(42, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(43, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(44, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(45, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(46, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(47, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(48, cross.r, cross.g, cross.b); - colorAttribute.setXYZ(49, cross.r, cross.g, cross.b); - colorAttribute.needsUpdate = true; - } - update() { - const geometry = this.geometry; - const pointMap = this.pointMap; - const w = 1, h = 1; - _camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); - setPoint("c", pointMap, geometry, _camera, 0, 0, -1); - setPoint("t", pointMap, geometry, _camera, 0, 0, 1); - setPoint("n1", pointMap, geometry, _camera, -w, -h, -1); - setPoint("n2", pointMap, geometry, _camera, w, -h, -1); - setPoint("n3", pointMap, geometry, _camera, -w, h, -1); - setPoint("n4", pointMap, geometry, _camera, w, h, -1); - setPoint("f1", pointMap, geometry, _camera, -w, -h, 1); - setPoint("f2", pointMap, geometry, _camera, w, -h, 1); - setPoint("f3", pointMap, geometry, _camera, -w, h, 1); - setPoint("f4", pointMap, geometry, _camera, w, h, 1); - setPoint("u1", pointMap, geometry, _camera, w * 0.7, h * 1.1, -1); - setPoint("u2", pointMap, geometry, _camera, -w * 0.7, h * 1.1, -1); - setPoint("u3", pointMap, geometry, _camera, 0, h * 2, -1); - setPoint("cf1", pointMap, geometry, _camera, -w, 0, 1); - setPoint("cf2", pointMap, geometry, _camera, w, 0, 1); - setPoint("cf3", pointMap, geometry, _camera, 0, -h, 1); - setPoint("cf4", pointMap, geometry, _camera, 0, h, 1); - setPoint("cn1", pointMap, geometry, _camera, -w, 0, -1); - setPoint("cn2", pointMap, geometry, _camera, w, 0, -1); - setPoint("cn3", pointMap, geometry, _camera, 0, -h, -1); - setPoint("cn4", pointMap, geometry, _camera, 0, h, -1); - geometry.getAttribute("position").needsUpdate = true; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -function setPoint(point, pointMap, geometry, camera, x, y, z) { - _vector.set(x, y, z).unproject(camera); - const points = pointMap[point]; - if (points !== void 0) { - const position = geometry.getAttribute("position"); - for (let i = 0, l = points.length; i < l; i++) { - position.setXYZ(points[i], _vector.x, _vector.y, _vector.z); - } - } -} -var _box = new Box3(); -var BoxHelper = class extends LineSegments { - constructor(object, color = 16776960) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - const positions = new Float32Array(8 * 3); - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute("position", new BufferAttribute(positions, 3)); - super(geometry, new LineBasicMaterial({ color, toneMapped: false })); - this.object = object; - this.type = "BoxHelper"; - this.matrixAutoUpdate = false; - this.update(); - } - update(object) { - if (object !== void 0) { - console.warn("THREE.BoxHelper: .update() has no longer arguments."); - } - if (this.object !== void 0) { - _box.setFromObject(this.object); - } - if (_box.isEmpty()) return; - const min = _box.min; - const max = _box.max; - const position = this.geometry.attributes.position; - const array = position.array; - array[0] = max.x; - array[1] = max.y; - array[2] = max.z; - array[3] = min.x; - array[4] = max.y; - array[5] = max.z; - array[6] = min.x; - array[7] = min.y; - array[8] = max.z; - array[9] = max.x; - array[10] = min.y; - array[11] = max.z; - array[12] = max.x; - array[13] = max.y; - array[14] = min.z; - array[15] = min.x; - array[16] = max.y; - array[17] = min.z; - array[18] = min.x; - array[19] = min.y; - array[20] = min.z; - array[21] = max.x; - array[22] = min.y; - array[23] = min.z; - position.needsUpdate = true; - this.geometry.computeBoundingSphere(); - } - setFromObject(object) { - this.object = object; - this.update(); - return this; - } - copy(source, recursive) { - super.copy(source, recursive); - this.object = source.object; - return this; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -var Box3Helper = class extends LineSegments { - constructor(box, color = 16776960) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]; - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - super(geometry, new LineBasicMaterial({ color, toneMapped: false })); - this.box = box; - this.type = "Box3Helper"; - this.geometry.computeBoundingSphere(); - } - updateMatrixWorld(force) { - const box = this.box; - if (box.isEmpty()) return; - box.getCenter(this.position); - box.getSize(this.scale); - this.scale.multiplyScalar(0.5); - super.updateMatrixWorld(force); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -var PlaneHelper = class extends Line { - constructor(plane, size = 1, hex = 16776960) { - const color = hex; - const positions = [1, -1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - super(geometry, new LineBasicMaterial({ color, toneMapped: false })); - this.type = "PlaneHelper"; - this.plane = plane; - this.size = size; - const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; - const geometry2 = new BufferGeometry(); - geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); - geometry2.computeBoundingSphere(); - this.add(new Mesh(geometry2, new MeshBasicMaterial({ color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false }))); - } - updateMatrixWorld(force) { - this.position.set(0, 0, 0); - this.scale.set(0.5 * this.size, 0.5 * this.size, 1); - this.lookAt(this.plane.normal); - this.translateZ(-this.plane.constant); - super.updateMatrixWorld(force); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } -}; -var _axis = new Vector3(); -var _lineGeometry; -var _coneGeometry; -var ArrowHelper = class extends Object3D { - // dir is assumed to be normalized - constructor(dir = new Vector3(0, 0, 1), origin = new Vector3(0, 0, 0), length = 1, color = 16776960, headLength = length * 0.2, headWidth = headLength * 0.2) { - super(); - this.type = "ArrowHelper"; - if (_lineGeometry === void 0) { - _lineGeometry = new BufferGeometry(); - _lineGeometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3)); - _coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1); - _coneGeometry.translate(0, -0.5, 0); - } - this.position.copy(origin); - this.line = new Line(_lineGeometry, new LineBasicMaterial({ color, toneMapped: false })); - this.line.matrixAutoUpdate = false; - this.add(this.line); - this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ color, toneMapped: false })); - this.cone.matrixAutoUpdate = false; - this.add(this.cone); - this.setDirection(dir); - this.setLength(length, headLength, headWidth); - } - setDirection(dir) { - if (dir.y > 0.99999) { - this.quaternion.set(0, 0, 0, 1); - } else if (dir.y < -0.99999) { - this.quaternion.set(1, 0, 0, 0); - } else { - _axis.set(dir.z, 0, -dir.x).normalize(); - const radians = Math.acos(dir.y); - this.quaternion.setFromAxisAngle(_axis, radians); - } - } - setLength(length, headLength = length * 0.2, headWidth = headLength * 0.2) { - this.line.scale.set(1, Math.max(1e-4, length - headLength), 1); - this.line.updateMatrix(); - this.cone.scale.set(headWidth, headLength, headWidth); - this.cone.position.y = length; - this.cone.updateMatrix(); - } - setColor(color) { - this.line.material.color.set(color); - this.cone.material.color.set(color); - } - copy(source) { - super.copy(source, false); - this.line.copy(source.line); - this.cone.copy(source.cone); - return this; - } - dispose() { - this.line.geometry.dispose(); - this.line.material.dispose(); - this.cone.geometry.dispose(); - this.cone.material.dispose(); - } -}; -var AxesHelper = class extends LineSegments { - constructor(size = 1) { - const vertices = [ - 0, - 0, - 0, - size, - 0, - 0, - 0, - 0, - 0, - 0, - size, - 0, - 0, - 0, - 0, - 0, - 0, - size - ]; - const colors = [ - 1, - 0, - 0, - 1, - 0.6, - 0, - 0, - 1, - 0, - 0.6, - 1, - 0, - 0, - 0, - 1, - 0, - 0.6, - 1 - ]; - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false }); - super(geometry, material); - this.type = "AxesHelper"; - } - setColors(xAxisColor, yAxisColor, zAxisColor) { - const color = new Color(); - const array = this.geometry.attributes.color.array; - color.set(xAxisColor); - color.toArray(array, 0); - color.toArray(array, 3); - color.set(yAxisColor); - color.toArray(array, 6); - color.toArray(array, 9); - color.set(zAxisColor); - color.toArray(array, 12); - color.toArray(array, 15); - this.geometry.attributes.color.needsUpdate = true; - return this; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -var ShapePath = class { - constructor() { - this.type = "ShapePath"; - this.color = new Color(); - this.subPaths = []; - this.currentPath = null; - } - moveTo(x, y) { - this.currentPath = new Path(); - this.subPaths.push(this.currentPath); - this.currentPath.moveTo(x, y); - return this; - } - lineTo(x, y) { - this.currentPath.lineTo(x, y); - return this; - } - quadraticCurveTo(aCPx, aCPy, aX, aY) { - this.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY); - return this; - } - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - this.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY); - return this; - } - splineThru(pts) { - this.currentPath.splineThru(pts); - return this; - } - toShapes(isCCW) { - function toShapesNoHoles(inSubpaths) { - const shapes2 = []; - for (let i = 0, l = inSubpaths.length; i < l; i++) { - const tmpPath2 = inSubpaths[i]; - const tmpShape2 = new Shape(); - tmpShape2.curves = tmpPath2.curves; - shapes2.push(tmpShape2); - } - return shapes2; - } - function isPointInsidePolygon(inPt, inPolygon) { - const polyLen = inPolygon.length; - let inside = false; - for (let p = polyLen - 1, q = 0; q < polyLen; p = q++) { - let edgeLowPt = inPolygon[p]; - let edgeHighPt = inPolygon[q]; - let edgeDx = edgeHighPt.x - edgeLowPt.x; - let edgeDy = edgeHighPt.y - edgeLowPt.y; - if (Math.abs(edgeDy) > Number.EPSILON) { - if (edgeDy < 0) { - edgeLowPt = inPolygon[q]; - edgeDx = -edgeDx; - edgeHighPt = inPolygon[p]; - edgeDy = -edgeDy; - } - if (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue; - if (inPt.y === edgeLowPt.y) { - if (inPt.x === edgeLowPt.x) return true; - } else { - const perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y); - if (perpEdge === 0) return true; - if (perpEdge < 0) continue; - inside = !inside; - } - } else { - if (inPt.y !== edgeLowPt.y) continue; - if (edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x || edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x) return true; - } - } - return inside; - } - const isClockWise = ShapeUtils.isClockWise; - const subPaths = this.subPaths; - if (subPaths.length === 0) return []; - let solid, tmpPath, tmpShape; - const shapes = []; - if (subPaths.length === 1) { - tmpPath = subPaths[0]; - tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push(tmpShape); - return shapes; - } - let holesFirst = !isClockWise(subPaths[0].getPoints()); - holesFirst = isCCW ? !holesFirst : holesFirst; - const betterShapeHoles = []; - const newShapes = []; - let newShapeHoles = []; - let mainIdx = 0; - let tmpPoints; - newShapes[mainIdx] = void 0; - newShapeHoles[mainIdx] = []; - for (let i = 0, l = subPaths.length; i < l; i++) { - tmpPath = subPaths[i]; - tmpPoints = tmpPath.getPoints(); - solid = isClockWise(tmpPoints); - solid = isCCW ? !solid : solid; - if (solid) { - if (!holesFirst && newShapes[mainIdx]) mainIdx++; - newShapes[mainIdx] = { s: new Shape(), p: tmpPoints }; - newShapes[mainIdx].s.curves = tmpPath.curves; - if (holesFirst) mainIdx++; - newShapeHoles[mainIdx] = []; - } else { - newShapeHoles[mainIdx].push({ h: tmpPath, p: tmpPoints[0] }); - } - } - if (!newShapes[0]) return toShapesNoHoles(subPaths); - if (newShapes.length > 1) { - let ambiguous = false; - let toChange = 0; - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - betterShapeHoles[sIdx] = []; - } - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - const sho = newShapeHoles[sIdx]; - for (let hIdx = 0; hIdx < sho.length; hIdx++) { - const ho = sho[hIdx]; - let hole_unassigned = true; - for (let s2Idx = 0; s2Idx < newShapes.length; s2Idx++) { - if (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) { - if (sIdx !== s2Idx) toChange++; - if (hole_unassigned) { - hole_unassigned = false; - betterShapeHoles[s2Idx].push(ho); - } else { - ambiguous = true; - } - } - } - if (hole_unassigned) { - betterShapeHoles[sIdx].push(ho); - } - } - } - if (toChange > 0 && ambiguous === false) { - newShapeHoles = betterShapeHoles; - } - } - let tmpHoles; - for (let i = 0, il = newShapes.length; i < il; i++) { - tmpShape = newShapes[i].s; - shapes.push(tmpShape); - tmpHoles = newShapeHoles[i]; - for (let j = 0, jl = tmpHoles.length; j < jl; j++) { - tmpShape.holes.push(tmpHoles[j].h); - } - } - return shapes; - } -}; -var WebGLMultipleRenderTargets = class extends WebGLRenderTarget { - // @deprecated, r162 - constructor(width = 1, height = 1, count = 1, options = {}) { - console.warn('THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.'); - super(width, height, { ...options, count }); - this.isWebGLMultipleRenderTargets = true; - } - get texture() { - return this.textures; - } -}; -if (typeof __THREE_DEVTOOLS__ !== "undefined") { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: { - revision: REVISION - } })); -} -if (typeof window !== "undefined") { - if (window.__THREE__) { - console.warn("WARNING: Multiple instances of Three.js being imported."); - } else { - window.__THREE__ = REVISION; - } -} + LinearSRGBColorSpace, + LinearToneMapping, + LinearTransfer, + Loader, + LoaderUtils, + LoadingManager, + LoopOnce, + LoopPingPong, + LoopRepeat, + LuminanceAlphaFormat, + LuminanceFormat, + MOUSE, + Material, + MaterialLoader, + MathUtils, + Matrix2, + Matrix3, + Matrix4, + MaxEquation, + Mesh, + MeshBasicMaterial, + MeshDepthMaterial, + MeshDistanceMaterial, + MeshLambertMaterial, + MeshMatcapMaterial, + MeshNormalMaterial, + MeshPhongMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MeshToonMaterial, + MinEquation, + MirroredRepeatWrapping, + MixOperation, + MultiplyBlending, + MultiplyOperation, + NearestFilter, + NearestMipMapLinearFilter, + NearestMipMapNearestFilter, + NearestMipmapLinearFilter, + NearestMipmapNearestFilter, + NeutralToneMapping, + NeverCompare, + NeverDepth, + NeverStencilFunc, + NoBlending, + NoColorSpace, + NoToneMapping, + NormalAnimationBlendMode, + NormalBlending, + NotEqualCompare, + NotEqualDepth, + NotEqualStencilFunc, + NumberKeyframeTrack, + Object3D, + ObjectLoader, + ObjectSpaceNormalMap, + OctahedronGeometry, + OneFactor, + OneMinusConstantAlphaFactor, + OneMinusConstantColorFactor, + OneMinusDstAlphaFactor, + OneMinusDstColorFactor, + OneMinusSrcAlphaFactor, + OneMinusSrcColorFactor, + OrthographicCamera, + P3Primaries, + PCFShadowMap, + PCFSoftShadowMap, + PMREMGenerator, + Path, + PerspectiveCamera, + Plane, + PlaneGeometry, + PlaneHelper, + PointLight, + PointLightHelper, + Points, + PointsMaterial, + PolarGridHelper, + PolyhedronGeometry, + PositionalAudio, + PropertyBinding, + PropertyMixer, + QuadraticBezierCurve, + QuadraticBezierCurve3, + Quaternion, + QuaternionKeyframeTrack, + QuaternionLinearInterpolant, + RED_GREEN_RGTC2_Format, + RED_RGTC1_Format, + REVISION, + RGBADepthPacking, + RGBAFormat, + RGBAIntegerFormat, + RGBA_ASTC_10x10_Format, + RGBA_ASTC_10x5_Format, + RGBA_ASTC_10x6_Format, + RGBA_ASTC_10x8_Format, + RGBA_ASTC_12x10_Format, + RGBA_ASTC_12x12_Format, + RGBA_ASTC_4x4_Format, + RGBA_ASTC_5x4_Format, + RGBA_ASTC_5x5_Format, + RGBA_ASTC_6x5_Format, + RGBA_ASTC_6x6_Format, + RGBA_ASTC_8x5_Format, + RGBA_ASTC_8x6_Format, + RGBA_ASTC_8x8_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_2BPPV1_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT1_Format, + RGBA_S3TC_DXT3_Format, + RGBA_S3TC_DXT5_Format, + RGBDepthPacking, + RGBFormat, + RGBIntegerFormat, + RGB_BPTC_SIGNED_Format, + RGB_BPTC_UNSIGNED_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_2BPPV1_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_S3TC_DXT1_Format, + RGDepthPacking, + RGFormat, + RGIntegerFormat, + RawShaderMaterial, + Ray, + Raycaster, + Rec709Primaries, + RectAreaLight, + RedFormat, + RedIntegerFormat, + ReinhardToneMapping, + RenderTarget, + RepeatWrapping, + ReplaceStencilOp, + ReverseSubtractEquation, + RingGeometry, + SIGNED_RED_GREEN_RGTC2_Format, + SIGNED_RED_RGTC1_Format, + SRGBColorSpace, + SRGBTransfer, + Scene, + ShaderChunk, + ShaderLib, + ShaderMaterial, + ShadowMaterial, + Shape, + ShapeGeometry, + ShapePath, + ShapeUtils, + ShortType, + Skeleton, + SkeletonHelper, + SkinnedMesh, + Source, + Sphere, + SphereGeometry, + Spherical, + SphericalHarmonics3, + SplineCurve, + SpotLight, + SpotLightHelper, + Sprite, + SpriteMaterial, + SrcAlphaFactor, + SrcAlphaSaturateFactor, + SrcColorFactor, + StaticCopyUsage, + StaticDrawUsage, + StaticReadUsage, + StereoCamera, + StreamCopyUsage, + StreamDrawUsage, + StreamReadUsage, + StringKeyframeTrack, + SubtractEquation, + SubtractiveBlending, + TOUCH, + TangentSpaceNormalMap, + TetrahedronGeometry, + Texture, + TextureLoader, + TextureUtils, + TorusGeometry, + TorusKnotGeometry, + Triangle, + TriangleFanDrawMode, + TriangleStripDrawMode, + TrianglesDrawMode, + TubeGeometry, + UVMapping, + Uint16BufferAttribute, + Uint32BufferAttribute, + Uint8BufferAttribute, + Uint8ClampedBufferAttribute, + Uniform, + UniformsGroup, + UniformsLib, + UniformsUtils, + UnsignedByteType, + UnsignedInt248Type, + UnsignedInt5999Type, + UnsignedIntType, + UnsignedShort4444Type, + UnsignedShort5551Type, + UnsignedShortType, + VSMShadowMap, + Vector2, + Vector3, + Vector4, + VectorKeyframeTrack, + VideoTexture, + WebGL3DRenderTarget, + WebGLArrayRenderTarget, + WebGLCoordinateSystem, + WebGLCubeRenderTarget, + WebGLMultipleRenderTargets, + WebGLRenderTarget, + WebGLRenderer, + WebGLUtils, + WebGPUCoordinateSystem, + WireframeGeometry, + WrapAroundEnding, + ZeroCurvatureEnding, + ZeroFactor, + ZeroSlopeEnding, + ZeroStencilOp, + createCanvasElement +} from "./chunk-33KXLYU5.js"; export { ACESFilmicToneMapping, AddEquation, @@ -31122,13 +838,4 @@ export { ZeroStencilOp, createCanvasElement }; -/*! Bundled license information: - -three/build/three.module.js: - (** - * @license - * Copyright 2010-2024 Three.js Authors - * SPDX-License-Identifier: MIT - *) -*/ //# sourceMappingURL=three.js.map diff --git a/site/interface/site/node_modules/.vite/deps/three.js.map b/site/interface/site/node_modules/.vite/deps/three.js.map index cd4aafa..9865211 100644 --- a/site/interface/site/node_modules/.vite/deps/three.js.map +++ b/site/interface/site/node_modules/.vite/deps/three.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../three/build/three.module.js"], - "sourcesContent": ["/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '167';\n\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst ConstantColorFactor = 211;\nconst OneMinusConstantColorFactor = 212;\nconst ConstantAlphaFactor = 213;\nconst OneMinusConstantAlphaFactor = 214;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\nconst AgXToneMapping = 6;\nconst NeutralToneMapping = 7;\nconst AttachedBindMode = 'attached';\nconst DetachedBindMode = 'detached';\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst UnsignedInt5999Type = 35902;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RGB_BPTC_SIGNED_Format = 36494;\nconst RGB_BPTC_UNSIGNED_Format = 36495;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst RGBDepthPacking = 3202;\nconst RGDepthPacking = 3203;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\nconst LinearDisplayP3ColorSpace = 'display-p3-linear';\n\nconst LinearTransfer = 'linear';\nconst SRGBTransfer = 'srgb';\n\nconst Rec709Primaries = 'rec709';\nconst P3Primaries = 'p3';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst NeverCompare = 512;\nconst LessCompare = 513;\nconst EqualCompare = 514;\nconst LessEqualCompare = 515;\nconst GreaterCompare = 516;\nconst NotEqualCompare = 517;\nconst GreaterEqualCompare = 518;\nconst AlwaysCompare = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(\n\t0.8224621, 0.177538, 0.0,\n\t0.0331941, 0.9668058, 0.0,\n\t0.0170827, 0.0723974, 0.9105199,\n);\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(\n\t1.2249401, - 0.2249404, 0.0,\n\t- 0.0420569, 1.0420571, 0.0,\n\t- 0.0196376, - 0.0786361, 1.0982735\n);\n\n/**\n * Defines supported color spaces by transfer function and primaries,\n * and provides conversions to/from the Linear-sRGB reference space.\n */\nconst COLOR_SPACES = {\n\t[ LinearSRGBColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color,\n\t\tfromReference: ( color ) => color,\n\t},\n\t[ SRGBColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear(),\n\t\tfromReference: ( color ) => color.convertLinearToSRGB(),\n\t},\n\t[ LinearDisplayP3ColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),\n\t},\n\t[ DisplayP3ColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),\n\t},\n};\n\nconst SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\t_workingColorSpace: LinearSRGBColorSpace,\n\n\tget workingColorSpace() {\n\n\t\treturn this._workingColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tif ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {\n\n\t\t\tthrow new Error( `Unsupported working color space, \"${ colorSpace }\".` );\n\n\t\t}\n\n\t\tthis._workingColorSpace = colorSpace;\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;\n\t\tconst targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;\n\n\t\treturn targetFromReference( sourceToReference( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this._workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this._workingColorSpace );\n\n\t},\n\n\tgetPrimaries: function ( colorSpace ) {\n\n\t\treturn COLOR_SPACES[ colorSpace ].primaries;\n\n\t},\n\n\tgetTransfer: function ( colorSpace ) {\n\n\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\treturn COLOR_SPACES[ colorSpace ].transfer;\n\n\t},\n\n\tgetLuminanceCoefficients: function ( target, colorSpace = this._workingColorSpace ) {\n\n\t\treturn target.fromArray( COLOR_SPACES[ colorSpace ].luminanceCoefficients );\n\n\t},\n\n};\n\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\t\tthis.dataReady = true;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tthis.colorSpace = colorSpace;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass RenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1\n\t\t}, options );\n\n\t\tconst texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\ttexture.flipY = false;\n\t\ttexture.generateMipmaps = options.generateMipmaps;\n\t\ttexture.internalFormat = options.internalFormat;\n\n\t\tthis.textures = [];\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\tthis.depthBuffer = options.depthBuffer;\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\tthis.samples = options.samples;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass WebGLRenderTarget extends RenderTarget {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// sets this quaternion to a uniform random unit quaternnion\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$3.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$3 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$3, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$3 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.isSphere = true;\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$4.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$4.elements[ 0 ] *= invSX;\n\t\t_m1$4.elements[ 1 ] *= invSX;\n\t\t_m1$4.elements[ 2 ] *= invSX;\n\n\t\t_m1$4.elements[ 4 ] *= invSY;\n\t\t_m1$4.elements[ 5 ] *= invSY;\n\t\t_m1$4.elements[ 6 ] *= invSY;\n\n\t\t_m1$4.elements[ 8 ] *= invSZ;\n\t\t_m1$4.elements[ 9 ] *= invSZ;\n\t\t_m1$4.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$4 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$4 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$3 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nconst _childaddedEvent = { type: 'childadded', child: null };\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$3.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$3.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$3 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$3.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$3 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$3.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$3.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$3 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.visibility = this._visibility;\n\t\t\tobject.active = this._active;\n\t\t\tobject.bounds = this._bounds.map( bound => ( {\n\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\tboxMin: bound.box.min.toArray(),\n\t\t\t\tboxMax: bound.box.max.toArray(),\n\n\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\tsphereRadius: bound.sphere.radius,\n\t\t\t\tsphereCenter: bound.sphere.center.toArray()\n\t\t\t} ) );\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) object.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = {\n\t\t\t\t\tcenter: object.boundingSphere.center.toArray(),\n\t\t\t\t\tradius: object.boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = {\n\t\t\t\t\tmin: object.boundingBox.min.toArray(),\n\t\t\t\t\tmax: object.boundingBox.max.toArray()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$3 );\n\t\tconst dot02 = _v0$2.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$2.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nlet _materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\t\tthis.blendAlpha = 0;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {\n\n\t\tconsole.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {\n\n\t\tconsole.warn( 'Material: onBeforeRender() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1$2.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _normalA = /*@__PURE__*/ new Vector3();\nconst _normalB = /*@__PURE__*/ new Vector3();\nconst _normalC = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv1, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv1, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\tconsole.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.forceSinglePass = true;\n\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Copies the result into the target Vector2, where x is width and y is height.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\t\tthis.coordinateSystem = null;\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\t\tcameraPX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$5.center.set( 0, 0, 0 );\n\t\t_sphere$5.radius = 0.7071067811865476;\n\t\t_sphere$5.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute._updateRange; // @deprecated, r159\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 && updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t}\n\n\t\tif ( updateRanges.length !== 0 ) {\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\t// @deprecated, r159\n\t\tif ( updateRange.count !== - 1 ) {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec3 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n\\tvColor.xyz *= batchingColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"\\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\\n\\tvec3( 0.8224621, 0.177538, 0.0 ),\\n\\tvec3( 0.0331941, 0.9668058, 0.0 ),\\n\\tvec3( 0.0170827, 0.0723974, 0.9105199 )\\n);\\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.2249401, - 0.2249404, 0.0 ),\\n\\tvec3( - 0.0420569, 1.0420571, 0.0 ),\\n\\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\\n);\\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\\n}\\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\\n}\\nvec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\t\\n\\t\\tfloat lightToPositionLength = length( lightToPosition );\\n\\t\\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t\\n\\t\\t#else\\n\\t\\t\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _e1$1 = /*@__PURE__*/ new Euler();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\t_e1$1.copy( scene.backgroundRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1$1.x *= - 1; _e1$1.y *= - 1; _e1$1.z *= - 1;\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1$1.y *= - 1;\n\t\t\t\t_e1$1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) );\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ], counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported equirectangular image size is 64 x 32.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported cube size is 16 x 16.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\t\tconst n = this._lodPlanes.length;\n\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tconst array = geometry.morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.remove( array[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else if ( geometryPosition !== undefined ) {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = LessEqualCompare; // #28670\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\tconst encodingPrimaries = ColorManagement.getPrimaries( colorSpace );\n\n\tlet gamutMapping;\n\n\tif ( workingPrimaries === encodingPrimaries ) {\n\n\t\tgamutMapping = '';\n\n\t} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {\n\n\t\tgamutMapping = 'LinearDisplayP3ToLinearSRGB';\n\n\t} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {\n\n\t\tgamutMapping = 'LinearSRGBToLinearDisplayP3';\n\n\t}\n\n\tswitch ( colorSpace ) {\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase LinearDisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t\tcase SRGBColorSpace:\n\t\tcase DisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\treturn `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase AgXToneMapping:\n\t\t\ttoneMappingName = 'AgX';\n\t\t\tbreak;\n\n\t\tcase NeutralToneMapping:\n\t\t\ttoneMappingName = 'Neutral';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0$1 );\n\n\tconst r = _v0$1.x.toFixed( 4 );\n\tconst g = _v0$1.y.toFixed( 4 );\n\tconst b = _v0$1.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id$1 = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id$1 ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\tsupportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading === true,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 19 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1,\n\n\t\t\tnumLightProbes: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {}\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );\n\t\tconst fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null || toVSM === true || fromVSM === true ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\trenderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n\n\n/**\n * Given the width, height, format, and type of a texture. Determines how many\n * bytes must be used to represent the texture.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceAlphaFormat:\n\t\t\treturn width * height * 2;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\nconst TextureUtils = {\n\tcontain,\n\tcover,\n\tfill,\n\tgetByteLength\n};\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\tconsole.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\tconst isUseMultisampledRTT = useMultisampledRTT( renderTarget );\n\t\t\tif ( isUseMultisampledRTT ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\nclass WebXRDepthSensing {\n\n\tconstructor() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t\tthis.depthNear = 0;\n\t\tthis.depthFar = 0;\n\n\t}\n\n\tinit( renderer, depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst texProps = renderer.properties.get( texture );\n\t\t\ttexProps.__webglTexture = depthData.texture;\n\n\t\t\tif ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\t\tcameraXR.layers.enable( 1 );\n\t\tcameraXR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tcamera.near = depthSensing.depthNear;\n\t\t\t\tcamera.far = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t\tcameraL.near = _currentDepthNear;\n\t\t\t\tcameraL.far = _currentDepthFar;\n\t\t\t\tcameraR.near = _currentDepthNear;\n\t\t\t\tcameraR.far = _currentDepthFar;\n\n\t\t\t\tcameraL.updateProjectionMatrix();\n\t\t\t\tcameraR.updateProjectionMatrix();\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\n\t\t\t\tif ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( renderer, depthData, session.renderState );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _e1 = /*@__PURE__*/ new Euler();\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t_e1.copy( envMapRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1.y *= - 1;\n\t\t\t\t_e1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass WebGLRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t} = parameters;\n\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.shadowMap = shadowMap;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = targetFormat === RGBAIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RGIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RedIntegerFormat;\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = targetType === UnsignedByteType ||\n\t\t\t\t\t\ttargetType === UnsignedIntType ||\n\t\t\t\t\t\ttargetType === UnsignedShortType ||\n\t\t\t\t\t\ttargetType === UnsignedInt248Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort4444Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort5551Type;\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tcubeuvmaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( object._multiDrawInstances !== null ) {\n\n\t\t\t\t\trenderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\trenderStateStack.pop();\n\t\t\tcurrentRenderState = null;\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: 4,\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst object = renderItem.object;\n\t\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\t\tconst material = renderItem.material;\n\t\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );\n\t\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet useDefaultFramebuffer = true;\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\t\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound && useDefaultFramebuffer ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\t\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\t\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\n\t\t\t\t\t\t} finally {\n\n\t\t\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn buffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\t// support previous signature with position first\n\t\t\tif ( texture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );\n\n\t\t\t\tposition = arguments[ 0 ] || null;\n\t\t\t\ttexture = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with dstPosition first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );\n\n\t\t\t\tdstPosition = arguments[ 0 ] || null;\n\t\t\t\tsrcTexture = arguments[ 1 ];\n\t\t\t\tdstTexture = arguments[ 2 ];\n\t\t\t\tlevel = arguments[ 3 ] || 0;\n\t\t\t\tsrcRegion = null;\n\n\t\t\t}\n\n\t\t\tlet width, height, minX, minY;\n\t\t\tlet dstX, dstY;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\n\t\t\t} else {\n\n\t\t\t\twidth = srcTexture.image.width;\n\t\t\t\theight = srcTexture.image.height;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t\t// As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with source box first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );\n\n\t\t\t\tsrcRegion = arguments[ 0 ] || null;\n\t\t\t\tdstPosition = arguments[ 1 ] || null;\n\t\t\t\tsrcTexture = arguments[ 2 ];\n\t\t\t\tdstTexture = arguments[ 3 ];\n\t\t\t\tlevel = arguments[ 4 ] || 0;\n\n\t\t\t}\n\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.max.z - srcRegion.min.z;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.min.z;\n\n\t\t\t} else {\n\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tdepth = image.depth;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\t\tgl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\n\t}\n\n}\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\t\tthis.backgroundRotation = new Euler();\n\n\t\tthis.environmentIntensity = 1;\n\t\tthis.environmentRotation = new Euler();\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material;\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = AttachedBindMode;\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix$1 = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix$1;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\t\tthis.morphTexture = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$3 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( drawRange, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: - 1,\n\t\t\t\tcount: - 1,\n\t\t\t\tz: - 1,\n\t\t\t\tindex: - 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = drawRange.start;\n\t\titem.count = drawRange.count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _invMatrixWorld = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _projScreenMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// @TODO: SkinnedMesh support?\n// @TODO: geometry.groups support?\n// @TODO: geometry.drawRange support?\n// @TODO: geometry.morphAttributes support?\n// @TODO: Support uniform parameter per geometry\n// @TODO: Add an \"optimize\" function to pack geometry and remove data gaps\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\nclass BatchedMesh extends Mesh {\n\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\tthis.isBatchedMesh = true;\n\t\tthis.perObjectFrustumCulled = true;\n\t\tthis.sortObjects = true;\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per object\n\t\tthis._drawInfo = [];\n\n\t\t// geometry information\n\t\tthis._drawRanges = [];\n\t\tthis._reservedRanges = [];\n\t\tthis._bounds = [];\n\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tthis._geometryInitialized = false;\n\t\tthis._geometryCount = 0;\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\t\tthis._multiDrawInstances = null;\n\t\tthis._visibilityChanged = true;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxIndexCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst geometryCount = this._geometryCount;\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\taddInstance( geometryId ) {\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tthis._drawInfo.push( {\n\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\n\t\t} );\n\n\t\t// initialize the matrix\n\t\tconst drawId = this._drawInfo.length - 1;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = matricesTexture.image.data;\n\t\t_identityMatrix.toArray( matricesArray, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\treturn drawId;\n\n\t}\n\n\taddGeometry( geometry, vertexCount = - 1, indexCount = - 1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\t// get the necessary range fo the geometry\n\t\tconst reservedRange = {\n\t\t\tvertexStart: - 1,\n\t\t\tvertexCount: - 1,\n\t\t\tindexStart: - 1,\n\t\t\tindexCount: - 1,\n\t\t};\n\n\t\tlet lastRange = null;\n\t\tconst reservedRanges = this._reservedRanges;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst bounds = this._bounds;\n\t\tif ( this._geometryCount !== 0 ) {\n\n\t\t\tlastRange = reservedRanges[ reservedRanges.length - 1 ];\n\n\t\t}\n\n\t\tif ( vertexCount === - 1 ) {\n\n\t\t\treservedRange.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexCount = vertexCount;\n\n\t\t}\n\n\t\tif ( lastRange === null ) {\n\n\t\t\treservedRange.vertexStart = 0;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount;\n\n\t\t}\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tif ( indexCount\t=== - 1 ) {\n\n\t\t\t\treservedRange.indexCount = index.count;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexCount = indexCount;\n\n\t\t\t}\n\n\t\t\tif ( lastRange === null ) {\n\n\t\t\t\treservedRange.indexStart = 0;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexStart = lastRange.indexStart + lastRange.indexCount;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (\n\t\t\treservedRange.indexStart !== - 1 &&\n\t\t\treservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount ||\n\t\t\treservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tconst geometryId = this._geometryCount;\n\t\tthis._geometryCount ++;\n\n\t\t// add the reserved range and draw range objects\n\t\treservedRanges.push( reservedRange );\n\t\tdrawRanges.push( {\n\t\t\tstart: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart,\n\t\t\tcount: - 1\n\t\t} );\n\t\tbounds.push( {\n\t\t\tboxInitialized: false,\n\t\t\tbox: new Box3(),\n\n\t\t\tsphereInitialized: false,\n\t\t\tsphere: new Sphere()\n\t\t} );\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\treturn geometryId;\n\n\t}\n\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst reservedRange = this._reservedRanges[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > reservedRange.indexCount ||\n\t\t\tgeometry.attributes.position.count > reservedRange.vertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry over\n\t\tconst vertexStart = reservedRange.vertexStart;\n\t\tconst vertexCount = reservedRange.vertexCount;\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = vertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, vertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = reservedRange.indexStart;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedRange.indexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, reservedRange.indexCount );\n\n\t\t}\n\n\t\t// store the bounding boxes\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbound.box.copy( geometry.boundingBox );\n\t\t\tbound.boxInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.boxInitialized = false;\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbound.sphere.copy( geometry.boundingSphere );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.sphereInitialized = false;\n\n\t\t}\n\n\t\t// set drawRange count\n\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\tconst posAttr = geometry.getAttribute( 'position' );\n\t\tdrawRange.count = hasIndex ? srcIndex.count : posAttr.count;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn geometryId;\n\n\t}\n\n\t/*\n\tdeleteGeometry( geometryId ) {\n\n\t\t// TODO: delete geometry and associated instances\n\n\t}\n\t*/\n\n\t/*\n\tdeleteInstance( instanceId ) {\n\n\t\t// Note: User needs to call optimize() afterward to pack the data.\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].active = false;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\t*/\n\n\t// get bounding box and compute it if it doesn't exist\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst box = bound.box;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.boxInitialized === false ) {\n\n\t\t\tbox.makeEmpty();\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tbound.boxInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( box );\n\t\treturn target;\n\n\t}\n\n\t// get bounding sphere and compute it if it doesn't exist\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst sphere = bound.sphere;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.sphereInitialized === false ) {\n\n\t\t\tsphere.makeEmpty();\n\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( sphere );\n\t\treturn target;\n\n\t}\n\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\t// @TODO: Map geometryId to index of the arrays because\n\t\t// optimize() can make geometryId mismatch the index\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn matrix.fromArray( matricesArray, instanceId * 16 );\n\n\t}\n\n\tsetColorAt( instanceId, color ) {\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\t// @TODO: Map id to index of the arrays because\n\t\t// optimize() can make id mismatch the index\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcolor.toArray( colorsArray, instanceId * 4 );\n\t\tcolorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( instanceId, color ) {\n\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn color.fromArray( colorsArray, instanceId * 4 );\n\n\t}\n\n\tsetVisibleAt( instanceId, value ) {\n\n\t\t// if the geometry is out of range, not active, or visibility state\n\t\t// does not change then return early\n\t\tconst drawInfo = this._drawInfo;\n\t\tif (\n\t\t\tinstanceId >= drawInfo.length ||\n\t\t\tdrawInfo[ instanceId ].active === false ||\n\t\t\tdrawInfo[ instanceId ].visible === value\n\t\t) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].visible = value;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetVisibleAt( instanceId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn drawInfo[ instanceId ].visible;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! drawInfo[ i ].visible || ! drawInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t// ge the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._drawRanges = source._drawRanges.map( range => ( { ...range } ) );\n\t\tthis._reservedRanges = source._reservedRanges.map( range => ( { ...range } ) );\n\n\t\tthis._drawInfo = source._drawInfo.map( inf => ( { ...inf } ) );\n\t\tthis._bounds = source._bounds.map( bound => ( {\n\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\tbox: bound.box.clone(),\n\n\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\tsphere: bound.sphere.clone()\n\t\t} ) );\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._geometryCount = source._geometryCount;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tconst bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t_projScreenMatrix$2\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$2,\n\t\t\t\trenderer.coordinateSystem\n\t\t\t);\n\n\t\t}\n\n\t\tlet count = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_invMatrixWorld.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _invMatrixWorld );\n\t\t\t_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _invMatrixWorld );\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward );\n\t\t\t\t\t\t_renderList.push( drawRanges[ geometryId ], z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ count ] = item.start * bytesPerElement;\n\t\t\t\tmultiDrawCounts[ count ] = item.count;\n\t\t\t\tindirectArray[ count ] = item.index;\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst range = drawRanges[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ count ] = range.start * bytesPerElement;\n\t\t\t\t\t\tmultiDrawCounts[ count ] = range.count;\n\t\t\t\t\t\tindirectArray[ count ] = i;\n\t\t\t\t\t\tcount ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = count;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: a,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass CompressedCubeTexture extends CompressedTexture {\n\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\tthis.isCompressedCubeTexture = true;\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tlength: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( error );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\t\tif ( this.target !== undefined ) data.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.intensity = 1;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) { // @deprecated, r165\n\n\t\tconsole.warn( 'THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.' );\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._visibility = data.visibility;\n\t\t\t\tobject._active = data.active;\n\t\t\t\tobject._bounds = data.bounds.map( bound => {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tbox.min.fromArray( bound.boxMin );\n\t\t\t\t\tbox.max.fromArray( bound.boxMax );\n\n\t\t\t\t\tconst sphere = new Sphere();\n\t\t\t\t\tsphere.radius = bound.sphereRadius;\n\t\t\t\t\tsphere.center.fromArray( bound.sphereCenter );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\t\t\tbox: box,\n\n\t\t\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\t\t\tsphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\t\t\t\tif ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} ).catch( e => {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t} );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t\treturn imageBitmap;\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tCache.remove( url );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( url, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} ).catch( handleError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, - 1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.\n * theta (the azimuthal angle) is measured from the positive z-axis.\n */\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix2 {\n\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tconsole.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the \"count\" parameter to enable MRT.' );\n\n\t\tsuper( width, height, { ...options, count } );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures;\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, createCanvasElement };\n"], - "mappings": "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", - "names": ["tmp", "sign", "data", "tmp2", "indices", "intersects", "intersect", "width", "height", "depth", "fov", "aspect", "renderer", "scene", "alpha", "attributes", "precision", "x", "fill", "self", "_frustum", "drawBuffers", "scissor", "viewport", "_canvas", "texture", "i", "cameraL", "cameraR", "cameras", "cameraXR", "info", "chunkOffset", "_projScreenMatrix", "_vector3", "stencil", "drawCount", "materials", "currentRenderList", "parameters", "framebuffer", "l", "vertex", "detail", "radius", "azimuth", "px", "py", "bs", "contour", "p", "q", "json", "now", "shapes", "tmpPath", "tmpShape"] + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] } diff --git a/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js b/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js new file mode 100644 index 0000000..8a0412e --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js @@ -0,0 +1,8 @@ +import { + GLTFLoader +} from "./chunk-LBH6F3OL.js"; +import "./chunk-33KXLYU5.js"; +export { + GLTFLoader +}; +//# sourceMappingURL=three_addons_loaders_GLTFLoader__js.js.map diff --git a/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map b/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/site/interface/site/node_modules/.vite/deps/three_examples_jsm_Addons__js.js b/site/interface/site/node_modules/.vite/deps/three_examples_jsm_Addons__js.js new file mode 100644 index 0000000..8ee6f60 --- /dev/null +++ b/site/interface/site/node_modules/.vite/deps/three_examples_jsm_Addons__js.js @@ -0,0 +1,117702 @@ +import { + BufferGeometryUtils_exports, + GLTFLoader, + deepCloneAttribute, + mergeGeometries, + mergeGroups, + mergeVertices +} from "./chunk-LBH6F3OL.js"; +import { + ACESFilmicToneMapping, + AddEquation, + AddOperation, + AdditiveBlending, + AgXToneMapping, + AmbientLight, + AnimationClip, + AnimationMixer, + BackSide, + Bone, + BooleanKeyframeTrack, + Box2, + Box3, + Box3Helper, + BoxGeometry, + BufferAttribute, + BufferGeometry, + BufferGeometryLoader, + Camera, + CanvasTexture, + CapsuleGeometry, + CineonToneMapping, + ClampToEdgeWrapping, + Clock, + Color, + ColorKeyframeTrack, + ColorManagement, + CompressedArrayTexture, + CompressedCubeTexture, + CompressedTexture, + CompressedTextureLoader, + ConeGeometry, + CubeTexture, + Curve, + CustomBlending, + CylinderGeometry, + Data3DTexture, + DataTexture, + DataTextureLoader, + DataUtils, + DefaultLoadingManager, + DepthStencilFormat, + DepthTexture, + DirectionalLight, + DisplayP3ColorSpace, + DoubleSide, + DstAlphaFactor, + DstColorFactor, + DynamicDrawUsage, + EllipseCurve, + EqualStencilFunc, + EquirectangularReflectionMapping, + EquirectangularRefractionMapping, + Euler, + EventDispatcher, + ExtrudeGeometry, + FileLoader, + Float32BufferAttribute, + FloatType, + FramebufferTexture, + FrontSide, + Frustum, + GridHelper, + Group, + HalfFloatType, + IncrementStencilOp, + InstancedBufferGeometry, + InstancedInterleavedBuffer, + InstancedMesh, + Int32BufferAttribute, + InterleavedBuffer, + InterleavedBufferAttribute, + Interpolant, + InterpolateDiscrete, + InterpolateLinear, + Layers, + LightProbe, + Line, + Line3, + LineBasicMaterial, + LineSegments, + LinearDisplayP3ColorSpace, + LinearFilter, + LinearMipMapLinearFilter, + LinearMipmapLinearFilter, + LinearMipmapNearestFilter, + LinearSRGBColorSpace, + LinearToneMapping, + Loader, + LoaderUtils, + LoadingManager, + MOUSE, + Material, + MathUtils, + Matrix3, + Matrix4, + Mesh, + MeshBasicMaterial, + MeshDepthMaterial, + MeshLambertMaterial, + MeshNormalMaterial, + MeshPhongMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MirroredRepeatWrapping, + MultiplyOperation, + NearestFilter, + NearestMipmapLinearFilter, + NearestMipmapNearestFilter, + NeutralToneMapping, + NoBlending, + NoColorSpace, + NormalBlending, + NumberKeyframeTrack, + Object3D, + OctahedronGeometry, + OneMinusSrcAlphaFactor, + OrthographicCamera, + Path, + PerspectiveCamera, + Plane, + PlaneGeometry, + PointLight, + Points, + PointsMaterial, + PropertyBinding, + Quaternion, + QuaternionKeyframeTrack, + REVISION, + RGBADepthPacking, + RGBAFormat, + RGBA_ASTC_4x4_Format, + RGBA_ASTC_6x6_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_2BPPV1_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT1_Format, + RGBA_S3TC_DXT3_Format, + RGBA_S3TC_DXT5_Format, + RGB_BPTC_SIGNED_Format, + RGB_BPTC_UNSIGNED_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_2BPPV1_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_S3TC_DXT1_Format, + RGFormat, + RGIntegerFormat, + RawShaderMaterial, + Ray, + Raycaster, + RectAreaLight, + RedFormat, + RedIntegerFormat, + ReinhardToneMapping, + RepeatWrapping, + SRGBColorSpace, + SRGBTransfer, + Scene, + ShaderChunk, + ShaderLib, + ShaderMaterial, + Shape, + ShapePath as ShapePath2, + ShapeUtils, + Skeleton, + SkeletonHelper, + SkinnedMesh, + Source, + Sphere, + SphereGeometry, + Spherical, + SphericalHarmonics3, + SpotLight, + Sprite, + SpriteMaterial, + SrcAlphaFactor, + StereoCamera, + TOUCH, + TangentSpaceNormalMap, + Texture, + TextureLoader, + TorusGeometry, + Triangle, + UVMapping, + Uint16BufferAttribute, + Uniform, + UniformsLib, + UniformsUtils, + UnsignedByteType, + UnsignedInt248Type, + UnsignedShortType, + Vector2, + Vector3, + Vector4, + VectorKeyframeTrack, + WebGLCubeRenderTarget, + WebGLRenderTarget, + WebGLRenderer, + WireframeGeometry, + ZeroFactor, + __export +} from "./chunk-33KXLYU5.js"; + +// node_modules/three/examples/jsm/animation/AnimationClipCreator.js +var AnimationClipCreator = class { + static CreateRotationAnimation(period, axis = "x") { + const times = [0, period], values2 = [0, 360]; + const trackName = ".rotation[" + axis + "]"; + const track = new NumberKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, period, [track]); + } + static CreateScaleAxisAnimation(period, axis = "x") { + const times = [0, period], values2 = [0, 1]; + const trackName = ".scale[" + axis + "]"; + const track = new NumberKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, period, [track]); + } + static CreateShakeAnimation(duration, shakeScale) { + const times = [], values2 = [], tmp = new Vector3(); + for (let i = 0; i < duration * 10; i++) { + times.push(i / 10); + tmp.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1).multiply(shakeScale).toArray(values2, values2.length); + } + const trackName = ".position"; + const track = new VectorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreatePulsationAnimation(duration, pulseScale) { + const times = [], values2 = [], tmp = new Vector3(); + for (let i = 0; i < duration * 10; i++) { + times.push(i / 10); + const scaleFactor = Math.random() * pulseScale; + tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values2, values2.length); + } + const trackName = ".scale"; + const track = new VectorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreateVisibilityAnimation(duration) { + const times = [0, duration / 2, duration], values2 = [true, false, true]; + const trackName = ".visible"; + const track = new BooleanKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreateMaterialColorAnimation(duration, colors) { + const times = [], values2 = [], timeStep = duration / colors.length; + for (let i = 0; i < colors.length; i++) { + times.push(i * timeStep); + const color = colors[i]; + values2.push(color.r, color.g, color.b); + } + const trackName = ".material.color"; + const track = new ColorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } +}; + +// node_modules/three/examples/jsm/animation/CCDIKSolver.js +var _q = new Quaternion(); +var _targetPos = new Vector3(); +var _targetVec = new Vector3(); +var _effectorPos = new Vector3(); +var _effectorVec = new Vector3(); +var _linkPos = new Vector3(); +var _invLinkQ = new Quaternion(); +var _linkScale = new Vector3(); +var _axis = new Vector3(); +var _vector = new Vector3(); +var _matrix = new Matrix4(); +var CCDIKSolver = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Array} iks + */ + constructor(mesh, iks = []) { + this.mesh = mesh; + this.iks = iks; + this._valid(); + } + /** + * Update all IK bones. + * + * @return {CCDIKSolver} + */ + update() { + const iks = this.iks; + for (let i = 0, il = iks.length; i < il; i++) { + this.updateOne(iks[i]); + } + return this; + } + /** + * Update one IK bone + * + * @param {Object} ik parameter + * @return {CCDIKSolver} + */ + updateOne(ik) { + const bones = this.mesh.skeleton.bones; + const math = Math; + const effector = bones[ik.effector]; + const target = bones[ik.target]; + _targetPos.setFromMatrixPosition(target.matrixWorld); + const links = ik.links; + const iteration = ik.iteration !== void 0 ? ik.iteration : 1; + for (let i = 0; i < iteration; i++) { + let rotated = false; + for (let j = 0, jl = links.length; j < jl; j++) { + const link = bones[links[j].index]; + if (links[j].enabled === false) break; + const limitation = links[j].limitation; + const rotationMin = links[j].rotationMin; + const rotationMax = links[j].rotationMax; + link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale); + _invLinkQ.invert(); + _effectorPos.setFromMatrixPosition(effector.matrixWorld); + _effectorVec.subVectors(_effectorPos, _linkPos); + _effectorVec.applyQuaternion(_invLinkQ); + _effectorVec.normalize(); + _targetVec.subVectors(_targetPos, _linkPos); + _targetVec.applyQuaternion(_invLinkQ); + _targetVec.normalize(); + let angle = _targetVec.dot(_effectorVec); + if (angle > 1) { + angle = 1; + } else if (angle < -1) { + angle = -1; + } + angle = math.acos(angle); + if (angle < 1e-5) continue; + if (ik.minAngle !== void 0 && angle < ik.minAngle) { + angle = ik.minAngle; + } + if (ik.maxAngle !== void 0 && angle > ik.maxAngle) { + angle = ik.maxAngle; + } + _axis.crossVectors(_effectorVec, _targetVec); + _axis.normalize(); + _q.setFromAxisAngle(_axis, angle); + link.quaternion.multiply(_q); + if (limitation !== void 0) { + let c2 = link.quaternion.w; + if (c2 > 1) c2 = 1; + const c22 = math.sqrt(1 - c2 * c2); + link.quaternion.set( + limitation.x * c22, + limitation.y * c22, + limitation.z * c22, + c2 + ); + } + if (rotationMin !== void 0) { + link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin)); + } + if (rotationMax !== void 0) { + link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax)); + } + link.updateMatrixWorld(true); + rotated = true; + } + if (!rotated) break; + } + return this; + } + /** + * Creates Helper + * + * @param {number} sphereSize + * @return {CCDIKHelper} + */ + createHelper(sphereSize) { + return new CCDIKHelper(this.mesh, this.iks, sphereSize); + } + // private methods + _valid() { + const iks = this.iks; + const bones = this.mesh.skeleton.bones; + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const effector = bones[ik.effector]; + const links = ik.links; + let link0, link1; + link0 = effector; + for (let j = 0, jl = links.length; j < jl; j++) { + link1 = bones[links[j].index]; + if (link0.parent !== link1) { + console.warn("THREE.CCDIKSolver: bone " + link0.name + " is not the child of bone " + link1.name); + } + link0 = link1; + } + } + } +}; +function getPosition(bone, matrixWorldInv) { + return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv); +} +function setPositionOfBoneToAttributeArray(array, index2, bone, matrixWorldInv) { + const v = getPosition(bone, matrixWorldInv); + array[index2 * 3 + 0] = v.x; + array[index2 * 3 + 1] = v.y; + array[index2 * 3 + 2] = v.z; +} +var CCDIKHelper = class extends Object3D { + constructor(mesh, iks = [], sphereSize = 0.25) { + super(); + this.root = mesh; + this.iks = iks; + this.matrix.copy(mesh.matrixWorld); + this.matrixAutoUpdate = false; + this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8); + this.targetSphereMaterial = new MeshBasicMaterial({ + color: new Color(16746632), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.effectorSphereMaterial = new MeshBasicMaterial({ + color: new Color(8978312), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.linkSphereMaterial = new MeshBasicMaterial({ + color: new Color(8947967), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.lineMaterial = new LineBasicMaterial({ + color: new Color(16711680), + depthTest: false, + depthWrite: false, + transparent: true + }); + this._init(); + } + /** + * Updates IK bones visualization. + */ + updateMatrixWorld(force) { + const mesh = this.root; + if (this.visible) { + let offset = 0; + const iks = this.iks; + const bones = mesh.skeleton.bones; + _matrix.copy(mesh.matrixWorld).invert(); + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const targetBone = bones[ik.target]; + const effectorBone = bones[ik.effector]; + const targetMesh = this.children[offset++]; + const effectorMesh = this.children[offset++]; + targetMesh.position.copy(getPosition(targetBone, _matrix)); + effectorMesh.position.copy(getPosition(effectorBone, _matrix)); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = ik.links[j]; + const linkBone = bones[link.index]; + const linkMesh = this.children[offset++]; + linkMesh.position.copy(getPosition(linkBone, _matrix)); + } + const line2 = this.children[offset++]; + const array = line2.geometry.attributes.position.array; + setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix); + setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = ik.links[j]; + const linkBone = bones[link.index]; + setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix); + } + line2.geometry.attributes.position.needsUpdate = true; + } + } + this.matrix.copy(mesh.matrixWorld); + super.updateMatrixWorld(force); + } + /** + * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. + */ + dispose() { + this.sphereGeometry.dispose(); + this.targetSphereMaterial.dispose(); + this.effectorSphereMaterial.dispose(); + this.linkSphereMaterial.dispose(); + this.lineMaterial.dispose(); + const children = this.children; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.isLine) child.geometry.dispose(); + } + } + // private method + _init() { + const scope = this; + const iks = this.iks; + function createLineGeometry(ik) { + const geometry = new BufferGeometry(); + const vertices = new Float32Array((2 + ik.links.length) * 3); + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + return geometry; + } + function createTargetMesh() { + return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial); + } + function createEffectorMesh() { + return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial); + } + function createLinkMesh() { + return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial); + } + function createLine(ik) { + return new Line(createLineGeometry(ik), scope.lineMaterial); + } + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + this.add(createTargetMesh()); + this.add(createEffectorMesh()); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + this.add(createLinkMesh()); + } + this.add(createLine(ik)); + } + } +}; + +// node_modules/three/examples/jsm/animation/MMDPhysics.js +var MMDPhysics = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Array} rigidBodyParams + * @param {Array} (optional) constraintParams + * @param {Object} params - (optional) + * @param {Number} params.unitStep - Default is 1 / 65. + * @param {Integer} params.maxStepNum - Default is 3. + * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 ) + */ + constructor(mesh, rigidBodyParams, constraintParams = [], params = {}) { + if (typeof Ammo === "undefined") { + throw new Error("THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js"); + } + this.manager = new ResourceManager(); + this.mesh = mesh; + this.unitStep = params.unitStep !== void 0 ? params.unitStep : 1 / 65; + this.maxStepNum = params.maxStepNum !== void 0 ? params.maxStepNum : 3; + this.gravity = new Vector3(0, -9.8 * 10, 0); + if (params.gravity !== void 0) this.gravity.copy(params.gravity); + this.world = params.world !== void 0 ? params.world : null; + this.bodies = []; + this.constraints = []; + this._init(mesh, rigidBodyParams, constraintParams); + } + /** + * Advances Physics calculation and updates bones. + * + * @param {Number} delta - time in second + * @return {MMDPhysics} + */ + update(delta) { + const manager = this.manager; + const mesh = this.mesh; + let isNonDefaultScale = false; + const position2 = manager.allocThreeVector3(); + const quaternion = manager.allocThreeQuaternion(); + const scale2 = manager.allocThreeVector3(); + mesh.matrixWorld.decompose(position2, quaternion, scale2); + if (scale2.x !== 1 || scale2.y !== 1 || scale2.z !== 1) { + isNonDefaultScale = true; + } + let parent2; + if (isNonDefaultScale) { + parent2 = mesh.parent; + if (parent2 !== null) mesh.parent = null; + scale2.copy(this.mesh.scale); + mesh.scale.set(1, 1, 1); + mesh.updateMatrixWorld(true); + } + this._updateRigidBodies(); + this._stepSimulation(delta); + this._updateBones(); + if (isNonDefaultScale) { + if (parent2 !== null) mesh.parent = parent2; + mesh.scale.copy(scale2); + } + manager.freeThreeVector3(scale2); + manager.freeThreeQuaternion(quaternion); + manager.freeThreeVector3(position2); + return this; + } + /** + * Resets rigid bodies transorm to current bone's. + * + * @return {MMDPhysics} + */ + reset() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].reset(); + } + return this; + } + /** + * Warm ups Rigid bodies. Calculates cycles steps. + * + * @param {Integer} cycles + * @return {MMDPhysics} + */ + warmup(cycles) { + for (let i = 0; i < cycles; i++) { + this.update(1 / 60); + } + return this; + } + /** + * Sets gravity. + * + * @param {Vector3} gravity + * @return {MMDPhysicsHelper} + */ + setGravity(gravity) { + this.world.setGravity(new Ammo.btVector3(gravity.x, gravity.y, gravity.z)); + this.gravity.copy(gravity); + return this; + } + /** + * Creates MMDPhysicsHelper + * + * @return {MMDPhysicsHelper} + */ + createHelper() { + return new MMDPhysicsHelper(this.mesh, this); + } + // private methods + _init(mesh, rigidBodyParams, constraintParams) { + const manager = this.manager; + const parent2 = mesh.parent; + if (parent2 !== null) mesh.parent = null; + const currentPosition = manager.allocThreeVector3(); + const currentQuaternion = manager.allocThreeQuaternion(); + const currentScale = manager.allocThreeVector3(); + currentPosition.copy(mesh.position); + currentQuaternion.copy(mesh.quaternion); + currentScale.copy(mesh.scale); + mesh.position.set(0, 0, 0); + mesh.quaternion.set(0, 0, 0, 1); + mesh.scale.set(1, 1, 1); + mesh.updateMatrixWorld(true); + if (this.world === null) { + this.world = this._createWorld(); + this.setGravity(this.gravity); + } + this._initRigidBodies(rigidBodyParams); + this._initConstraints(constraintParams); + if (parent2 !== null) mesh.parent = parent2; + mesh.position.copy(currentPosition); + mesh.quaternion.copy(currentQuaternion); + mesh.scale.copy(currentScale); + mesh.updateMatrixWorld(true); + this.reset(); + manager.freeThreeVector3(currentPosition); + manager.freeThreeQuaternion(currentQuaternion); + manager.freeThreeVector3(currentScale); + } + _createWorld() { + const config = new Ammo.btDefaultCollisionConfiguration(); + const dispatcher = new Ammo.btCollisionDispatcher(config); + const cache = new Ammo.btDbvtBroadphase(); + const solver = new Ammo.btSequentialImpulseConstraintSolver(); + const world2 = new Ammo.btDiscreteDynamicsWorld(dispatcher, cache, solver, config); + return world2; + } + _initRigidBodies(rigidBodies) { + for (let i = 0, il = rigidBodies.length; i < il; i++) { + this.bodies.push(new RigidBody( + this.mesh, + this.world, + rigidBodies[i], + this.manager + )); + } + } + _initConstraints(constraints) { + for (let i = 0, il = constraints.length; i < il; i++) { + const params = constraints[i]; + const bodyA = this.bodies[params.rigidBodyIndex1]; + const bodyB = this.bodies[params.rigidBodyIndex2]; + this.constraints.push(new Constraint(this.mesh, this.world, bodyA, bodyB, params, this.manager)); + } + } + _stepSimulation(delta) { + const unitStep = this.unitStep; + let stepTime = delta; + let maxStepNum = (delta / unitStep | 0) + 1; + if (stepTime < unitStep) { + stepTime = unitStep; + maxStepNum = 1; + } + if (maxStepNum > this.maxStepNum) { + maxStepNum = this.maxStepNum; + } + this.world.stepSimulation(stepTime, maxStepNum, unitStep); + } + _updateRigidBodies() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].updateFromBone(); + } + } + _updateBones() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].updateBone(); + } + } +}; +var ResourceManager = class { + constructor() { + this.threeVector3s = []; + this.threeMatrix4s = []; + this.threeQuaternions = []; + this.threeEulers = []; + this.transforms = []; + this.quaternions = []; + this.vector3s = []; + } + allocThreeVector3() { + return this.threeVector3s.length > 0 ? this.threeVector3s.pop() : new Vector3(); + } + freeThreeVector3(v) { + this.threeVector3s.push(v); + } + allocThreeMatrix4() { + return this.threeMatrix4s.length > 0 ? this.threeMatrix4s.pop() : new Matrix4(); + } + freeThreeMatrix4(m) { + this.threeMatrix4s.push(m); + } + allocThreeQuaternion() { + return this.threeQuaternions.length > 0 ? this.threeQuaternions.pop() : new Quaternion(); + } + freeThreeQuaternion(q2) { + this.threeQuaternions.push(q2); + } + allocThreeEuler() { + return this.threeEulers.length > 0 ? this.threeEulers.pop() : new Euler(); + } + freeThreeEuler(e) { + this.threeEulers.push(e); + } + allocTransform() { + return this.transforms.length > 0 ? this.transforms.pop() : new Ammo.btTransform(); + } + freeTransform(t3) { + this.transforms.push(t3); + } + allocQuaternion() { + return this.quaternions.length > 0 ? this.quaternions.pop() : new Ammo.btQuaternion(); + } + freeQuaternion(q2) { + this.quaternions.push(q2); + } + allocVector3() { + return this.vector3s.length > 0 ? this.vector3s.pop() : new Ammo.btVector3(); + } + freeVector3(v) { + this.vector3s.push(v); + } + setIdentity(t3) { + t3.setIdentity(); + } + getBasis(t3) { + var q2 = this.allocQuaternion(); + t3.getBasis().getRotation(q2); + return q2; + } + getBasisAsMatrix3(t3) { + var q2 = this.getBasis(t3); + var m = this.quaternionToMatrix3(q2); + this.freeQuaternion(q2); + return m; + } + getOrigin(t3) { + return t3.getOrigin(); + } + setOrigin(t3, v) { + t3.getOrigin().setValue(v.x(), v.y(), v.z()); + } + copyOrigin(t1, t22) { + var o = t22.getOrigin(); + this.setOrigin(t1, o); + } + setBasis(t3, q2) { + t3.setRotation(q2); + } + setBasisFromMatrix3(t3, m) { + var q2 = this.matrix3ToQuaternion(m); + this.setBasis(t3, q2); + this.freeQuaternion(q2); + } + setOriginFromArray3(t3, a2) { + t3.getOrigin().setValue(a2[0], a2[1], a2[2]); + } + setOriginFromThreeVector3(t3, v) { + t3.getOrigin().setValue(v.x, v.y, v.z); + } + setBasisFromArray3(t3, a2) { + var thQ = this.allocThreeQuaternion(); + var thE = this.allocThreeEuler(); + thE.set(a2[0], a2[1], a2[2]); + this.setBasisFromThreeQuaternion(t3, thQ.setFromEuler(thE)); + this.freeThreeEuler(thE); + this.freeThreeQuaternion(thQ); + } + setBasisFromThreeQuaternion(t3, a2) { + var q2 = this.allocQuaternion(); + q2.setX(a2.x); + q2.setY(a2.y); + q2.setZ(a2.z); + q2.setW(a2.w); + this.setBasis(t3, q2); + this.freeQuaternion(q2); + } + multiplyTransforms(t1, t22) { + var t3 = this.allocTransform(); + this.setIdentity(t3); + var m1 = this.getBasisAsMatrix3(t1); + var m2 = this.getBasisAsMatrix3(t22); + var o1 = this.getOrigin(t1); + var o2 = this.getOrigin(t22); + var v12 = this.multiplyMatrix3ByVector3(m1, o2); + var v2 = this.addVector3(v12, o1); + this.setOrigin(t3, v2); + var m3 = this.multiplyMatrices3(m1, m2); + this.setBasisFromMatrix3(t3, m3); + this.freeVector3(v12); + this.freeVector3(v2); + return t3; + } + inverseTransform(t3) { + var t22 = this.allocTransform(); + var m1 = this.getBasisAsMatrix3(t3); + var o = this.getOrigin(t3); + var m2 = this.transposeMatrix3(m1); + var v12 = this.negativeVector3(o); + var v2 = this.multiplyMatrix3ByVector3(m2, v12); + this.setOrigin(t22, v2); + this.setBasisFromMatrix3(t22, m2); + this.freeVector3(v12); + this.freeVector3(v2); + return t22; + } + multiplyMatrices3(m1, m2) { + var m3 = []; + var v10 = this.rowOfMatrix3(m1, 0); + var v11 = this.rowOfMatrix3(m1, 1); + var v12 = this.rowOfMatrix3(m1, 2); + var v20 = this.columnOfMatrix3(m2, 0); + var v21 = this.columnOfMatrix3(m2, 1); + var v22 = this.columnOfMatrix3(m2, 2); + m3[0] = this.dotVectors3(v10, v20); + m3[1] = this.dotVectors3(v10, v21); + m3[2] = this.dotVectors3(v10, v22); + m3[3] = this.dotVectors3(v11, v20); + m3[4] = this.dotVectors3(v11, v21); + m3[5] = this.dotVectors3(v11, v22); + m3[6] = this.dotVectors3(v12, v20); + m3[7] = this.dotVectors3(v12, v21); + m3[8] = this.dotVectors3(v12, v22); + this.freeVector3(v10); + this.freeVector3(v11); + this.freeVector3(v12); + this.freeVector3(v20); + this.freeVector3(v21); + this.freeVector3(v22); + return m3; + } + addVector3(v12, v2) { + var v = this.allocVector3(); + v.setValue(v12.x() + v2.x(), v12.y() + v2.y(), v12.z() + v2.z()); + return v; + } + dotVectors3(v12, v2) { + return v12.x() * v2.x() + v12.y() * v2.y() + v12.z() * v2.z(); + } + rowOfMatrix3(m, i) { + var v = this.allocVector3(); + v.setValue(m[i * 3 + 0], m[i * 3 + 1], m[i * 3 + 2]); + return v; + } + columnOfMatrix3(m, i) { + var v = this.allocVector3(); + v.setValue(m[i + 0], m[i + 3], m[i + 6]); + return v; + } + negativeVector3(v) { + var v2 = this.allocVector3(); + v2.setValue(-v.x(), -v.y(), -v.z()); + return v2; + } + multiplyMatrix3ByVector3(m, v) { + var v4 = this.allocVector3(); + var v0 = this.rowOfMatrix3(m, 0); + var v12 = this.rowOfMatrix3(m, 1); + var v2 = this.rowOfMatrix3(m, 2); + var x2 = this.dotVectors3(v0, v); + var y2 = this.dotVectors3(v12, v); + var z = this.dotVectors3(v2, v); + v4.setValue(x2, y2, z); + this.freeVector3(v0); + this.freeVector3(v12); + this.freeVector3(v2); + return v4; + } + transposeMatrix3(m) { + var m2 = []; + m2[0] = m[0]; + m2[1] = m[3]; + m2[2] = m[6]; + m2[3] = m[1]; + m2[4] = m[4]; + m2[5] = m[7]; + m2[6] = m[2]; + m2[7] = m[5]; + m2[8] = m[8]; + return m2; + } + quaternionToMatrix3(q2) { + var m = []; + var x2 = q2.x(); + var y2 = q2.y(); + var z = q2.z(); + var w = q2.w(); + var xx = x2 * x2; + var yy = y2 * y2; + var zz = z * z; + var xy = x2 * y2; + var yz = y2 * z; + var zx = z * x2; + var xw = x2 * w; + var yw = y2 * w; + var zw = z * w; + m[0] = 1 - 2 * (yy + zz); + m[1] = 2 * (xy - zw); + m[2] = 2 * (zx + yw); + m[3] = 2 * (xy + zw); + m[4] = 1 - 2 * (zz + xx); + m[5] = 2 * (yz - xw); + m[6] = 2 * (zx - yw); + m[7] = 2 * (yz + xw); + m[8] = 1 - 2 * (xx + yy); + return m; + } + matrix3ToQuaternion(m) { + var t3 = m[0] + m[4] + m[8]; + var s, x2, y2, z, w; + if (t3 > 0) { + s = Math.sqrt(t3 + 1) * 2; + w = 0.25 * s; + x2 = (m[7] - m[5]) / s; + y2 = (m[2] - m[6]) / s; + z = (m[3] - m[1]) / s; + } else if (m[0] > m[4] && m[0] > m[8]) { + s = Math.sqrt(1 + m[0] - m[4] - m[8]) * 2; + w = (m[7] - m[5]) / s; + x2 = 0.25 * s; + y2 = (m[1] + m[3]) / s; + z = (m[2] + m[6]) / s; + } else if (m[4] > m[8]) { + s = Math.sqrt(1 + m[4] - m[0] - m[8]) * 2; + w = (m[2] - m[6]) / s; + x2 = (m[1] + m[3]) / s; + y2 = 0.25 * s; + z = (m[5] + m[7]) / s; + } else { + s = Math.sqrt(1 + m[8] - m[0] - m[4]) * 2; + w = (m[3] - m[1]) / s; + x2 = (m[2] + m[6]) / s; + y2 = (m[5] + m[7]) / s; + z = 0.25 * s; + } + var q2 = this.allocQuaternion(); + q2.setX(x2); + q2.setY(y2); + q2.setZ(z); + q2.setW(w); + return q2; + } +}; +var RigidBody = class { + constructor(mesh, world2, params, manager) { + this.mesh = mesh; + this.world = world2; + this.params = params; + this.manager = manager; + this.body = null; + this.bone = null; + this.boneOffsetForm = null; + this.boneOffsetFormInverse = null; + this._init(); + } + /** + * Resets rigid body transform to the current bone's. + * + * @return {RigidBody} + */ + reset() { + this._setTransformFromBone(); + return this; + } + /** + * Updates rigid body's transform from the current bone. + * + * @return {RidigBody} + */ + updateFromBone() { + if (this.params.boneIndex !== -1 && this.params.type === 0) { + this._setTransformFromBone(); + } + return this; + } + /** + * Updates bone from the current ridid body's transform. + * + * @return {RidigBody} + */ + updateBone() { + if (this.params.type === 0 || this.params.boneIndex === -1) { + return this; + } + this._updateBoneRotation(); + if (this.params.type === 1) { + this._updateBonePosition(); + } + this.bone.updateMatrixWorld(true); + if (this.params.type === 2) { + this._setPositionFromBone(); + } + return this; + } + // private methods + _init() { + function generateShape(p2) { + switch (p2.shapeType) { + case 0: + return new Ammo.btSphereShape(p2.width); + case 1: + return new Ammo.btBoxShape(new Ammo.btVector3(p2.width, p2.height, p2.depth)); + case 2: + return new Ammo.btCapsuleShape(p2.width, p2.height); + default: + throw new Error("unknown shape type " + p2.shapeType); + } + } + const manager = this.manager; + const params = this.params; + const bones = this.mesh.skeleton.bones; + const bone = params.boneIndex === -1 ? new Bone() : bones[params.boneIndex]; + const shape = generateShape(params); + const weight = params.type === 0 ? 0 : params.weight; + const localInertia = manager.allocVector3(); + localInertia.setValue(0, 0, 0); + if (weight !== 0) { + shape.calculateLocalInertia(weight, localInertia); + } + const boneOffsetForm = manager.allocTransform(); + manager.setIdentity(boneOffsetForm); + manager.setOriginFromArray3(boneOffsetForm, params.position); + manager.setBasisFromArray3(boneOffsetForm, params.rotation); + const vector = manager.allocThreeVector3(); + const boneForm = manager.allocTransform(); + manager.setIdentity(boneForm); + manager.setOriginFromThreeVector3(boneForm, bone.getWorldPosition(vector)); + const form = manager.multiplyTransforms(boneForm, boneOffsetForm); + const state = new Ammo.btDefaultMotionState(form); + const info = new Ammo.btRigidBodyConstructionInfo(weight, state, shape, localInertia); + info.set_m_friction(params.friction); + info.set_m_restitution(params.restitution); + const body = new Ammo.btRigidBody(info); + if (params.type === 0) { + body.setCollisionFlags(body.getCollisionFlags() | 2); + body.setActivationState(4); + } + body.setDamping(params.positionDamping, params.rotationDamping); + body.setSleepingThresholds(0, 0); + this.world.addRigidBody(body, 1 << params.groupIndex, params.groupTarget); + this.body = body; + this.bone = bone; + this.boneOffsetForm = boneOffsetForm; + this.boneOffsetFormInverse = manager.inverseTransform(boneOffsetForm); + manager.freeVector3(localInertia); + manager.freeTransform(form); + manager.freeTransform(boneForm); + manager.freeThreeVector3(vector); + } + _getBoneTransform() { + const manager = this.manager; + const p2 = manager.allocThreeVector3(); + const q2 = manager.allocThreeQuaternion(); + const s = manager.allocThreeVector3(); + this.bone.matrixWorld.decompose(p2, q2, s); + const tr = manager.allocTransform(); + manager.setOriginFromThreeVector3(tr, p2); + manager.setBasisFromThreeQuaternion(tr, q2); + const form = manager.multiplyTransforms(tr, this.boneOffsetForm); + manager.freeTransform(tr); + manager.freeThreeVector3(s); + manager.freeThreeQuaternion(q2); + manager.freeThreeVector3(p2); + return form; + } + _getWorldTransformForBone() { + const manager = this.manager; + const tr = this.body.getCenterOfMassTransform(); + return manager.multiplyTransforms(tr, this.boneOffsetFormInverse); + } + _setTransformFromBone() { + const manager = this.manager; + const form = this._getBoneTransform(); + this.body.setCenterOfMassTransform(form); + this.body.getMotionState().setWorldTransform(form); + manager.freeTransform(form); + } + _setPositionFromBone() { + const manager = this.manager; + const form = this._getBoneTransform(); + const tr = manager.allocTransform(); + this.body.getMotionState().getWorldTransform(tr); + manager.copyOrigin(tr, form); + this.body.setCenterOfMassTransform(tr); + this.body.getMotionState().setWorldTransform(tr); + manager.freeTransform(tr); + manager.freeTransform(form); + } + _updateBoneRotation() { + const manager = this.manager; + const tr = this._getWorldTransformForBone(); + const q2 = manager.getBasis(tr); + const thQ = manager.allocThreeQuaternion(); + const thQ2 = manager.allocThreeQuaternion(); + const thQ3 = manager.allocThreeQuaternion(); + thQ.set(q2.x(), q2.y(), q2.z(), q2.w()); + thQ2.setFromRotationMatrix(this.bone.matrixWorld); + thQ2.conjugate(); + thQ2.multiply(thQ); + thQ3.setFromRotationMatrix(this.bone.matrix); + this.bone.quaternion.copy(thQ2.multiply(thQ3).normalize()); + manager.freeThreeQuaternion(thQ); + manager.freeThreeQuaternion(thQ2); + manager.freeThreeQuaternion(thQ3); + manager.freeQuaternion(q2); + manager.freeTransform(tr); + } + _updateBonePosition() { + const manager = this.manager; + const tr = this._getWorldTransformForBone(); + const thV = manager.allocThreeVector3(); + const o = manager.getOrigin(tr); + thV.set(o.x(), o.y(), o.z()); + if (this.bone.parent) { + this.bone.parent.worldToLocal(thV); + } + this.bone.position.copy(thV); + manager.freeThreeVector3(thV); + manager.freeTransform(tr); + } +}; +var Constraint = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Ammo.btDiscreteDynamicsWorld} world + * @param {RigidBody} bodyA + * @param {RigidBody} bodyB + * @param {Object} params + * @param {ResourceManager} manager + */ + constructor(mesh, world2, bodyA, bodyB, params, manager) { + this.mesh = mesh; + this.world = world2; + this.bodyA = bodyA; + this.bodyB = bodyB; + this.params = params; + this.manager = manager; + this.constraint = null; + this._init(); + } + // private method + _init() { + const manager = this.manager; + const params = this.params; + const bodyA = this.bodyA; + const bodyB = this.bodyB; + const form = manager.allocTransform(); + manager.setIdentity(form); + manager.setOriginFromArray3(form, params.position); + manager.setBasisFromArray3(form, params.rotation); + const formA = manager.allocTransform(); + const formB = manager.allocTransform(); + bodyA.body.getMotionState().getWorldTransform(formA); + bodyB.body.getMotionState().getWorldTransform(formB); + const formInverseA = manager.inverseTransform(formA); + const formInverseB = manager.inverseTransform(formB); + const formA2 = manager.multiplyTransforms(formInverseA, form); + const formB2 = manager.multiplyTransforms(formInverseB, form); + const constraint = new Ammo.btGeneric6DofSpringConstraint(bodyA.body, bodyB.body, formA2, formB2, true); + const lll = manager.allocVector3(); + const lul = manager.allocVector3(); + const all = manager.allocVector3(); + const aul = manager.allocVector3(); + lll.setValue( + params.translationLimitation1[0], + params.translationLimitation1[1], + params.translationLimitation1[2] + ); + lul.setValue( + params.translationLimitation2[0], + params.translationLimitation2[1], + params.translationLimitation2[2] + ); + all.setValue( + params.rotationLimitation1[0], + params.rotationLimitation1[1], + params.rotationLimitation1[2] + ); + aul.setValue( + params.rotationLimitation2[0], + params.rotationLimitation2[1], + params.rotationLimitation2[2] + ); + constraint.setLinearLowerLimit(lll); + constraint.setLinearUpperLimit(lul); + constraint.setAngularLowerLimit(all); + constraint.setAngularUpperLimit(aul); + for (let i = 0; i < 3; i++) { + if (params.springPosition[i] !== 0) { + constraint.enableSpring(i, true); + constraint.setStiffness(i, params.springPosition[i]); + } + } + for (let i = 0; i < 3; i++) { + if (params.springRotation[i] !== 0) { + constraint.enableSpring(i + 3, true); + constraint.setStiffness(i + 3, params.springRotation[i]); + } + } + if (constraint.setParam !== void 0) { + for (let i = 0; i < 6; i++) { + constraint.setParam(2, 0.475, i); + } + } + this.world.addConstraint(constraint, true); + this.constraint = constraint; + manager.freeTransform(form); + manager.freeTransform(formA); + manager.freeTransform(formB); + manager.freeTransform(formInverseA); + manager.freeTransform(formInverseB); + manager.freeTransform(formA2); + manager.freeTransform(formB2); + manager.freeVector3(lll); + manager.freeVector3(lul); + manager.freeVector3(all); + manager.freeVector3(aul); + } +}; +var _position = new Vector3(); +var _quaternion = new Quaternion(); +var _scale = new Vector3(); +var _matrixWorldInv = new Matrix4(); +var MMDPhysicsHelper = class extends Object3D { + /** + * Visualize Rigid bodies + * + * @param {THREE.SkinnedMesh} mesh + * @param {Physics} physics + */ + constructor(mesh, physics) { + super(); + this.root = mesh; + this.physics = physics; + this.matrix.copy(mesh.matrixWorld); + this.matrixAutoUpdate = false; + this.materials = []; + this.materials.push( + new MeshBasicMaterial({ + color: new Color(16746632), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this.materials.push( + new MeshBasicMaterial({ + color: new Color(8978312), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this.materials.push( + new MeshBasicMaterial({ + color: new Color(8947967), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this._init(); + } + /** + * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. + */ + dispose() { + const materials = this.materials; + const children = this.children; + for (let i = 0; i < materials.length; i++) { + materials[i].dispose(); + } + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.isMesh) child.geometry.dispose(); + } + } + /** + * Updates Rigid Bodies visualization. + */ + updateMatrixWorld(force) { + var mesh = this.root; + if (this.visible) { + var bodies = this.physics.bodies; + _matrixWorldInv.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)).invert(); + for (var i = 0, il = bodies.length; i < il; i++) { + var body = bodies[i].body; + var child = this.children[i]; + var tr = body.getCenterOfMassTransform(); + var origin = tr.getOrigin(); + var rotation2 = tr.getRotation(); + child.position.set(origin.x(), origin.y(), origin.z()).applyMatrix4(_matrixWorldInv); + child.quaternion.setFromRotationMatrix(_matrixWorldInv).multiply( + _quaternion.set(rotation2.x(), rotation2.y(), rotation2.z(), rotation2.w()) + ); + } + } + this.matrix.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)); + super.updateMatrixWorld(force); + } + // private method + _init() { + var bodies = this.physics.bodies; + function createGeometry(param2) { + switch (param2.shapeType) { + case 0: + return new SphereGeometry(param2.width, 16, 8); + case 1: + return new BoxGeometry(param2.width * 2, param2.height * 2, param2.depth * 2, 8, 8, 8); + case 2: + return new CapsuleGeometry(param2.width, param2.height, 8, 16); + default: + return null; + } + } + for (var i = 0, il = bodies.length; i < il; i++) { + var param = bodies[i].params; + this.add(new Mesh(createGeometry(param), this.materials[param.type])); + } + } +}; + +// node_modules/three/examples/jsm/animation/MMDAnimationHelper.js +var MMDAnimationHelper = class { + /** + * @param {Object} params - (optional) + * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true. + * @param {Number} params.afterglow - Default is 0.0. + * @param {boolean} params.resetPhysicsOnLoop - Default is true. + */ + constructor(params = {}) { + this.meshes = []; + this.camera = null; + this.cameraTarget = new Object3D(); + this.cameraTarget.name = "target"; + this.audio = null; + this.audioManager = null; + this.objects = /* @__PURE__ */ new WeakMap(); + this.configuration = { + sync: params.sync !== void 0 ? params.sync : true, + afterglow: params.afterglow !== void 0 ? params.afterglow : 0, + resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true, + pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false + }; + this.enabled = { + animation: true, + ik: true, + grant: true, + physics: true, + cameraAnimation: true + }; + this.onBeforePhysics = function() { + }; + this.sharedPhysics = false; + this.masterPhysics = null; + } + /** + * Adds an Three.js Object to helper and setups animation. + * The anmation durations of added objects are synched + * if this.configuration.sync is true. + * + * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object + * @param {Object} params - (optional) + * @param {THREE.AnimationClip|Array} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined. + * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true. + * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60. + * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65. + * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3. + * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ). + * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0. + * @return {MMDAnimationHelper} + */ + add(object, params = {}) { + if (object.isSkinnedMesh) { + this._addMesh(object, params); + } else if (object.isCamera) { + this._setupCamera(object, params); + } else if (object.type === "Audio") { + this._setupAudio(object, params); + } else { + throw new Error("THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); + } + if (this.configuration.sync) this._syncDuration(); + return this; + } + /** + * Removes an Three.js Object from helper. + * + * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object + * @return {MMDAnimationHelper} + */ + remove(object) { + if (object.isSkinnedMesh) { + this._removeMesh(object); + } else if (object.isCamera) { + this._clearCamera(object); + } else if (object.type === "Audio") { + this._clearAudio(object); + } else { + throw new Error("THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); + } + if (this.configuration.sync) this._syncDuration(); + return this; + } + /** + * Updates the animation. + * + * @param {Number} delta + * @return {MMDAnimationHelper} + */ + update(delta) { + if (this.audioManager !== null) this.audioManager.control(delta); + for (let i = 0; i < this.meshes.length; i++) { + this._animateMesh(this.meshes[i], delta); + } + if (this.sharedPhysics) this._updateSharedPhysics(delta); + if (this.camera !== null) this._animateCamera(this.camera, delta); + return this; + } + /** + * Changes the pose of SkinnedMesh as VPD specifies. + * + * @param {THREE.SkinnedMesh} mesh + * @param {Object} vpd - VPD content parsed MMDParser + * @param {Object} params - (optional) + * @param {boolean} params.resetPose - Default is true. + * @param {boolean} params.ik - Default is true. + * @param {boolean} params.grant - Default is true. + * @return {MMDAnimationHelper} + */ + pose(mesh, vpd, params = {}) { + if (params.resetPose !== false) mesh.pose(); + const bones = mesh.skeleton.bones; + const boneParams = vpd.bones; + const boneNameDictionary = {}; + for (let i = 0, il = bones.length; i < il; i++) { + boneNameDictionary[bones[i].name] = i; + } + const vector = new Vector3(); + const quaternion = new Quaternion(); + for (let i = 0, il = boneParams.length; i < il; i++) { + const boneParam = boneParams[i]; + const boneIndex = boneNameDictionary[boneParam.name]; + if (boneIndex === void 0) continue; + const bone = bones[boneIndex]; + bone.position.add(vector.fromArray(boneParam.translation)); + bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion)); + } + mesh.updateMatrixWorld(true); + if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { + const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); + const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null; + const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null; + this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver); + } else { + if (params.ik !== false) { + this._createCCDIKSolver(mesh).update(); + } + if (params.grant !== false) { + this.createGrantSolver(mesh).update(); + } + } + return this; + } + /** + * Enabes/Disables an animation feature. + * + * @param {string} key + * @param {boolean} enabled + * @return {MMDAnimationHelper} + */ + enable(key2, enabled) { + if (this.enabled[key2] === void 0) { + throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key2); + } + this.enabled[key2] = enabled; + if (key2 === "physics") { + for (let i = 0, il = this.meshes.length; i < il; i++) { + this._optimizeIK(this.meshes[i], enabled); + } + } + return this; + } + /** + * Creates an GrantSolver instance. + * + * @param {THREE.SkinnedMesh} mesh + * @return {GrantSolver} + */ + createGrantSolver(mesh) { + return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants); + } + // private methods + _addMesh(mesh, params) { + if (this.meshes.indexOf(mesh) >= 0) { + throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added."); + } + this.meshes.push(mesh); + this.objects.set(mesh, { looped: false }); + this._setupMeshAnimation(mesh, params.animation); + if (params.physics !== false) { + this._setupMeshPhysics(mesh, params); + } + return this; + } + _setupCamera(camera, params) { + if (this.camera === camera) { + throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set."); + } + if (this.camera) this.clearCamera(this.camera); + this.camera = camera; + camera.add(this.cameraTarget); + this.objects.set(camera, {}); + if (params.animation !== void 0) { + this._setupCameraAnimation(camera, params.animation); + } + return this; + } + _setupAudio(audio, params) { + if (this.audio === audio) { + throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set."); + } + if (this.audio) this.clearAudio(this.audio); + this.audio = audio; + this.audioManager = new AudioManager(audio, params); + this.objects.set(this.audioManager, { + duration: this.audioManager.duration + }); + return this; + } + _removeMesh(mesh) { + let found = false; + let writeIndex = 0; + for (let i = 0, il = this.meshes.length; i < il; i++) { + if (this.meshes[i] === mesh) { + this.objects.delete(mesh); + found = true; + continue; + } + this.meshes[writeIndex++] = this.meshes[i]; + } + if (!found) { + throw new Error("THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."); + } + this.meshes.length = writeIndex; + return this; + } + _clearCamera(camera) { + if (camera !== this.camera) { + throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet."); + } + this.camera.remove(this.cameraTarget); + this.objects.delete(this.camera); + this.camera = null; + return this; + } + _clearAudio(audio) { + if (audio !== this.audio) { + throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet."); + } + this.objects.delete(this.audioManager); + this.audio = null; + this.audioManager = null; + return this; + } + _setupMeshAnimation(mesh, animation) { + const objects = this.objects.get(mesh); + if (animation !== void 0) { + const animations = Array.isArray(animation) ? animation : [animation]; + objects.mixer = new AnimationMixer(mesh); + for (let i = 0, il = animations.length; i < il; i++) { + objects.mixer.clipAction(animations[i]).play(); + } + objects.mixer.addEventListener("loop", function(event) { + const tracks = event.action._clip.tracks; + if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones") return; + objects.looped = true; + }); + } + objects.ikSolver = this._createCCDIKSolver(mesh); + objects.grantSolver = this.createGrantSolver(mesh); + return this; + } + _setupCameraAnimation(camera, animation) { + const animations = Array.isArray(animation) ? animation : [animation]; + const objects = this.objects.get(camera); + objects.mixer = new AnimationMixer(camera); + for (let i = 0, il = animations.length; i < il; i++) { + objects.mixer.clipAction(animations[i]).play(); + } + } + _setupMeshPhysics(mesh, params) { + const objects = this.objects.get(mesh); + if (params.world === void 0 && this.sharedPhysics) { + const masterPhysics = this._getMasterPhysics(); + if (masterPhysics !== null) world = masterPhysics.world; + } + objects.physics = this._createMMDPhysics(mesh, params); + if (objects.mixer && params.animationWarmup !== false) { + this._animateMesh(mesh, 0); + objects.physics.reset(); + } + objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60); + this._optimizeIK(mesh, true); + } + _animateMesh(mesh, delta) { + const objects = this.objects.get(mesh); + const mixer = objects.mixer; + const ikSolver = objects.ikSolver; + const grantSolver = objects.grantSolver; + const physics = objects.physics; + const looped = objects.looped; + if (mixer && this.enabled.animation) { + this._restoreBones(mesh); + mixer.update(delta); + this._saveBones(mesh); + if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { + if (!objects.sortedBonesData) objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); + this._animatePMXMesh( + mesh, + objects.sortedBonesData, + ikSolver && this.enabled.ik ? ikSolver : null, + grantSolver && this.enabled.grant ? grantSolver : null + ); + } else { + if (ikSolver && this.enabled.ik) { + mesh.updateMatrixWorld(true); + ikSolver.update(); + } + if (grantSolver && this.enabled.grant) { + grantSolver.update(); + } + } + } + if (looped === true && this.enabled.physics) { + if (physics && this.configuration.resetPhysicsOnLoop) physics.reset(); + objects.looped = false; + } + if (physics && this.enabled.physics && !this.sharedPhysics) { + this.onBeforePhysics(mesh); + physics.update(delta); + } + } + // Sort bones in order by 1. transformationClass and 2. bone index. + // In PMX animation system, bone transformations should be processed + // in this order. + _sortBoneDataArray(boneDataArray) { + return boneDataArray.sort(function(a2, b3) { + if (a2.transformationClass !== b3.transformationClass) { + return a2.transformationClass - b3.transformationClass; + } else { + return a2.index - b3.index; + } + }); + } + // PMX Animation system is a bit too complex and doesn't great match to + // Three.js Animation system. This method attempts to simulate it as much as + // possible but doesn't perfectly simulate. + // This method is more costly than the regular one so + // you are recommended to set constructor parameter "pmxAnimation: true" + // only if your PMX model animation doesn't work well. + // If you need better method you would be required to write your own. + _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) { + _quaternionIndex = 0; + _grantResultMap.clear(); + for (let i = 0, il = sortedBonesData.length; i < il; i++) { + updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver); + } + mesh.updateMatrixWorld(true); + return this; + } + _animateCamera(camera, delta) { + const mixer = this.objects.get(camera).mixer; + if (mixer && this.enabled.cameraAnimation) { + mixer.update(delta); + camera.updateProjectionMatrix(); + camera.up.set(0, 1, 0); + camera.up.applyQuaternion(camera.quaternion); + camera.lookAt(this.cameraTarget.position); + } + } + _optimizeIK(mesh, physicsEnabled) { + const iks = mesh.geometry.userData.MMD.iks; + const bones = mesh.geometry.userData.MMD.bones; + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const links = ik.links; + for (let j = 0, jl = links.length; j < jl; j++) { + const link = links[j]; + if (physicsEnabled === true) { + link.enabled = bones[link.index].rigidBodyType > 0 ? false : true; + } else { + link.enabled = true; + } + } + } + } + _createCCDIKSolver(mesh) { + if (CCDIKSolver === void 0) { + throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver."); + } + return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks); + } + _createMMDPhysics(mesh, params) { + if (MMDPhysics === void 0) { + throw new Error("THREE.MMDPhysics: Import MMDPhysics."); + } + return new MMDPhysics( + mesh, + mesh.geometry.userData.MMD.rigidBodies, + mesh.geometry.userData.MMD.constraints, + params + ); + } + /* + * Detects the longest duration and then sets it to them to sync. + * TODO: Not to access private properties ( ._actions and ._clip ) + */ + _syncDuration() { + let max2 = 0; + const objects = this.objects; + const meshes = this.meshes; + const camera = this.camera; + const audioManager = this.audioManager; + for (let i = 0, il = meshes.length; i < il; i++) { + const mixer = this.objects.get(meshes[i]).mixer; + if (mixer === void 0) continue; + for (let j = 0; j < mixer._actions.length; j++) { + const clip = mixer._actions[j]._clip; + if (!objects.has(clip)) { + objects.set(clip, { + duration: clip.duration + }); + } + max2 = Math.max(max2, objects.get(clip).duration); + } + } + if (camera !== null) { + const mixer = this.objects.get(camera).mixer; + if (mixer !== void 0) { + for (let i = 0, il = mixer._actions.length; i < il; i++) { + const clip = mixer._actions[i]._clip; + if (!objects.has(clip)) { + objects.set(clip, { + duration: clip.duration + }); + } + max2 = Math.max(max2, objects.get(clip).duration); + } + } + } + if (audioManager !== null) { + max2 = Math.max(max2, objects.get(audioManager).duration); + } + max2 += this.configuration.afterglow; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const mixer = this.objects.get(this.meshes[i]).mixer; + if (mixer === void 0) continue; + for (let j = 0, jl = mixer._actions.length; j < jl; j++) { + mixer._actions[j]._clip.duration = max2; + } + } + if (camera !== null) { + const mixer = this.objects.get(camera).mixer; + if (mixer !== void 0) { + for (let i = 0, il = mixer._actions.length; i < il; i++) { + mixer._actions[i]._clip.duration = max2; + } + } + } + if (audioManager !== null) { + audioManager.duration = max2; + } + } + // workaround + _updatePropertyMixersBuffer(mesh) { + const mixer = this.objects.get(mesh).mixer; + const propertyMixers = mixer._bindings; + const accuIndex = mixer._accuIndex; + for (let i = 0, il = propertyMixers.length; i < il; i++) { + const propertyMixer = propertyMixers[i]; + const buffer = propertyMixer.buffer; + const stride = propertyMixer.valueSize; + const offset = (accuIndex + 1) * stride; + propertyMixer.binding.getValue(buffer, offset); + } + } + /* + * Avoiding these two issues by restore/save bones before/after mixer animation. + * + * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer. + * Calculating IK, Grant, and Physics after mixer animation can break + * the cache coherency. + * + * 2. Applying Grant two or more times without reset the posing breaks model. + */ + _saveBones(mesh) { + const objects = this.objects.get(mesh); + const bones = mesh.skeleton.bones; + let backupBones = objects.backupBones; + if (backupBones === void 0) { + backupBones = new Float32Array(bones.length * 7); + objects.backupBones = backupBones; + } + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + bone.position.toArray(backupBones, i * 7); + bone.quaternion.toArray(backupBones, i * 7 + 3); + } + } + _restoreBones(mesh) { + const objects = this.objects.get(mesh); + const backupBones = objects.backupBones; + if (backupBones === void 0) return; + const bones = mesh.skeleton.bones; + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + bone.position.fromArray(backupBones, i * 7); + bone.quaternion.fromArray(backupBones, i * 7 + 3); + } + } + // experimental + _getMasterPhysics() { + if (this.masterPhysics !== null) return this.masterPhysics; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const physics = this.meshes[i].physics; + if (physics !== void 0 && physics !== null) { + this.masterPhysics = physics; + return this.masterPhysics; + } + } + return null; + } + _updateSharedPhysics(delta) { + if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics) return; + const physics = this._getMasterPhysics(); + if (physics === null) return; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const p2 = this.meshes[i].physics; + if (p2 !== null && p2 !== void 0) { + p2.updateRigidBodies(); + } + } + physics.stepSimulation(delta); + for (let i = 0, il = this.meshes.length; i < il; i++) { + const p2 = this.meshes[i].physics; + if (p2 !== null && p2 !== void 0) { + p2.updateBones(); + } + } + } +}; +var _quaternions = []; +var _quaternionIndex = 0; +function getQuaternion() { + if (_quaternionIndex >= _quaternions.length) { + _quaternions.push(new Quaternion()); + } + return _quaternions[_quaternionIndex++]; +} +var _grantResultMap = /* @__PURE__ */ new Map(); +function updateOne(mesh, boneIndex, ikSolver, grantSolver) { + const bones = mesh.skeleton.bones; + const bonesData = mesh.geometry.userData.MMD.bones; + const boneData = bonesData[boneIndex]; + const bone = bones[boneIndex]; + if (_grantResultMap.has(boneIndex)) return; + const quaternion = getQuaternion(); + _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion)); + if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) { + const parentIndex = boneData.grant.parentIndex; + const ratio = boneData.grant.ratio; + if (!_grantResultMap.has(parentIndex)) { + updateOne(mesh, parentIndex, ikSolver, grantSolver); + } + grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio); + } + if (ikSolver && boneData.ik) { + mesh.updateMatrixWorld(true); + ikSolver.updateOne(boneData.ik); + const links = boneData.ik.links; + for (let i = 0, il = links.length; i < il; i++) { + const link = links[i]; + if (link.enabled === false) continue; + const linkIndex = link.index; + if (_grantResultMap.has(linkIndex)) { + _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion)); + } + } + } + quaternion.copy(bone.quaternion); +} +var AudioManager = class { + /** + * @param {THREE.Audio} audio + * @param {Object} params - (optional) + * @param {Nuumber} params.delayTime + */ + constructor(audio, params = {}) { + this.audio = audio; + this.elapsedTime = 0; + this.currentTime = 0; + this.delayTime = params.delayTime !== void 0 ? params.delayTime : 0; + this.audioDuration = this.audio.buffer.duration; + this.duration = this.audioDuration + this.delayTime; + } + /** + * @param {Number} delta + * @return {AudioManager} + */ + control(delta) { + this.elapsed += delta; + this.currentTime += delta; + if (this._shouldStopAudio()) this.audio.stop(); + if (this._shouldStartAudio()) this.audio.play(); + return this; + } + // private methods + _shouldStartAudio() { + if (this.audio.isPlaying) return false; + while (this.currentTime >= this.duration) { + this.currentTime -= this.duration; + } + if (this.currentTime < this.delayTime) return false; + if (this.currentTime - this.delayTime > this.audioDuration) return false; + return true; + } + _shouldStopAudio() { + return this.audio.isPlaying && this.currentTime >= this.duration; + } +}; +var _q2 = new Quaternion(); +var GrantSolver = class { + constructor(mesh, grants = []) { + this.mesh = mesh; + this.grants = grants; + } + /** + * Solve all the grant bones + * @return {GrantSolver} + */ + update() { + const grants = this.grants; + for (let i = 0, il = grants.length; i < il; i++) { + this.updateOne(grants[i]); + } + return this; + } + /** + * Solve a grant bone + * @param {Object} grant - grant parameter + * @return {GrantSolver} + */ + updateOne(grant) { + const bones = this.mesh.skeleton.bones; + const bone = bones[grant.index]; + const parentBone = bones[grant.parentIndex]; + if (grant.isLocal) { + if (grant.affectPosition) { + } + if (grant.affectRotation) { + } + } else { + if (grant.affectPosition) { + } + if (grant.affectRotation) { + this.addGrantRotation(bone, parentBone.quaternion, grant.ratio); + } + } + return this; + } + addGrantRotation(bone, q2, ratio) { + _q2.set(0, 0, 0, 1); + _q2.slerp(q2, ratio); + bone.quaternion.multiply(_q2); + return this; + } +}; + +// node_modules/three/examples/jsm/shaders/BokehShader2.js +var BokehShader = { + name: "BokehShader", + uniforms: { + "textureWidth": { value: 1 }, + "textureHeight": { value: 1 }, + "focalDepth": { value: 1 }, + "focalLength": { value: 24 }, + "fstop": { value: 0.9 }, + "tColor": { value: null }, + "tDepth": { value: null }, + "maxblur": { value: 1 }, + "showFocus": { value: 0 }, + "manualdof": { value: 0 }, + "vignetting": { value: 0 }, + "depthblur": { value: 0 }, + "threshold": { value: 0.5 }, + "gain": { value: 2 }, + "bias": { value: 0.5 }, + "fringe": { value: 0.7 }, + "znear": { value: 0.1 }, + "zfar": { value: 100 }, + "noise": { value: 1 }, + "dithering": { value: 1e-4 }, + "pentagon": { value: 0 }, + "shaderFocus": { value: 1 }, + "focusCoords": { value: new Vector2() } + }, + vertexShader: ( + /* glsl */ + ` + + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + }` + ), + fragmentShader: ( + /* glsl */ + ` + + #include + + varying vec2 vUv; + + uniform sampler2D tColor; + uniform sampler2D tDepth; + uniform float textureWidth; + uniform float textureHeight; + + uniform float focalDepth; //focal distance value in meters, but you may use autofocus option below + uniform float focalLength; //focal length in mm + uniform float fstop; //f-stop value + uniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range) + + /* + make sure that these two values are the same for your camera, otherwise distances will be wrong. + */ + + uniform float znear; // camera clipping start + uniform float zfar; // camera clipping end + + //------------------------------------------ + //user variables + + const int samples = SAMPLES; //samples on the first ring + const int rings = RINGS; //ring count + + const int maxringsamples = rings * samples; + + uniform bool manualdof; // manual dof calculation + float ndofstart = 1.0; // near dof blur start + float ndofdist = 2.0; // near dof blur falloff distance + float fdofstart = 1.0; // far dof blur start + float fdofdist = 3.0; // far dof blur falloff distance + + float CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm) + + uniform bool vignetting; // use optical lens vignetting + + float vignout = 1.3; // vignetting outer border + float vignin = 0.0; // vignetting inner border + float vignfade = 22.0; // f-stops till vignete fades + + uniform bool shaderFocus; + // disable if you use external focalDepth value + + uniform vec2 focusCoords; + // autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right) + // if center of screen use vec2(0.5, 0.5); + + uniform float maxblur; + //clamp value of max blur (0.0 = no blur, 1.0 default) + + uniform float threshold; // highlight threshold; + uniform float gain; // highlight gain; + + uniform float bias; // bokeh edge bias + uniform float fringe; // bokeh chromatic aberration / fringing + + uniform bool noise; //use noise instead of pattern for sample dithering + + uniform float dithering; + + uniform bool depthblur; // blur the depth buffer + float dbsize = 1.25; // depth blur size + + /* + next part is experimental + not looking good with small sample and ring count + looks okay starting from samples = 4, rings = 4 + */ + + uniform bool pentagon; //use pentagon as bokeh shape? + float feather = 0.4; //pentagon shape feather + + //------------------------------------------ + + float penta(vec2 coords) { + //pentagonal shape + float scale = float(rings) - 1.3; + vec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0); + vec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0); + vec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0); + vec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0); + vec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0); + vec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0); + + vec4 one = vec4( 1.0 ); + + vec4 P = vec4((coords),vec2(scale, scale)); + + vec4 dist = vec4(0.0); + float inorout = -4.0; + + dist.x = dot( P, HS0 ); + dist.y = dot( P, HS1 ); + dist.z = dot( P, HS2 ); + dist.w = dot( P, HS3 ); + + dist = smoothstep( -feather, feather, dist ); + + inorout += dot( dist, one ); + + dist.x = dot( P, HS4 ); + dist.y = HS5.w - abs( P.z ); + + dist = smoothstep( -feather, feather, dist ); + inorout += dist.x; + + return clamp( inorout, 0.0, 1.0 ); + } + + float bdepth(vec2 coords) { + // Depth buffer blur + float d = 0.0; + float kernel[9]; + vec2 offset[9]; + + vec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize; + + offset[0] = vec2(-wh.x,-wh.y); + offset[1] = vec2( 0.0, -wh.y); + offset[2] = vec2( wh.x -wh.y); + + offset[3] = vec2(-wh.x, 0.0); + offset[4] = vec2( 0.0, 0.0); + offset[5] = vec2( wh.x, 0.0); + + offset[6] = vec2(-wh.x, wh.y); + offset[7] = vec2( 0.0, wh.y); + offset[8] = vec2( wh.x, wh.y); + + kernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0; + kernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0; + kernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0; + + + for( int i=0; i<9; i++ ) { + float tmp = texture2D(tDepth, coords + offset[i]).r; + d += tmp * kernel[i]; + } + + return d; + } + + + vec3 color(vec2 coords,float blur) { + //processing the sample + + vec3 col = vec3(0.0); + vec2 texel = vec2(1.0/textureWidth,1.0/textureHeight); + + col.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r; + col.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g; + col.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b; + + vec3 lumcoeff = vec3(0.299,0.587,0.114); + float lum = dot(col.rgb, lumcoeff); + float thresh = max((lum-threshold)*gain, 0.0); + return col+mix(vec3(0.0),col,thresh*blur); + } + + vec3 debugFocus(vec3 col, float blur, float depth) { + float edge = 0.002*depth; //distance based edge smoothing + float m = clamp(smoothstep(0.0,edge,blur),0.0,1.0); + float e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0); + + col = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6); + col = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2); + + return col; + } + + float linearize(float depth) { + return -zfar * znear / (depth * (zfar - znear) - zfar); + } + + float vignette() { + float dist = distance(vUv.xy, vec2(0.5,0.5)); + dist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist); + return clamp(dist,0.0,1.0); + } + + float gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) { + float rings2 = float(rings); + float step = PI*2.0 / float(ringsamples); + float pw = cos(j*step)*i; + float ph = sin(j*step)*i; + float p = 1.0; + if (pentagon) { + p = penta(vec2(pw,ph)); + } + col += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p; + return 1.0 * mix(1.0, i /rings2, bias) * p; + } + + void main() { + //scene depth calculation + + float depth = linearize(texture2D(tDepth,vUv.xy).x); + + // Blur depth? + if ( depthblur ) { + depth = linearize(bdepth(vUv.xy)); + } + + //focal plane calculation + + float fDepth = focalDepth; + + if (shaderFocus) { + + fDepth = linearize(texture2D(tDepth,focusCoords).x); + + } + + // dof blur factor calculation + + float blur = 0.0; + + if (manualdof) { + float a = depth-fDepth; // Focal plane + float b = (a-fdofstart)/fdofdist; // Far DoF + float c = (-a-ndofstart)/ndofdist; // Near Dof + blur = (a>0.0) ? b : c; + } else { + float f = focalLength; // focal length in mm + float d = fDepth*1000.0; // focal plane in mm + float o = depth*1000.0; // depth in mm + + float a = (o*f)/(o-f); + float b = (d*f)/(d-f); + float c = (d-f)/(d*fstop*CoC); + + blur = abs(a-b)*c; + } + + blur = clamp(blur,0.0,1.0); + + // calculation of pattern for dithering + + vec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur; + + // getting blur x and y step factor + + float w = (1.0/textureWidth)*blur*maxblur+noise.x; + float h = (1.0/textureHeight)*blur*maxblur+noise.y; + + // calculation of final color + + vec3 col = vec3(0.0); + + if(blur < 0.05) { + //some optimization thingy + col = texture2D(tColor, vUv.xy).rgb; + } else { + col = texture2D(tColor, vUv.xy).rgb; + float s = 1.0; + int ringsamples; + + for (int i = 1; i <= rings; i++) { + /*unboxstart*/ + ringsamples = i * samples; + + for (int j = 0 ; j < maxringsamples ; j++) { + if (j >= ringsamples) break; + s += gather(float(i), float(j), ringsamples, col, w, h, blur); + } + /*unboxend*/ + } + + col /= s; //divide by sample count + } + + if (showFocus) { + col = debugFocus(col, blur, depth); + } + + if (vignetting) { + col *= vignette(); + } + + gl_FragColor.rgb = col; + gl_FragColor.a = 1.0; + + #include + #include + }` + ) +}; +var BokehDepthShader = { + name: "BokehDepthShader", + uniforms: { + "mNear": { value: 1 }, + "mFar": { value: 1e3 } + }, + vertexShader: ( + /* glsl */ + ` + + varying float vViewZDepth; + + void main() { + + #include + #include + + vViewZDepth = - mvPosition.z; + + }` + ), + fragmentShader: ( + /* glsl */ + ` + + uniform float mNear; + uniform float mFar; + + varying float vViewZDepth; + + void main() { + + float color = 1.0 - smoothstep( mNear, mFar, vViewZDepth ); + gl_FragColor = vec4( vec3( color ), 1.0 ); + + }` + ) +}; + +// node_modules/three/examples/jsm/cameras/CinematicCamera.js +var CinematicCamera = class extends PerspectiveCamera { + constructor(fov, aspect, near, far) { + super(fov, aspect, near, far); + this.type = "CinematicCamera"; + this.postprocessing = { enabled: true }; + this.shaderSettings = { + rings: 3, + samples: 4 + }; + const depthShader = BokehDepthShader; + this.materialDepth = new ShaderMaterial({ + uniforms: depthShader.uniforms, + vertexShader: depthShader.vertexShader, + fragmentShader: depthShader.fragmentShader + }); + this.materialDepth.uniforms["mNear"].value = near; + this.materialDepth.uniforms["mFar"].value = far; + this.setLens(); + this.initPostProcessing(); + } + // providing fnumber and coc(Circle of Confusion) as extra arguments + // In case of cinematicCamera, having a default lens set is important + // if fnumber and coc are not provided, cinematicCamera tries to act as a basic PerspectiveCamera + setLens(focalLength = 35, filmGauge = 35, fNumber = 8, coc = 0.019) { + this.filmGauge = filmGauge; + this.setFocalLength(focalLength); + this.fNumber = fNumber; + this.coc = coc; + this.aperture = focalLength / this.fNumber; + this.hyperFocal = focalLength * focalLength / (this.aperture * this.coc); + } + linearize(depth) { + const zfar = this.far; + const znear = this.near; + return -zfar * znear / (depth * (zfar - znear) - zfar); + } + smoothstep(near, far, depth) { + const x2 = this.saturate((depth - near) / (far - near)); + return x2 * x2 * (3 - 2 * x2); + } + saturate(x2) { + return Math.max(0, Math.min(1, x2)); + } + // function for focusing at a distance from the camera + focusAt(focusDistance = 20) { + const focalLength = this.getFocalLength(); + this.focus = focusDistance; + this.nearPoint = this.hyperFocal * this.focus / (this.hyperFocal + (this.focus - focalLength)); + this.farPoint = this.hyperFocal * this.focus / (this.hyperFocal - (this.focus - focalLength)); + this.depthOfField = this.farPoint - this.nearPoint; + if (this.depthOfField < 0) this.depthOfField = 0; + this.sdistance = this.smoothstep(this.near, this.far, this.focus); + this.ldistance = this.linearize(1 - this.sdistance); + this.postprocessing.bokeh_uniforms["focalDepth"].value = this.ldistance; + } + initPostProcessing() { + if (this.postprocessing.enabled) { + this.postprocessing.scene = new Scene(); + this.postprocessing.camera = new OrthographicCamera(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, -1e4, 1e4); + this.postprocessing.scene.add(this.postprocessing.camera); + this.postprocessing.rtTextureDepth = new WebGLRenderTarget(window.innerWidth, window.innerHeight); + this.postprocessing.rtTextureColor = new WebGLRenderTarget(window.innerWidth, window.innerHeight); + const bokeh_shader = BokehShader; + this.postprocessing.bokeh_uniforms = UniformsUtils.clone(bokeh_shader.uniforms); + this.postprocessing.bokeh_uniforms["tColor"].value = this.postprocessing.rtTextureColor.texture; + this.postprocessing.bokeh_uniforms["tDepth"].value = this.postprocessing.rtTextureDepth.texture; + this.postprocessing.bokeh_uniforms["manualdof"].value = 0; + this.postprocessing.bokeh_uniforms["shaderFocus"].value = 0; + this.postprocessing.bokeh_uniforms["fstop"].value = 2.8; + this.postprocessing.bokeh_uniforms["showFocus"].value = 1; + this.postprocessing.bokeh_uniforms["focalDepth"].value = 0.1; + this.postprocessing.bokeh_uniforms["znear"].value = this.near; + this.postprocessing.bokeh_uniforms["zfar"].value = this.near; + this.postprocessing.bokeh_uniforms["textureWidth"].value = window.innerWidth; + this.postprocessing.bokeh_uniforms["textureHeight"].value = window.innerHeight; + this.postprocessing.materialBokeh = new ShaderMaterial({ + uniforms: this.postprocessing.bokeh_uniforms, + vertexShader: bokeh_shader.vertexShader, + fragmentShader: bokeh_shader.fragmentShader, + defines: { + RINGS: this.shaderSettings.rings, + SAMPLES: this.shaderSettings.samples, + DEPTH_PACKING: 1 + } + }); + this.postprocessing.quad = new Mesh(new PlaneGeometry(window.innerWidth, window.innerHeight), this.postprocessing.materialBokeh); + this.postprocessing.quad.position.z = -500; + this.postprocessing.scene.add(this.postprocessing.quad); + } + } + renderCinematic(scene, renderer2) { + if (this.postprocessing.enabled) { + const currentRenderTarget = renderer2.getRenderTarget(); + renderer2.clear(); + scene.overrideMaterial = null; + renderer2.setRenderTarget(this.postprocessing.rtTextureColor); + renderer2.clear(); + renderer2.render(scene, this); + scene.overrideMaterial = this.materialDepth; + renderer2.setRenderTarget(this.postprocessing.rtTextureDepth); + renderer2.clear(); + renderer2.render(scene, this); + renderer2.setRenderTarget(null); + renderer2.render(this.postprocessing.scene, this.postprocessing.camera); + renderer2.setRenderTarget(currentRenderTarget); + } + } +}; + +// node_modules/three/examples/jsm/capabilities/WebGL.js +var WebGL = class { + static isWebGLAvailable() { + try { + const canvas = document.createElement("canvas"); + return !!(window.WebGLRenderingContext && (canvas.getContext("webgl") || canvas.getContext("experimental-webgl"))); + } catch (e) { + return false; + } + } + static isWebGL2Available() { + try { + const canvas = document.createElement("canvas"); + return !!(window.WebGL2RenderingContext && canvas.getContext("webgl2")); + } catch (e) { + return false; + } + } + static isColorSpaceAvailable(colorSpace) { + try { + const canvas = document.createElement("canvas"); + const ctx = window.WebGL2RenderingContext && canvas.getContext("webgl2"); + ctx.drawingBufferColorSpace = colorSpace; + return ctx.drawingBufferColorSpace === colorSpace; + } catch (e) { + return false; + } + } + static getWebGLErrorMessage() { + return this.getErrorMessage(1); + } + static getWebGL2ErrorMessage() { + return this.getErrorMessage(2); + } + static getErrorMessage(version) { + const names = { + 1: "WebGL", + 2: "WebGL 2" + }; + const contexts = { + 1: window.WebGLRenderingContext, + 2: window.WebGL2RenderingContext + }; + let message = 'Your $0 does not seem to support $1'; + const element = document.createElement("div"); + element.id = "webglmessage"; + element.style.fontFamily = "monospace"; + element.style.fontSize = "13px"; + element.style.fontWeight = "normal"; + element.style.textAlign = "center"; + element.style.background = "#fff"; + element.style.color = "#000"; + element.style.padding = "1.5em"; + element.style.width = "400px"; + element.style.margin = "5em auto 0"; + if (contexts[version]) { + message = message.replace("$0", "graphics card"); + } else { + message = message.replace("$0", "browser"); + } + message = message.replace("$1", names[version]); + element.innerHTML = message; + return element; + } +}; +var WebGL_default = WebGL; + +// node_modules/three/examples/jsm/controls/ArcballControls.js +var STATE = { + IDLE: Symbol(), + ROTATE: Symbol(), + PAN: Symbol(), + SCALE: Symbol(), + FOV: Symbol(), + FOCUS: Symbol(), + ZROTATE: Symbol(), + TOUCH_MULTI: Symbol(), + ANIMATION_FOCUS: Symbol(), + ANIMATION_ROTATE: Symbol() +}; +var INPUT = { + NONE: Symbol(), + ONE_FINGER: Symbol(), + ONE_FINGER_SWITCHED: Symbol(), + TWO_FINGER: Symbol(), + MULT_FINGER: Symbol(), + CURSOR: Symbol() +}; +var _center = { + x: 0, + y: 0 +}; +var _transformation = { + camera: new Matrix4(), + gizmos: new Matrix4() +}; +var _changeEvent = { type: "change" }; +var _startEvent = { type: "start" }; +var _endEvent = { type: "end" }; +var _raycaster = new Raycaster(); +var _offset = new Vector3(); +var _gizmoMatrixStateTemp = new Matrix4(); +var _cameraMatrixStateTemp = new Matrix4(); +var _scalePointTemp = new Vector3(); +var ArcballControls = class extends EventDispatcher { + constructor(camera, domElement, scene = null) { + super(); + this.camera = null; + this.domElement = domElement; + this.scene = scene; + this.target = new Vector3(); + this._currentTarget = new Vector3(); + this.radiusFactor = 0.67; + this.mouseActions = []; + this._mouseOp = null; + this._v2_1 = new Vector2(); + this._v3_1 = new Vector3(); + this._v3_2 = new Vector3(); + this._m4_1 = new Matrix4(); + this._m4_2 = new Matrix4(); + this._quat = new Quaternion(); + this._translationMatrix = new Matrix4(); + this._rotationMatrix = new Matrix4(); + this._scaleMatrix = new Matrix4(); + this._rotationAxis = new Vector3(); + this._cameraMatrixState = new Matrix4(); + this._cameraProjectionState = new Matrix4(); + this._fovState = 1; + this._upState = new Vector3(); + this._zoomState = 1; + this._nearPos = 0; + this._farPos = 0; + this._gizmoMatrixState = new Matrix4(); + this._up0 = new Vector3(); + this._zoom0 = 1; + this._fov0 = 0; + this._initialNear = 0; + this._nearPos0 = 0; + this._initialFar = 0; + this._farPos0 = 0; + this._cameraMatrixState0 = new Matrix4(); + this._gizmoMatrixState0 = new Matrix4(); + this._button = -1; + this._touchStart = []; + this._touchCurrent = []; + this._input = INPUT.NONE; + this._switchSensibility = 32; + this._startFingerDistance = 0; + this._currentFingerDistance = 0; + this._startFingerRotation = 0; + this._currentFingerRotation = 0; + this._devPxRatio = 0; + this._downValid = true; + this._nclicks = 0; + this._downEvents = []; + this._downStart = 0; + this._clickStart = 0; + this._maxDownTime = 250; + this._maxInterval = 300; + this._posThreshold = 24; + this._movementThreshold = 24; + this._currentCursorPosition = new Vector3(); + this._startCursorPosition = new Vector3(); + this._grid = null; + this._gridPosition = new Vector3(); + this._gizmos = new Group(); + this._curvePts = 128; + this._timeStart = -1; + this._animationId = -1; + this.focusAnimationTime = 500; + this._timePrev = 0; + this._timeCurrent = 0; + this._anglePrev = 0; + this._angleCurrent = 0; + this._cursorPosPrev = new Vector3(); + this._cursorPosCurr = new Vector3(); + this._wPrev = 0; + this._wCurr = 0; + this.adjustNearFar = false; + this.scaleFactor = 1.1; + this.dampingFactor = 25; + this.wMax = 20; + this.enableAnimations = true; + this.enableGrid = false; + this.cursorZoom = false; + this.minFov = 5; + this.maxFov = 90; + this.rotateSpeed = 1; + this.enabled = true; + this.enablePan = true; + this.enableRotate = true; + this.enableZoom = true; + this.enableGizmos = true; + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this._tbRadius = 1; + this._state = STATE.IDLE; + this.setCamera(camera); + if (this.scene != null) { + this.scene.add(this._gizmos); + } + this.domElement.style.touchAction = "none"; + this._devPxRatio = window.devicePixelRatio; + this.initializeMouseActions(); + this._onContextMenu = onContextMenu.bind(this); + this._onWheel = onWheel.bind(this); + this._onPointerUp = onPointerUp.bind(this); + this._onPointerMove = onPointerMove.bind(this); + this._onPointerDown = onPointerDown.bind(this); + this._onPointerCancel = onPointerCancel.bind(this); + this._onWindowResize = onWindowResize.bind(this); + this.domElement.addEventListener("contextmenu", this._onContextMenu); + this.domElement.addEventListener("wheel", this._onWheel); + this.domElement.addEventListener("pointerdown", this._onPointerDown); + this.domElement.addEventListener("pointercancel", this._onPointerCancel); + window.addEventListener("resize", this._onWindowResize); + } + onSinglePanStart(event, operation) { + if (this.enabled) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + switch (operation) { + case "PAN": + if (!this.enablePan) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.PAN, true); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + if (this.enableGrid) { + this.drawGrid(); + this.dispatchEvent(_changeEvent); + } + break; + case "ROTATE": + if (!this.enableRotate) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + } + this.updateTbState(STATE.ROTATE, true); + this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + this.activateGizmos(true); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent = performance.now(); + this._angleCurrent = this._anglePrev = 0; + this._cursorPosPrev.copy(this._startCursorPosition); + this._cursorPosCurr.copy(this._cursorPosPrev); + this._wCurr = 0; + this._wPrev = this._wCurr; + } + this.dispatchEvent(_changeEvent); + break; + case "FOV": + if (!this.camera.isPerspectiveCamera || !this.enableZoom) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.FOV, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + break; + case "ZOOM": + if (!this.enableZoom) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.SCALE, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + break; + } + } + } + onSinglePanMove(event, opState) { + if (this.enabled) { + const restart = opState != this._state; + this.setCenter(event.clientX, event.clientY); + switch (opState) { + case STATE.PAN: + if (this.enablePan) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + if (this.enableGrid) { + this.drawGrid(); + } + this.activateGizmos(false); + } else { + this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition)); + } + } + break; + case STATE.ROTATE: + if (this.enableRotate) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(true); + } else { + this._currentCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition); + const angle = this._startCursorPosition.angleTo(this._currentCursorPosition); + const amount = Math.max(distance / this._tbRadius, angle) * this.rotateSpeed; + this.applyTransformMatrix(this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent; + this._timeCurrent = performance.now(); + this._anglePrev = this._angleCurrent; + this._angleCurrent = amount; + this._cursorPosPrev.copy(this._cursorPosCurr); + this._cursorPosCurr.copy(this._currentCursorPosition); + this._wPrev = this._wCurr; + this._wCurr = this.calculateAngularSpeed(this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent); + } + } + } + break; + case STATE.SCALE: + if (this.enableZoom) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); + this.applyTransformMatrix(this.scale(size2, this._v3_1)); + } + } + break; + case STATE.FOV: + if (this.enableZoom && this.camera.isPerspectiveCamera) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._v3_2, false)); + _offset.copy(this._gizmos.position).sub(this.camera.position).normalize().multiplyScalar(newDistance / x2); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + } + } + break; + } + this.dispatchEvent(_changeEvent); + } + } + onSinglePanEnd() { + if (this._state == STATE.ROTATE) { + if (!this.enableRotate) { + return; + } + if (this.enableAnimations) { + const deltaTime = performance.now() - this._timeCurrent; + if (deltaTime < 120) { + const w = Math.abs((this._wPrev + this._wCurr) / 2); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.updateTbState(STATE.ANIMATION_ROTATE, true); + const rotationAxis = self2.calculateRotationAxis(self2._cursorPosPrev, self2._cursorPosCurr); + self2.onRotationAnim(t3, rotationAxis, Math.min(w, self2.wMax)); + }); + } else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else if (this._state == STATE.PAN || this._state == STATE.IDLE) { + this.updateTbState(STATE.IDLE, false); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.dispatchEvent(_endEvent); + } + onDoubleTap(event) { + if (this.enabled && this.enablePan && this.scene != null) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera); + if (hitP != null && this.enableAnimations) { + const self2 = this; + if (this._animationId != -1) { + window.cancelAnimationFrame(this._animationId); + } + this._timeStart = -1; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.updateTbState(STATE.ANIMATION_FOCUS, true); + self2.onFocusAnim(t3, hitP, self2._cameraMatrixState, self2._gizmoMatrixState); + }); + } else if (hitP != null && !this.enableAnimations) { + this.updateTbState(STATE.FOCUS, true); + this.focus(hitP, this.scaleFactor); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + } + this.dispatchEvent(_endEvent); + } + onDoublePanStart() { + if (this.enabled && this.enablePan) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.PAN, true); + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true)); + this._currentCursorPosition.copy(this._startCursorPosition); + this.activateGizmos(false); + } + } + onDoublePanMove() { + if (this.enabled && this.enablePan) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + if (this._state != STATE.PAN) { + this.updateTbState(STATE.PAN, true); + this._startCursorPosition.copy(this._currentCursorPosition); + } + this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true)); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true)); + this.dispatchEvent(_changeEvent); + } + } + onDoublePanEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + onRotateStart() { + if (this.enabled && this.enableRotate) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + this._currentFingerRotation = this._startFingerRotation; + this.camera.getWorldDirection(this._rotationAxis); + if (!this.enablePan && !this.enableZoom) { + this.activateGizmos(true); + } + } + } + onRotateMove() { + if (this.enabled && this.enableRotate) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + let rotationPoint; + if (this._state != STATE.ZROTATE) { + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this._currentFingerRotation; + } + this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + if (!this.enablePan) { + rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState); + } else { + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + rotationPoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2); + } + const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation); + this.applyTransformMatrix(this.zRotate(rotationPoint, amount)); + this.dispatchEvent(_changeEvent); + } + } + onRotateEnd() { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_endEvent); + } + onPinchStart() { + if (this.enabled && this.enableZoom) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]); + this._currentFingerDistance = this._startFingerDistance; + this.activateGizmos(false); + } + } + onPinchMove() { + if (this.enabled && this.enableZoom) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + const minDistance = 12; + if (this._state != STATE.SCALE) { + this._startFingerDistance = this._currentFingerDistance; + this.updateTbState(STATE.SCALE, true); + } + this._currentFingerDistance = Math.max(this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]), minDistance * this._devPxRatio); + const amount = this._currentFingerDistance / this._startFingerDistance; + let scalePoint; + if (!this.enablePan) { + scalePoint = this._gizmos.position; + } else { + if (this.camera.isOrthographicCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + } else if (this.camera.isPerspectiveCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + } + } + this.applyTransformMatrix(this.scale(amount, scalePoint)); + this.dispatchEvent(_changeEvent); + } + } + onPinchEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + onTriplePanStart() { + if (this.enabled && this.enableZoom) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + } + } + onTriplePanMove() { + if (this.enabled && this.enableZoom) { + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._v3_2, false)); + _offset.copy(this._gizmos.position).sub(this.camera.position).normalize().multiplyScalar(newDistance / x2); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + this.dispatchEvent(_changeEvent); + } + } + onTriplePanEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + /** + * Set _center's x/y coordinates + * @param {Number} clientX + * @param {Number} clientY + */ + setCenter(clientX, clientY) { + _center.x = clientX; + _center.y = clientY; + } + /** + * Set default mouse actions + */ + initializeMouseActions() { + this.setMouseAction("PAN", 0, "CTRL"); + this.setMouseAction("PAN", 2); + this.setMouseAction("ROTATE", 0); + this.setMouseAction("ZOOM", "WHEEL"); + this.setMouseAction("ZOOM", 1); + this.setMouseAction("FOV", "WHEEL", "SHIFT"); + this.setMouseAction("FOV", 1, "SHIFT"); + } + /** + * Compare two mouse actions + * @param {Object} action1 + * @param {Object} action2 + * @returns {Boolean} True if action1 and action 2 are the same mouse action, false otherwise + */ + compareMouseAction(action1, action2) { + if (action1.operation == action2.operation) { + if (action1.mouse == action2.mouse && action1.key == action2.key) { + return true; + } else { + return false; + } + } else { + return false; + } + } + /** + * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one + * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV) + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns {Boolean} True if the mouse action has been successfully added, false otherwise + */ + setMouseAction(operation, mouse, key2 = null) { + const operationInput = ["PAN", "ROTATE", "ZOOM", "FOV"]; + const mouseInput = [0, 1, 2, "WHEEL"]; + const keyInput = ["CTRL", "SHIFT", null]; + let state; + if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key2)) { + return false; + } + if (mouse == "WHEEL") { + if (operation != "ZOOM" && operation != "FOV") { + return false; + } + } + switch (operation) { + case "PAN": + state = STATE.PAN; + break; + case "ROTATE": + state = STATE.ROTATE; + break; + case "ZOOM": + state = STATE.SCALE; + break; + case "FOV": + state = STATE.FOV; + break; + } + const action = { + operation, + mouse, + key: key2, + state + }; + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) { + this.mouseActions.splice(i, 1, action); + return true; + } + } + this.mouseActions.push(action); + return true; + } + /** + * Remove a mouse action by specifying its mouse/key combination + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns {Boolean} True if the operation has been succesfully removed, false otherwise + */ + unsetMouseAction(mouse, key2 = null) { + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == mouse && this.mouseActions[i].key == key2) { + this.mouseActions.splice(i, 1); + return true; + } + } + return false; + } + /** + * Return the operation associated to a mouse/keyboard combination + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns The operation if it has been found, null otherwise + */ + getOpFromAction(mouse, key2) { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key2) { + return action.operation; + } + } + if (key2 != null) { + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) { + return action.operation; + } + } + } + return null; + } + /** + * Get the operation associated to mouse and key combination and returns the corresponding FSA state + * @param {Number} mouse Mouse button + * @param {String} key Keyboard modifier + * @returns The FSA state obtained from the operation associated to mouse/keyboard combination + */ + getOpStateFromAction(mouse, key2) { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key2) { + return action.state; + } + } + if (key2 != null) { + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) { + return action.state; + } + } + } + return null; + } + /** + * Calculate the angle between two pointers + * @param {PointerEvent} p1 + * @param {PointerEvent} p2 + * @returns {Number} The angle between two pointers in degrees + */ + getAngle(p1, p2) { + return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI; + } + /** + * Update a PointerEvent inside current pointerevents array + * @param {PointerEvent} event + */ + updateTouchEvent(event) { + for (let i = 0; i < this._touchCurrent.length; i++) { + if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1, event); + break; + } + } + } + /** + * Apply a transformation matrix, to the camera and gizmos + * @param {Object} transformation Object containing matrices to apply to camera and gizmos + */ + applyTransformMatrix(transformation) { + if (transformation.camera != null) { + this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera); + this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.updateMatrix(); + if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) { + this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion); + } + } + if (transformation.gizmos != null) { + this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos); + this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + } + if (this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) { + this._tbRadius = this.calculateTbRadius(this.camera); + if (this.adjustNearFar) { + const cameraDistance = this.camera.position.distanceTo(this._gizmos.position); + const bb = new Box3(); + bb.setFromObject(this._gizmos); + const sphere = new Sphere(); + bb.getBoundingSphere(sphere); + const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length()); + const regularNearPosition = cameraDistance - this._initialNear; + const minNearPos = Math.min(adjustedNearPosition, regularNearPosition); + this.camera.near = cameraDistance - minNearPos; + const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length()); + const regularFarPosition = cameraDistance - this._initialFar; + const minFarPos = Math.min(adjustedFarPosition, regularFarPosition); + this.camera.far = cameraDistance - minFarPos; + this.camera.updateProjectionMatrix(); + } else { + let update = false; + if (this.camera.near != this._initialNear) { + this.camera.near = this._initialNear; + update = true; + } + if (this.camera.far != this._initialFar) { + this.camera.far = this._initialFar; + update = true; + } + if (update) { + this.camera.updateProjectionMatrix(); + } + } + } + } + /** + * Calculate the angular speed + * @param {Number} p0 Position at t0 + * @param {Number} p1 Position at t1 + * @param {Number} t0 Initial time in milliseconds + * @param {Number} t1 Ending time in milliseconds + */ + calculateAngularSpeed(p0, p1, t0, t1) { + const s = p1 - p0; + const t3 = (t1 - t0) / 1e3; + if (t3 == 0) { + return 0; + } + return s / t3; + } + /** + * Calculate the distance between two pointers + * @param {PointerEvent} p0 The first pointer + * @param {PointerEvent} p1 The second pointer + * @returns {number} The distance between the two pointers + */ + calculatePointersDistance(p0, p1) { + return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2)); + } + /** + * Calculate the rotation axis as the vector perpendicular between two vectors + * @param {Vector3} vec1 The first vector + * @param {Vector3} vec2 The second vector + * @returns {Vector3} The normalized rotation axis + */ + calculateRotationAxis(vec1, vec2) { + this._rotationMatrix.extractRotation(this._cameraMatrixState); + this._quat.setFromRotationMatrix(this._rotationMatrix); + this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat); + return this._rotationAxis.normalize().clone(); + } + /** + * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum + * @param {Camera} camera + * @returns {Number} The trackball radius + */ + calculateTbRadius(camera) { + const distance = camera.position.distanceTo(this._gizmos.position); + if (camera.type == "PerspectiveCamera") { + const halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5; + const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV)); + return Math.tan(Math.min(halfFovV, halfFovH)) * distance * this.radiusFactor; + } else if (camera.type == "OrthographicCamera") { + return Math.min(camera.top, camera.right) * this.radiusFactor; + } + } + /** + * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in + * @param {Vector3} point The point of interest + * @param {Number} size Scale factor + * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation) + */ + focus(point, size2, amount = 1) { + _offset.copy(point).sub(this._gizmos.position).multiplyScalar(amount); + this._translationMatrix.makeTranslation(_offset.x, _offset.y, _offset.z); + _gizmoMatrixStateTemp.copy(this._gizmoMatrixState); + this._gizmoMatrixState.premultiply(this._translationMatrix); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + _cameraMatrixStateTemp.copy(this._cameraMatrixState); + this._cameraMatrixState.premultiply(this._translationMatrix); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + if (this.enableZoom) { + this.applyTransformMatrix(this.scale(size2, this._gizmos.position)); + } + this._gizmoMatrixState.copy(_gizmoMatrixStateTemp); + this._cameraMatrixState.copy(_cameraMatrixStateTemp); + } + /** + * Draw a grid and add it to the scene + */ + drawGrid() { + if (this.scene != null) { + const color = 8947848; + const multiplier = 3; + let size2, divisions, maxLength, tick; + if (this.camera.isOrthographicCamera) { + const width2 = this.camera.right - this.camera.left; + const height2 = this.camera.bottom - this.camera.top; + maxLength = Math.max(width2, height2); + tick = maxLength / 20; + size2 = maxLength / this.camera.zoom * multiplier; + divisions = size2 / tick * this.camera.zoom; + } else if (this.camera.isPerspectiveCamera) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5; + const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV)); + maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2; + tick = maxLength / 20; + size2 = maxLength * multiplier; + divisions = size2 / tick; + } + if (this._grid == null) { + this._grid = new GridHelper(size2, divisions, color, color); + this._grid.position.copy(this._gizmos.position); + this._gridPosition.copy(this._grid.position); + this._grid.quaternion.copy(this.camera.quaternion); + this._grid.rotateX(Math.PI * 0.5); + this.scene.add(this._grid); + } + } + } + /** + * Remove all listeners, stop animations and clean scene + */ + dispose() { + if (this._animationId != -1) { + window.cancelAnimationFrame(this._animationId); + } + this.domElement.removeEventListener("pointerdown", this._onPointerDown); + this.domElement.removeEventListener("pointercancel", this._onPointerCancel); + this.domElement.removeEventListener("wheel", this._onWheel); + this.domElement.removeEventListener("contextmenu", this._onContextMenu); + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + window.removeEventListener("resize", this._onWindowResize); + if (this.scene !== null) this.scene.remove(this._gizmos); + this.disposeGrid(); + } + /** + * remove the grid from the scene + */ + disposeGrid() { + if (this._grid != null && this.scene != null) { + this.scene.remove(this._grid); + this._grid = null; + } + } + /** + * Compute the easing out cubic function for ease out effect in animation + * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation) + * @returns {Number} Result of easing out cubic at time t + */ + easeOutCubic(t3) { + return 1 - Math.pow(1 - t3, 3); + } + /** + * Make rotation gizmos more or less visible + * @param {Boolean} isActive If true, make gizmos more visible + */ + activateGizmos(isActive) { + const gizmoX = this._gizmos.children[0]; + const gizmoY = this._gizmos.children[1]; + const gizmoZ = this._gizmos.children[2]; + if (isActive) { + gizmoX.material.setValues({ opacity: 1 }); + gizmoY.material.setValues({ opacity: 1 }); + gizmoZ.material.setValues({ opacity: 1 }); + } else { + gizmoX.material.setValues({ opacity: 0.6 }); + gizmoY.material.setValues({ opacity: 0.6 }); + gizmoZ.material.setValues({ opacity: 0.6 }); + } + } + /** + * Calculate the cursor position in NDC + * @param {number} x Cursor horizontal coordinate within the canvas + * @param {number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor normalized position inside the canvas + */ + getCursorNDC(cursorX, cursorY, canvas) { + const canvasRect = canvas.getBoundingClientRect(); + this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1); + this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1); + return this._v2_1.clone(); + } + /** + * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas + * @param {Number} x Cursor horizontal coordinate within the canvas + * @param {Number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor position inside the canvas + */ + getCursorPosition(cursorX, cursorY, canvas) { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5; + this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5; + return this._v2_1.clone(); + } + /** + * Set the camera to be controlled + * @param {Camera} camera The virtual camera to be controlled + */ + setCamera(camera) { + camera.lookAt(this.target); + camera.updateMatrix(); + if (camera.type == "PerspectiveCamera") { + this._fov0 = camera.fov; + this._fovState = camera.fov; + } + this._cameraMatrixState0.copy(camera.matrix); + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraProjectionState.copy(camera.projectionMatrix); + this._zoom0 = camera.zoom; + this._zoomState = this._zoom0; + this._initialNear = camera.near; + this._nearPos0 = camera.position.distanceTo(this.target) - camera.near; + this._nearPos = this._initialNear; + this._initialFar = camera.far; + this._farPos0 = camera.position.distanceTo(this.target) - camera.far; + this._farPos = this._initialFar; + this._up0.copy(camera.up); + this._upState.copy(camera.up); + this.camera = camera; + this.camera.updateProjectionMatrix(); + this._tbRadius = this.calculateTbRadius(camera); + this.makeGizmos(this.target, this._tbRadius); + } + /** + * Set gizmos visibility + * @param {Boolean} value Value of gizmos visibility + */ + setGizmosVisible(value2) { + this._gizmos.visible = value2; + this.dispatchEvent(_changeEvent); + } + /** + * Set gizmos radius factor and redraws gizmos + * @param {Float} value Value of radius factor + */ + setTbRadius(value2) { + this.radiusFactor = value2; + this._tbRadius = this.calculateTbRadius(this.camera); + const curve = new EllipseCurve(0, 0, this._tbRadius, this._tbRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + this.dispatchEvent(_changeEvent); + } + /** + * Creates the rotation gizmos matching trackball center and radius + * @param {Vector3} tbCenter The trackball center + * @param {number} tbRadius The trackball radius + */ + makeGizmos(tbCenter, tbRadius) { + const curve = new EllipseCurve(0, 0, tbRadius, tbRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + const curveMaterialX = new LineBasicMaterial({ color: 16744576, fog: false, transparent: true, opacity: 0.6 }); + const curveMaterialY = new LineBasicMaterial({ color: 8454016, fog: false, transparent: true, opacity: 0.6 }); + const curveMaterialZ = new LineBasicMaterial({ color: 8421631, fog: false, transparent: true, opacity: 0.6 }); + const gizmoX = new Line(curveGeometry, curveMaterialX); + const gizmoY = new Line(curveGeometry, curveMaterialY); + const gizmoZ = new Line(curveGeometry, curveMaterialZ); + const rotation2 = Math.PI * 0.5; + gizmoX.rotation.x = rotation2; + gizmoY.rotation.y = rotation2; + this._gizmoMatrixState0.identity().setPosition(tbCenter); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + if (this.camera.zoom !== 1) { + const size2 = 1 / this.camera.zoom; + this._scaleMatrix.makeScale(size2, size2, size2); + this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix); + } + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.traverse(function(object) { + if (object.isLine) { + object.geometry.dispose(); + object.material.dispose(); + } + }); + this._gizmos.clear(); + this._gizmos.add(gizmoX); + this._gizmos.add(gizmoY); + this._gizmos.add(gizmoZ); + } + /** + * Perform animation for focus operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} point Point of interest for focus operation + * @param {Matrix4} cameraMatrix Camera matrix + * @param {Matrix4} gizmoMatrix Gizmos matrix + */ + onFocusAnim(time2, point, cameraMatrix, gizmoMatrix) { + if (this._timeStart == -1) { + this._timeStart = time2; + } + if (this._state == STATE.ANIMATION_FOCUS) { + const deltaTime = time2 - this._timeStart; + const animTime = deltaTime / this.focusAnimationTime; + this._gizmoMatrixState.copy(gizmoMatrix); + if (animTime >= 1) { + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, this.scaleFactor); + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } else { + const amount = this.easeOutCubic(animTime); + const size2 = 1 - amount + this.scaleFactor * amount; + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, size2, amount); + this.dispatchEvent(_changeEvent); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.onFocusAnim(t3, point, cameraMatrix, gizmoMatrix.clone()); + }); + } + } else { + this._animationId = -1; + this._timeStart = -1; + } + } + /** + * Perform animation for rotation operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} rotationAxis Rotation axis + * @param {number} w0 Initial angular velocity + */ + onRotationAnim(time2, rotationAxis, w0) { + if (this._timeStart == -1) { + this._anglePrev = 0; + this._angleCurrent = 0; + this._timeStart = time2; + } + if (this._state == STATE.ANIMATION_ROTATE) { + const deltaTime = (time2 - this._timeStart) / 1e3; + const w = w0 + -this.dampingFactor * deltaTime; + if (w > 0) { + this._angleCurrent = 0.5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0; + this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent)); + this.dispatchEvent(_changeEvent); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.onRotationAnim(t3, rotationAxis, w0); + }); + } else { + this._animationId = -1; + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else { + this._animationId = -1; + this._timeStart = -1; + if (this._state != STATE.ROTATE) { + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } + } + /** + * Perform pan operation moving camera between two points + * @param {Vector3} p0 Initial point + * @param {Vector3} p1 Ending point + * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only) + */ + pan(p0, p1, adjust = false) { + const movement = p0.clone().sub(p1); + if (this.camera.isOrthographicCamera) { + movement.multiplyScalar(1 / this.camera.zoom); + } else if (this.camera.isPerspectiveCamera && adjust) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); + const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position); + movement.multiplyScalar(1 / distanceFactor); + } + this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion); + this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z); + this.setTransformationMatrices(this._m4_1, this._m4_1); + return _transformation; + } + /** + * Reset trackball + */ + reset() { + this.camera.zoom = this._zoom0; + if (this.camera.isPerspectiveCamera) { + this.camera.fov = this._fov0; + } + this.camera.near = this._nearPos; + this.camera.far = this._farPos; + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(this._up0); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + this._tbRadius = this.calculateTbRadius(this.camera); + this.makeGizmos(this._gizmos.position, this._tbRadius); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + /** + * Rotate the camera around an axis passing by trackball's center + * @param {Vector3} axis Rotation axis + * @param {number} angle Angle in radians + * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera + */ + rotate(axis, angle) { + const point = this._gizmos.position; + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._rotationMatrix.makeRotationAxis(axis, -angle); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1); + return _transformation; + } + copyState() { + let state; + if (this.camera.isOrthographicCamera) { + state = JSON.stringify({ arcballState: { + cameraFar: this.camera.far, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } }); + } else if (this.camera.isPerspectiveCamera) { + state = JSON.stringify({ arcballState: { + cameraFar: this.camera.far, + cameraFov: this.camera.fov, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } }); + } + navigator.clipboard.writeText(state); + } + pasteState() { + const self2 = this; + navigator.clipboard.readText().then(function resolved(value2) { + self2.setStateFromJSON(value2); + }); + } + /** + * Save the current state of the control. This can later be recover with .reset + */ + saveState() { + this._cameraMatrixState0.copy(this.camera.matrix); + this._gizmoMatrixState0.copy(this._gizmos.matrix); + this._nearPos = this.camera.near; + this._farPos = this.camera.far; + this._zoom0 = this.camera.zoom; + this._up0.copy(this.camera.up); + if (this.camera.isPerspectiveCamera) { + this._fov0 = this.camera.fov; + } + } + /** + * Perform uniform scale operation around a given point + * @param {Number} size Scale factor + * @param {Vector3} point Point around which scale + * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only) + * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos + */ + scale(size2, point, scaleGizmos = true) { + _scalePointTemp.copy(point); + let sizeInverse = 1 / size2; + if (this.camera.isOrthographicCamera) { + this.camera.zoom = this._zoomState; + this.camera.zoom *= size2; + if (this.camera.zoom > this.maxZoom) { + this.camera.zoom = this.maxZoom; + sizeInverse = this._zoomState / this.maxZoom; + } else if (this.camera.zoom < this.minZoom) { + this.camera.zoom = this.minZoom; + sizeInverse = this._zoomState / this.minZoom; + } + this.camera.updateProjectionMatrix(); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z); + this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix); + this._m4_2.multiply(this._translationMatrix); + _scalePointTemp.sub(this._v3_1); + const amount = _scalePointTemp.clone().multiplyScalar(sizeInverse); + _scalePointTemp.sub(amount); + this._m4_1.makeTranslation(_scalePointTemp.x, _scalePointTemp.y, _scalePointTemp.z); + this._m4_2.premultiply(this._m4_1); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + } else if (this.camera.isPerspectiveCamera) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + let distance = this._v3_1.distanceTo(_scalePointTemp); + let amount = distance - distance * sizeInverse; + const newDistance = distance - amount; + if (newDistance < this.minDistance) { + sizeInverse = this.minDistance / distance; + amount = distance - distance * sizeInverse; + } else if (newDistance > this.maxDistance) { + sizeInverse = this.maxDistance / distance; + amount = distance - distance * sizeInverse; + } + _offset.copy(_scalePointTemp).sub(this._v3_1).normalize().multiplyScalar(amount); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + if (scaleGizmos) { + const pos = this._v3_2; + distance = pos.distanceTo(_scalePointTemp); + amount = distance - distance * sizeInverse; + _offset.copy(_scalePointTemp).sub(this._v3_2).normalize().multiplyScalar(amount); + this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._m4_2.makeTranslation(_offset.x, _offset.y, _offset.z).multiply(this._translationMatrix); + this._m4_2.multiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z); + this._m4_2.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1, this._m4_2); + } else { + this.setTransformationMatrices(this._m4_1); + } + return _transformation; + } + } + /** + * Set camera fov + * @param {Number} value fov to be setted + */ + setFov(value2) { + if (this.camera.isPerspectiveCamera) { + this.camera.fov = MathUtils.clamp(value2, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + } + /** + * Set values in transformation object + * @param {Matrix4} camera Transformation to be applied to the camera + * @param {Matrix4} gizmos Transformation to be applied to gizmos + */ + setTransformationMatrices(camera = null, gizmos = null) { + if (camera != null) { + if (_transformation.camera != null) { + _transformation.camera.copy(camera); + } else { + _transformation.camera = camera.clone(); + } + } else { + _transformation.camera = null; + } + if (gizmos != null) { + if (_transformation.gizmos != null) { + _transformation.gizmos.copy(gizmos); + } else { + _transformation.gizmos = gizmos.clone(); + } + } else { + _transformation.gizmos = null; + } + } + /** + * Rotate camera around its direction axis passing by a given point by a given angle + * @param {Vector3} point The point where the rotation axis is passing trough + * @param {Number} angle Angle in radians + * @returns The computed transormation matix + */ + zRotate(point, angle) { + this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle); + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point); + this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle); + this._v3_2.sub(this._v3_1); + this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + } + getRaycaster() { + return _raycaster; + } + /** + * Unproject the cursor on the 3D object surface + * @param {Vector2} cursor Cursor coordinates in NDC + * @param {Camera} camera Virtual camera + * @returns {Vector3} The point of intersection with the model, if exist, null otherwise + */ + unprojectOnObj(cursor, camera) { + const raycaster = this.getRaycaster(); + raycaster.near = camera.near; + raycaster.far = camera.far; + raycaster.setFromCamera(cursor, camera); + const intersect = raycaster.intersectObjects(this.scene.children, true); + for (let i = 0; i < intersect.length; i++) { + if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face != null) { + return intersect[i].point.clone(); + } + } + return null; + } + /** + * Unproject the cursor on the trackball surface + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {number} tbRadius The trackball radius + * @returns {Vector3} The unprojected point on the trackball surface + */ + unprojectOnTbSurface(camera, cursorX, cursorY, canvas, tbRadius) { + if (camera.type == "OrthographicCamera") { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + const x2 = Math.pow(this._v2_1.x, 2); + const y2 = Math.pow(this._v2_1.y, 2); + const r2 = Math.pow(this._tbRadius, 2); + if (x2 + y2 <= r2 * 0.5) { + this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2))); + } else { + this._v3_1.setZ(r2 * 0.5 / Math.sqrt(x2 + y2)); + } + return this._v3_1; + } else if (camera.type == "PerspectiveCamera") { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + const radius2 = Math.pow(tbRadius, 2); + const h = this._v3_1.z; + const l2 = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + if (l2 == 0) { + rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius); + return rayDir; + } + const m = h / l2; + const q2 = cameraGizmoDistance; + let a2 = Math.pow(m, 2) + 1; + let b3 = 2 * m * q2; + let c2 = Math.pow(q2, 2) - radius2; + let delta = Math.pow(b3, 2) - 4 * a2 * c2; + if (delta >= 0) { + this._v2_1.setX((-b3 - Math.sqrt(delta)) / (2 * a2)); + this._v2_1.setY(m * this._v2_1.x + q2); + const angle = MathUtils.RAD2DEG * this._v2_1.angle(); + if (angle >= 45) { + const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength2); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + } + a2 = m; + b3 = q2; + c2 = -radius2 * 0.5; + delta = Math.pow(b3, 2) - 4 * a2 * c2; + this._v2_1.setX((-b3 - Math.sqrt(delta)) / (2 * a2)); + this._v2_1.setY(m * this._v2_1.x + q2); + const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + } + /** + * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only) + * @returns {Vector3} The unprojected point on the trackball plane + */ + unprojectOnTbPlane(camera, cursorX, cursorY, canvas, initialDistance = false) { + if (camera.type == "OrthographicCamera") { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + return this._v3_1.clone(); + } else if (camera.type == "PerspectiveCamera") { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const h = this._v3_1.z; + const l2 = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + let cameraGizmoDistance; + if (initialDistance) { + cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0)); + } else { + cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + } + if (l2 == 0) { + rayDir.set(0, 0, 0); + return rayDir; + } + const m = h / l2; + const q2 = cameraGizmoDistance; + const x2 = -q2 / m; + const rayLength = Math.sqrt(Math.pow(q2, 2) + Math.pow(x2, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z = 0; + return rayDir; + } + } + /** + * Update camera and gizmos state + */ + updateMatrixState() { + this._cameraMatrixState.copy(this.camera.matrix); + this._gizmoMatrixState.copy(this._gizmos.matrix); + if (this.camera.isOrthographicCamera) { + this._cameraProjectionState.copy(this.camera.projectionMatrix); + this.camera.updateProjectionMatrix(); + this._zoomState = this.camera.zoom; + } else if (this.camera.isPerspectiveCamera) { + this._fovState = this.camera.fov; + } + } + /** + * Update the trackball FSA + * @param {STATE} newState New state of the FSA + * @param {Boolean} updateMatrices If matriices state should be updated + */ + updateTbState(newState, updateMatrices) { + this._state = newState; + if (updateMatrices) { + this.updateMatrixState(); + } + } + update() { + const EPS2 = 1e-6; + if (this.target.equals(this._currentTarget) === false) { + this._gizmos.position.copy(this.target); + this._tbRadius = this.calculateTbRadius(this.camera); + this.makeGizmos(this.target, this._tbRadius); + this._currentTarget.copy(this.target); + } + if (this.camera.isOrthographicCamera) { + if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) { + const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom); + this.applyTransformMatrix(this.scale(newZoom / this.camera.zoom, this._gizmos.position, true)); + } + } else if (this.camera.isPerspectiveCamera) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + if (distance > this.maxDistance + EPS2 || distance < this.minDistance - EPS2) { + const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance); + this.applyTransformMatrix(this.scale(newDistance / distance, this._gizmos.position)); + this.updateMatrixState(); + } + if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) { + this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + const oldRadius = this._tbRadius; + this._tbRadius = this.calculateTbRadius(this.camera); + if (oldRadius < this._tbRadius - EPS2 || oldRadius > this._tbRadius + EPS2) { + const scale2 = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + const newRadius = this._tbRadius / scale2; + const curve = new EllipseCurve(0, 0, newRadius, newRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + } + } + this.camera.lookAt(this._gizmos.position); + } + setStateFromJSON(json) { + const state = JSON.parse(json); + if (state.arcballState != void 0) { + this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(state.arcballState.cameraUp); + this.camera.near = state.arcballState.cameraNear; + this.camera.far = state.arcballState.cameraFar; + this.camera.zoom = state.arcballState.cameraZoom; + if (this.camera.isPerspectiveCamera) { + this.camera.fov = state.arcballState.cameraFov; + } + this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmos.updateMatrix(); + this._tbRadius = this.calculateTbRadius(this.camera); + const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0); + this.makeGizmos(this._gizmos.position, this._tbRadius); + this._gizmoMatrixState0.copy(gizmoTmp); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + } +}; +function onWindowResize() { + const scale2 = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + this._tbRadius = this.calculateTbRadius(this.camera); + const newRadius = this._tbRadius / scale2; + const curve = new EllipseCurve(0, 0, newRadius, newRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + this.dispatchEvent(_changeEvent); +} +function onContextMenu(event) { + if (!this.enabled) { + return; + } + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == 2) { + event.preventDefault(); + break; + } + } +} +function onPointerCancel() { + this._touchStart.splice(0, this._touchStart.length); + this._touchCurrent.splice(0, this._touchCurrent.length); + this._input = INPUT.NONE; +} +function onPointerDown(event) { + if (event.button == 0 && event.isPrimary) { + this._downValid = true; + this._downEvents.push(event); + this._downStart = performance.now(); + } else { + this._downValid = false; + } + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + this._touchStart.push(event); + this._touchCurrent.push(event); + switch (this._input) { + case INPUT.NONE: + this._input = INPUT.ONE_FINGER; + this.onSinglePanStart(event, "ROTATE"); + window.addEventListener("pointermove", this._onPointerMove); + window.addEventListener("pointerup", this._onPointerUp); + break; + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + this._input = INPUT.TWO_FINGER; + this.onRotateStart(); + this.onPinchStart(); + this.onDoublePanStart(); + break; + case INPUT.TWO_FINGER: + this._input = INPUT.MULT_FINGER; + this.onTriplePanStart(event); + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.NONE) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + this._mouseOp = this.getOpFromAction(event.button, modifier); + if (this._mouseOp != null) { + window.addEventListener("pointermove", this._onPointerMove); + window.addEventListener("pointerup", this._onPointerUp); + this._input = INPUT.CURSOR; + this._button = event.button; + this.onSinglePanStart(event, this._mouseOp); + } + } +} +function onPointerMove(event) { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + switch (this._input) { + case INPUT.ONE_FINGER: + this.updateTouchEvent(event); + this.onSinglePanMove(event, STATE.ROTATE); + break; + case INPUT.ONE_FINGER_SWITCHED: + const movement = this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio; + if (movement >= this._switchSensibility) { + this._input = INPUT.ONE_FINGER; + this.updateTouchEvent(event); + this.onSinglePanStart(event, "ROTATE"); + break; + } + break; + case INPUT.TWO_FINGER: + this.updateTouchEvent(event); + this.onRotateMove(); + this.onPinchMove(); + this.onDoublePanMove(); + break; + case INPUT.MULT_FINGER: + this.updateTouchEvent(event); + this.onTriplePanMove(event); + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + const mouseOpState = this.getOpStateFromAction(this._button, modifier); + if (mouseOpState != null) { + this.onSinglePanMove(event, mouseOpState); + } + } + if (this._downValid) { + const movement = this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio; + if (movement > this._movementThreshold) { + this._downValid = false; + } + } +} +function onPointerUp(event) { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + const nTouch = this._touchCurrent.length; + for (let i = 0; i < nTouch; i++) { + if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1); + this._touchStart.splice(i, 1); + break; + } + } + switch (this._input) { + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + break; + case INPUT.TWO_FINGER: + this.onDoublePanEnd(event); + this.onPinchEnd(event); + this.onRotateEnd(event); + this._input = INPUT.ONE_FINGER_SWITCHED; + break; + case INPUT.MULT_FINGER: + if (this._touchCurrent.length == 0) { + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onTriplePanEnd(); + } + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + this._button = -1; + } + if (event.isPrimary) { + if (this._downValid) { + const downTime = event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp; + if (downTime <= this._maxDownTime) { + if (this._nclicks == 0) { + this._nclicks = 1; + this._clickStart = performance.now(); + } else { + const clickInterval = event.timeStamp - this._clickStart; + const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio; + if (clickInterval <= this._maxInterval && movement <= this._posThreshold) { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + this.onDoubleTap(event); + } else { + this._nclicks = 1; + this._downEvents.shift(); + this._clickStart = performance.now(); + } + } + } else { + this._downValid = false; + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + } else { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + } +} +function onWheel(event) { + if (this.enabled && this.enableZoom) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + const mouseOp = this.getOpFromAction("WHEEL", modifier); + if (mouseOp != null) { + event.preventDefault(); + this.dispatchEvent(_startEvent); + const notchDeltaY = 125; + let sgn = event.deltaY / notchDeltaY; + let size2 = 1; + if (sgn > 0) { + size2 = 1 / this.scaleFactor; + } else if (sgn < 0) { + size2 = this.scaleFactor; + } + switch (mouseOp) { + case "ZOOM": + this.updateTbState(STATE.SCALE, true); + if (sgn > 0) { + size2 = 1 / Math.pow(this.scaleFactor, sgn); + } else if (sgn < 0) { + size2 = Math.pow(this.scaleFactor, -sgn); + } + if (this.cursorZoom && this.enablePan) { + let scalePoint; + if (this.camera.isOrthographicCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + } else if (this.camera.isPerspectiveCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + } + this.applyTransformMatrix(this.scale(size2, scalePoint)); + } else { + this.applyTransformMatrix(this.scale(size2, this._gizmos.position)); + } + if (this._grid != null) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + case "FOV": + if (this.camera.isPerspectiveCamera) { + this.updateTbState(STATE.FOV, true); + if (event.deltaX != 0) { + sgn = event.deltaX / notchDeltaY; + size2 = 1; + if (sgn > 0) { + size2 = 1 / Math.pow(this.scaleFactor, sgn); + } else if (sgn < 0) { + size2 = Math.pow(this.scaleFactor, -sgn); + } + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this.camera.fov * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + if (newFov > this.maxFov) { + newFov = this.maxFov; + } else if (newFov < this.minFov) { + newFov = this.minFov; + } + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._gizmos.position, false)); + } + if (this._grid != null) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + } + } + } +} + +// node_modules/three/examples/jsm/controls/DragControls.js +var _plane = new Plane(); +var _raycaster2 = new Raycaster(); +var _pointer = new Vector2(); +var _offset2 = new Vector3(); +var _diff = new Vector2(); +var _previousPointer = new Vector2(); +var _intersection = new Vector3(); +var _worldPosition = new Vector3(); +var _inverseMatrix = new Matrix4(); +var _up = new Vector3(); +var _right = new Vector3(); +var DragControls = class extends EventDispatcher { + constructor(_objects, _camera2, _domElement) { + super(); + _domElement.style.touchAction = "none"; + let _selected = null, _hovered = null; + const _intersections = []; + this.mode = "translate"; + this.rotateSpeed = 1; + const scope = this; + function activate() { + _domElement.addEventListener("pointermove", onPointerMove3); + _domElement.addEventListener("pointerdown", onPointerDown3); + _domElement.addEventListener("pointerup", onPointerCancel2); + _domElement.addEventListener("pointerleave", onPointerCancel2); + } + function deactivate() { + _domElement.removeEventListener("pointermove", onPointerMove3); + _domElement.removeEventListener("pointerdown", onPointerDown3); + _domElement.removeEventListener("pointerup", onPointerCancel2); + _domElement.removeEventListener("pointerleave", onPointerCancel2); + _domElement.style.cursor = ""; + } + function dispose() { + deactivate(); + } + function getObjects() { + return _objects; + } + function setObjects(objects) { + _objects = objects; + } + function getRaycaster() { + return _raycaster2; + } + function onPointerMove3(event) { + if (scope.enabled === false) return; + updatePointer(event); + _raycaster2.setFromCamera(_pointer, _camera2); + if (_selected) { + if (scope.mode === "translate") { + if (_raycaster2.ray.intersectPlane(_plane, _intersection)) { + _selected.position.copy(_intersection.sub(_offset2).applyMatrix4(_inverseMatrix)); + } + } else if (scope.mode === "rotate") { + _diff.subVectors(_pointer, _previousPointer).multiplyScalar(scope.rotateSpeed); + _selected.rotateOnWorldAxis(_up, _diff.x); + _selected.rotateOnWorldAxis(_right.normalize(), -_diff.y); + } + scope.dispatchEvent({ type: "drag", object: _selected }); + _previousPointer.copy(_pointer); + } else { + if (event.pointerType === "mouse" || event.pointerType === "pen") { + _intersections.length = 0; + _raycaster2.setFromCamera(_pointer, _camera2); + _raycaster2.intersectObjects(_objects, scope.recursive, _intersections); + if (_intersections.length > 0) { + const object = _intersections[0].object; + _plane.setFromNormalAndCoplanarPoint(_camera2.getWorldDirection(_plane.normal), _worldPosition.setFromMatrixPosition(object.matrixWorld)); + if (_hovered !== object && _hovered !== null) { + scope.dispatchEvent({ type: "hoveroff", object: _hovered }); + _domElement.style.cursor = "auto"; + _hovered = null; + } + if (_hovered !== object) { + scope.dispatchEvent({ type: "hoveron", object }); + _domElement.style.cursor = "pointer"; + _hovered = object; + } + } else { + if (_hovered !== null) { + scope.dispatchEvent({ type: "hoveroff", object: _hovered }); + _domElement.style.cursor = "auto"; + _hovered = null; + } + } + } + } + _previousPointer.copy(_pointer); + } + function onPointerDown3(event) { + if (scope.enabled === false) return; + updatePointer(event); + _intersections.length = 0; + _raycaster2.setFromCamera(_pointer, _camera2); + _raycaster2.intersectObjects(_objects, scope.recursive, _intersections); + if (_intersections.length > 0) { + if (scope.transformGroup === true) { + _selected = findGroup(_intersections[0].object); + } else { + _selected = _intersections[0].object; + } + _plane.setFromNormalAndCoplanarPoint(_camera2.getWorldDirection(_plane.normal), _worldPosition.setFromMatrixPosition(_selected.matrixWorld)); + if (_raycaster2.ray.intersectPlane(_plane, _intersection)) { + if (scope.mode === "translate") { + _inverseMatrix.copy(_selected.parent.matrixWorld).invert(); + _offset2.copy(_intersection).sub(_worldPosition.setFromMatrixPosition(_selected.matrixWorld)); + } else if (scope.mode === "rotate") { + _up.set(0, 1, 0).applyQuaternion(_camera2.quaternion).normalize(); + _right.set(1, 0, 0).applyQuaternion(_camera2.quaternion).normalize(); + } + } + _domElement.style.cursor = "move"; + scope.dispatchEvent({ type: "dragstart", object: _selected }); + } + _previousPointer.copy(_pointer); + } + function onPointerCancel2() { + if (scope.enabled === false) return; + if (_selected) { + scope.dispatchEvent({ type: "dragend", object: _selected }); + _selected = null; + } + _domElement.style.cursor = _hovered ? "pointer" : "auto"; + } + function updatePointer(event) { + const rect = _domElement.getBoundingClientRect(); + _pointer.x = (event.clientX - rect.left) / rect.width * 2 - 1; + _pointer.y = -(event.clientY - rect.top) / rect.height * 2 + 1; + } + function findGroup(obj, group = null) { + if (obj.isGroup) group = obj; + if (obj.parent === null) return group; + return findGroup(obj.parent, group); + } + activate(); + this.enabled = true; + this.recursive = true; + this.transformGroup = false; + this.activate = activate; + this.deactivate = deactivate; + this.dispose = dispose; + this.getObjects = getObjects; + this.getRaycaster = getRaycaster; + this.setObjects = setObjects; + } +}; + +// node_modules/three/examples/jsm/controls/FirstPersonControls.js +var _lookDirection = new Vector3(); +var _spherical = new Spherical(); +var _target = new Vector3(); +var FirstPersonControls = class { + constructor(object, domElement) { + this.object = object; + this.domElement = domElement; + this.enabled = true; + this.movementSpeed = 1; + this.lookSpeed = 5e-3; + this.lookVertical = true; + this.autoForward = false; + this.activeLook = true; + this.heightSpeed = false; + this.heightCoef = 1; + this.heightMin = 0; + this.heightMax = 1; + this.constrainVertical = false; + this.verticalMin = 0; + this.verticalMax = Math.PI; + this.mouseDragOn = false; + this.autoSpeedFactor = 0; + this.pointerX = 0; + this.pointerY = 0; + this.moveForward = false; + this.moveBackward = false; + this.moveLeft = false; + this.moveRight = false; + this.viewHalfX = 0; + this.viewHalfY = 0; + let lat = 0; + let lon = 0; + this.handleResize = function() { + if (this.domElement === document) { + this.viewHalfX = window.innerWidth / 2; + this.viewHalfY = window.innerHeight / 2; + } else { + this.viewHalfX = this.domElement.offsetWidth / 2; + this.viewHalfY = this.domElement.offsetHeight / 2; + } + }; + this.onPointerDown = function(event) { + if (this.domElement !== document) { + this.domElement.focus(); + } + if (this.activeLook) { + switch (event.button) { + case 0: + this.moveForward = true; + break; + case 2: + this.moveBackward = true; + break; + } + } + this.mouseDragOn = true; + }; + this.onPointerUp = function(event) { + if (this.activeLook) { + switch (event.button) { + case 0: + this.moveForward = false; + break; + case 2: + this.moveBackward = false; + break; + } + } + this.mouseDragOn = false; + }; + this.onPointerMove = function(event) { + if (this.domElement === document) { + this.pointerX = event.pageX - this.viewHalfX; + this.pointerY = event.pageY - this.viewHalfY; + } else { + this.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX; + this.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY; + } + }; + this.onKeyDown = function(event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = true; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = true; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = true; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = true; + break; + case "KeyR": + this.moveUp = true; + break; + case "KeyF": + this.moveDown = true; + break; + } + }; + this.onKeyUp = function(event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = false; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = false; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = false; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = false; + break; + case "KeyR": + this.moveUp = false; + break; + case "KeyF": + this.moveDown = false; + break; + } + }; + this.lookAt = function(x2, y2, z) { + if (x2.isVector3) { + _target.copy(x2); + } else { + _target.set(x2, y2, z); + } + this.object.lookAt(_target); + setOrientation(this); + return this; + }; + this.update = function() { + const targetPosition = new Vector3(); + return function update(delta) { + if (this.enabled === false) return; + if (this.heightSpeed) { + const y2 = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax); + const heightDelta = y2 - this.heightMin; + this.autoSpeedFactor = delta * (heightDelta * this.heightCoef); + } else { + this.autoSpeedFactor = 0; + } + const actualMoveSpeed = delta * this.movementSpeed; + if (this.moveForward || this.autoForward && !this.moveBackward) this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor)); + if (this.moveBackward) this.object.translateZ(actualMoveSpeed); + if (this.moveLeft) this.object.translateX(-actualMoveSpeed); + if (this.moveRight) this.object.translateX(actualMoveSpeed); + if (this.moveUp) this.object.translateY(actualMoveSpeed); + if (this.moveDown) this.object.translateY(-actualMoveSpeed); + let actualLookSpeed = delta * this.lookSpeed; + if (!this.activeLook) { + actualLookSpeed = 0; + } + let verticalLookRatio = 1; + if (this.constrainVertical) { + verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin); + } + lon -= this.pointerX * actualLookSpeed; + if (this.lookVertical) lat -= this.pointerY * actualLookSpeed * verticalLookRatio; + lat = Math.max(-85, Math.min(85, lat)); + let phi = MathUtils.degToRad(90 - lat); + const theta = MathUtils.degToRad(lon); + if (this.constrainVertical) { + phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax); + } + const position2 = this.object.position; + targetPosition.setFromSphericalCoords(1, phi, theta).add(position2); + this.object.lookAt(targetPosition); + }; + }(); + this.dispose = function() { + this.domElement.removeEventListener("contextmenu", contextmenu); + this.domElement.removeEventListener("pointerdown", _onPointerDown); + this.domElement.removeEventListener("pointermove", _onPointerMove); + this.domElement.removeEventListener("pointerup", _onPointerUp); + window.removeEventListener("keydown", _onKeyDown); + window.removeEventListener("keyup", _onKeyUp); + }; + const _onPointerMove = this.onPointerMove.bind(this); + const _onPointerDown = this.onPointerDown.bind(this); + const _onPointerUp = this.onPointerUp.bind(this); + const _onKeyDown = this.onKeyDown.bind(this); + const _onKeyUp = this.onKeyUp.bind(this); + this.domElement.addEventListener("contextmenu", contextmenu); + this.domElement.addEventListener("pointerdown", _onPointerDown); + this.domElement.addEventListener("pointermove", _onPointerMove); + this.domElement.addEventListener("pointerup", _onPointerUp); + window.addEventListener("keydown", _onKeyDown); + window.addEventListener("keyup", _onKeyUp); + function setOrientation(controls) { + const quaternion = controls.object.quaternion; + _lookDirection.set(0, 0, -1).applyQuaternion(quaternion); + _spherical.setFromVector3(_lookDirection); + lat = 90 - MathUtils.radToDeg(_spherical.phi); + lon = MathUtils.radToDeg(_spherical.theta); + } + this.handleResize(); + setOrientation(this); + } +}; +function contextmenu(event) { + event.preventDefault(); +} + +// node_modules/three/examples/jsm/controls/FlyControls.js +var _changeEvent2 = { type: "change" }; +var FlyControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + this.object = object; + this.domElement = domElement; + this.enabled = true; + this.movementSpeed = 1; + this.rollSpeed = 5e-3; + this.dragToLook = false; + this.autoForward = false; + const scope = this; + const EPS2 = 1e-6; + const lastQuaternion = new Quaternion(); + const lastPosition = new Vector3(); + this.tmpQuaternion = new Quaternion(); + this.status = 0; + this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 }; + this.moveVector = new Vector3(0, 0, 0); + this.rotationVector = new Vector3(0, 0, 0); + this.keydown = function(event) { + if (event.altKey || this.enabled === false) { + return; + } + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = 0.1; + break; + case "KeyW": + this.moveState.forward = 1; + break; + case "KeyS": + this.moveState.back = 1; + break; + case "KeyA": + this.moveState.left = 1; + break; + case "KeyD": + this.moveState.right = 1; + break; + case "KeyR": + this.moveState.up = 1; + break; + case "KeyF": + this.moveState.down = 1; + break; + case "ArrowUp": + this.moveState.pitchUp = 1; + break; + case "ArrowDown": + this.moveState.pitchDown = 1; + break; + case "ArrowLeft": + this.moveState.yawLeft = 1; + break; + case "ArrowRight": + this.moveState.yawRight = 1; + break; + case "KeyQ": + this.moveState.rollLeft = 1; + break; + case "KeyE": + this.moveState.rollRight = 1; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }; + this.keyup = function(event) { + if (this.enabled === false) return; + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = 1; + break; + case "KeyW": + this.moveState.forward = 0; + break; + case "KeyS": + this.moveState.back = 0; + break; + case "KeyA": + this.moveState.left = 0; + break; + case "KeyD": + this.moveState.right = 0; + break; + case "KeyR": + this.moveState.up = 0; + break; + case "KeyF": + this.moveState.down = 0; + break; + case "ArrowUp": + this.moveState.pitchUp = 0; + break; + case "ArrowDown": + this.moveState.pitchDown = 0; + break; + case "ArrowLeft": + this.moveState.yawLeft = 0; + break; + case "ArrowRight": + this.moveState.yawRight = 0; + break; + case "KeyQ": + this.moveState.rollLeft = 0; + break; + case "KeyE": + this.moveState.rollRight = 0; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }; + this.pointerdown = function(event) { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status++; + } else { + switch (event.button) { + case 0: + this.moveState.forward = 1; + break; + case 2: + this.moveState.back = 1; + break; + } + this.updateMovementVector(); + } + }; + this.pointermove = function(event) { + if (this.enabled === false) return; + if (!this.dragToLook || this.status > 0) { + const container = this.getContainerDimensions(); + const halfWidth = container.size[0] / 2; + const halfHeight = container.size[1] / 2; + this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth; + this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight; + this.updateRotationVector(); + } + }; + this.pointerup = function(event) { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status--; + this.moveState.yawLeft = this.moveState.pitchDown = 0; + } else { + switch (event.button) { + case 0: + this.moveState.forward = 0; + break; + case 2: + this.moveState.back = 0; + break; + } + this.updateMovementVector(); + } + this.updateRotationVector(); + }; + this.pointercancel = function() { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status = 0; + this.moveState.yawLeft = this.moveState.pitchDown = 0; + } else { + this.moveState.forward = 0; + this.moveState.back = 0; + this.updateMovementVector(); + } + this.updateRotationVector(); + }; + this.contextMenu = function(event) { + if (this.enabled === false) return; + event.preventDefault(); + }; + this.update = function(delta) { + if (this.enabled === false) return; + const moveMult = delta * scope.movementSpeed; + const rotMult = delta * scope.rollSpeed; + scope.object.translateX(scope.moveVector.x * moveMult); + scope.object.translateY(scope.moveVector.y * moveMult); + scope.object.translateZ(scope.moveVector.z * moveMult); + scope.tmpQuaternion.set(scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1).normalize(); + scope.object.quaternion.multiply(scope.tmpQuaternion); + if (lastPosition.distanceToSquared(scope.object.position) > EPS2 || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS2) { + scope.dispatchEvent(_changeEvent2); + lastQuaternion.copy(scope.object.quaternion); + lastPosition.copy(scope.object.position); + } + }; + this.updateMovementVector = function() { + const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0; + this.moveVector.x = -this.moveState.left + this.moveState.right; + this.moveVector.y = -this.moveState.down + this.moveState.up; + this.moveVector.z = -forward + this.moveState.back; + }; + this.updateRotationVector = function() { + this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp; + this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft; + this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft; + }; + this.getContainerDimensions = function() { + if (this.domElement != document) { + return { + size: [this.domElement.offsetWidth, this.domElement.offsetHeight], + offset: [this.domElement.offsetLeft, this.domElement.offsetTop] + }; + } else { + return { + size: [window.innerWidth, window.innerHeight], + offset: [0, 0] + }; + } + }; + this.dispose = function() { + this.domElement.removeEventListener("contextmenu", _contextmenu); + this.domElement.removeEventListener("pointerdown", _pointerdown); + this.domElement.removeEventListener("pointermove", _pointermove); + this.domElement.removeEventListener("pointerup", _pointerup); + this.domElement.removeEventListener("pointercancel", _pointercancel); + window.removeEventListener("keydown", _keydown); + window.removeEventListener("keyup", _keyup); + }; + const _contextmenu = this.contextMenu.bind(this); + const _pointermove = this.pointermove.bind(this); + const _pointerdown = this.pointerdown.bind(this); + const _pointerup = this.pointerup.bind(this); + const _pointercancel = this.pointercancel.bind(this); + const _keydown = this.keydown.bind(this); + const _keyup = this.keyup.bind(this); + this.domElement.addEventListener("contextmenu", _contextmenu); + this.domElement.addEventListener("pointerdown", _pointerdown); + this.domElement.addEventListener("pointermove", _pointermove); + this.domElement.addEventListener("pointerup", _pointerup); + this.domElement.addEventListener("pointercancel", _pointercancel); + window.addEventListener("keydown", _keydown); + window.addEventListener("keyup", _keyup); + this.updateMovementVector(); + this.updateRotationVector(); + } +}; + +// node_modules/three/examples/jsm/controls/OrbitControls.js +var _changeEvent3 = { type: "change" }; +var _startEvent2 = { type: "start" }; +var _endEvent2 = { type: "end" }; +var _ray = new Ray(); +var _plane2 = new Plane(); +var TILT_LIMIT = Math.cos(70 * MathUtils.DEG2RAD); +var OrbitControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + this.object = object; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + this.enabled = true; + this.target = new Vector3(); + this.cursor = new Vector3(); + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.minTargetRadius = 0; + this.maxTargetRadius = Infinity; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.minAzimuthAngle = -Infinity; + this.maxAzimuthAngle = Infinity; + this.enableDamping = false; + this.dampingFactor = 0.05; + this.enableZoom = true; + this.zoomSpeed = 1; + this.enableRotate = true; + this.rotateSpeed = 1; + this.enablePan = true; + this.panSpeed = 1; + this.screenSpacePanning = true; + this.keyPanSpeed = 7; + this.zoomToCursor = false; + this.autoRotate = false; + this.autoRotateSpeed = 2; + this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }; + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + this._domElementKeyEvents = null; + this.getPolarAngle = function() { + return spherical.phi; + }; + this.getAzimuthalAngle = function() { + return spherical.theta; + }; + this.getDistance = function() { + return this.object.position.distanceTo(this.target); + }; + this.listenToKeyEvents = function(domElement2) { + domElement2.addEventListener("keydown", onKeyDown); + this._domElementKeyEvents = domElement2; + }; + this.stopListenToKeyEvents = function() { + this._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + this._domElementKeyEvents = null; + }; + this.saveState = function() { + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; + this.reset = function() { + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(_changeEvent3); + scope.update(); + state = STATE2.NONE; + }; + this.update = function() { + const offset = new Vector3(); + const quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0)); + const quatInverse = quat.clone().invert(); + const lastPosition = new Vector3(); + const lastQuaternion = new Quaternion(); + const lastTargetPosition = new Vector3(); + const twoPI = 2 * Math.PI; + return function update(deltaTime = null) { + const position2 = scope.object.position; + offset.copy(position2).sub(scope.target); + offset.applyQuaternion(quat); + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE2.NONE) { + rotateLeft(getAutoRotationAngle(deltaTime)); + } + if (scope.enableDamping) { + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + } else { + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + } + let min = scope.minAzimuthAngle; + let max2 = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max2)) { + if (min < -Math.PI) min += twoPI; + else if (min > Math.PI) min -= twoPI; + if (max2 < -Math.PI) max2 += twoPI; + else if (max2 > Math.PI) max2 -= twoPI; + if (min <= max2) { + spherical.theta = Math.max(min, Math.min(max2, spherical.theta)); + } else { + spherical.theta = spherical.theta > (min + max2) / 2 ? Math.max(min, spherical.theta) : Math.min(max2, spherical.theta); + } + } + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + spherical.makeSafe(); + if (scope.enableDamping === true) { + scope.target.addScaledVector(panOffset, scope.dampingFactor); + } else { + scope.target.add(panOffset); + } + scope.target.sub(scope.cursor); + scope.target.clampLength(scope.minTargetRadius, scope.maxTargetRadius); + scope.target.add(scope.cursor); + let zoomChanged = false; + if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) { + spherical.radius = clampDistance(spherical.radius); + } else { + const prevRadius = spherical.radius; + spherical.radius = clampDistance(spherical.radius * scale2); + zoomChanged = prevRadius != spherical.radius; + } + offset.setFromSpherical(spherical); + offset.applyQuaternion(quatInverse); + position2.copy(scope.target).add(offset); + scope.object.lookAt(scope.target); + if (scope.enableDamping === true) { + sphericalDelta.theta *= 1 - scope.dampingFactor; + sphericalDelta.phi *= 1 - scope.dampingFactor; + panOffset.multiplyScalar(1 - scope.dampingFactor); + } else { + sphericalDelta.set(0, 0, 0); + panOffset.set(0, 0, 0); + } + if (scope.zoomToCursor && performCursorZoom) { + let newRadius = null; + if (scope.object.isPerspectiveCamera) { + const prevRadius = offset.length(); + newRadius = clampDistance(prevRadius * scale2); + const radiusDelta = prevRadius - newRadius; + scope.object.position.addScaledVector(dollyDirection, radiusDelta); + scope.object.updateMatrixWorld(); + zoomChanged = !!radiusDelta; + } else if (scope.object.isOrthographicCamera) { + const mouseBefore = new Vector3(mouse.x, mouse.y, 0); + mouseBefore.unproject(scope.object); + const prevZoom = scope.object.zoom; + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale2)); + scope.object.updateProjectionMatrix(); + zoomChanged = prevZoom !== scope.object.zoom; + const mouseAfter = new Vector3(mouse.x, mouse.y, 0); + mouseAfter.unproject(scope.object); + scope.object.position.sub(mouseAfter).add(mouseBefore); + scope.object.updateMatrixWorld(); + newRadius = offset.length(); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."); + scope.zoomToCursor = false; + } + if (newRadius !== null) { + if (this.screenSpacePanning) { + scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position); + } else { + _ray.origin.copy(scope.object.position); + _ray.direction.set(0, 0, -1).transformDirection(scope.object.matrix); + if (Math.abs(scope.object.up.dot(_ray.direction)) < TILT_LIMIT) { + object.lookAt(scope.target); + } else { + _plane2.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); + _ray.intersectPlane(_plane2, scope.target); + } + } + } + } else if (scope.object.isOrthographicCamera) { + const prevZoom = scope.object.zoom; + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale2)); + if (prevZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + } + scale2 = 1; + performCursorZoom = false; + if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS2 || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS2 || lastTargetPosition.distanceToSquared(scope.target) > EPS2) { + scope.dispatchEvent(_changeEvent3); + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + lastTargetPosition.copy(scope.target); + return true; + } + return false; + }; + }(); + this.dispose = function() { + scope.domElement.removeEventListener("contextmenu", onContextMenu2); + scope.domElement.removeEventListener("pointerdown", onPointerDown3); + scope.domElement.removeEventListener("pointercancel", onPointerUp3); + scope.domElement.removeEventListener("wheel", onMouseWheel); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + const document3 = scope.domElement.getRootNode(); + document3.removeEventListener("keydown", interceptControlDown, { capture: true }); + if (scope._domElementKeyEvents !== null) { + scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + scope._domElementKeyEvents = null; + } + }; + const scope = this; + const STATE2 = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + let state = STATE2.NONE; + const EPS2 = 1e-6; + const spherical = new Spherical(); + const sphericalDelta = new Spherical(); + let scale2 = 1; + const panOffset = new Vector3(); + const rotateStart = new Vector2(); + const rotateEnd = new Vector2(); + const rotateDelta = new Vector2(); + const panStart = new Vector2(); + const panEnd = new Vector2(); + const panDelta = new Vector2(); + const dollyStart = new Vector2(); + const dollyEnd = new Vector2(); + const dollyDelta = new Vector2(); + const dollyDirection = new Vector3(); + const mouse = new Vector2(); + let performCursorZoom = false; + const pointers = []; + const pointerPositions = {}; + let controlActive = false; + function getAutoRotationAngle(deltaTime) { + if (deltaTime !== null) { + return 2 * Math.PI / 60 * scope.autoRotateSpeed * deltaTime; + } else { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + } + function getZoomScale(delta) { + const normalizedDelta = Math.abs(delta * 0.01); + return Math.pow(0.95, scope.zoomSpeed * normalizedDelta); + } + function rotateLeft(angle) { + sphericalDelta.theta -= angle; + } + function rotateUp(angle) { + sphericalDelta.phi -= angle; + } + const panLeft = function() { + const v = new Vector3(); + return function panLeft2(distance, objectMatrix) { + v.setFromMatrixColumn(objectMatrix, 0); + v.multiplyScalar(-distance); + panOffset.add(v); + }; + }(); + const panUp = function() { + const v = new Vector3(); + return function panUp2(distance, objectMatrix) { + if (scope.screenSpacePanning === true) { + v.setFromMatrixColumn(objectMatrix, 1); + } else { + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } + v.multiplyScalar(distance); + panOffset.add(v); + }; + }(); + const pan = function() { + const offset = new Vector3(); + return function pan2(deltaX, deltaY) { + const element = scope.domElement; + if (scope.object.isPerspectiveCamera) { + const position2 = scope.object.position; + offset.copy(position2).sub(scope.target); + let targetDistance = offset.length(); + targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180); + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } else if (scope.object.isOrthographicCamera) { + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."); + scope.enablePan = false; + } + }; + }(); + function dollyOut(dollyScale) { + if (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) { + scale2 /= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function dollyIn(dollyScale) { + if (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) { + scale2 *= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function updateZoomParameters(x2, y2) { + if (!scope.zoomToCursor) { + return; + } + performCursorZoom = true; + const rect = scope.domElement.getBoundingClientRect(); + const dx = x2 - rect.left; + const dy = y2 - rect.top; + const w = rect.width; + const h = rect.height; + mouse.x = dx / w * 2 - 1; + mouse.y = -(dy / h) * 2 + 1; + dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize(); + } + function clampDistance(dist) { + return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist)); + } + function handleMouseDownRotate(event) { + rotateStart.set(event.clientX, event.clientY); + } + function handleMouseDownDolly(event) { + updateZoomParameters(event.clientX, event.clientX); + dollyStart.set(event.clientX, event.clientY); + } + function handleMouseDownPan(event) { + panStart.set(event.clientX, event.clientY); + } + function handleMouseMoveRotate(event) { + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + scope.update(); + } + function handleMouseMoveDolly(event) { + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + if (dollyDelta.y > 0) { + dollyOut(getZoomScale(dollyDelta.y)); + } else if (dollyDelta.y < 0) { + dollyIn(getZoomScale(dollyDelta.y)); + } + dollyStart.copy(dollyEnd); + scope.update(); + } + function handleMouseMovePan(event) { + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + scope.update(); + } + function handleMouseWheel(event) { + updateZoomParameters(event.clientX, event.clientY); + if (event.deltaY < 0) { + dollyIn(getZoomScale(event.deltaY)); + } else if (event.deltaY > 0) { + dollyOut(getZoomScale(event.deltaY)); + } + scope.update(); + } + function handleKeyDown(event) { + let needsUpdate = false; + switch (event.code) { + case scope.keys.UP: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateUp(2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(0, scope.keyPanSpeed); + } + needsUpdate = true; + break; + case scope.keys.BOTTOM: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateUp(-2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(0, -scope.keyPanSpeed); + } + needsUpdate = true; + break; + case scope.keys.LEFT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateLeft(2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(scope.keyPanSpeed, 0); + } + needsUpdate = true; + break; + case scope.keys.RIGHT: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + rotateLeft(-2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight); + } else { + pan(-scope.keyPanSpeed, 0); + } + needsUpdate = true; + break; + } + if (needsUpdate) { + event.preventDefault(); + scope.update(); + } + } + function handleTouchStartRotate(event) { + if (pointers.length === 1) { + rotateStart.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + rotateStart.set(x2, y2); + } + } + function handleTouchStartPan(event) { + if (pointers.length === 1) { + panStart.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + panStart.set(x2, y2); + } + } + function handleTouchStartDolly(event) { + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + } + function handleTouchStartDollyPan(event) { + if (scope.enableZoom) handleTouchStartDolly(event); + if (scope.enablePan) handleTouchStartPan(event); + } + function handleTouchStartDollyRotate(event) { + if (scope.enableZoom) handleTouchStartDolly(event); + if (scope.enableRotate) handleTouchStartRotate(event); + } + function handleTouchMoveRotate(event) { + if (pointers.length == 1) { + rotateEnd.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + rotateEnd.set(x2, y2); + } + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateStart.copy(rotateEnd); + } + function handleTouchMovePan(event) { + if (pointers.length === 1) { + panEnd.set(event.pageX, event.pageY); + } else { + const position2 = getSecondPointerPosition(event); + const x2 = 0.5 * (event.pageX + position2.x); + const y2 = 0.5 * (event.pageY + position2.y); + panEnd.set(x2, y2); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyEnd.set(0, distance); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyOut(dollyDelta.y); + dollyStart.copy(dollyEnd); + const centerX = (event.pageX + position2.x) * 0.5; + const centerY = (event.pageY + position2.y) * 0.5; + updateZoomParameters(centerX, centerY); + } + function handleTouchMoveDollyPan(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enablePan) handleTouchMovePan(event); + } + function handleTouchMoveDollyRotate(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enableRotate) handleTouchMoveRotate(event); + } + function onPointerDown3(event) { + if (scope.enabled === false) return; + if (pointers.length === 0) { + scope.domElement.setPointerCapture(event.pointerId); + scope.domElement.addEventListener("pointermove", onPointerMove3); + scope.domElement.addEventListener("pointerup", onPointerUp3); + } + if (isTrackingPointer(event)) return; + addPointer(event); + if (event.pointerType === "touch") { + onTouchStart(event); + } else { + onMouseDown(event); + } + } + function onPointerMove3(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchMove(event); + } else { + onMouseMove2(event); + } + } + function onPointerUp3(event) { + removePointer(event); + switch (pointers.length) { + case 0: + scope.domElement.releasePointerCapture(event.pointerId); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + scope.dispatchEvent(_endEvent2); + state = STATE2.NONE; + break; + case 1: + const pointerId = pointers[0]; + const position2 = pointerPositions[pointerId]; + onTouchStart({ pointerId, pageX: position2.x, pageY: position2.y }); + break; + } + } + function onMouseDown(event) { + let mouseAction; + switch (event.button) { + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + default: + mouseAction = -1; + } + switch (mouseAction) { + case MOUSE.DOLLY: + if (scope.enableZoom === false) return; + handleMouseDownDolly(event); + state = STATE2.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE2.PAN; + } else { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE2.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE2.ROTATE; + } else { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE2.PAN; + } + break; + default: + state = STATE2.NONE; + } + if (state !== STATE2.NONE) { + scope.dispatchEvent(_startEvent2); + } + } + function onMouseMove2(event) { + switch (state) { + case STATE2.ROTATE: + if (scope.enableRotate === false) return; + handleMouseMoveRotate(event); + break; + case STATE2.DOLLY: + if (scope.enableZoom === false) return; + handleMouseMoveDolly(event); + break; + case STATE2.PAN: + if (scope.enablePan === false) return; + handleMouseMovePan(event); + break; + } + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || state !== STATE2.NONE) return; + event.preventDefault(); + scope.dispatchEvent(_startEvent2); + handleMouseWheel(customWheelEvent(event)); + scope.dispatchEvent(_endEvent2); + } + function customWheelEvent(event) { + const mode = event.deltaMode; + const newEvent = { + clientX: event.clientX, + clientY: event.clientY, + deltaY: event.deltaY + }; + switch (mode) { + case 1: + newEvent.deltaY *= 16; + break; + case 2: + newEvent.deltaY *= 100; + break; + } + if (event.ctrlKey && !controlActive) { + newEvent.deltaY *= 10; + } + return newEvent; + } + function interceptControlDown(event) { + if (event.key === "Control") { + controlActive = true; + const document3 = scope.domElement.getRootNode(); + document3.addEventListener("keyup", interceptControlUp, { passive: true, capture: true }); + } + } + function interceptControlUp(event) { + if (event.key === "Control") { + controlActive = false; + const document3 = scope.domElement.getRootNode(); + document3.removeEventListener("keyup", interceptControlUp, { passive: true, capture: true }); + } + } + function onKeyDown(event) { + if (scope.enabled === false || scope.enablePan === false) return; + handleKeyDown(event); + } + function onTouchStart(event) { + trackPointer(event); + switch (pointers.length) { + case 1: + switch (scope.touches.ONE) { + case TOUCH.ROTATE: + if (scope.enableRotate === false) return; + handleTouchStartRotate(event); + state = STATE2.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (scope.enablePan === false) return; + handleTouchStartPan(event); + state = STATE2.TOUCH_PAN; + break; + default: + state = STATE2.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchStartDollyPan(event); + state = STATE2.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchStartDollyRotate(event); + state = STATE2.TOUCH_DOLLY_ROTATE; + break; + default: + state = STATE2.NONE; + } + break; + default: + state = STATE2.NONE; + } + if (state !== STATE2.NONE) { + scope.dispatchEvent(_startEvent2); + } + } + function onTouchMove(event) { + trackPointer(event); + switch (state) { + case STATE2.TOUCH_ROTATE: + if (scope.enableRotate === false) return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE2.TOUCH_PAN: + if (scope.enablePan === false) return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE2.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE2.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: + state = STATE2.NONE; + } + } + function onContextMenu2(event) { + if (scope.enabled === false) return; + event.preventDefault(); + } + function addPointer(event) { + pointers.push(event.pointerId); + } + function removePointer(event) { + delete pointerPositions[event.pointerId]; + for (let i = 0; i < pointers.length; i++) { + if (pointers[i] == event.pointerId) { + pointers.splice(i, 1); + return; + } + } + } + function isTrackingPointer(event) { + for (let i = 0; i < pointers.length; i++) { + if (pointers[i] == event.pointerId) return true; + } + return false; + } + function trackPointer(event) { + let position2 = pointerPositions[event.pointerId]; + if (position2 === void 0) { + position2 = new Vector2(); + pointerPositions[event.pointerId] = position2; + } + position2.set(event.pageX, event.pageY); + } + function getSecondPointerPosition(event) { + const pointerId = event.pointerId === pointers[0] ? pointers[1] : pointers[0]; + return pointerPositions[pointerId]; + } + scope.domElement.addEventListener("contextmenu", onContextMenu2); + scope.domElement.addEventListener("pointerdown", onPointerDown3); + scope.domElement.addEventListener("pointercancel", onPointerUp3); + scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); + const document2 = scope.domElement.getRootNode(); + document2.addEventListener("keydown", interceptControlDown, { passive: true, capture: true }); + this.update(); + } +}; + +// node_modules/three/examples/jsm/controls/MapControls.js +var MapControls = class extends OrbitControls { + constructor(object, domElement) { + super(object, domElement); + this.screenSpacePanning = false; + this.mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE }; + this.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE }; + } +}; + +// node_modules/three/examples/jsm/controls/PointerLockControls.js +var _euler = new Euler(0, 0, 0, "YXZ"); +var _vector2 = new Vector3(); +var _changeEvent4 = { type: "change" }; +var _lockEvent = { type: "lock" }; +var _unlockEvent = { type: "unlock" }; +var _PI_2 = Math.PI / 2; +var PointerLockControls = class extends EventDispatcher { + constructor(camera, domElement) { + super(); + this.camera = camera; + this.domElement = domElement; + this.isLocked = false; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.pointerSpeed = 1; + this._onMouseMove = onMouseMove.bind(this); + this._onPointerlockChange = onPointerlockChange.bind(this); + this._onPointerlockError = onPointerlockError.bind(this); + this.connect(); + } + connect() { + this.domElement.ownerDocument.addEventListener("mousemove", this._onMouseMove); + this.domElement.ownerDocument.addEventListener("pointerlockchange", this._onPointerlockChange); + this.domElement.ownerDocument.addEventListener("pointerlockerror", this._onPointerlockError); + } + disconnect() { + this.domElement.ownerDocument.removeEventListener("mousemove", this._onMouseMove); + this.domElement.ownerDocument.removeEventListener("pointerlockchange", this._onPointerlockChange); + this.domElement.ownerDocument.removeEventListener("pointerlockerror", this._onPointerlockError); + } + dispose() { + this.disconnect(); + } + getObject() { + return this.camera; + } + getDirection(v) { + return v.set(0, 0, -1).applyQuaternion(this.camera.quaternion); + } + moveForward(distance) { + const camera = this.camera; + _vector2.setFromMatrixColumn(camera.matrix, 0); + _vector2.crossVectors(camera.up, _vector2); + camera.position.addScaledVector(_vector2, distance); + } + moveRight(distance) { + const camera = this.camera; + _vector2.setFromMatrixColumn(camera.matrix, 0); + camera.position.addScaledVector(_vector2, distance); + } + lock() { + this.domElement.requestPointerLock(); + } + unlock() { + this.domElement.ownerDocument.exitPointerLock(); + } +}; +function onMouseMove(event) { + if (this.isLocked === false) return; + const movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0; + const movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0; + const camera = this.camera; + _euler.setFromQuaternion(camera.quaternion); + _euler.y -= movementX * 2e-3 * this.pointerSpeed; + _euler.x -= movementY * 2e-3 * this.pointerSpeed; + _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x)); + camera.quaternion.setFromEuler(_euler); + this.dispatchEvent(_changeEvent4); +} +function onPointerlockChange() { + if (this.domElement.ownerDocument.pointerLockElement === this.domElement) { + this.dispatchEvent(_lockEvent); + this.isLocked = true; + } else { + this.dispatchEvent(_unlockEvent); + this.isLocked = false; + } +} +function onPointerlockError() { + console.error("THREE.PointerLockControls: Unable to use Pointer Lock API"); +} + +// node_modules/three/examples/jsm/controls/TrackballControls.js +var _changeEvent5 = { type: "change" }; +var _startEvent3 = { type: "start" }; +var _endEvent3 = { type: "end" }; +var TrackballControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + const scope = this; + const STATE2 = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 }; + this.object = object; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + this.enabled = true; + this.screen = { left: 0, top: 0, width: 0, height: 0 }; + this.rotateSpeed = 1; + this.zoomSpeed = 1.2; + this.panSpeed = 0.3; + this.noRotate = false; + this.noZoom = false; + this.noPan = false; + this.staticMoving = false; + this.dynamicDampingFactor = 0.2; + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.keys = [ + "KeyA", + "KeyS", + "KeyD" + /*D*/ + ]; + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + this.target = new Vector3(); + const EPS2 = 1e-6; + const lastPosition = new Vector3(); + let lastZoom = 1; + let _state = STATE2.NONE, _keyState = STATE2.NONE, _touchZoomDistanceStart = 0, _touchZoomDistanceEnd = 0, _lastAngle = 0; + const _eye = new Vector3(), _movePrev = new Vector2(), _moveCurr = new Vector2(), _lastAxis = new Vector3(), _zoomStart = new Vector2(), _zoomEnd = new Vector2(), _panStart = new Vector2(), _panEnd = new Vector2(), _pointers = [], _pointerPositions = {}; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.up0 = this.object.up.clone(); + this.zoom0 = this.object.zoom; + this.handleResize = function() { + const box = scope.domElement.getBoundingClientRect(); + const d = scope.domElement.ownerDocument.documentElement; + scope.screen.left = box.left + window.pageXOffset - d.clientLeft; + scope.screen.top = box.top + window.pageYOffset - d.clientTop; + scope.screen.width = box.width; + scope.screen.height = box.height; + }; + const getMouseOnScreen = function() { + const vector = new Vector2(); + return function getMouseOnScreen2(pageX, pageY) { + vector.set( + (pageX - scope.screen.left) / scope.screen.width, + (pageY - scope.screen.top) / scope.screen.height + ); + return vector; + }; + }(); + const getMouseOnCircle = function() { + const vector = new Vector2(); + return function getMouseOnCircle2(pageX, pageY) { + vector.set( + (pageX - scope.screen.width * 0.5 - scope.screen.left) / (scope.screen.width * 0.5), + (scope.screen.height + 2 * (scope.screen.top - pageY)) / scope.screen.width + // screen.width intentional + ); + return vector; + }; + }(); + this.rotateCamera = function() { + const axis = new Vector3(), quaternion = new Quaternion(), eyeDirection = new Vector3(), objectUpDirection = new Vector3(), objectSidewaysDirection = new Vector3(), moveDirection = new Vector3(); + return function rotateCamera() { + moveDirection.set(_moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0); + let angle = moveDirection.length(); + if (angle) { + _eye.copy(scope.object.position).sub(scope.target); + eyeDirection.copy(_eye).normalize(); + objectUpDirection.copy(scope.object.up).normalize(); + objectSidewaysDirection.crossVectors(objectUpDirection, eyeDirection).normalize(); + objectUpDirection.setLength(_moveCurr.y - _movePrev.y); + objectSidewaysDirection.setLength(_moveCurr.x - _movePrev.x); + moveDirection.copy(objectUpDirection.add(objectSidewaysDirection)); + axis.crossVectors(moveDirection, _eye).normalize(); + angle *= scope.rotateSpeed; + quaternion.setFromAxisAngle(axis, angle); + _eye.applyQuaternion(quaternion); + scope.object.up.applyQuaternion(quaternion); + _lastAxis.copy(axis); + _lastAngle = angle; + } else if (!scope.staticMoving && _lastAngle) { + _lastAngle *= Math.sqrt(1 - scope.dynamicDampingFactor); + _eye.copy(scope.object.position).sub(scope.target); + quaternion.setFromAxisAngle(_lastAxis, _lastAngle); + _eye.applyQuaternion(quaternion); + scope.object.up.applyQuaternion(quaternion); + } + _movePrev.copy(_moveCurr); + }; + }(); + this.zoomCamera = function() { + let factor; + if (_state === STATE2.TOUCH_ZOOM_PAN) { + factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; + _touchZoomDistanceStart = _touchZoomDistanceEnd; + if (scope.object.isPerspectiveCamera) { + _eye.multiplyScalar(factor); + } else if (scope.object.isOrthographicCamera) { + scope.object.zoom = MathUtils.clamp(scope.object.zoom / factor, scope.minZoom, scope.maxZoom); + if (lastZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + } else { + factor = 1 + (_zoomEnd.y - _zoomStart.y) * scope.zoomSpeed; + if (factor !== 1 && factor > 0) { + if (scope.object.isPerspectiveCamera) { + _eye.multiplyScalar(factor); + } else if (scope.object.isOrthographicCamera) { + scope.object.zoom = MathUtils.clamp(scope.object.zoom / factor, scope.minZoom, scope.maxZoom); + if (lastZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + } + if (scope.staticMoving) { + _zoomStart.copy(_zoomEnd); + } else { + _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor; + } + } + }; + this.panCamera = function() { + const mouseChange = new Vector2(), objectUp = new Vector3(), pan = new Vector3(); + return function panCamera() { + mouseChange.copy(_panEnd).sub(_panStart); + if (mouseChange.lengthSq()) { + if (scope.object.isOrthographicCamera) { + const scale_x = (scope.object.right - scope.object.left) / scope.object.zoom / scope.domElement.clientWidth; + const scale_y = (scope.object.top - scope.object.bottom) / scope.object.zoom / scope.domElement.clientWidth; + mouseChange.x *= scale_x; + mouseChange.y *= scale_y; + } + mouseChange.multiplyScalar(_eye.length() * scope.panSpeed); + pan.copy(_eye).cross(scope.object.up).setLength(mouseChange.x); + pan.add(objectUp.copy(scope.object.up).setLength(mouseChange.y)); + scope.object.position.add(pan); + scope.target.add(pan); + if (scope.staticMoving) { + _panStart.copy(_panEnd); + } else { + _panStart.add(mouseChange.subVectors(_panEnd, _panStart).multiplyScalar(scope.dynamicDampingFactor)); + } + } + }; + }(); + this.checkDistances = function() { + if (!scope.noZoom || !scope.noPan) { + if (_eye.lengthSq() > scope.maxDistance * scope.maxDistance) { + scope.object.position.addVectors(scope.target, _eye.setLength(scope.maxDistance)); + _zoomStart.copy(_zoomEnd); + } + if (_eye.lengthSq() < scope.minDistance * scope.minDistance) { + scope.object.position.addVectors(scope.target, _eye.setLength(scope.minDistance)); + _zoomStart.copy(_zoomEnd); + } + } + }; + this.update = function() { + _eye.subVectors(scope.object.position, scope.target); + if (!scope.noRotate) { + scope.rotateCamera(); + } + if (!scope.noZoom) { + scope.zoomCamera(); + } + if (!scope.noPan) { + scope.panCamera(); + } + scope.object.position.addVectors(scope.target, _eye); + if (scope.object.isPerspectiveCamera) { + scope.checkDistances(); + scope.object.lookAt(scope.target); + if (lastPosition.distanceToSquared(scope.object.position) > EPS2) { + scope.dispatchEvent(_changeEvent5); + lastPosition.copy(scope.object.position); + } + } else if (scope.object.isOrthographicCamera) { + scope.object.lookAt(scope.target); + if (lastPosition.distanceToSquared(scope.object.position) > EPS2 || lastZoom !== scope.object.zoom) { + scope.dispatchEvent(_changeEvent5); + lastPosition.copy(scope.object.position); + lastZoom = scope.object.zoom; + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + }; + this.reset = function() { + _state = STATE2.NONE; + _keyState = STATE2.NONE; + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.up.copy(scope.up0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + _eye.subVectors(scope.object.position, scope.target); + scope.object.lookAt(scope.target); + scope.dispatchEvent(_changeEvent5); + lastPosition.copy(scope.object.position); + lastZoom = scope.object.zoom; + }; + function onPointerDown3(event) { + if (scope.enabled === false) return; + if (_pointers.length === 0) { + scope.domElement.setPointerCapture(event.pointerId); + scope.domElement.addEventListener("pointermove", onPointerMove3); + scope.domElement.addEventListener("pointerup", onPointerUp3); + } + addPointer(event); + if (event.pointerType === "touch") { + onTouchStart(event); + } else { + onMouseDown(event); + } + } + function onPointerMove3(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchMove(event); + } else { + onMouseMove2(event); + } + } + function onPointerUp3(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchEnd(event); + } else { + onMouseUp(); + } + removePointer(event); + if (_pointers.length === 0) { + scope.domElement.releasePointerCapture(event.pointerId); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + } + } + function onPointerCancel2(event) { + removePointer(event); + } + function keydown(event) { + if (scope.enabled === false) return; + window.removeEventListener("keydown", keydown); + if (_keyState !== STATE2.NONE) { + return; + } else if (event.code === scope.keys[STATE2.ROTATE] && !scope.noRotate) { + _keyState = STATE2.ROTATE; + } else if (event.code === scope.keys[STATE2.ZOOM] && !scope.noZoom) { + _keyState = STATE2.ZOOM; + } else if (event.code === scope.keys[STATE2.PAN] && !scope.noPan) { + _keyState = STATE2.PAN; + } + } + function keyup() { + if (scope.enabled === false) return; + _keyState = STATE2.NONE; + window.addEventListener("keydown", keydown); + } + function onMouseDown(event) { + if (_state === STATE2.NONE) { + switch (event.button) { + case scope.mouseButtons.LEFT: + _state = STATE2.ROTATE; + break; + case scope.mouseButtons.MIDDLE: + _state = STATE2.ZOOM; + break; + case scope.mouseButtons.RIGHT: + _state = STATE2.PAN; + break; + } + } + const state = _keyState !== STATE2.NONE ? _keyState : _state; + if (state === STATE2.ROTATE && !scope.noRotate) { + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + _movePrev.copy(_moveCurr); + } else if (state === STATE2.ZOOM && !scope.noZoom) { + _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY)); + _zoomEnd.copy(_zoomStart); + } else if (state === STATE2.PAN && !scope.noPan) { + _panStart.copy(getMouseOnScreen(event.pageX, event.pageY)); + _panEnd.copy(_panStart); + } + scope.dispatchEvent(_startEvent3); + } + function onMouseMove2(event) { + const state = _keyState !== STATE2.NONE ? _keyState : _state; + if (state === STATE2.ROTATE && !scope.noRotate) { + _movePrev.copy(_moveCurr); + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + } else if (state === STATE2.ZOOM && !scope.noZoom) { + _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY)); + } else if (state === STATE2.PAN && !scope.noPan) { + _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY)); + } + } + function onMouseUp() { + _state = STATE2.NONE; + scope.dispatchEvent(_endEvent3); + } + function onMouseWheel(event) { + if (scope.enabled === false) return; + if (scope.noZoom === true) return; + event.preventDefault(); + switch (event.deltaMode) { + case 2: + _zoomStart.y -= event.deltaY * 0.025; + break; + case 1: + _zoomStart.y -= event.deltaY * 0.01; + break; + default: + _zoomStart.y -= event.deltaY * 25e-5; + break; + } + scope.dispatchEvent(_startEvent3); + scope.dispatchEvent(_endEvent3); + } + function onTouchStart(event) { + trackPointer(event); + switch (_pointers.length) { + case 1: + _state = STATE2.TOUCH_ROTATE; + _moveCurr.copy(getMouseOnCircle(_pointers[0].pageX, _pointers[0].pageY)); + _movePrev.copy(_moveCurr); + break; + default: + _state = STATE2.TOUCH_ZOOM_PAN; + const dx = _pointers[0].pageX - _pointers[1].pageX; + const dy = _pointers[0].pageY - _pointers[1].pageY; + _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy); + const x2 = (_pointers[0].pageX + _pointers[1].pageX) / 2; + const y2 = (_pointers[0].pageY + _pointers[1].pageY) / 2; + _panStart.copy(getMouseOnScreen(x2, y2)); + _panEnd.copy(_panStart); + break; + } + scope.dispatchEvent(_startEvent3); + } + function onTouchMove(event) { + trackPointer(event); + switch (_pointers.length) { + case 1: + _movePrev.copy(_moveCurr); + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + break; + default: + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy); + const x2 = (event.pageX + position2.x) / 2; + const y2 = (event.pageY + position2.y) / 2; + _panEnd.copy(getMouseOnScreen(x2, y2)); + break; + } + } + function onTouchEnd(event) { + switch (_pointers.length) { + case 0: + _state = STATE2.NONE; + break; + case 1: + _state = STATE2.TOUCH_ROTATE; + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + _movePrev.copy(_moveCurr); + break; + case 2: + _state = STATE2.TOUCH_ZOOM_PAN; + for (let i = 0; i < _pointers.length; i++) { + if (_pointers[i].pointerId !== event.pointerId) { + const position2 = _pointerPositions[_pointers[i].pointerId]; + _moveCurr.copy(getMouseOnCircle(position2.x, position2.y)); + _movePrev.copy(_moveCurr); + break; + } + } + break; + } + scope.dispatchEvent(_endEvent3); + } + function contextmenu2(event) { + if (scope.enabled === false) return; + event.preventDefault(); + } + function addPointer(event) { + _pointers.push(event); + } + function removePointer(event) { + delete _pointerPositions[event.pointerId]; + for (let i = 0; i < _pointers.length; i++) { + if (_pointers[i].pointerId == event.pointerId) { + _pointers.splice(i, 1); + return; + } + } + } + function trackPointer(event) { + let position2 = _pointerPositions[event.pointerId]; + if (position2 === void 0) { + position2 = new Vector2(); + _pointerPositions[event.pointerId] = position2; + } + position2.set(event.pageX, event.pageY); + } + function getSecondPointerPosition(event) { + const pointer = event.pointerId === _pointers[0].pointerId ? _pointers[1] : _pointers[0]; + return _pointerPositions[pointer.pointerId]; + } + this.dispose = function() { + scope.domElement.removeEventListener("contextmenu", contextmenu2); + scope.domElement.removeEventListener("pointerdown", onPointerDown3); + scope.domElement.removeEventListener("pointercancel", onPointerCancel2); + scope.domElement.removeEventListener("wheel", onMouseWheel); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + window.removeEventListener("keydown", keydown); + window.removeEventListener("keyup", keyup); + }; + this.domElement.addEventListener("contextmenu", contextmenu2); + this.domElement.addEventListener("pointerdown", onPointerDown3); + this.domElement.addEventListener("pointercancel", onPointerCancel2); + this.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); + window.addEventListener("keydown", keydown); + window.addEventListener("keyup", keyup); + this.handleResize(); + this.update(); + } +}; + +// node_modules/three/examples/jsm/controls/TransformControls.js +var _raycaster3 = new Raycaster(); +var _tempVector = new Vector3(); +var _tempVector2 = new Vector3(); +var _tempQuaternion = new Quaternion(); +var _unit = { + X: new Vector3(1, 0, 0), + Y: new Vector3(0, 1, 0), + Z: new Vector3(0, 0, 1) +}; +var _changeEvent6 = { type: "change" }; +var _mouseDownEvent = { type: "mouseDown", mode: null }; +var _mouseUpEvent = { type: "mouseUp", mode: null }; +var _objectChangeEvent = { type: "objectChange" }; +var TransformControls = class extends Object3D { + constructor(camera, domElement) { + super(); + if (domElement === void 0) { + console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'); + domElement = document; + } + this.isTransformControls = true; + this.visible = false; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + const _gizmo = new TransformControlsGizmo(); + this._gizmo = _gizmo; + this.add(_gizmo); + const _plane5 = new TransformControlsPlane(); + this._plane = _plane5; + this.add(_plane5); + const scope = this; + function defineProperty(propName, defaultValue) { + let propValue = defaultValue; + Object.defineProperty(scope, propName, { + get: function() { + return propValue !== void 0 ? propValue : defaultValue; + }, + set: function(value2) { + if (propValue !== value2) { + propValue = value2; + _plane5[propName] = value2; + _gizmo[propName] = value2; + scope.dispatchEvent({ type: propName + "-changed", value: value2 }); + scope.dispatchEvent(_changeEvent6); + } + } + }); + scope[propName] = defaultValue; + _plane5[propName] = defaultValue; + _gizmo[propName] = defaultValue; + } + defineProperty("camera", camera); + defineProperty("object", void 0); + defineProperty("enabled", true); + defineProperty("axis", null); + defineProperty("mode", "translate"); + defineProperty("translationSnap", null); + defineProperty("rotationSnap", null); + defineProperty("scaleSnap", null); + defineProperty("space", "world"); + defineProperty("size", 1); + defineProperty("dragging", false); + defineProperty("showX", true); + defineProperty("showY", true); + defineProperty("showZ", true); + const worldPosition = new Vector3(); + const worldPositionStart = new Vector3(); + const worldQuaternion = new Quaternion(); + const worldQuaternionStart = new Quaternion(); + const cameraPosition = new Vector3(); + const cameraQuaternion = new Quaternion(); + const pointStart = new Vector3(); + const pointEnd = new Vector3(); + const rotationAxis = new Vector3(); + const rotationAngle = 0; + const eye = new Vector3(); + defineProperty("worldPosition", worldPosition); + defineProperty("worldPositionStart", worldPositionStart); + defineProperty("worldQuaternion", worldQuaternion); + defineProperty("worldQuaternionStart", worldQuaternionStart); + defineProperty("cameraPosition", cameraPosition); + defineProperty("cameraQuaternion", cameraQuaternion); + defineProperty("pointStart", pointStart); + defineProperty("pointEnd", pointEnd); + defineProperty("rotationAxis", rotationAxis); + defineProperty("rotationAngle", rotationAngle); + defineProperty("eye", eye); + this._offset = new Vector3(); + this._startNorm = new Vector3(); + this._endNorm = new Vector3(); + this._cameraScale = new Vector3(); + this._parentPosition = new Vector3(); + this._parentQuaternion = new Quaternion(); + this._parentQuaternionInv = new Quaternion(); + this._parentScale = new Vector3(); + this._worldScaleStart = new Vector3(); + this._worldQuaternionInv = new Quaternion(); + this._worldScale = new Vector3(); + this._positionStart = new Vector3(); + this._quaternionStart = new Quaternion(); + this._scaleStart = new Vector3(); + this._getPointer = getPointer.bind(this); + this._onPointerDown = onPointerDown2.bind(this); + this._onPointerHover = onPointerHover.bind(this); + this._onPointerMove = onPointerMove2.bind(this); + this._onPointerUp = onPointerUp2.bind(this); + this.domElement.addEventListener("pointerdown", this._onPointerDown); + this.domElement.addEventListener("pointermove", this._onPointerHover); + this.domElement.addEventListener("pointerup", this._onPointerUp); + } + // updateMatrixWorld updates key transformation variables + updateMatrixWorld(force) { + if (this.object !== void 0) { + this.object.updateMatrixWorld(); + if (this.object.parent === null) { + console.error("TransformControls: The attached 3D object must be a part of the scene graph."); + } else { + this.object.parent.matrixWorld.decompose(this._parentPosition, this._parentQuaternion, this._parentScale); + } + this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this._worldScale); + this._parentQuaternionInv.copy(this._parentQuaternion).invert(); + this._worldQuaternionInv.copy(this.worldQuaternion).invert(); + } + this.camera.updateMatrixWorld(); + this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this._cameraScale); + if (this.camera.isOrthographicCamera) { + this.camera.getWorldDirection(this.eye).negate(); + } else { + this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(); + } + super.updateMatrixWorld(force); + } + pointerHover(pointer) { + if (this.object === void 0 || this.dragging === true) return; + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const intersect = intersectObjectWithRay(this._gizmo.picker[this.mode], _raycaster3); + if (intersect) { + this.axis = intersect.object.name; + } else { + this.axis = null; + } + } + pointerDown(pointer) { + if (this.object === void 0 || this.dragging === true || pointer != null && pointer.button !== 0) return; + if (this.axis !== null) { + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const planeIntersect = intersectObjectWithRay(this._plane, _raycaster3, true); + if (planeIntersect) { + this.object.updateMatrixWorld(); + this.object.parent.updateMatrixWorld(); + this._positionStart.copy(this.object.position); + this._quaternionStart.copy(this.object.quaternion); + this._scaleStart.copy(this.object.scale); + this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart); + this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart); + } + this.dragging = true; + _mouseDownEvent.mode = this.mode; + this.dispatchEvent(_mouseDownEvent); + } + } + pointerMove(pointer) { + const axis = this.axis; + const mode = this.mode; + const object = this.object; + let space = this.space; + if (mode === "scale") { + space = "local"; + } else if (axis === "E" || axis === "XYZE" || axis === "XYZ") { + space = "world"; + } + if (object === void 0 || axis === null || this.dragging === false || pointer !== null && pointer.button !== -1) return; + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const planeIntersect = intersectObjectWithRay(this._plane, _raycaster3, true); + if (!planeIntersect) return; + this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart); + if (mode === "translate") { + this._offset.copy(this.pointEnd).sub(this.pointStart); + if (space === "local" && axis !== "XYZ") { + this._offset.applyQuaternion(this._worldQuaternionInv); + } + if (axis.indexOf("X") === -1) this._offset.x = 0; + if (axis.indexOf("Y") === -1) this._offset.y = 0; + if (axis.indexOf("Z") === -1) this._offset.z = 0; + if (space === "local" && axis !== "XYZ") { + this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale); + } else { + this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale); + } + object.position.copy(this._offset).add(this._positionStart); + if (this.translationSnap) { + if (space === "local") { + object.position.applyQuaternion(_tempQuaternion.copy(this._quaternionStart).invert()); + if (axis.search("X") !== -1) { + object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + } + if (axis.search("Y") !== -1) { + object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + } + if (axis.search("Z") !== -1) { + object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + } + object.position.applyQuaternion(this._quaternionStart); + } + if (space === "world") { + if (object.parent) { + object.position.add(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + } + if (axis.search("X") !== -1) { + object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + } + if (axis.search("Y") !== -1) { + object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + } + if (axis.search("Z") !== -1) { + object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + } + if (object.parent) { + object.position.sub(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + } + } + } + } else if (mode === "scale") { + if (axis.search("XYZ") !== -1) { + let d = this.pointEnd.length() / this.pointStart.length(); + if (this.pointEnd.dot(this.pointStart) < 0) d *= -1; + _tempVector2.set(d, d, d); + } else { + _tempVector.copy(this.pointStart); + _tempVector2.copy(this.pointEnd); + _tempVector.applyQuaternion(this._worldQuaternionInv); + _tempVector2.applyQuaternion(this._worldQuaternionInv); + _tempVector2.divide(_tempVector); + if (axis.search("X") === -1) { + _tempVector2.x = 1; + } + if (axis.search("Y") === -1) { + _tempVector2.y = 1; + } + if (axis.search("Z") === -1) { + _tempVector2.z = 1; + } + } + object.scale.copy(this._scaleStart).multiply(_tempVector2); + if (this.scaleSnap) { + if (axis.search("X") !== -1) { + object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + if (axis.search("Y") !== -1) { + object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + if (axis.search("Z") !== -1) { + object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + } + } else if (mode === "rotate") { + this._offset.copy(this.pointEnd).sub(this.pointStart); + const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(_tempVector.setFromMatrixPosition(this.camera.matrixWorld)); + let _inPlaneRotation = false; + if (axis === "XYZE") { + this.rotationAxis.copy(this._offset).cross(this.eye).normalize(); + this.rotationAngle = this._offset.dot(_tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED; + } else if (axis === "X" || axis === "Y" || axis === "Z") { + this.rotationAxis.copy(_unit[axis]); + _tempVector.copy(_unit[axis]); + if (space === "local") { + _tempVector.applyQuaternion(this.worldQuaternion); + } + _tempVector.cross(this.eye); + if (_tempVector.length() === 0) { + _inPlaneRotation = true; + } else { + this.rotationAngle = this._offset.dot(_tempVector.normalize()) * ROTATION_SPEED; + } + } + if (axis === "E" || _inPlaneRotation) { + this.rotationAxis.copy(this.eye); + this.rotationAngle = this.pointEnd.angleTo(this.pointStart); + this._startNorm.copy(this.pointStart).normalize(); + this._endNorm.copy(this.pointEnd).normalize(); + this.rotationAngle *= this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1; + } + if (this.rotationSnap) this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap; + if (space === "local" && axis !== "E" && axis !== "XYZE") { + object.quaternion.copy(this._quaternionStart); + object.quaternion.multiply(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize(); + } else { + this.rotationAxis.applyQuaternion(this._parentQuaternionInv); + object.quaternion.copy(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)); + object.quaternion.multiply(this._quaternionStart).normalize(); + } + } + this.dispatchEvent(_changeEvent6); + this.dispatchEvent(_objectChangeEvent); + } + pointerUp(pointer) { + if (pointer !== null && pointer.button !== 0) return; + if (this.dragging && this.axis !== null) { + _mouseUpEvent.mode = this.mode; + this.dispatchEvent(_mouseUpEvent); + } + this.dragging = false; + this.axis = null; + } + dispose() { + this.domElement.removeEventListener("pointerdown", this._onPointerDown); + this.domElement.removeEventListener("pointermove", this._onPointerHover); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.domElement.removeEventListener("pointerup", this._onPointerUp); + this.traverse(function(child) { + if (child.geometry) child.geometry.dispose(); + if (child.material) child.material.dispose(); + }); + } + // Set current object + attach(object) { + this.object = object; + this.visible = true; + return this; + } + // Detach from object + detach() { + this.object = void 0; + this.visible = false; + this.axis = null; + return this; + } + reset() { + if (!this.enabled) return; + if (this.dragging) { + this.object.position.copy(this._positionStart); + this.object.quaternion.copy(this._quaternionStart); + this.object.scale.copy(this._scaleStart); + this.dispatchEvent(_changeEvent6); + this.dispatchEvent(_objectChangeEvent); + this.pointStart.copy(this.pointEnd); + } + } + getRaycaster() { + return _raycaster3; + } + // TODO: deprecate + getMode() { + return this.mode; + } + setMode(mode) { + this.mode = mode; + } + setTranslationSnap(translationSnap) { + this.translationSnap = translationSnap; + } + setRotationSnap(rotationSnap) { + this.rotationSnap = rotationSnap; + } + setScaleSnap(scaleSnap) { + this.scaleSnap = scaleSnap; + } + setSize(size2) { + this.size = size2; + } + setSpace(space) { + this.space = space; + } +}; +function getPointer(event) { + if (this.domElement.ownerDocument.pointerLockElement) { + return { + x: 0, + y: 0, + button: event.button + }; + } else { + const rect = this.domElement.getBoundingClientRect(); + return { + x: (event.clientX - rect.left) / rect.width * 2 - 1, + y: -(event.clientY - rect.top) / rect.height * 2 + 1, + button: event.button + }; + } +} +function onPointerHover(event) { + if (!this.enabled) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.pointerHover(this._getPointer(event)); + break; + } +} +function onPointerDown2(event) { + if (!this.enabled) return; + if (!document.pointerLockElement) { + this.domElement.setPointerCapture(event.pointerId); + } + this.domElement.addEventListener("pointermove", this._onPointerMove); + this.pointerHover(this._getPointer(event)); + this.pointerDown(this._getPointer(event)); +} +function onPointerMove2(event) { + if (!this.enabled) return; + this.pointerMove(this._getPointer(event)); +} +function onPointerUp2(event) { + if (!this.enabled) return; + this.domElement.releasePointerCapture(event.pointerId); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.pointerUp(this._getPointer(event)); +} +function intersectObjectWithRay(object, raycaster, includeInvisible) { + const allIntersections = raycaster.intersectObject(object, true); + for (let i = 0; i < allIntersections.length; i++) { + if (allIntersections[i].object.visible || includeInvisible) { + return allIntersections[i]; + } + } + return false; +} +var _tempEuler = new Euler(); +var _alignVector = new Vector3(0, 1, 0); +var _zeroVector = new Vector3(0, 0, 0); +var _lookAtMatrix = new Matrix4(); +var _tempQuaternion2 = new Quaternion(); +var _identityQuaternion = new Quaternion(); +var _dirVector = new Vector3(); +var _tempMatrix = new Matrix4(); +var _unitX = new Vector3(1, 0, 0); +var _unitY = new Vector3(0, 1, 0); +var _unitZ = new Vector3(0, 0, 1); +var _v1 = new Vector3(); +var _v2 = new Vector3(); +var _v3 = new Vector3(); +var TransformControlsGizmo = class extends Object3D { + constructor() { + super(); + this.isTransformControlsGizmo = true; + this.type = "TransformControlsGizmo"; + const gizmoMaterial = new MeshBasicMaterial({ + depthTest: false, + depthWrite: false, + fog: false, + toneMapped: false, + transparent: true + }); + const gizmoLineMaterial = new LineBasicMaterial({ + depthTest: false, + depthWrite: false, + fog: false, + toneMapped: false, + transparent: true + }); + const matInvisible = gizmoMaterial.clone(); + matInvisible.opacity = 0.15; + const matHelper = gizmoLineMaterial.clone(); + matHelper.opacity = 0.5; + const matRed = gizmoMaterial.clone(); + matRed.color.setHex(16711680); + const matGreen = gizmoMaterial.clone(); + matGreen.color.setHex(65280); + const matBlue = gizmoMaterial.clone(); + matBlue.color.setHex(255); + const matRedTransparent = gizmoMaterial.clone(); + matRedTransparent.color.setHex(16711680); + matRedTransparent.opacity = 0.5; + const matGreenTransparent = gizmoMaterial.clone(); + matGreenTransparent.color.setHex(65280); + matGreenTransparent.opacity = 0.5; + const matBlueTransparent = gizmoMaterial.clone(); + matBlueTransparent.color.setHex(255); + matBlueTransparent.opacity = 0.5; + const matWhiteTransparent = gizmoMaterial.clone(); + matWhiteTransparent.opacity = 0.25; + const matYellowTransparent = gizmoMaterial.clone(); + matYellowTransparent.color.setHex(16776960); + matYellowTransparent.opacity = 0.25; + const matYellow = gizmoMaterial.clone(); + matYellow.color.setHex(16776960); + const matGray = gizmoMaterial.clone(); + matGray.color.setHex(7895160); + const arrowGeometry = new CylinderGeometry(0, 0.04, 0.1, 12); + arrowGeometry.translate(0, 0.05, 0); + const scaleHandleGeometry = new BoxGeometry(0.08, 0.08, 0.08); + scaleHandleGeometry.translate(0, 0.04, 0); + const lineGeometry = new BufferGeometry(); + lineGeometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3)); + const lineGeometry2 = new CylinderGeometry(75e-4, 75e-4, 0.5, 3); + lineGeometry2.translate(0, 0.25, 0); + function CircleGeometry(radius, arc) { + const geometry = new TorusGeometry(radius, 75e-4, 3, 64, arc * Math.PI * 2); + geometry.rotateY(Math.PI / 2); + geometry.rotateX(Math.PI / 2); + return geometry; + } + function TranslateHelperGeometry() { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3)); + return geometry; + } + const gizmoTranslate = { + X: [ + [new Mesh(arrowGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(arrowGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]], + [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]] + ], + Y: [ + [new Mesh(arrowGeometry, matGreen), [0, 0.5, 0]], + [new Mesh(arrowGeometry, matGreen), [0, -0.5, 0], [Math.PI, 0, 0]], + [new Mesh(lineGeometry2, matGreen)] + ], + Z: [ + [new Mesh(arrowGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], + [new Mesh(arrowGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]], + [new Mesh(lineGeometry2, matBlue), null, [Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent.clone()), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent.clone()), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ] + }; + const pickerTranslate = { + X: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)] + ], + XY: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ] + }; + const helperTranslate = { + START: [ + [new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"] + ], + END: [ + [new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"] + ], + DELTA: [ + [new Line(TranslateHelperGeometry(), matHelper), null, null, null, "helper"] + ], + X: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"] + ], + Z: [ + [new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"] + ] + }; + const gizmoRotate = { + XYZE: [ + [new Mesh(CircleGeometry(0.5, 1), matGray), null, [0, Math.PI / 2, 0]] + ], + X: [ + [new Mesh(CircleGeometry(0.5, 0.5), matRed)] + ], + Y: [ + [new Mesh(CircleGeometry(0.5, 0.5), matGreen), null, [0, 0, -Math.PI / 2]] + ], + Z: [ + [new Mesh(CircleGeometry(0.5, 0.5), matBlue), null, [0, Math.PI / 2, 0]] + ], + E: [ + [new Mesh(CircleGeometry(0.75, 1), matYellowTransparent), null, [0, Math.PI / 2, 0]] + ] + }; + const helperRotate = { + AXIS: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ] + }; + const pickerRotate = { + XYZE: [ + [new Mesh(new SphereGeometry(0.25, 10, 8), matInvisible)] + ], + X: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]] + ], + Y: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]] + ], + Z: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]] + ], + E: [ + [new Mesh(new TorusGeometry(0.75, 0.1, 2, 24), matInvisible)] + ] + }; + const gizmoScale = { + X: [ + [new Mesh(scaleHandleGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(scaleHandleGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(scaleHandleGeometry, matGreen), [0, 0.5, 0]], + [new Mesh(lineGeometry2, matGreen)], + [new Mesh(scaleHandleGeometry, matGreen), [0, -0.5, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], + [new Mesh(lineGeometry2, matBlue), [0, 0, 0], [Math.PI / 2, 0, 0]], + [new Mesh(scaleHandleGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new BoxGeometry(0.1, 0.1, 0.1), matWhiteTransparent.clone())] + ] + }; + const pickerScale = { + X: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 0]] + ] + }; + const helperScale = { + X: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"] + ], + Z: [ + [new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"] + ] + }; + function setupGizmo(gizmoMap) { + const gizmo = new Object3D(); + for (const name2 in gizmoMap) { + for (let i = gizmoMap[name2].length; i--; ) { + const object = gizmoMap[name2][i][0].clone(); + const position2 = gizmoMap[name2][i][1]; + const rotation2 = gizmoMap[name2][i][2]; + const scale2 = gizmoMap[name2][i][3]; + const tag = gizmoMap[name2][i][4]; + object.name = name2; + object.tag = tag; + if (position2) { + object.position.set(position2[0], position2[1], position2[2]); + } + if (rotation2) { + object.rotation.set(rotation2[0], rotation2[1], rotation2[2]); + } + if (scale2) { + object.scale.set(scale2[0], scale2[1], scale2[2]); + } + object.updateMatrix(); + const tempGeometry = object.geometry.clone(); + tempGeometry.applyMatrix4(object.matrix); + object.geometry = tempGeometry; + object.renderOrder = Infinity; + object.position.set(0, 0, 0); + object.rotation.set(0, 0, 0); + object.scale.set(1, 1, 1); + gizmo.add(object); + } + } + return gizmo; + } + this.gizmo = {}; + this.picker = {}; + this.helper = {}; + this.add(this.gizmo["translate"] = setupGizmo(gizmoTranslate)); + this.add(this.gizmo["rotate"] = setupGizmo(gizmoRotate)); + this.add(this.gizmo["scale"] = setupGizmo(gizmoScale)); + this.add(this.picker["translate"] = setupGizmo(pickerTranslate)); + this.add(this.picker["rotate"] = setupGizmo(pickerRotate)); + this.add(this.picker["scale"] = setupGizmo(pickerScale)); + this.add(this.helper["translate"] = setupGizmo(helperTranslate)); + this.add(this.helper["rotate"] = setupGizmo(helperRotate)); + this.add(this.helper["scale"] = setupGizmo(helperScale)); + this.picker["translate"].visible = false; + this.picker["rotate"].visible = false; + this.picker["scale"].visible = false; + } + // updateMatrixWorld will update transformations and appearance of individual handles + updateMatrixWorld(force) { + const space = this.mode === "scale" ? "local" : this.space; + const quaternion = space === "local" ? this.worldQuaternion : _identityQuaternion; + this.gizmo["translate"].visible = this.mode === "translate"; + this.gizmo["rotate"].visible = this.mode === "rotate"; + this.gizmo["scale"].visible = this.mode === "scale"; + this.helper["translate"].visible = this.mode === "translate"; + this.helper["rotate"].visible = this.mode === "rotate"; + this.helper["scale"].visible = this.mode === "scale"; + let handles = []; + handles = handles.concat(this.picker[this.mode].children); + handles = handles.concat(this.gizmo[this.mode].children); + handles = handles.concat(this.helper[this.mode].children); + for (let i = 0; i < handles.length; i++) { + const handle = handles[i]; + handle.visible = true; + handle.rotation.set(0, 0, 0); + handle.position.copy(this.worldPosition); + let factor; + if (this.camera.isOrthographicCamera) { + factor = (this.camera.top - this.camera.bottom) / this.camera.zoom; + } else { + factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7); + } + handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 4); + if (handle.tag === "helper") { + handle.visible = false; + if (handle.name === "AXIS") { + handle.visible = !!this.axis; + if (this.axis === "X") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, 0)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "Y") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, Math.PI / 2)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "Z") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "XYZE") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0)); + _alignVector.copy(this.rotationAxis); + handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(_zeroVector, _alignVector, _unitY)); + handle.quaternion.multiply(_tempQuaternion); + handle.visible = this.dragging; + } + if (this.axis === "E") { + handle.visible = false; + } + } else if (handle.name === "START") { + handle.position.copy(this.worldPositionStart); + handle.visible = this.dragging; + } else if (handle.name === "END") { + handle.position.copy(this.worldPosition); + handle.visible = this.dragging; + } else if (handle.name === "DELTA") { + handle.position.copy(this.worldPositionStart); + handle.quaternion.copy(this.worldQuaternionStart); + _tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1); + _tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert()); + handle.scale.copy(_tempVector); + handle.visible = this.dragging; + } else { + handle.quaternion.copy(quaternion); + if (this.dragging) { + handle.position.copy(this.worldPositionStart); + } else { + handle.position.copy(this.worldPosition); + } + if (this.axis) { + handle.visible = this.axis.search(handle.name) !== -1; + } + } + continue; + } + handle.quaternion.copy(quaternion); + if (this.mode === "translate" || this.mode === "scale") { + const AXIS_HIDE_THRESHOLD = 0.99; + const PLANE_HIDE_THRESHOLD = 0.2; + if (handle.name === "X") { + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Y") { + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Z") { + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XY") { + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "YZ") { + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XZ") { + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + } else if (this.mode === "rotate") { + _tempQuaternion2.copy(quaternion); + _alignVector.copy(this.eye).applyQuaternion(_tempQuaternion.copy(quaternion).invert()); + if (handle.name.search("E") !== -1) { + handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(this.eye, _zeroVector, _unitY)); + } + if (handle.name === "X") { + _tempQuaternion.setFromAxisAngle(_unitX, Math.atan2(-_alignVector.y, _alignVector.z)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + if (handle.name === "Y") { + _tempQuaternion.setFromAxisAngle(_unitY, Math.atan2(_alignVector.x, _alignVector.z)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + if (handle.name === "Z") { + _tempQuaternion.setFromAxisAngle(_unitZ, Math.atan2(_alignVector.y, _alignVector.x)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + } + handle.visible = handle.visible && (handle.name.indexOf("X") === -1 || this.showX); + handle.visible = handle.visible && (handle.name.indexOf("Y") === -1 || this.showY); + handle.visible = handle.visible && (handle.name.indexOf("Z") === -1 || this.showZ); + handle.visible = handle.visible && (handle.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ); + handle.material._color = handle.material._color || handle.material.color.clone(); + handle.material._opacity = handle.material._opacity || handle.material.opacity; + handle.material.color.copy(handle.material._color); + handle.material.opacity = handle.material._opacity; + if (this.enabled && this.axis) { + if (handle.name === this.axis) { + handle.material.color.setHex(16776960); + handle.material.opacity = 1; + } else if (this.axis.split("").some(function(a2) { + return handle.name === a2; + })) { + handle.material.color.setHex(16776960); + handle.material.opacity = 1; + } + } + } + super.updateMatrixWorld(force); + } +}; +var TransformControlsPlane = class extends Mesh { + constructor() { + super( + new PlaneGeometry(1e5, 1e5, 2, 2), + new MeshBasicMaterial({ visible: false, wireframe: true, side: DoubleSide, transparent: true, opacity: 0.1, toneMapped: false }) + ); + this.isTransformControlsPlane = true; + this.type = "TransformControlsPlane"; + } + updateMatrixWorld(force) { + let space = this.space; + this.position.copy(this.worldPosition); + if (this.mode === "scale") space = "local"; + _v1.copy(_unitX).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _v2.copy(_unitY).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _v3.copy(_unitZ).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _alignVector.copy(_v2); + switch (this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + _alignVector.copy(this.eye).cross(_v1); + _dirVector.copy(_v1).cross(_alignVector); + break; + case "Y": + _alignVector.copy(this.eye).cross(_v2); + _dirVector.copy(_v2).cross(_alignVector); + break; + case "Z": + _alignVector.copy(this.eye).cross(_v3); + _dirVector.copy(_v3).cross(_alignVector); + break; + case "XY": + _dirVector.copy(_v3); + break; + case "YZ": + _dirVector.copy(_v1); + break; + case "XZ": + _alignVector.copy(_v3); + _dirVector.copy(_v2); + break; + case "XYZ": + case "E": + _dirVector.set(0, 0, 0); + break; + } + break; + case "rotate": + default: + _dirVector.set(0, 0, 0); + } + if (_dirVector.length() === 0) { + this.quaternion.copy(this.cameraQuaternion); + } else { + _tempMatrix.lookAt(_tempVector.set(0, 0, 0), _dirVector, _alignVector); + this.quaternion.setFromRotationMatrix(_tempMatrix); + } + super.updateMatrixWorld(force); + } +}; + +// node_modules/three/examples/jsm/csm/CSMFrustum.js +var inverseProjectionMatrix = new Matrix4(); +var CSMFrustum = class _CSMFrustum { + constructor(data2) { + data2 = data2 || {}; + this.vertices = { + near: [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ], + far: [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ] + }; + if (data2.projectionMatrix !== void 0) { + this.setFromProjectionMatrix(data2.projectionMatrix, data2.maxFar || 1e4); + } + } + setFromProjectionMatrix(projectionMatrix, maxFar) { + const isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0; + inverseProjectionMatrix.copy(projectionMatrix).invert(); + this.vertices.near[0].set(1, 1, -1); + this.vertices.near[1].set(1, -1, -1); + this.vertices.near[2].set(-1, -1, -1); + this.vertices.near[3].set(-1, 1, -1); + this.vertices.near.forEach(function(v) { + v.applyMatrix4(inverseProjectionMatrix); + }); + this.vertices.far[0].set(1, 1, 1); + this.vertices.far[1].set(1, -1, 1); + this.vertices.far[2].set(-1, -1, 1); + this.vertices.far[3].set(-1, 1, 1); + this.vertices.far.forEach(function(v) { + v.applyMatrix4(inverseProjectionMatrix); + const absZ = Math.abs(v.z); + if (isOrthographic) { + v.z *= Math.min(maxFar / absZ, 1); + } else { + v.multiplyScalar(Math.min(maxFar / absZ, 1)); + } + }); + return this.vertices; + } + split(breaks, target) { + while (breaks.length > target.length) { + target.push(new _CSMFrustum()); + } + target.length = breaks.length; + for (let i = 0; i < breaks.length; i++) { + const cascade = target[i]; + if (i === 0) { + for (let j = 0; j < 4; j++) { + cascade.vertices.near[j].copy(this.vertices.near[j]); + } + } else { + for (let j = 0; j < 4; j++) { + cascade.vertices.near[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i - 1]); + } + } + if (i === breaks.length - 1) { + for (let j = 0; j < 4; j++) { + cascade.vertices.far[j].copy(this.vertices.far[j]); + } + } else { + for (let j = 0; j < 4; j++) { + cascade.vertices.far[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i]); + } + } + } + } + toSpace(cameraMatrix, target) { + for (let i = 0; i < 4; i++) { + target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix); + target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix); + } + } +}; + +// node_modules/three/examples/jsm/csm/CSMShader.js +var CSMShader = { + lights_fragment_begin: ( + /* glsl */ + ` +vec3 geometryPosition = - vViewPosition; +vec3 geometryNormal = normal; +vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); + +vec3 geometryClearcoatNormal = vec3( 0.0 ); + +#ifdef USE_CLEARCOAT + + geometryClearcoatNormal = clearcoatNormal; + +#endif + +#ifdef USE_IRIDESCENCE + float dotNVi = saturate( dot( normal, geometryViewDir ) ); + if ( material.iridescenceThickness == 0.0 ) { + material.iridescence = 0.0; + } else { + material.iridescence = saturate( material.iridescence ); + } + if ( material.iridescence > 0.0 ) { + material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); + // Iridescence F0 approximation + material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); + } +#endif + +IncidentLight directLight; + +#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) + + PointLight pointLight; + #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 + PointLightShadow pointLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { + + pointLight = pointLights[ i ]; + + getPointLightInfo( pointLight, geometryPosition, directLight ); + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) + pointLightShadow = pointLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) + + SpotLight spotLight; + vec4 spotColor; + vec3 spotLightCoord; + bool inSpotLightMap; + + #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 + SpotLightShadow spotLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { + + spotLight = spotLights[ i ]; + + getSpotLightInfo( spotLight, geometryPosition, directLight ); + + // spot lights are ordered [shadows with maps, shadows without maps, maps without shadows, none] + #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX + #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS + #else + #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #endif + #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) + spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; + inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); + spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); + directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; + #endif + #undef SPOT_LIGHT_MAP_INDEX + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + spotLightShadow = spotLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; + + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES ) + + DirectionalLight directionalLight; + float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear); + #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLightShadow; + #endif + + #if defined( USE_SHADOWMAP ) && defined( CSM_FADE ) + vec2 cascade; + float cascadeCenter; + float closestEdge; + float margin; + float csmx; + float csmy; + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + getDirectionalLightInfo( directionalLight, directLight ); + + #if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + // NOTE: Depth gets larger away from the camera. + // cascade.x is closer, cascade.y is further + cascade = CSM_cascades[ i ]; + cascadeCenter = ( cascade.x + cascade.y ) / 2.0; + closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y; + margin = 0.25 * pow( closestEdge, 2.0 ); + csmx = cascade.x - margin / 2.0; + csmy = cascade.y + margin / 2.0; + if( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) { + + float dist = min( linearDepth - csmx, csmy - linearDepth ); + float ratio = clamp( dist / margin, 0.0, 1.0 ); + + vec3 prevColor = directLight.color; + directionalLightShadow = directionalLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + + bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter; + directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 ); + + ReflectedLight prevLight = reflectedLight; + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter; + float blendRatio = shouldBlend ? ratio : 1.0; + + reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio ); + reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio ); + reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio ); + reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio ); + + } + #endif + + } + #pragma unroll_loop_end + #elif defined (USE_SHADOWMAP) + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + getDirectionalLightInfo( directionalLight, directLight ); + + #if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + + directionalLightShadow = directionalLightShadows[ i ]; + if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + + if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + #endif + + } + #pragma unroll_loop_end + + #elif ( NUM_DIR_LIGHT_SHADOWS > 0 ) + // note: no loop here - all CSM lights are in fact one light only + getDirectionalLightInfo( directionalLights[0], directLight ); + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + #endif + + #if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS) + // compute the lights not casting shadows (if any) + + #pragma unroll_loop_start + for ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + + getDirectionalLightInfo( directionalLight, directLight ); + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + + #endif + +#endif + + +#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES ) + + DirectionalLight directionalLight; + #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + + getDirectionalLightInfo( directionalLight, directLight ); + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + directionalLightShadow = directionalLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) + + RectAreaLight rectAreaLight; + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { + + rectAreaLight = rectAreaLights[ i ]; + RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if defined( RE_IndirectDiffuse ) + + vec3 iblIrradiance = vec3( 0.0 ); + + vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); + + #if defined( USE_LIGHT_PROBES ) + + irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); + + #endif + + #if ( NUM_HEMI_LIGHTS > 0 ) + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { + + irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); + + } + #pragma unroll_loop_end + + #endif + +#endif + +#if defined( RE_IndirectSpecular ) + + vec3 radiance = vec3( 0.0 ); + vec3 clearcoatRadiance = vec3( 0.0 ); + +#endif +` + ), + lights_pars_begin: ( + /* glsl */ + ` +#if defined( USE_CSM ) && defined( CSM_CASCADES ) +uniform vec2 CSM_cascades[CSM_CASCADES]; +uniform float cameraNear; +uniform float shadowFar; +#endif + ` + ShaderChunk.lights_pars_begin + ) +}; + +// node_modules/three/examples/jsm/csm/CSM.js +var _cameraToLightMatrix = new Matrix4(); +var _lightSpaceFrustum = new CSMFrustum(); +var _center2 = new Vector3(); +var _bbox = new Box3(); +var _uniformArray = []; +var _logArray = []; +var _lightOrientationMatrix = new Matrix4(); +var _lightOrientationMatrixInverse = new Matrix4(); +var _up2 = new Vector3(0, 1, 0); +var CSM = class { + constructor(data2) { + this.camera = data2.camera; + this.parent = data2.parent; + this.cascades = data2.cascades || 3; + this.maxFar = data2.maxFar || 1e5; + this.mode = data2.mode || "practical"; + this.shadowMapSize = data2.shadowMapSize || 2048; + this.shadowBias = data2.shadowBias || 1e-6; + this.lightDirection = data2.lightDirection || new Vector3(1, -1, 1).normalize(); + this.lightIntensity = data2.lightIntensity || 3; + this.lightNear = data2.lightNear || 1; + this.lightFar = data2.lightFar || 2e3; + this.lightMargin = data2.lightMargin || 200; + this.customSplitsCallback = data2.customSplitsCallback; + this.fade = false; + this.mainFrustum = new CSMFrustum(); + this.frustums = []; + this.breaks = []; + this.lights = []; + this.shaders = /* @__PURE__ */ new Map(); + this.createLights(); + this.updateFrustums(); + this.injectInclude(); + } + createLights() { + for (let i = 0; i < this.cascades; i++) { + const light = new DirectionalLight(16777215, this.lightIntensity); + light.castShadow = true; + light.shadow.mapSize.width = this.shadowMapSize; + light.shadow.mapSize.height = this.shadowMapSize; + light.shadow.camera.near = this.lightNear; + light.shadow.camera.far = this.lightFar; + light.shadow.bias = this.shadowBias; + this.parent.add(light); + this.parent.add(light.target); + this.lights.push(light); + } + } + initCascades() { + const camera = this.camera; + camera.updateProjectionMatrix(); + this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar); + this.mainFrustum.split(this.breaks, this.frustums); + } + updateShadowBounds() { + const frustums = this.frustums; + for (let i = 0; i < frustums.length; i++) { + const light = this.lights[i]; + const shadowCam = light.shadow.camera; + const frustum = this.frustums[i]; + const nearVerts = frustum.vertices.near; + const farVerts = frustum.vertices.far; + const point1 = farVerts[0]; + let point2; + if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) { + point2 = farVerts[2]; + } else { + point2 = nearVerts[2]; + } + let squaredBBWidth = point1.distanceTo(point2); + if (this.fade) { + const camera = this.camera; + const far = Math.max(camera.far, this.maxFar); + const linearDepth = frustum.vertices.far[0].z / (far - camera.near); + const margin = 0.25 * Math.pow(linearDepth, 2) * (far - camera.near); + squaredBBWidth += margin; + } + shadowCam.left = -squaredBBWidth / 2; + shadowCam.right = squaredBBWidth / 2; + shadowCam.top = squaredBBWidth / 2; + shadowCam.bottom = -squaredBBWidth / 2; + shadowCam.updateProjectionMatrix(); + } + } + getBreaks() { + const camera = this.camera; + const far = Math.min(camera.far, this.maxFar); + this.breaks.length = 0; + switch (this.mode) { + case "uniform": + uniformSplit(this.cascades, camera.near, far, this.breaks); + break; + case "logarithmic": + logarithmicSplit(this.cascades, camera.near, far, this.breaks); + break; + case "practical": + practicalSplit(this.cascades, camera.near, far, 0.5, this.breaks); + break; + case "custom": + if (this.customSplitsCallback === void 0) console.error("CSM: Custom split scheme callback not defined."); + this.customSplitsCallback(this.cascades, camera.near, far, this.breaks); + break; + } + function uniformSplit(amount, near, far2, target) { + for (let i = 1; i < amount; i++) { + target.push((near + (far2 - near) * i / amount) / far2); + } + target.push(1); + } + function logarithmicSplit(amount, near, far2, target) { + for (let i = 1; i < amount; i++) { + target.push(near * (far2 / near) ** (i / amount) / far2); + } + target.push(1); + } + function practicalSplit(amount, near, far2, lambda, target) { + _uniformArray.length = 0; + _logArray.length = 0; + logarithmicSplit(amount, near, far2, _logArray); + uniformSplit(amount, near, far2, _uniformArray); + for (let i = 1; i < amount; i++) { + target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda)); + } + target.push(1); + } + } + update() { + const camera = this.camera; + const frustums = this.frustums; + _lightOrientationMatrix.lookAt(new Vector3(), this.lightDirection, _up2); + _lightOrientationMatrixInverse.copy(_lightOrientationMatrix).invert(); + for (let i = 0; i < frustums.length; i++) { + const light = this.lights[i]; + const shadowCam = light.shadow.camera; + const texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize; + const texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize; + _cameraToLightMatrix.multiplyMatrices(_lightOrientationMatrixInverse, camera.matrixWorld); + frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum); + const nearVerts = _lightSpaceFrustum.vertices.near; + const farVerts = _lightSpaceFrustum.vertices.far; + _bbox.makeEmpty(); + for (let j = 0; j < 4; j++) { + _bbox.expandByPoint(nearVerts[j]); + _bbox.expandByPoint(farVerts[j]); + } + _bbox.getCenter(_center2); + _center2.z = _bbox.max.z + this.lightMargin; + _center2.x = Math.floor(_center2.x / texelWidth) * texelWidth; + _center2.y = Math.floor(_center2.y / texelHeight) * texelHeight; + _center2.applyMatrix4(_lightOrientationMatrix); + light.position.copy(_center2); + light.target.position.copy(_center2); + light.target.position.x += this.lightDirection.x; + light.target.position.y += this.lightDirection.y; + light.target.position.z += this.lightDirection.z; + } + } + injectInclude() { + ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin; + ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin; + } + setupMaterial(material) { + material.defines = material.defines || {}; + material.defines.USE_CSM = 1; + material.defines.CSM_CASCADES = this.cascades; + if (this.fade) { + material.defines.CSM_FADE = ""; + } + const breaksVec2 = []; + const scope = this; + const shaders2 = this.shaders; + material.onBeforeCompile = function(shader) { + const far = Math.min(scope.camera.far, scope.maxFar); + scope.getExtendedBreaks(breaksVec2); + shader.uniforms.CSM_cascades = { value: breaksVec2 }; + shader.uniforms.cameraNear = { value: scope.camera.near }; + shader.uniforms.shadowFar = { value: far }; + shaders2.set(material, shader); + }; + shaders2.set(material, null); + } + updateUniforms() { + const far = Math.min(this.camera.far, this.maxFar); + const shaders2 = this.shaders; + shaders2.forEach(function(shader, material) { + if (shader !== null) { + const uniforms = shader.uniforms; + this.getExtendedBreaks(uniforms.CSM_cascades.value); + uniforms.cameraNear.value = this.camera.near; + uniforms.shadowFar.value = far; + } + if (!this.fade && "CSM_FADE" in material.defines) { + delete material.defines.CSM_FADE; + material.needsUpdate = true; + } else if (this.fade && !("CSM_FADE" in material.defines)) { + material.defines.CSM_FADE = ""; + material.needsUpdate = true; + } + }, this); + } + getExtendedBreaks(target) { + while (target.length < this.breaks.length) { + target.push(new Vector2()); + } + target.length = this.breaks.length; + for (let i = 0; i < this.cascades; i++) { + const amount = this.breaks[i]; + const prev = this.breaks[i - 1] || 0; + target[i].x = prev; + target[i].y = amount; + } + } + updateFrustums() { + this.getBreaks(); + this.initCascades(); + this.updateShadowBounds(); + this.updateUniforms(); + } + remove() { + for (let i = 0; i < this.lights.length; i++) { + this.parent.remove(this.lights[i].target); + this.parent.remove(this.lights[i]); + } + } + dispose() { + const shaders2 = this.shaders; + shaders2.forEach(function(shader, material) { + delete material.onBeforeCompile; + delete material.defines.USE_CSM; + delete material.defines.CSM_CASCADES; + delete material.defines.CSM_FADE; + if (shader !== null) { + delete shader.uniforms.CSM_cascades; + delete shader.uniforms.cameraNear; + delete shader.uniforms.shadowFar; + } + material.needsUpdate = true; + }); + shaders2.clear(); + } +}; + +// node_modules/three/examples/jsm/csm/CSMHelper.js +var CSMHelper = class extends Group { + constructor(csm) { + super(); + this.csm = csm; + this.displayFrustum = true; + this.displayPlanes = true; + this.displayShadowBounds = true; + const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); + const positions = new Float32Array(24); + const frustumGeometry = new BufferGeometry(); + frustumGeometry.setIndex(new BufferAttribute(indices, 1)); + frustumGeometry.setAttribute("position", new BufferAttribute(positions, 3, false)); + const frustumLines = new LineSegments(frustumGeometry, new LineBasicMaterial()); + this.add(frustumLines); + this.frustumLines = frustumLines; + this.cascadeLines = []; + this.cascadePlanes = []; + this.shadowLines = []; + } + updateVisibility() { + const displayFrustum = this.displayFrustum; + const displayPlanes = this.displayPlanes; + const displayShadowBounds = this.displayShadowBounds; + const frustumLines = this.frustumLines; + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + for (let i = 0, l2 = cascadeLines.length; i < l2; i++) { + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + cascadeLine.visible = displayFrustum; + cascadePlane.visible = displayFrustum && displayPlanes; + shadowLineGroup.visible = displayShadowBounds; + } + frustumLines.visible = displayFrustum; + } + update() { + const csm = this.csm; + const camera = csm.camera; + const cascades = csm.cascades; + const mainFrustum = csm.mainFrustum; + const frustums = csm.frustums; + const lights = csm.lights; + const frustumLines = this.frustumLines; + const frustumLinePositions = frustumLines.geometry.getAttribute("position"); + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + this.position.copy(camera.position); + this.quaternion.copy(camera.quaternion); + this.scale.copy(camera.scale); + this.updateMatrixWorld(true); + while (cascadeLines.length > cascades) { + this.remove(cascadeLines.pop()); + this.remove(cascadePlanes.pop()); + this.remove(shadowLines.pop()); + } + while (cascadeLines.length < cascades) { + const cascadeLine = new Box3Helper(new Box3(), 16777215); + const planeMat = new MeshBasicMaterial({ transparent: true, opacity: 0.1, depthWrite: false, side: DoubleSide }); + const cascadePlane = new Mesh(new PlaneGeometry(), planeMat); + const shadowLineGroup = new Group(); + const shadowLine = new Box3Helper(new Box3(), 16776960); + shadowLineGroup.add(shadowLine); + this.add(cascadeLine); + this.add(cascadePlane); + this.add(shadowLineGroup); + cascadeLines.push(cascadeLine); + cascadePlanes.push(cascadePlane); + shadowLines.push(shadowLineGroup); + } + for (let i = 0; i < cascades; i++) { + const frustum = frustums[i]; + const light = lights[i]; + const shadowCam = light.shadow.camera; + const farVerts2 = frustum.vertices.far; + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + const shadowLine = shadowLineGroup.children[0]; + cascadeLine.box.min.copy(farVerts2[2]); + cascadeLine.box.max.copy(farVerts2[0]); + cascadeLine.box.max.z += 1e-4; + cascadePlane.position.addVectors(farVerts2[0], farVerts2[2]); + cascadePlane.position.multiplyScalar(0.5); + cascadePlane.scale.subVectors(farVerts2[0], farVerts2[2]); + cascadePlane.scale.z = 1e-4; + this.remove(shadowLineGroup); + shadowLineGroup.position.copy(shadowCam.position); + shadowLineGroup.quaternion.copy(shadowCam.quaternion); + shadowLineGroup.scale.copy(shadowCam.scale); + shadowLineGroup.updateMatrixWorld(true); + this.attach(shadowLineGroup); + shadowLine.box.min.set(shadowCam.bottom, shadowCam.left, -shadowCam.far); + shadowLine.box.max.set(shadowCam.top, shadowCam.right, -shadowCam.near); + } + const nearVerts = mainFrustum.vertices.near; + const farVerts = mainFrustum.vertices.far; + frustumLinePositions.setXYZ(0, farVerts[0].x, farVerts[0].y, farVerts[0].z); + frustumLinePositions.setXYZ(1, farVerts[3].x, farVerts[3].y, farVerts[3].z); + frustumLinePositions.setXYZ(2, farVerts[2].x, farVerts[2].y, farVerts[2].z); + frustumLinePositions.setXYZ(3, farVerts[1].x, farVerts[1].y, farVerts[1].z); + frustumLinePositions.setXYZ(4, nearVerts[0].x, nearVerts[0].y, nearVerts[0].z); + frustumLinePositions.setXYZ(5, nearVerts[3].x, nearVerts[3].y, nearVerts[3].z); + frustumLinePositions.setXYZ(6, nearVerts[2].x, nearVerts[2].y, nearVerts[2].z); + frustumLinePositions.setXYZ(7, nearVerts[1].x, nearVerts[1].y, nearVerts[1].z); + frustumLinePositions.needsUpdate = true; + } + dispose() { + const frustumLines = this.frustumLines; + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + frustumLines.geometry.dispose(); + frustumLines.material.dispose(); + const cascades = this.csm.cascades; + for (let i = 0; i < cascades; i++) { + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + const shadowLine = shadowLineGroup.children[0]; + cascadeLine.dispose(); + cascadePlane.geometry.dispose(); + cascadePlane.material.dispose(); + shadowLine.dispose(); + } + } +}; + +// node_modules/three/examples/jsm/curves/CurveExtras.js +var CurveExtras_exports = {}; +__export(CurveExtras_exports, { + CinquefoilKnot: () => CinquefoilKnot, + DecoratedTorusKnot4a: () => DecoratedTorusKnot4a, + DecoratedTorusKnot4b: () => DecoratedTorusKnot4b, + DecoratedTorusKnot5a: () => DecoratedTorusKnot5a, + DecoratedTorusKnot5c: () => DecoratedTorusKnot5c, + FigureEightPolynomialKnot: () => FigureEightPolynomialKnot, + GrannyKnot: () => GrannyKnot, + HeartCurve: () => HeartCurve, + HelixCurve: () => HelixCurve, + KnotCurve: () => KnotCurve, + TorusKnot: () => TorusKnot, + TrefoilKnot: () => TrefoilKnot, + TrefoilPolynomialKnot: () => TrefoilPolynomialKnot, + VivianiCurve: () => VivianiCurve +}); +var GrannyKnot = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = 2 * Math.PI * t3; + const x2 = -0.22 * Math.cos(t3) - 1.28 * Math.sin(t3) - 0.44 * Math.cos(3 * t3) - 0.78 * Math.sin(3 * t3); + const y2 = -0.1 * Math.cos(2 * t3) - 0.27 * Math.sin(2 * t3) + 0.38 * Math.cos(4 * t3) + 0.46 * Math.sin(4 * t3); + const z = 0.7 * Math.cos(3 * t3) - 0.4 * Math.sin(3 * t3); + return point.set(x2, y2, z).multiplyScalar(20); + } +}; +var HeartCurve = class extends Curve { + constructor(scale2 = 5) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= 2 * Math.PI; + const x2 = 16 * Math.pow(Math.sin(t3), 3); + const y2 = 13 * Math.cos(t3) - 5 * Math.cos(2 * t3) - 2 * Math.cos(3 * t3) - Math.cos(4 * t3); + const z = 0; + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var VivianiCurve = class extends Curve { + constructor(scale2 = 70) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = t3 * 4 * Math.PI; + const a2 = this.scale / 2; + const x2 = a2 * (1 + Math.cos(t3)); + const y2 = a2 * Math.sin(t3); + const z = 2 * a2 * Math.sin(t3 / 2); + return point.set(x2, y2, z); + } +}; +var KnotCurve = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= 2 * Math.PI; + const R4 = 10; + const s = 50; + const x2 = s * Math.sin(t3); + const y2 = Math.cos(t3) * (R4 + s * Math.cos(t3)); + const z = Math.sin(t3) * (R4 + s * Math.cos(t3)); + return point.set(x2, y2, z); + } +}; +var HelixCurve = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const a2 = 30; + const b3 = 150; + const t22 = 2 * Math.PI * t3 * b3 / 30; + const x2 = Math.cos(t22) * a2; + const y2 = Math.sin(t22) * a2; + const z = b3 * t3; + return point.set(x2, y2, z); + } +}; +var TrefoilKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(3 * t3)) * Math.cos(2 * t3); + const y2 = (2 + Math.cos(3 * t3)) * Math.sin(2 * t3); + const z = Math.sin(3 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var TorusKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const p2 = 3; + const q2 = 4; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (2 + Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var CinquefoilKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const p2 = 2; + const q2 = 5; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (2 + Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var TrefoilPolynomialKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = t3 * 4 - 2; + const x2 = Math.pow(t3, 3) - 3 * t3; + const y2 = Math.pow(t3, 4) - 4 * t3 * t3; + const z = 1 / 5 * Math.pow(t3, 5) - 2 * t3; + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +function scaleTo(x2, y2, t3) { + const r = y2 - x2; + return t3 * r + x2; +} +var FigureEightPolynomialKnot = class extends Curve { + constructor(scale2 = 1) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = scaleTo(-4, 4, t3); + const x2 = 2 / 5 * t3 * (t3 * t3 - 7) * (t3 * t3 - 10); + const y2 = Math.pow(t3, 4) - 13 * t3 * t3; + const z = 1 / 10 * t3 * (t3 * t3 - 4) * (t3 * t3 - 9) * (t3 * t3 - 12); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot4a = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const x2 = Math.cos(2 * t3) * (1 + 0.6 * (Math.cos(5 * t3) + 0.75 * Math.cos(10 * t3))); + const y2 = Math.sin(2 * t3) * (1 + 0.6 * (Math.cos(5 * t3) + 0.75 * Math.cos(10 * t3))); + const z = 0.35 * Math.sin(5 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot4b = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)); + const y2 = Math.sin(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)); + const z = 0.2 * Math.sin(9 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot5a = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)); + const y2 = Math.sin(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)); + const z = 0.2 * Math.sin(20 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot5c = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))); + const y2 = Math.sin(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))); + const z = 0.35 * Math.sin(15 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; + +// node_modules/three/examples/jsm/curves/NURBSUtils.js +var NURBSUtils_exports = {}; +__export(NURBSUtils_exports, { + calcBSplineDerivatives: () => calcBSplineDerivatives, + calcBSplinePoint: () => calcBSplinePoint, + calcBasisFunctionDerivatives: () => calcBasisFunctionDerivatives, + calcBasisFunctions: () => calcBasisFunctions, + calcKoverI: () => calcKoverI, + calcNURBSDerivatives: () => calcNURBSDerivatives, + calcRationalCurveDerivatives: () => calcRationalCurveDerivatives, + calcSurfacePoint: () => calcSurfacePoint, + calcVolumePoint: () => calcVolumePoint, + findSpan: () => findSpan +}); +function findSpan(p2, u, U) { + const n2 = U.length - p2 - 1; + if (u >= U[n2]) { + return n2 - 1; + } + if (u <= U[p2]) { + return p2; + } + let low = p2; + let high = n2; + let mid = Math.floor((low + high) / 2); + while (u < U[mid] || u >= U[mid + 1]) { + if (u < U[mid]) { + high = mid; + } else { + low = mid; + } + mid = Math.floor((low + high) / 2); + } + return mid; +} +function calcBasisFunctions(span, u, p2, U) { + const N = []; + const left = []; + const right = []; + N[0] = 1; + for (let j = 1; j <= p2; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r = 0; r < j; ++r) { + const rv = right[r + 1]; + const lv = left[j - r]; + const temp = N[r] / (rv + lv); + N[r] = saved + rv * temp; + saved = lv * temp; + } + N[j] = saved; + } + return N; +} +function calcBSplinePoint(p2, U, P, u) { + const span = findSpan(p2, u, U); + const N = calcBasisFunctions(span, u, p2, U); + const C2 = new Vector4(0, 0, 0, 0); + for (let j = 0; j <= p2; ++j) { + const point = P[span - p2 + j]; + const Nj = N[j]; + const wNj = point.w * Nj; + C2.x += point.x * wNj; + C2.y += point.y * wNj; + C2.z += point.z * wNj; + C2.w += point.w * Nj; + } + return C2; +} +function calcBasisFunctionDerivatives(span, u, p2, n2, U) { + const zeroArr = []; + for (let i = 0; i <= p2; ++i) + zeroArr[i] = 0; + const ders = []; + for (let i = 0; i <= n2; ++i) + ders[i] = zeroArr.slice(0); + const ndu = []; + for (let i = 0; i <= p2; ++i) + ndu[i] = zeroArr.slice(0); + ndu[0][0] = 1; + const left = zeroArr.slice(0); + const right = zeroArr.slice(0); + for (let j = 1; j <= p2; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r2 = 0; r2 < j; ++r2) { + const rv = right[r2 + 1]; + const lv = left[j - r2]; + ndu[j][r2] = rv + lv; + const temp = ndu[r2][j - 1] / ndu[j][r2]; + ndu[r2][j] = saved + rv * temp; + saved = lv * temp; + } + ndu[j][j] = saved; + } + for (let j = 0; j <= p2; ++j) { + ders[0][j] = ndu[j][p2]; + } + for (let r2 = 0; r2 <= p2; ++r2) { + let s1 = 0; + let s2 = 1; + const a2 = []; + for (let i = 0; i <= p2; ++i) { + a2[i] = zeroArr.slice(0); + } + a2[0][0] = 1; + for (let k2 = 1; k2 <= n2; ++k2) { + let d = 0; + const rk = r2 - k2; + const pk = p2 - k2; + if (r2 >= k2) { + a2[s2][0] = a2[s1][0] / ndu[pk + 1][rk]; + d = a2[s2][0] * ndu[rk][pk]; + } + const j1 = rk >= -1 ? 1 : -rk; + const j2 = r2 - 1 <= pk ? k2 - 1 : p2 - r2; + for (let j3 = j1; j3 <= j2; ++j3) { + a2[s2][j3] = (a2[s1][j3] - a2[s1][j3 - 1]) / ndu[pk + 1][rk + j3]; + d += a2[s2][j3] * ndu[rk + j3][pk]; + } + if (r2 <= pk) { + a2[s2][k2] = -a2[s1][k2 - 1] / ndu[pk + 1][r2]; + d += a2[s2][k2] * ndu[r2][pk]; + } + ders[k2][r2] = d; + const j = s1; + s1 = s2; + s2 = j; + } + } + let r = p2; + for (let k2 = 1; k2 <= n2; ++k2) { + for (let j = 0; j <= p2; ++j) { + ders[k2][j] *= r; + } + r *= p2 - k2; + } + return ders; +} +function calcBSplineDerivatives(p2, U, P, u, nd) { + const du = nd < p2 ? nd : p2; + const CK = []; + const span = findSpan(p2, u, U); + const nders = calcBasisFunctionDerivatives(span, u, p2, du, U); + const Pw = []; + for (let i = 0; i < P.length; ++i) { + const point = P[i].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + Pw[i] = point; + } + for (let k2 = 0; k2 <= du; ++k2) { + const point = Pw[span - p2].clone().multiplyScalar(nders[k2][0]); + for (let j = 1; j <= p2; ++j) { + point.add(Pw[span - p2 + j].clone().multiplyScalar(nders[k2][j])); + } + CK[k2] = point; + } + for (let k2 = du + 1; k2 <= nd + 1; ++k2) { + CK[k2] = new Vector4(0, 0, 0); + } + return CK; +} +function calcKoverI(k2, i) { + let nom = 1; + for (let j = 2; j <= k2; ++j) { + nom *= j; + } + let denom = 1; + for (let j = 2; j <= i; ++j) { + denom *= j; + } + for (let j = 2; j <= k2 - i; ++j) { + denom *= j; + } + return nom / denom; +} +function calcRationalCurveDerivatives(Pders) { + const nd = Pders.length; + const Aders = []; + const wders = []; + for (let i = 0; i < nd; ++i) { + const point = Pders[i]; + Aders[i] = new Vector3(point.x, point.y, point.z); + wders[i] = point.w; + } + const CK = []; + for (let k2 = 0; k2 < nd; ++k2) { + const v = Aders[k2].clone(); + for (let i = 1; i <= k2; ++i) { + v.sub(CK[k2 - i].clone().multiplyScalar(calcKoverI(k2, i) * wders[i])); + } + CK[k2] = v.divideScalar(wders[0]); + } + return CK; +} +function calcNURBSDerivatives(p2, U, P, u, nd) { + const Pders = calcBSplineDerivatives(p2, U, P, u, nd); + return calcRationalCurveDerivatives(Pders); +} +function calcSurfacePoint(p2, q2, U, V, P, u, v, target) { + const uspan = findSpan(p2, u, U); + const vspan = findSpan(q2, v, V); + const Nu = calcBasisFunctions(uspan, u, p2, U); + const Nv = calcBasisFunctions(vspan, v, q2, V); + const temp = []; + for (let l2 = 0; l2 <= q2; ++l2) { + temp[l2] = new Vector4(0, 0, 0, 0); + for (let k2 = 0; k2 <= p2; ++k2) { + const point = P[uspan - p2 + k2][vspan - q2 + l2].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + temp[l2].add(point.multiplyScalar(Nu[k2])); + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let l2 = 0; l2 <= q2; ++l2) { + Sw.add(temp[l2].multiplyScalar(Nv[l2])); + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} +function calcVolumePoint(p2, q2, r, U, V, W, P, u, v, w, target) { + const uspan = findSpan(p2, u, U); + const vspan = findSpan(q2, v, V); + const wspan = findSpan(r, w, W); + const Nu = calcBasisFunctions(uspan, u, p2, U); + const Nv = calcBasisFunctions(vspan, v, q2, V); + const Nw = calcBasisFunctions(wspan, w, r, W); + const temp = []; + for (let m = 0; m <= r; ++m) { + temp[m] = []; + for (let l2 = 0; l2 <= q2; ++l2) { + temp[m][l2] = new Vector4(0, 0, 0, 0); + for (let k2 = 0; k2 <= p2; ++k2) { + const point = P[uspan - p2 + k2][vspan - q2 + l2][wspan - r + m].clone(); + const w2 = point.w; + point.x *= w2; + point.y *= w2; + point.z *= w2; + temp[m][l2].add(point.multiplyScalar(Nu[k2])); + } + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let m = 0; m <= r; ++m) { + for (let l2 = 0; l2 <= q2; ++l2) { + Sw.add(temp[m][l2].multiplyScalar(Nw[m]).multiplyScalar(Nv[l2])); + } + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} + +// node_modules/three/examples/jsm/curves/NURBSCurve.js +var NURBSCurve = class extends Curve { + constructor(degree, knots, controlPoints, startKnot, endKnot) { + super(); + this.degree = degree; + this.knots = knots; + this.controlPoints = []; + this.startKnot = startKnot || 0; + this.endKnot = endKnot || this.knots.length - 1; + for (let i = 0; i < controlPoints.length; ++i) { + const point = controlPoints[i]; + this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w); + } + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const u = this.knots[this.startKnot] + t3 * (this.knots[this.endKnot] - this.knots[this.startKnot]); + const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u); + if (hpoint.w !== 1) { + hpoint.divideScalar(hpoint.w); + } + return point.set(hpoint.x, hpoint.y, hpoint.z); + } + getTangent(t3, optionalTarget = new Vector3()) { + const tangent = optionalTarget; + const u = this.knots[0] + t3 * (this.knots[this.knots.length - 1] - this.knots[0]); + const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1); + tangent.copy(ders[1]).normalize(); + return tangent; + } +}; + +// node_modules/three/examples/jsm/curves/NURBSSurface.js +var NURBSSurface = class { + constructor(degree1, degree2, knots1, knots2, controlPoints) { + this.degree1 = degree1; + this.degree2 = degree2; + this.knots1 = knots1; + this.knots2 = knots2; + this.controlPoints = []; + const len1 = knots1.length - degree1 - 1; + const len2 = knots2.length - degree2 - 1; + for (let i = 0; i < len1; ++i) { + this.controlPoints[i] = []; + for (let j = 0; j < len2; ++j) { + const point = controlPoints[i][j]; + this.controlPoints[i][j] = new Vector4(point.x, point.y, point.z, point.w); + } + } + } + getPoint(t1, t22, target) { + const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]); + const v = this.knots2[0] + t22 * (this.knots2[this.knots2.length - 1] - this.knots2[0]); + calcSurfacePoint(this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target); + } +}; + +// node_modules/three/examples/jsm/curves/NURBSVolume.js +var NURBSVolume = class { + constructor(degree1, degree2, degree3, knots1, knots2, knots3, controlPoints) { + this.degree1 = degree1; + this.degree2 = degree2; + this.degree3 = degree3; + this.knots1 = knots1; + this.knots2 = knots2; + this.knots3 = knots3; + this.controlPoints = []; + const len1 = knots1.length - degree1 - 1; + const len2 = knots2.length - degree2 - 1; + const len3 = knots3.length - degree3 - 1; + for (let i = 0; i < len1; ++i) { + this.controlPoints[i] = []; + for (let j = 0; j < len2; ++j) { + this.controlPoints[i][j] = []; + for (let k2 = 0; k2 < len3; ++k2) { + const point = controlPoints[i][j][k2]; + this.controlPoints[i][j][k2] = new Vector4(point.x, point.y, point.z, point.w); + } + } + } + } + getPoint(t1, t22, t3, target) { + const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]); + const v = this.knots2[0] + t22 * (this.knots2[this.knots2.length - 1] - this.knots2[0]); + const w = this.knots3[0] + t3 * (this.knots3[this.knots3.length - 1] - this.knots3[0]); + calcVolumePoint(this.degree1, this.degree2, this.degree3, this.knots1, this.knots2, this.knots3, this.controlPoints, u, v, w, target); + } +}; + +// node_modules/three/examples/jsm/effects/AnaglyphEffect.js +var AnaglyphEffect = class { + constructor(renderer2, width2 = 512, height2 = 512) { + this.colorMatrixLeft = new Matrix3().fromArray([ + 0.4561, + -0.0400822, + -0.0152161, + 0.500484, + -0.0378246, + -0.0205971, + 0.176381, + -0.0157589, + -546856e-8 + ]); + this.colorMatrixRight = new Matrix3().fromArray([ + -0.0434706, + 0.378476, + -0.0721527, + -0.0879388, + 0.73364, + -0.112961, + -155529e-8, + -0.0184503, + 1.2264 + ]); + const _camera2 = new OrthographicCamera(-1, 1, 1, -1, 0, 1); + const _scene = new Scene(); + const _stereo = new StereoCamera(); + const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat }; + const _renderTargetL = new WebGLRenderTarget(width2, height2, _params); + const _renderTargetR = new WebGLRenderTarget(width2, height2, _params); + const _material = new ShaderMaterial({ + uniforms: { + "mapLeft": { value: _renderTargetL.texture }, + "mapRight": { value: _renderTargetR.texture }, + "colorMatrixLeft": { value: this.colorMatrixLeft }, + "colorMatrixRight": { value: this.colorMatrixRight } + }, + vertexShader: [ + "varying vec2 vUv;", + "void main() {", + " vUv = vec2( uv.x, uv.y );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "uniform sampler2D mapLeft;", + "uniform sampler2D mapRight;", + "varying vec2 vUv;", + "uniform mat3 colorMatrixLeft;", + "uniform mat3 colorMatrixRight;", + "void main() {", + " vec2 uv = vUv;", + " vec4 colorL = texture2D( mapLeft, uv );", + " vec4 colorR = texture2D( mapRight, uv );", + " vec3 color = clamp(", + " colorMatrixLeft * colorL.rgb +", + " colorMatrixRight * colorR.rgb, 0., 1. );", + " gl_FragColor = vec4(", + " color.r, color.g, color.b,", + " max( colorL.a, colorR.a ) );", + " #include ", + " #include ", + "}" + ].join("\n") + }); + const _mesh = new Mesh(new PlaneGeometry(2, 2), _material); + _scene.add(_mesh); + this.setSize = function(width3, height3) { + renderer2.setSize(width3, height3); + const pixelRatio = renderer2.getPixelRatio(); + _renderTargetL.setSize(width3 * pixelRatio, height3 * pixelRatio); + _renderTargetR.setSize(width3 * pixelRatio, height3 * pixelRatio); + }; + this.render = function(scene, camera) { + const currentRenderTarget = renderer2.getRenderTarget(); + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.setRenderTarget(_renderTargetL); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraL); + renderer2.setRenderTarget(_renderTargetR); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraR); + renderer2.setRenderTarget(null); + renderer2.render(_scene, _camera2); + renderer2.setRenderTarget(currentRenderTarget); + }; + this.dispose = function() { + _renderTargetL.dispose(); + _renderTargetR.dispose(); + _mesh.geometry.dispose(); + _mesh.material.dispose(); + }; + } +}; + +// node_modules/three/examples/jsm/effects/AsciiEffect.js +var AsciiEffect = class { + constructor(renderer2, charSet = " .:-=+*#%@", options = {}) { + const fResolution = options["resolution"] || 0.15; + const iScale = options["scale"] || 1; + const bColor = options["color"] || false; + const bAlpha = options["alpha"] || false; + const bBlock = options["block"] || false; + const bInvert = options["invert"] || false; + const strResolution = options["strResolution"] || "low"; + let width2, height2; + const domElement = document.createElement("div"); + domElement.style.cursor = "default"; + const oAscii = document.createElement("table"); + domElement.appendChild(oAscii); + let iWidth, iHeight; + let oImg; + this.setSize = function(w, h) { + width2 = w; + height2 = h; + renderer2.setSize(w, h); + initAsciiSize(); + }; + this.render = function(scene, camera) { + renderer2.render(scene, camera); + asciifyImage(oAscii); + }; + this.domElement = domElement; + function initAsciiSize() { + iWidth = Math.floor(width2 * fResolution); + iHeight = Math.floor(height2 * fResolution); + oCanvas.width = iWidth; + oCanvas.height = iHeight; + oImg = renderer2.domElement; + if (oImg.style.backgroundColor) { + oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor; + oAscii.rows[0].cells[0].style.color = oImg.style.color; + } + oAscii.cellSpacing = 0; + oAscii.cellPadding = 0; + const oStyle = oAscii.style; + oStyle.whiteSpace = "pre"; + oStyle.margin = "0px"; + oStyle.padding = "0px"; + oStyle.letterSpacing = fLetterSpacing + "px"; + oStyle.fontFamily = strFont; + oStyle.fontSize = fFontSize + "px"; + oStyle.lineHeight = fLineHeight + "px"; + oStyle.textAlign = "left"; + oStyle.textDecoration = "none"; + } + const aDefaultCharList = " .,:;i1tfLCG08@".split(""); + const aDefaultColorCharList = " CGO08@".split(""); + const strFont = "courier new, monospace"; + const oCanvasImg = renderer2.domElement; + const oCanvas = document.createElement("canvas"); + if (!oCanvas.getContext) { + return; + } + const oCtx = oCanvas.getContext("2d"); + if (!oCtx.getImageData) { + return; + } + let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList; + if (charSet) aCharList = charSet; + const fFontSize = 2 / fResolution * iScale; + const fLineHeight = 2 / fResolution * iScale; + let fLetterSpacing = 0; + if (strResolution == "low") { + switch (iScale) { + case 1: + fLetterSpacing = -1; + break; + case 2: + case 3: + fLetterSpacing = -2.1; + break; + case 4: + fLetterSpacing = -3.1; + break; + case 5: + fLetterSpacing = -4.15; + break; + } + } + if (strResolution == "medium") { + switch (iScale) { + case 1: + fLetterSpacing = 0; + break; + case 2: + fLetterSpacing = -1; + break; + case 3: + fLetterSpacing = -1.04; + break; + case 4: + case 5: + fLetterSpacing = -2.1; + break; + } + } + if (strResolution == "high") { + switch (iScale) { + case 1: + case 2: + fLetterSpacing = 0; + break; + case 3: + case 4: + case 5: + fLetterSpacing = -1; + break; + } + } + function asciifyImage(oAscii2) { + oCtx.clearRect(0, 0, iWidth, iHeight); + oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight); + const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data; + let strChars = ""; + for (let y2 = 0; y2 < iHeight; y2 += 2) { + for (let x2 = 0; x2 < iWidth; x2++) { + const iOffset = (y2 * iWidth + x2) * 4; + const iRed = oImgData[iOffset]; + const iGreen = oImgData[iOffset + 1]; + const iBlue = oImgData[iOffset + 2]; + const iAlpha = oImgData[iOffset + 3]; + let iCharIdx; + let fBrightness; + fBrightness = (0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue) / 255; + if (iAlpha == 0) { + fBrightness = 1; + } + iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1)); + if (bInvert) { + iCharIdx = aCharList.length - iCharIdx - 1; + } + let strThisChar = aCharList[iCharIdx]; + if (strThisChar === void 0 || strThisChar == " ") + strThisChar = " "; + if (bColor) { + strChars += "" + strThisChar + ""; + } else { + strChars += strThisChar; + } + } + strChars += "
"; + } + oAscii2.innerHTML = `${strChars}`; + } + } +}; + +// node_modules/three/examples/jsm/effects/OutlineEffect.js +var OutlineEffect = class { + constructor(renderer2, parameters = {}) { + this.enabled = true; + const defaultThickness = parameters.defaultThickness !== void 0 ? parameters.defaultThickness : 3e-3; + const defaultColor = new Color().fromArray(parameters.defaultColor !== void 0 ? parameters.defaultColor : [0, 0, 0]); + const defaultAlpha = parameters.defaultAlpha !== void 0 ? parameters.defaultAlpha : 1; + const defaultKeepAlive = parameters.defaultKeepAlive !== void 0 ? parameters.defaultKeepAlive : false; + const cache = {}; + const removeThresholdCount = 60; + const originalMaterials = {}; + const originalOnBeforeRenders = {}; + const uniformsOutline = { + outlineThickness: { value: defaultThickness }, + outlineColor: { value: defaultColor }, + outlineAlpha: { value: defaultAlpha } + }; + const vertexShader = [ + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "uniform float outlineThickness;", + "vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {", + " float thickness = outlineThickness;", + " const float ratio = 1.0;", + // TODO: support outline thickness ratio for each vertex + " vec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );", + // NOTE: subtract pos2 from pos because BackSide objectNormal is negative + " vec4 norm = normalize( pos - pos2 );", + " return pos + norm * thickness * pos.w * ratio;", + "}", + "void main() {", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " vec3 outlineNormal = - objectNormal;", + // the outline material is always rendered with BackSide + " gl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );", + " #include ", + " #include ", + " #include ", + "}" + ].join("\n"); + const fragmentShader = [ + "#include ", + "#include ", + "#include ", + "#include ", + "uniform vec3 outlineColor;", + "uniform float outlineAlpha;", + "void main() {", + " #include ", + " #include ", + " gl_FragColor = vec4( outlineColor, outlineAlpha );", + " #include ", + " #include ", + " #include ", + " #include ", + "}" + ].join("\n"); + function createMaterial() { + return new ShaderMaterial({ + type: "OutlineEffect", + uniforms: UniformsUtils.merge([ + UniformsLib["fog"], + UniformsLib["displacementmap"], + uniformsOutline + ]), + vertexShader, + fragmentShader, + side: BackSide + }); + } + function getOutlineMaterialFromCache(originalMaterial) { + let data2 = cache[originalMaterial.uuid]; + if (data2 === void 0) { + data2 = { + material: createMaterial(), + used: true, + keepAlive: defaultKeepAlive, + count: 0 + }; + cache[originalMaterial.uuid] = data2; + } + data2.used = true; + return data2.material; + } + function getOutlineMaterial(originalMaterial) { + const outlineMaterial = getOutlineMaterialFromCache(originalMaterial); + originalMaterials[outlineMaterial.uuid] = originalMaterial; + updateOutlineMaterial(outlineMaterial, originalMaterial); + return outlineMaterial; + } + function isCompatible(object) { + const geometry = object.geometry; + const hasNormals = geometry !== void 0 && geometry.attributes.normal !== void 0; + return object.isMesh === true && object.material !== void 0 && hasNormals === true; + } + function setOutlineMaterial(object) { + if (isCompatible(object) === false) return; + if (Array.isArray(object.material)) { + for (let i = 0, il = object.material.length; i < il; i++) { + object.material[i] = getOutlineMaterial(object.material[i]); + } + } else { + object.material = getOutlineMaterial(object.material); + } + originalOnBeforeRenders[object.uuid] = object.onBeforeRender; + object.onBeforeRender = onBeforeRender; + } + function restoreOriginalMaterial(object) { + if (isCompatible(object) === false) return; + if (Array.isArray(object.material)) { + for (let i = 0, il = object.material.length; i < il; i++) { + object.material[i] = originalMaterials[object.material[i].uuid]; + } + } else { + object.material = originalMaterials[object.material.uuid]; + } + object.onBeforeRender = originalOnBeforeRenders[object.uuid]; + } + function onBeforeRender(renderer3, scene, camera, geometry, material) { + const originalMaterial = originalMaterials[material.uuid]; + if (originalMaterial === void 0) return; + updateUniforms(material, originalMaterial); + } + function updateUniforms(material, originalMaterial) { + const outlineParameters = originalMaterial.userData.outlineParameters; + material.uniforms.outlineAlpha.value = originalMaterial.opacity; + if (outlineParameters !== void 0) { + if (outlineParameters.thickness !== void 0) material.uniforms.outlineThickness.value = outlineParameters.thickness; + if (outlineParameters.color !== void 0) material.uniforms.outlineColor.value.fromArray(outlineParameters.color); + if (outlineParameters.alpha !== void 0) material.uniforms.outlineAlpha.value = outlineParameters.alpha; + } + if (originalMaterial.displacementMap) { + material.uniforms.displacementMap.value = originalMaterial.displacementMap; + material.uniforms.displacementScale.value = originalMaterial.displacementScale; + material.uniforms.displacementBias.value = originalMaterial.displacementBias; + } + } + function updateOutlineMaterial(material, originalMaterial) { + if (material.name === "invisible") return; + const outlineParameters = originalMaterial.userData.outlineParameters; + material.fog = originalMaterial.fog; + material.toneMapped = originalMaterial.toneMapped; + material.premultipliedAlpha = originalMaterial.premultipliedAlpha; + material.displacementMap = originalMaterial.displacementMap; + if (outlineParameters !== void 0) { + if (originalMaterial.visible === false) { + material.visible = false; + } else { + material.visible = outlineParameters.visible !== void 0 ? outlineParameters.visible : true; + } + material.transparent = outlineParameters.alpha !== void 0 && outlineParameters.alpha < 1 ? true : originalMaterial.transparent; + if (outlineParameters.keepAlive !== void 0) cache[originalMaterial.uuid].keepAlive = outlineParameters.keepAlive; + } else { + material.transparent = originalMaterial.transparent; + material.visible = originalMaterial.visible; + } + if (originalMaterial.wireframe === true || originalMaterial.depthTest === false) material.visible = false; + if (originalMaterial.clippingPlanes) { + material.clipping = true; + material.clippingPlanes = originalMaterial.clippingPlanes; + material.clipIntersection = originalMaterial.clipIntersection; + material.clipShadows = originalMaterial.clipShadows; + } + material.version = originalMaterial.version; + } + function cleanupCache() { + let keys2; + keys2 = Object.keys(originalMaterials); + for (let i = 0, il = keys2.length; i < il; i++) { + originalMaterials[keys2[i]] = void 0; + } + keys2 = Object.keys(originalOnBeforeRenders); + for (let i = 0, il = keys2.length; i < il; i++) { + originalOnBeforeRenders[keys2[i]] = void 0; + } + keys2 = Object.keys(cache); + for (let i = 0, il = keys2.length; i < il; i++) { + const key2 = keys2[i]; + if (cache[key2].used === false) { + cache[key2].count++; + if (cache[key2].keepAlive === false && cache[key2].count > removeThresholdCount) { + delete cache[key2]; + } + } else { + cache[key2].used = false; + cache[key2].count = 0; + } + } + } + this.render = function(scene, camera) { + if (this.enabled === false) { + renderer2.render(scene, camera); + return; + } + const currentAutoClear = renderer2.autoClear; + renderer2.autoClear = this.autoClear; + renderer2.render(scene, camera); + renderer2.autoClear = currentAutoClear; + this.renderOutline(scene, camera); + }; + this.renderOutline = function(scene, camera) { + const currentAutoClear = renderer2.autoClear; + const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate; + const currentSceneBackground = scene.background; + const currentShadowMapEnabled = renderer2.shadowMap.enabled; + scene.matrixWorldAutoUpdate = false; + scene.background = null; + renderer2.autoClear = false; + renderer2.shadowMap.enabled = false; + scene.traverse(setOutlineMaterial); + renderer2.render(scene, camera); + scene.traverse(restoreOriginalMaterial); + cleanupCache(); + scene.matrixWorldAutoUpdate = currentSceneAutoUpdate; + scene.background = currentSceneBackground; + renderer2.autoClear = currentAutoClear; + renderer2.shadowMap.enabled = currentShadowMapEnabled; + }; + this.autoClear = renderer2.autoClear; + this.domElement = renderer2.domElement; + this.shadowMap = renderer2.shadowMap; + this.clear = function(color, depth, stencil) { + renderer2.clear(color, depth, stencil); + }; + this.getPixelRatio = function() { + return renderer2.getPixelRatio(); + }; + this.setPixelRatio = function(value2) { + renderer2.setPixelRatio(value2); + }; + this.getSize = function(target) { + return renderer2.getSize(target); + }; + this.setSize = function(width2, height2, updateStyle) { + renderer2.setSize(width2, height2, updateStyle); + }; + this.setViewport = function(x2, y2, width2, height2) { + renderer2.setViewport(x2, y2, width2, height2); + }; + this.setScissor = function(x2, y2, width2, height2) { + renderer2.setScissor(x2, y2, width2, height2); + }; + this.setScissorTest = function(boolean) { + renderer2.setScissorTest(boolean); + }; + this.setRenderTarget = function(renderTarget) { + renderer2.setRenderTarget(renderTarget); + }; + } +}; + +// node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js +var ParallaxBarrierEffect = class { + constructor(renderer2) { + const _camera2 = new OrthographicCamera(-1, 1, 1, -1, 0, 1); + const _scene = new Scene(); + const _stereo = new StereoCamera(); + const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat }; + const _renderTargetL = new WebGLRenderTarget(512, 512, _params); + const _renderTargetR = new WebGLRenderTarget(512, 512, _params); + const _material = new ShaderMaterial({ + uniforms: { + "mapLeft": { value: _renderTargetL.texture }, + "mapRight": { value: _renderTargetR.texture } + }, + vertexShader: [ + "varying vec2 vUv;", + "void main() {", + " vUv = vec2( uv.x, uv.y );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "uniform sampler2D mapLeft;", + "uniform sampler2D mapRight;", + "varying vec2 vUv;", + "void main() {", + " vec2 uv = vUv;", + " if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {", + " gl_FragColor = texture2D( mapLeft, uv );", + " } else {", + " gl_FragColor = texture2D( mapRight, uv );", + " }", + " #include ", + " #include ", + "}" + ].join("\n") + }); + const mesh = new Mesh(new PlaneGeometry(2, 2), _material); + _scene.add(mesh); + this.setSize = function(width2, height2) { + renderer2.setSize(width2, height2); + const pixelRatio = renderer2.getPixelRatio(); + _renderTargetL.setSize(width2 * pixelRatio, height2 * pixelRatio); + _renderTargetR.setSize(width2 * pixelRatio, height2 * pixelRatio); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.setRenderTarget(_renderTargetL); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraL); + renderer2.setRenderTarget(_renderTargetR); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraR); + renderer2.setRenderTarget(null); + renderer2.render(_scene, _camera2); + }; + } +}; + +// node_modules/three/examples/jsm/effects/PeppersGhostEffect.js +var PeppersGhostEffect = class { + constructor(renderer2) { + const scope = this; + scope.cameraDistance = 15; + scope.reflectFromAbove = false; + let _halfWidth, _width, _height; + const _cameraF = new PerspectiveCamera(); + const _cameraB = new PerspectiveCamera(); + const _cameraL = new PerspectiveCamera(); + const _cameraR = new PerspectiveCamera(); + const _position3 = new Vector3(); + const _quaternion4 = new Quaternion(); + const _scale5 = new Vector3(); + renderer2.autoClear = false; + this.setSize = function(width2, height2) { + _halfWidth = width2 / 2; + if (width2 < height2) { + _width = width2 / 3; + _height = width2 / 3; + } else { + _width = height2 / 3; + _height = height2 / 3; + } + renderer2.setSize(width2, height2); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + camera.matrixWorld.decompose(_position3, _quaternion4, _scale5); + _cameraF.position.copy(_position3); + _cameraF.quaternion.copy(_quaternion4); + _cameraF.translateZ(scope.cameraDistance); + _cameraF.lookAt(scene.position); + _cameraB.position.copy(_position3); + _cameraB.quaternion.copy(_quaternion4); + _cameraB.translateZ(-scope.cameraDistance); + _cameraB.lookAt(scene.position); + _cameraB.rotation.z += 180 * (Math.PI / 180); + _cameraL.position.copy(_position3); + _cameraL.quaternion.copy(_quaternion4); + _cameraL.translateX(-scope.cameraDistance); + _cameraL.lookAt(scene.position); + _cameraL.rotation.x += 90 * (Math.PI / 180); + _cameraR.position.copy(_position3); + _cameraR.quaternion.copy(_quaternion4); + _cameraR.translateX(scope.cameraDistance); + _cameraR.lookAt(scene.position); + _cameraR.rotation.x += 90 * (Math.PI / 180); + renderer2.clear(); + renderer2.setScissorTest(true); + renderer2.setScissor(_halfWidth - _width / 2, _height * 2, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2, _height * 2, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraB); + } else { + renderer2.render(scene, _cameraF); + } + renderer2.setScissor(_halfWidth - _width / 2, 0, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2, 0, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraF); + } else { + renderer2.render(scene, _cameraB); + } + renderer2.setScissor(_halfWidth - _width / 2 - _width, _height, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2 - _width, _height, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraR); + } else { + renderer2.render(scene, _cameraL); + } + renderer2.setScissor(_halfWidth + _width / 2, _height, _width, _height); + renderer2.setViewport(_halfWidth + _width / 2, _height, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraL); + } else { + renderer2.render(scene, _cameraR); + } + renderer2.setScissorTest(false); + }; + } +}; + +// node_modules/three/examples/jsm/effects/StereoEffect.js +var StereoEffect = class { + constructor(renderer2) { + const _stereo = new StereoCamera(); + _stereo.aspect = 0.5; + const size2 = new Vector2(); + this.setEyeSeparation = function(eyeSep) { + _stereo.eyeSep = eyeSep; + }; + this.setSize = function(width2, height2) { + renderer2.setSize(width2, height2); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.getSize(size2); + if (renderer2.autoClear) renderer2.clear(); + renderer2.setScissorTest(true); + renderer2.setScissor(0, 0, size2.width / 2, size2.height); + renderer2.setViewport(0, 0, size2.width / 2, size2.height); + renderer2.render(scene, _stereo.cameraL); + renderer2.setScissor(size2.width / 2, 0, size2.width / 2, size2.height); + renderer2.setViewport(size2.width / 2, 0, size2.width / 2, size2.height); + renderer2.render(scene, _stereo.cameraR); + renderer2.setScissorTest(false); + }; + } +}; + +// node_modules/three/examples/jsm/environments/DebugEnvironment.js +var DebugEnvironment = class extends Scene { + constructor() { + super(); + const geometry = new BoxGeometry(); + geometry.deleteAttribute("uv"); + const roomMaterial = new MeshStandardMaterial({ metalness: 0, side: BackSide }); + const room = new Mesh(geometry, roomMaterial); + room.scale.setScalar(10); + this.add(room); + const mainLight = new PointLight(16777215, 50, 0, 2); + this.add(mainLight); + const material1 = new MeshLambertMaterial({ color: 16711680, emissive: 16777215, emissiveIntensity: 10 }); + const light1 = new Mesh(geometry, material1); + light1.position.set(-5, 2, 0); + light1.scale.set(0.1, 1, 1); + this.add(light1); + const material2 = new MeshLambertMaterial({ color: 65280, emissive: 16777215, emissiveIntensity: 10 }); + const light2 = new Mesh(geometry, material2); + light2.position.set(0, 5, 0); + light2.scale.set(1, 0.1, 1); + this.add(light2); + const material3 = new MeshLambertMaterial({ color: 255, emissive: 16777215, emissiveIntensity: 10 }); + const light3 = new Mesh(geometry, material3); + light3.position.set(2, 1, 5); + light3.scale.set(1.5, 2, 0.1); + this.add(light3); + } +}; + +// node_modules/three/examples/jsm/environments/RoomEnvironment.js +var RoomEnvironment = class extends Scene { + constructor(renderer2 = null) { + super(); + const geometry = new BoxGeometry(); + geometry.deleteAttribute("uv"); + const roomMaterial = new MeshStandardMaterial({ side: BackSide }); + const boxMaterial = new MeshStandardMaterial(); + const mainLight = new PointLight(16777215, 900, 28, 2); + mainLight.position.set(0.418, 16.199, 0.3); + this.add(mainLight); + const room = new Mesh(geometry, roomMaterial); + room.position.set(-0.757, 13.219, 0.717); + room.scale.set(31.713, 28.305, 28.591); + this.add(room); + const box1 = new Mesh(geometry, boxMaterial); + box1.position.set(-10.906, 2.009, 1.846); + box1.rotation.set(0, -0.195, 0); + box1.scale.set(2.328, 7.905, 4.651); + this.add(box1); + const box2 = new Mesh(geometry, boxMaterial); + box2.position.set(-5.607, -0.754, -0.758); + box2.rotation.set(0, 0.994, 0); + box2.scale.set(1.97, 1.534, 3.955); + this.add(box2); + const box3 = new Mesh(geometry, boxMaterial); + box3.position.set(6.167, 0.857, 7.803); + box3.rotation.set(0, 0.561, 0); + box3.scale.set(3.927, 6.285, 3.687); + this.add(box3); + const box4 = new Mesh(geometry, boxMaterial); + box4.position.set(-2.017, 0.018, 6.124); + box4.rotation.set(0, 0.333, 0); + box4.scale.set(2.002, 4.566, 2.064); + this.add(box4); + const box5 = new Mesh(geometry, boxMaterial); + box5.position.set(2.291, -0.756, -2.621); + box5.rotation.set(0, -0.286, 0); + box5.scale.set(1.546, 1.552, 1.496); + this.add(box5); + const box6 = new Mesh(geometry, boxMaterial); + box6.position.set(-2.193, -0.369, -5.547); + box6.rotation.set(0, 0.516, 0); + box6.scale.set(3.875, 3.487, 2.986); + this.add(box6); + const light1 = new Mesh(geometry, createAreaLightMaterial(50)); + light1.position.set(-16.116, 14.37, 8.208); + light1.scale.set(0.1, 2.428, 2.739); + this.add(light1); + const light2 = new Mesh(geometry, createAreaLightMaterial(50)); + light2.position.set(-16.109, 18.021, -8.207); + light2.scale.set(0.1, 2.425, 2.751); + this.add(light2); + const light3 = new Mesh(geometry, createAreaLightMaterial(17)); + light3.position.set(14.904, 12.198, -1.832); + light3.scale.set(0.15, 4.265, 6.331); + this.add(light3); + const light4 = new Mesh(geometry, createAreaLightMaterial(43)); + light4.position.set(-0.462, 8.89, 14.52); + light4.scale.set(4.38, 5.441, 0.088); + this.add(light4); + const light5 = new Mesh(geometry, createAreaLightMaterial(20)); + light5.position.set(3.235, 11.486, -12.541); + light5.scale.set(2.5, 2, 0.1); + this.add(light5); + const light6 = new Mesh(geometry, createAreaLightMaterial(100)); + light6.position.set(0, 20, 0); + light6.scale.set(1, 0.1, 1); + this.add(light6); + } + dispose() { + const resources = /* @__PURE__ */ new Set(); + this.traverse((object) => { + if (object.isMesh) { + resources.add(object.geometry); + resources.add(object.material); + } + }); + for (const resource of resources) { + resource.dispose(); + } + } +}; +function createAreaLightMaterial(intensity) { + const material = new MeshBasicMaterial(); + material.color.setScalar(intensity); + return material; +} + +// node_modules/three/examples/jsm/exporters/DRACOExporter.js +var DRACOExporter = class _DRACOExporter { + parse(object, options = {}) { + options = Object.assign({ + decodeSpeed: 5, + encodeSpeed: 5, + encoderMethod: _DRACOExporter.MESH_EDGEBREAKER_ENCODING, + quantization: [16, 8, 8, 8, 8], + exportUvs: true, + exportNormals: true, + exportColor: false + }, options); + if (DracoEncoderModule === void 0) { + throw new Error("THREE.DRACOExporter: required the draco_encoder to work."); + } + const geometry = object.geometry; + const dracoEncoder = DracoEncoderModule(); + const encoder = new dracoEncoder.Encoder(); + let builder; + let dracoObject; + if (object.isMesh === true) { + builder = new dracoEncoder.MeshBuilder(); + dracoObject = new dracoEncoder.Mesh(); + const vertices = geometry.getAttribute("position"); + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); + const faces = geometry.getIndex(); + if (faces !== null) { + builder.AddFacesToMesh(dracoObject, faces.count / 3, faces.array); + } else { + const faces2 = new (vertices.count > 65535 ? Uint32Array : Uint16Array)(vertices.count); + for (let i = 0; i < faces2.length; i++) { + faces2[i] = i; + } + builder.AddFacesToMesh(dracoObject, vertices.count, faces2); + } + if (options.exportNormals === true) { + const normals = geometry.getAttribute("normal"); + if (normals !== void 0) { + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array); + } + } + if (options.exportUvs === true) { + const uvs = geometry.getAttribute("uv"); + if (uvs !== void 0) { + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array); + } + } + if (options.exportColor === true) { + const colors = geometry.getAttribute("color"); + if (colors !== void 0) { + const array = createVertexColorSRGBArray(colors); + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array); + } + } + } else if (object.isPoints === true) { + builder = new dracoEncoder.PointCloudBuilder(); + dracoObject = new dracoEncoder.PointCloud(); + const vertices = geometry.getAttribute("position"); + builder.AddFloatAttribute(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); + if (options.exportColor === true) { + const colors = geometry.getAttribute("color"); + if (colors !== void 0) { + const array = createVertexColorSRGBArray(colors); + builder.AddFloatAttribute(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array); + } + } + } else { + throw new Error("DRACOExporter: Unsupported object type."); + } + const encodedData = new dracoEncoder.DracoInt8Array(); + const encodeSpeed = options.encodeSpeed !== void 0 ? options.encodeSpeed : 5; + const decodeSpeed = options.decodeSpeed !== void 0 ? options.decodeSpeed : 5; + encoder.SetSpeedOptions(encodeSpeed, decodeSpeed); + if (options.encoderMethod !== void 0) { + encoder.SetEncodingMethod(options.encoderMethod); + } + if (options.quantization !== void 0) { + for (let i = 0; i < 5; i++) { + if (options.quantization[i] !== void 0) { + encoder.SetAttributeQuantization(i, options.quantization[i]); + } + } + } + let length2; + if (object.isMesh === true) { + length2 = encoder.EncodeMeshToDracoBuffer(dracoObject, encodedData); + } else { + length2 = encoder.EncodePointCloudToDracoBuffer(dracoObject, true, encodedData); + } + dracoEncoder.destroy(dracoObject); + if (length2 === 0) { + throw new Error("THREE.DRACOExporter: Draco encoding failed."); + } + const outputData = new Int8Array(new ArrayBuffer(length2)); + for (let i = 0; i < length2; i++) { + outputData[i] = encodedData.GetValue(i); + } + dracoEncoder.destroy(encodedData); + dracoEncoder.destroy(encoder); + dracoEncoder.destroy(builder); + return outputData; + } +}; +function createVertexColorSRGBArray(attribute) { + const _color5 = new Color(); + const count = attribute.count; + const itemSize = attribute.itemSize; + const array = new Float32Array(count * itemSize); + for (let i = 0, il = count; i < il; i++) { + _color5.fromBufferAttribute(attribute, i).convertLinearToSRGB(); + array[i * itemSize] = _color5.r; + array[i * itemSize + 1] = _color5.g; + array[i * itemSize + 2] = _color5.b; + if (itemSize === 4) { + array[i * itemSize + 3] = attribute.getW(i); + } + } + return array; +} +DRACOExporter.MESH_EDGEBREAKER_ENCODING = 1; +DRACOExporter.MESH_SEQUENTIAL_ENCODING = 0; +DRACOExporter.POINT_CLOUD = 0; +DRACOExporter.TRIANGULAR_MESH = 1; +DRACOExporter.INVALID = -1; +DRACOExporter.POSITION = 0; +DRACOExporter.NORMAL = 1; +DRACOExporter.COLOR = 2; +DRACOExporter.TEX_COORD = 3; +DRACOExporter.GENERIC = 4; + +// node_modules/three/examples/jsm/libs/fflate.module.js +var ch2 = {}; +var wk = function(c2, id, msg, transfer, cb) { + var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([ + c2 + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})' + ], { type: "text/javascript" })))); + w.onmessage = function(e) { + var d = e.data, ed = d.$e$; + if (ed) { + var err2 = new Error(ed[0]); + err2["code"] = ed[1]; + err2.stack = ed[2]; + cb(err2, null); + } else + cb(null, d); + }; + w.postMessage(msg, transfer); + return w; +}; +var u8 = Uint8Array; +var u16 = Uint16Array; +var i32 = Int32Array; +var fleb = new u8([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + /* unused */ + 0, + 0, + /* impossible */ + 0 +]); +var fdeb = new u8([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + /* unused */ + 0, + 0 +]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = function(eb, start) { + var b3 = new u16(31); + for (var i = 0; i < 31; ++i) { + b3[i] = start += 1 << eb[i - 1]; + } + var r = new i32(b3[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b3[i]; j < b3[i + 1]; ++j) { + r[j] = j - b3[i] << 5 | i; + } + } + return { b: b3, r }; +}; +var _a = freb(fleb, 2); +var fl = _a.b; +var revfl = _a.r; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0); +var fd = _b.b; +var revfd = _b.r; +var rev = new u16(32768); +for (i = 0; i < 32768; ++i) { + x2 = (i & 43690) >> 1 | (i & 21845) << 1; + x2 = (x2 & 52428) >> 2 | (x2 & 13107) << 2; + x2 = (x2 & 61680) >> 4 | (x2 & 3855) << 4; + rev[i] = ((x2 & 65280) >> 8 | (x2 & 255) << 8) >> 1; +} +var x2; +var i; +var hMap = function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l2 = new u16(mb); + for (; i < s; ++i) { + if (cd[i]) + ++l2[cd[i] - 1]; + } + var le = new u16(mb); + for (i = 1; i < mb; ++i) { + le[i] = le[i - 1] + l2[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; + } + } + } + return co; +}; +var flt = new u8(288); +for (i = 0; i < 144; ++i) + flt[i] = 8; +var i; +for (i = 144; i < 256; ++i) + flt[i] = 9; +var i; +for (i = 256; i < 280; ++i) + flt[i] = 7; +var i; +for (i = 280; i < 288; ++i) + flt[i] = 8; +var i; +var fdt = new u8(32); +for (i = 0; i < 32; ++i) + fdt[i] = 5; +var i; +var flm = hMap(flt, 9, 0); +var flrm = hMap(flt, 9, 1); +var fdm = hMap(fdt, 5, 0); +var fdrm = hMap(fdt, 5, 1); +var max = function(a2) { + var m = a2[0]; + for (var i = 1; i < a2.length; ++i) { + if (a2[i] > m) + m = a2[i]; + } + return m; +}; +var bits = function(d, p2, m) { + var o = p2 / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p2 & 7) & m; +}; +var bits16 = function(d, p2) { + var o = p2 / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p2 & 7); +}; +var shft = function(p2) { + return (p2 + 7) / 8 | 0; +}; +var slc = function(v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + return new u8(v.subarray(s, e)); +}; +var ec = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +]; +var err = function(ind, msg, nt2) { + var e = new Error(msg || ec[ind]); + e.code = ind; + if (Error.captureStackTrace) + Error.captureStackTrace(e, err); + if (!nt2) + throw e; + return e; +}; +var inflt = function(dat, st, buf, dict) { + var sl = dat.length, dl = dict ? dict.length : 0; + if (!sl || st.f && !st.l) + return buf || new u8(0); + var noBuf = !buf; + var resize = noBuf || st.i != 2; + var noSt = st.i; + if (noBuf) + buf = new u8(sl * 3); + var cbuf = function(l3) { + var bl = buf.length; + if (l3 > bl) { + var nbuf = new u8(Math.max(bl * 2, l3)); + nbuf.set(buf); + buf = nbuf; + } + }; + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l2 = dat[s - 4] | dat[s - 3] << 8, t3 = s + l2; + if (t3 > sl) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + l2); + buf.set(dat.subarray(s, t3), bt); + st.b = bt += l2, st.p = pos = t3 * 8, st.f = final; + continue; + } else if (type == 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl; ) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c2 = 0, n2 = 0; + if (s == 16) + n2 = 3 + bits(dat, pos, 3), pos += 2, c2 = ldt[i - 1]; + else if (s == 17) + n2 = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) + n2 = 11 + bits(dat, pos, 127), pos += 7; + while (n2--) + ldt[i++] = c2; + } + } + var lt = ldt.subarray(0, hLit), dt2 = ldt.subarray(hLit); + lbt = max(lt); + dbt = max(dt2); + lm = hMap(lt, lbt, 1); + dm = hMap(dt2, dbt, 1); + } else + err(1); + if (pos > tbts) { + if (noSt) + err(0); + break; + } + } + if (resize) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c2 = lm[bits16(dat, pos) & lms], sym = c2 >> 4; + pos += c2 & 15; + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (!c2) + err(2); + if (sym < 256) + buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add2 = sym - 254; + if (sym > 264) { + var i = sym - 257, b3 = fleb[i]; + add2 = bits(dat, pos, (1 << b3) - 1) + fl[i]; + pos += b3; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; + if (!d) + err(3); + pos += d & 15; + var dt2 = fd[dsym]; + if (dsym > 3) { + var b3 = fdeb[dsym]; + dt2 += bits16(dat, pos) & (1 << b3) - 1, pos += b3; + } + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + 131072); + var end = bt + add2; + if (bt < dt2) { + var shift = dl - dt2, dend = Math.min(dt2, end); + if (shift + bt < 0) + err(3); + for (; bt < dend; ++bt) + buf[bt] = dict[shift + bt]; + } + for (; bt < end; ++bt) + buf[bt] = buf[bt - dt2]; + } + } + st.l = lm, st.p = lpos, st.b = bt, st.f = final; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); +}; +var wbits = function(d, p2, v) { + v <<= p2 & 7; + var o = p2 / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; +}; +var wbits16 = function(d, p2, v) { + v <<= p2 & 7; + var o = p2 / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; + d[o + 2] |= v >> 16; +}; +var hTree = function(d, mb) { + var t3 = []; + for (var i = 0; i < d.length; ++i) { + if (d[i]) + t3.push({ s: i, f: d[i] }); + } + var s = t3.length; + var t22 = t3.slice(); + if (!s) + return { t: et, l: 0 }; + if (s == 1) { + var v = new u8(t3[0].s + 1); + v[t3[0].s] = 1; + return { t: v, l: 1 }; + } + t3.sort(function(a2, b3) { + return a2.f - b3.f; + }); + t3.push({ s: -1, f: 25001 }); + var l2 = t3[0], r = t3[1], i0 = 0, i1 = 1, i2 = 2; + t3[0] = { s: -1, f: l2.f + r.f, l: l2, r }; + while (i1 != s - 1) { + l2 = t3[t3[i0].f < t3[i2].f ? i0++ : i2++]; + r = t3[i0 != i1 && t3[i0].f < t3[i2].f ? i0++ : i2++]; + t3[i1++] = { s: -1, f: l2.f + r.f, l: l2, r }; + } + var maxSym = t22[0].s; + for (var i = 1; i < s; ++i) { + if (t22[i].s > maxSym) + maxSym = t22[i].s; + } + var tr = new u16(maxSym + 1); + var mbt = ln(t3[i1 - 1], tr, 0); + if (mbt > mb) { + var i = 0, dt2 = 0; + var lft = mbt - mb, cst = 1 << lft; + t22.sort(function(a2, b3) { + return tr[b3.s] - tr[a2.s] || a2.f - b3.f; + }); + for (; i < s; ++i) { + var i2_1 = t22[i].s; + if (tr[i2_1] > mb) { + dt2 += cst - (1 << mbt - tr[i2_1]); + tr[i2_1] = mb; + } else + break; + } + dt2 >>= lft; + while (dt2 > 0) { + var i2_2 = t22[i].s; + if (tr[i2_2] < mb) + dt2 -= 1 << mb - tr[i2_2]++ - 1; + else + ++i; + } + for (; i >= 0 && dt2; --i) { + var i2_3 = t22[i].s; + if (tr[i2_3] == mb) { + --tr[i2_3]; + ++dt2; + } + } + mbt = mb; + } + return { t: new u8(tr), l: mbt }; +}; +var ln = function(n2, l2, d) { + return n2.s == -1 ? Math.max(ln(n2.l, l2, d + 1), ln(n2.r, l2, d + 1)) : l2[n2.s] = d; +}; +var lc = function(c2) { + var s = c2.length; + while (s && !c2[--s]) + ; + var cl = new u16(++s); + var cli = 0, cln = c2[0], cls = 1; + var w = function(v) { + cl[cli++] = v; + }; + for (var i = 1; i <= s; ++i) { + if (c2[i] == cln && i != s) + ++cls; + else { + if (!cln && cls > 2) { + for (; cls > 138; cls -= 138) + w(32754); + if (cls > 2) { + w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); + cls = 0; + } + } else if (cls > 3) { + w(cln), --cls; + for (; cls > 6; cls -= 6) + w(8304); + if (cls > 2) + w(cls - 3 << 5 | 8208), cls = 0; + } + while (cls--) + w(cln); + cls = 1; + cln = c2[i]; + } + } + return { c: cl.subarray(0, cli), n: s }; +}; +var clen = function(cf, cl) { + var l2 = 0; + for (var i = 0; i < cl.length; ++i) + l2 += cf[i] * cl[i]; + return l2; +}; +var wfblk = function(out, pos, dat) { + var s = dat.length; + var o = shft(pos + 2); + out[o] = s & 255; + out[o + 1] = s >> 8; + out[o + 2] = out[o] ^ 255; + out[o + 3] = out[o + 1] ^ 255; + for (var i = 0; i < s; ++i) + out[o + i + 4] = dat[i]; + return (o + 4 + s) * 8; +}; +var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p2) { + wbits(out, p2++, final); + ++lf[256]; + var _a3 = hTree(lf, 15), dlt = _a3.t, mlb = _a3.l; + var _b3 = hTree(df, 15), ddt = _b3.t, mdb = _b3.l; + var _c = lc(dlt), lclt = _c.c, nlc = _c.n; + var _d = lc(ddt), lcdt = _d.c, ndc = _d.n; + var lcfreq = new u16(19); + for (var i = 0; i < lclt.length; ++i) + ++lcfreq[lclt[i] & 31]; + for (var i = 0; i < lcdt.length; ++i) + ++lcfreq[lcdt[i] & 31]; + var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l; + var nlcc = 19; + for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc) + ; + var flen = bl + 5 << 3; + var ftlen = clen(lf, flt) + clen(df, fdt) + eb; + var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]; + if (bs >= 0 && flen <= ftlen && flen <= dtlen) + return wfblk(out, p2, dat.subarray(bs, bs + bl)); + var lm, ll, dm, dl; + wbits(out, p2, 1 + (dtlen < ftlen)), p2 += 2; + if (dtlen < ftlen) { + lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; + var llm = hMap(lct, mlcb, 0); + wbits(out, p2, nlc - 257); + wbits(out, p2 + 5, ndc - 1); + wbits(out, p2 + 10, nlcc - 4); + p2 += 14; + for (var i = 0; i < nlcc; ++i) + wbits(out, p2 + 3 * i, lct[clim[i]]); + p2 += 3 * nlcc; + var lcts = [lclt, lcdt]; + for (var it = 0; it < 2; ++it) { + var clct = lcts[it]; + for (var i = 0; i < clct.length; ++i) { + var len = clct[i] & 31; + wbits(out, p2, llm[len]), p2 += lct[len]; + if (len > 15) + wbits(out, p2, clct[i] >> 5 & 127), p2 += clct[i] >> 12; + } + } + } else { + lm = flm, ll = flt, dm = fdm, dl = fdt; + } + for (var i = 0; i < li; ++i) { + var sym = syms[i]; + if (sym > 255) { + var len = sym >> 18 & 31; + wbits16(out, p2, lm[len + 257]), p2 += ll[len + 257]; + if (len > 7) + wbits(out, p2, sym >> 23 & 31), p2 += fleb[len]; + var dst = sym & 31; + wbits16(out, p2, dm[dst]), p2 += dl[dst]; + if (dst > 3) + wbits16(out, p2, sym >> 5 & 8191), p2 += fdeb[dst]; + } else { + wbits16(out, p2, lm[sym]), p2 += ll[sym]; + } + } + wbits16(out, p2, lm[256]); + return p2 + ll[256]; +}; +var deo = new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); +var et = new u8(0); +var dflt = function(dat, lvl, plvl, pre, post2, st) { + var s = st.z || dat.length; + var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post2); + var w = o.subarray(pre, o.length - post2); + var lst = st.l; + var pos = (st.r || 0) & 7; + if (lvl) { + if (pos) + w[0] = st.r >> 3; + var opt = deo[lvl - 1]; + var n2 = opt >> 13, c2 = opt & 8191; + var msk_1 = (1 << plvl) - 1; + var prev = st.p || new u16(32768), head2 = st.h || new u16(msk_1 + 1); + var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; + var hsh = function(i2) { + return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1; + }; + var syms = new i32(25e3); + var lf = new u16(288), df = new u16(32); + var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0; + for (; i + 2 < s; ++i) { + var hv = hsh(i); + var imod = i & 32767, pimod = head2[hv]; + prev[imod] = pimod; + head2[hv] = imod; + if (wi <= i) { + var rem = s - i; + if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) { + pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); + li = lc_1 = eb = 0, bs = i; + for (var j = 0; j < 286; ++j) + lf[j] = 0; + for (var j = 0; j < 30; ++j) + df[j] = 0; + } + var l2 = 2, d = 0, ch_1 = c2, dif = imod - pimod & 32767; + if (rem > 2 && hv == hsh(i - dif)) { + var maxn = Math.min(n2, rem) - 1; + var maxd = Math.min(32767, i); + var ml = Math.min(258, rem); + while (dif <= maxd && --ch_1 && imod != pimod) { + if (dat[i + l2] == dat[i + l2 - dif]) { + var nl = 0; + for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl) + ; + if (nl > l2) { + l2 = nl, d = dif; + if (nl > maxn) + break; + var mmd = Math.min(dif, nl - 2); + var md = 0; + for (var j = 0; j < mmd; ++j) { + var ti = i - dif + j & 32767; + var pti = prev[ti]; + var cd = ti - pti & 32767; + if (cd > md) + md = cd, pimod = ti; + } + } + } + imod = pimod, pimod = prev[imod]; + dif += imod - pimod & 32767; + } + } + if (d) { + syms[li++] = 268435456 | revfl[l2] << 18 | revfd[d]; + var lin = revfl[l2] & 31, din = revfd[d] & 31; + eb += fleb[lin] + fdeb[din]; + ++lf[257 + lin]; + ++df[din]; + wi = i + l2; + ++lc_1; + } else { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + } + } + for (i = Math.max(i, wi); i < s; ++i) { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); + if (!lst) { + st.r = pos & 7 | w[pos / 8 | 0] << 3; + pos -= 7; + st.h = head2, st.p = prev, st.i = i, st.w = wi; + } + } else { + for (var i = st.w || 0; i < s + lst; i += 65535) { + var e = i + 65535; + if (e >= s) { + w[pos / 8 | 0] = lst; + e = s; + } + pos = wfblk(w, pos + 1, dat.subarray(i, e)); + } + st.i = s; + } + return slc(o, 0, pre + shft(pos) + post2); +}; +var crct = function() { + var t3 = new Int32Array(256); + for (var i = 0; i < 256; ++i) { + var c2 = i, k2 = 9; + while (--k2) + c2 = (c2 & 1 && -306674912) ^ c2 >>> 1; + t3[i] = c2; + } + return t3; +}(); +var crc = function() { + var c2 = -1; + return { + p: function(d) { + var cr = c2; + for (var i = 0; i < d.length; ++i) + cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8; + c2 = cr; + }, + d: function() { + return ~c2; + } + }; +}; +var adler = function() { + var a2 = 1, b3 = 0; + return { + p: function(d) { + var n2 = a2, m = b3; + var l2 = d.length | 0; + for (var i = 0; i != l2; ) { + var e = Math.min(i + 2655, l2); + for (; i < e; ++i) + m += n2 += d[i]; + n2 = (n2 & 65535) + 15 * (n2 >> 16), m = (m & 65535) + 15 * (m >> 16); + } + a2 = n2, b3 = m; + }, + d: function() { + a2 %= 65521, b3 %= 65521; + return (a2 & 255) << 24 | (a2 & 65280) << 8 | (b3 & 255) << 8 | b3 >> 8; + } + }; +}; +var dopt = function(dat, opt, pre, post2, st) { + if (!st) { + st = { l: 1 }; + if (opt.dictionary) { + var dict = opt.dictionary.subarray(-32768); + var newDat = new u8(dict.length + dat.length); + newDat.set(dict); + newDat.set(dat, dict.length); + dat = newDat; + st.w = dict.length; + } + } + return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post2, st); +}; +var mrg = function(a2, b3) { + var o = {}; + for (var k2 in a2) + o[k2] = a2[k2]; + for (var k2 in b3) + o[k2] = b3[k2]; + return o; +}; +var wcln = function(fn, fnStr, td2) { + var dt2 = fn(); + var st = fn.toString(); + var ks = st.slice(st.indexOf("[") + 1, st.lastIndexOf("]")).replace(/\s+/g, "").split(","); + for (var i = 0; i < dt2.length; ++i) { + var v = dt2[i], k2 = ks[i]; + if (typeof v == "function") { + fnStr += ";" + k2 + "="; + var st_1 = v.toString(); + if (v.prototype) { + if (st_1.indexOf("[native code]") != -1) { + var spInd = st_1.indexOf(" ", 8) + 1; + fnStr += st_1.slice(spInd, st_1.indexOf("(", spInd)); + } else { + fnStr += st_1; + for (var t3 in v.prototype) + fnStr += ";" + k2 + ".prototype." + t3 + "=" + v.prototype[t3].toString(); + } + } else + fnStr += st_1; + } else + td2[k2] = v; + } + return fnStr; +}; +var ch = []; +var cbfs = function(v) { + var tl = []; + for (var k2 in v) { + if (v[k2].buffer) { + tl.push((v[k2] = new v[k2].constructor(v[k2])).buffer); + } + } + return tl; +}; +var wrkr = function(fns, init, id, cb) { + if (!ch[id]) { + var fnStr = "", td_1 = {}, m = fns.length - 1; + for (var i = 0; i < m; ++i) + fnStr = wcln(fns[i], fnStr, td_1); + ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 }; + } + var td2 = mrg({}, ch[id].e); + return wk(ch[id].c + ";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=" + init.toString() + "}", id, td2, cbfs(td2), cb); +}; +var bInflt = function() { + return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; +}; +var bDflt = function() { + return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; +}; +var guze = function() { + return [gzs, gzl]; +}; +var zule = function() { + return [zls]; +}; +var pbf = function(msg) { + return postMessage(msg, [msg.buffer]); +}; +var gopt = function(o) { + return o && { + out: o.size && new u8(o.size), + dictionary: o.dictionary + }; +}; +var astrm = function(strm) { + strm.ondata = function(dat, final) { + return postMessage([dat, final], [dat.buffer]); + }; + return function(ev) { + if (ev.data.length) { + strm.push(ev.data[0], ev.data[1]); + postMessage([ev.data[0].length]); + } else + strm.flush(); + }; +}; +var astrmify = function(fns, strm, opts, init, id, flush, ext) { + var t3; + var w = wrkr(fns, init, id, function(err2, dat) { + if (err2) + w.terminate(), strm.ondata.call(strm, err2); + else if (!Array.isArray(dat)) + ext(dat); + else if (dat.length == 1) { + strm.queuedSize -= dat[0]; + if (strm.ondrain) + strm.ondrain(dat[0]); + } else { + if (dat[1]) + w.terminate(); + strm.ondata.call(strm, err2, dat[0], dat[1]); + } + }); + w.postMessage(opts); + strm.queuedSize = 0; + strm.push = function(d, f) { + if (!strm.ondata) + err(5); + if (t3) + strm.ondata(err(4, 0, 1), null, !!f); + strm.queuedSize += d.length; + w.postMessage([d, t3 = f], [d.buffer]); + }; + strm.terminate = function() { + w.terminate(); + }; + if (flush) { + strm.flush = function() { + w.postMessage([]); + }; + } +}; +var b2 = function(d, b3) { + return d[b3] | d[b3 + 1] << 8; +}; +var b4 = function(d, b3) { + return (d[b3] | d[b3 + 1] << 8 | d[b3 + 2] << 16 | d[b3 + 3] << 24) >>> 0; +}; +var b8 = function(d, b3) { + return b4(d, b3) + b4(d, b3 + 4) * 4294967296; +}; +var wbytes = function(d, b3, v) { + for (; v; ++b3) + d[b3] = v, v >>>= 8; +}; +var gzh = function(c2, o) { + var fn = o.filename; + c2[0] = 31, c2[1] = 139, c2[2] = 8, c2[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c2[9] = 3; + if (o.mtime != 0) + wbytes(c2, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3)); + if (fn) { + c2[3] = 8; + for (var i = 0; i <= fn.length; ++i) + c2[i + 10] = fn.charCodeAt(i); + } +}; +var gzs = function(d) { + if (d[0] != 31 || d[1] != 139 || d[2] != 8) + err(6, "invalid gzip data"); + var flg = d[3]; + var st = 10; + if (flg & 4) + st += (d[10] | d[11] << 8) + 2; + for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) + ; + return st + (flg & 2); +}; +var gzl = function(d) { + var l2 = d.length; + return (d[l2 - 4] | d[l2 - 3] << 8 | d[l2 - 2] << 16 | d[l2 - 1] << 24) >>> 0; +}; +var gzhl = function(o) { + return 10 + (o.filename ? o.filename.length + 1 : 0); +}; +var zlh = function(c2, o) { + var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2; + c2[0] = 120, c2[1] = fl2 << 6 | (o.dictionary && 32); + c2[1] |= 31 - (c2[0] << 8 | c2[1]) % 31; + if (o.dictionary) { + var h = adler(); + h.p(o.dictionary); + wbytes(c2, 2, h.d()); + } +}; +var zls = function(d, dict) { + if ((d[0] & 15) != 8 || d[0] >> 4 > 7 || (d[0] << 8 | d[1]) % 31) + err(6, "invalid zlib data"); + if ((d[1] >> 5 & 1) == +!dict) + err(6, "invalid zlib data: " + (d[1] & 32 ? "need" : "unexpected") + " dictionary"); + return (d[1] >> 3 & 4) + 2; +}; +function StrmOpt(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + return opts; +} +var Deflate = function() { + function Deflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + this.o = opts || {}; + this.s = { l: 0, i: 32768, w: 32768, z: 32768 }; + this.b = new u8(98304); + if (this.o.dictionary) { + var dict = this.o.dictionary.subarray(-32768); + this.b.set(dict, 32768 - dict.length); + this.s.i = 32768 - dict.length; + } + } + Deflate2.prototype.p = function(c2, f) { + this.ondata(dopt(c2, this.o, 0, 0, this.s), f); + }; + Deflate2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + var endLen = chunk.length + this.s.z; + if (endLen > this.b.length) { + if (endLen > 2 * this.b.length - 32768) { + var newBuf = new u8(endLen & -32768); + newBuf.set(this.b.subarray(0, this.s.z)); + this.b = newBuf; + } + var split = this.b.length - this.s.z; + this.b.set(chunk.subarray(0, split), this.s.z); + this.s.z = this.b.length; + this.p(this.b, false); + this.b.set(this.b.subarray(-32768)); + this.b.set(chunk.subarray(split), 32768); + this.s.z = chunk.length - split + 32768; + this.s.i = 32766, this.s.w = 32768; + } else { + this.b.set(chunk, this.s.z); + this.s.z += chunk.length; + } + this.s.l = final & 1; + if (this.s.z > this.s.w + 8191 || final) { + this.p(this.b, final || false); + this.s.w = this.s.i, this.s.i -= 2; + } + }; + Deflate2.prototype.flush = function() { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + this.p(this.b, false); + this.s.w = this.s.i, this.s.i -= 2; + }; + return Deflate2; +}(); +var AsyncDeflate = /* @__PURE__ */ function() { + function AsyncDeflate2(opts, cb) { + astrmify([ + bDflt, + function() { + return [astrm, Deflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Deflate(ev.data); + onmessage = astrm(strm); + }, 6, 1); + } + return AsyncDeflate2; +}(); +function deflateSync(data2, opts) { + return dopt(data2, opts || {}, 0, 0); +} +var Inflate = function() { + function Inflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768); + this.s = { i: 0, b: dict ? dict.length : 0 }; + this.o = new u8(32768); + this.p = new u8(0); + if (dict) + this.o.set(dict); + } + Inflate2.prototype.e = function(c2) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + if (!this.p.length) + this.p = c2; + else if (c2.length) { + var n2 = new u8(this.p.length + c2.length); + n2.set(this.p), n2.set(c2, this.p.length), this.p = n2; + } + }; + Inflate2.prototype.c = function(final) { + this.s.i = +(this.d = final || false); + var bts = this.s.b; + var dt2 = inflt(this.p, this.s, this.o); + this.ondata(slc(dt2, bts, this.s.b), this.d); + this.o = slc(dt2, this.s.b - 32768), this.s.b = this.o.length; + this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }; + Inflate2.prototype.push = function(chunk, final) { + this.e(chunk), this.c(final); + }; + return Inflate2; +}(); +var AsyncInflate = /* @__PURE__ */ function() { + function AsyncInflate2(opts, cb) { + astrmify([ + bInflt, + function() { + return [astrm, Inflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Inflate(ev.data); + onmessage = astrm(strm); + }, 7, 0); + } + return AsyncInflate2; +}(); +function inflateSync(data2, opts) { + return inflt(data2, { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +var Gzip = function() { + function Gzip2(opts, cb) { + this.c = crc(); + this.l = 0; + this.v = 1; + Deflate.call(this, opts, cb); + } + Gzip2.prototype.push = function(chunk, final) { + this.c.p(chunk); + this.l += chunk.length; + Deflate.prototype.push.call(this, chunk, final); + }; + Gzip2.prototype.p = function(c2, f) { + var raw = dopt(c2, this.o, this.v && gzhl(this.o), f && 8, this.s); + if (this.v) + gzh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l); + this.ondata(raw, f); + }; + Gzip2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Gzip2; +}(); +var Gunzip = function() { + function Gunzip2(opts, cb) { + this.v = 1; + this.r = 0; + Inflate.call(this, opts, cb); + } + Gunzip2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + this.r += chunk.length; + if (this.v) { + var p2 = this.p.subarray(this.v - 1); + var s = p2.length > 3 ? gzs(p2) : 4; + if (s > p2.length) { + if (!final) + return; + } else if (this.v > 1 && this.onmember) { + this.onmember(this.r - p2.length); + } + this.p = p2.subarray(s), this.v = 0; + } + Inflate.prototype.c.call(this, final); + if (this.s.f && !this.s.l && !final) { + this.v = shft(this.s.p) + 9; + this.s = { i: 0 }; + this.o = new u8(0); + this.push(new u8(0), final); + } + }; + return Gunzip2; +}(); +var AsyncGunzip = /* @__PURE__ */ function() { + function AsyncGunzip2(opts, cb) { + var _this = this; + astrmify([ + bInflt, + guze, + function() { + return [astrm, Inflate, Gunzip]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Gunzip(ev.data); + strm.onmember = function(offset) { + return postMessage(offset); + }; + onmessage = astrm(strm); + }, 9, 0, function(offset) { + return _this.onmember && _this.onmember(offset); + }); + } + return AsyncGunzip2; +}(); +function gunzipSync(data2, opts) { + var st = gzs(data2); + if (st + 8 > data2.length) + err(6, "invalid gzip data"); + return inflt(data2.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data2)), opts && opts.dictionary); +} +var Zlib = function() { + function Zlib2(opts, cb) { + this.c = adler(); + this.v = 1; + Deflate.call(this, opts, cb); + } + Zlib2.prototype.push = function(chunk, final) { + this.c.p(chunk); + Deflate.prototype.push.call(this, chunk, final); + }; + Zlib2.prototype.p = function(c2, f) { + var raw = dopt(c2, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s); + if (this.v) + zlh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 4, this.c.d()); + this.ondata(raw, f); + }; + Zlib2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Zlib2; +}(); +function zlibSync(data2, opts) { + if (!opts) + opts = {}; + var a2 = adler(); + a2.p(data2); + var d = dopt(data2, opts, opts.dictionary ? 6 : 2, 4); + return zlh(d, opts), wbytes(d, d.length - 4, a2.d()), d; +} +var Unzlib = function() { + function Unzlib2(opts, cb) { + Inflate.call(this, opts, cb); + this.v = opts && opts.dictionary ? 2 : 1; + } + Unzlib2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + if (this.v) { + if (this.p.length < 6 && !final) + return; + this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0; + } + if (final) { + if (this.p.length < 4) + err(6, "invalid zlib data"); + this.p = this.p.subarray(0, -4); + } + Inflate.prototype.c.call(this, final); + }; + return Unzlib2; +}(); +var AsyncUnzlib = /* @__PURE__ */ function() { + function AsyncUnzlib2(opts, cb) { + astrmify([ + bInflt, + zule, + function() { + return [astrm, Inflate, Unzlib]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Unzlib(ev.data); + onmessage = astrm(strm); + }, 11, 0); + } + return AsyncUnzlib2; +}(); +function unzlibSync(data2, opts) { + return inflt(data2.subarray(zls(data2, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +var Decompress = function() { + function Decompress2(opts, cb) { + this.o = StrmOpt.call(this, opts, cb) || {}; + this.G = Gunzip; + this.I = Inflate; + this.Z = Unzlib; + } + Decompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(dat, final) { + _this.ondata(dat, final); + }; + }; + Decompress2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (!this.s) { + if (this.p && this.p.length) { + var n2 = new u8(this.p.length + chunk.length); + n2.set(this.p), n2.set(chunk, this.p.length); + } else + this.p = chunk; + if (this.p.length > 2) { + this.s = this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8 ? new this.G(this.o) : (this.p[0] & 15) != 8 || this.p[0] >> 4 > 7 || (this.p[0] << 8 | this.p[1]) % 31 ? new this.I(this.o) : new this.Z(this.o); + this.i(); + this.s.push(this.p, final); + this.p = null; + } + } else + this.s.push(chunk, final); + }; + return Decompress2; +}(); +var AsyncDecompress = function() { + function AsyncDecompress2(opts, cb) { + Decompress.call(this, opts, cb); + this.queuedSize = 0; + this.G = AsyncGunzip; + this.I = AsyncInflate; + this.Z = AsyncUnzlib; + } + AsyncDecompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(err2, dat, final) { + _this.ondata(err2, dat, final); + }; + this.s.ondrain = function(size2) { + _this.queuedSize -= size2; + if (_this.ondrain) + _this.ondrain(size2); + }; + }; + AsyncDecompress2.prototype.push = function(chunk, final) { + this.queuedSize += chunk.length; + Decompress.prototype.push.call(this, chunk, final); + }; + return AsyncDecompress2; +}(); +var fltn = function(d, p2, t3, o) { + for (var k2 in d) { + var val2 = d[k2], n2 = p2 + k2, op = o; + if (Array.isArray(val2)) + op = mrg(o, val2[1]), val2 = val2[0]; + if (val2 instanceof u8) + t3[n2] = [val2, op]; + else { + t3[n2 += "/"] = [new u8(0), op]; + fltn(val2, n2, t3, o); + } + } +}; +var te = typeof TextEncoder != "undefined" && new TextEncoder(); +var td = typeof TextDecoder != "undefined" && new TextDecoder(); +var tds = 0; +try { + td.decode(et, { stream: true }); + tds = 1; +} catch (e) { +} +var dutf8 = function(d) { + for (var r = "", i = 0; ; ) { + var c2 = d[i++]; + var eb = (c2 > 127) + (c2 > 223) + (c2 > 239); + if (i + eb > d.length) + return { s: r, r: slc(d, i - 1) }; + if (!eb) + r += String.fromCharCode(c2); + else if (eb == 3) { + c2 = ((c2 & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | d[i++] & 63) - 65536, r += String.fromCharCode(55296 | c2 >> 10, 56320 | c2 & 1023); + } else if (eb & 1) + r += String.fromCharCode((c2 & 31) << 6 | d[i++] & 63); + else + r += String.fromCharCode((c2 & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63); + } +}; +var DecodeUTF8 = function() { + function DecodeUTF82(cb) { + this.ondata = cb; + if (tds) + this.t = new TextDecoder(); + else + this.p = et; + } + DecodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + final = !!final; + if (this.t) { + this.ondata(this.t.decode(chunk, { stream: true }), final); + if (final) { + if (this.t.decode().length) + err(8); + this.t = null; + } + return; + } + if (!this.p) + err(4); + var dat = new u8(this.p.length + chunk.length); + dat.set(this.p); + dat.set(chunk, this.p.length); + var _a3 = dutf8(dat), s = _a3.s, r = _a3.r; + if (final) { + if (r.length) + err(8); + this.p = null; + } else + this.p = r; + this.ondata(s, final); + }; + return DecodeUTF82; +}(); +var EncodeUTF8 = function() { + function EncodeUTF82(cb) { + this.ondata = cb; + } + EncodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + this.ondata(strToU8(chunk), this.d = final || false); + }; + return EncodeUTF82; +}(); +function strToU8(str, latin1) { + if (latin1) { + var ar_1 = new u8(str.length); + for (var i = 0; i < str.length; ++i) + ar_1[i] = str.charCodeAt(i); + return ar_1; + } + if (te) + return te.encode(str); + var l2 = str.length; + var ar = new u8(str.length + (str.length >> 1)); + var ai = 0; + var w = function(v) { + ar[ai++] = v; + }; + for (var i = 0; i < l2; ++i) { + if (ai + 5 > ar.length) { + var n2 = new u8(ai + 8 + (l2 - i << 1)); + n2.set(ar); + ar = n2; + } + var c2 = str.charCodeAt(i); + if (c2 < 128 || latin1) + w(c2); + else if (c2 < 2048) + w(192 | c2 >> 6), w(128 | c2 & 63); + else if (c2 > 55295 && c2 < 57344) + c2 = 65536 + (c2 & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c2 >> 18), w(128 | c2 >> 12 & 63), w(128 | c2 >> 6 & 63), w(128 | c2 & 63); + else + w(224 | c2 >> 12), w(128 | c2 >> 6 & 63), w(128 | c2 & 63); + } + return slc(ar, 0, ai); +} +function strFromU8(dat, latin1) { + if (latin1) { + var r = ""; + for (var i = 0; i < dat.length; i += 16384) + r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384)); + return r; + } else if (td) { + return td.decode(dat); + } else { + var _a3 = dutf8(dat), s = _a3.s, r = _a3.r; + if (r.length) + err(8); + return s; + } +} +var dbf = function(l2) { + return l2 == 1 ? 3 : l2 < 6 ? 2 : l2 == 9 ? 1 : 0; +}; +var slzh = function(d, b3) { + return b3 + 30 + b2(d, b3 + 26) + b2(d, b3 + 28); +}; +var zh = function(d, b3, z) { + var fnl = b2(d, b3 + 28), fn = strFromU8(d.subarray(b3 + 46, b3 + 46 + fnl), !(b2(d, b3 + 8) & 2048)), es = b3 + 46 + fnl, bs = b4(d, b3 + 20); + var _a3 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b3 + 24), b4(d, b3 + 42)], sc = _a3[0], su = _a3[1], off = _a3[2]; + return [b2(d, b3 + 10), sc, su, fn, es + b2(d, b3 + 30) + b2(d, b3 + 32), off]; +}; +var z64e = function(d, b3) { + for (; b2(d, b3) != 1; b3 += 4 + b2(d, b3 + 2)) + ; + return [b8(d, b3 + 12), b8(d, b3 + 4), b8(d, b3 + 20)]; +}; +var exfl = function(ex) { + var le = 0; + if (ex) { + for (var k2 in ex) { + var l2 = ex[k2].length; + if (l2 > 65535) + err(9); + le += l2 + 4; + } + } + return le; +}; +var wzh = function(d, b3, f, fn, u, c2, ce2, co) { + var fl2 = fn.length, ex = f.extra, col = co && co.length; + var exl = exfl(ex); + wbytes(d, b3, ce2 != null ? 33639248 : 67324752), b3 += 4; + if (ce2 != null) + d[b3++] = 20, d[b3++] = f.os; + d[b3] = 20, b3 += 2; + d[b3++] = f.flag << 1 | (c2 < 0 && 8), d[b3++] = u && 8; + d[b3++] = f.compression & 255, d[b3++] = f.compression >> 8; + var dt2 = new Date(f.mtime == null ? Date.now() : f.mtime), y2 = dt2.getFullYear() - 1980; + if (y2 < 0 || y2 > 119) + err(10); + wbytes(d, b3, y2 << 25 | dt2.getMonth() + 1 << 21 | dt2.getDate() << 16 | dt2.getHours() << 11 | dt2.getMinutes() << 5 | dt2.getSeconds() >> 1), b3 += 4; + if (c2 != -1) { + wbytes(d, b3, f.crc); + wbytes(d, b3 + 4, c2 < 0 ? -c2 - 2 : c2); + wbytes(d, b3 + 8, f.size); + } + wbytes(d, b3 + 12, fl2); + wbytes(d, b3 + 14, exl), b3 += 16; + if (ce2 != null) { + wbytes(d, b3, col); + wbytes(d, b3 + 6, f.attrs); + wbytes(d, b3 + 10, ce2), b3 += 14; + } + d.set(fn, b3); + b3 += fl2; + if (exl) { + for (var k2 in ex) { + var exf = ex[k2], l2 = exf.length; + wbytes(d, b3, +k2); + wbytes(d, b3 + 2, l2); + d.set(exf, b3 + 4), b3 += 4 + l2; + } + } + if (col) + d.set(co, b3), b3 += col; + return b3; +}; +var wzf = function(o, b3, c2, d, e) { + wbytes(o, b3, 101010256); + wbytes(o, b3 + 8, c2); + wbytes(o, b3 + 10, c2); + wbytes(o, b3 + 12, d); + wbytes(o, b3 + 16, e); +}; +var ZipPassThrough = function() { + function ZipPassThrough2(filename) { + this.filename = filename; + this.c = crc(); + this.size = 0; + this.compression = 0; + } + ZipPassThrough2.prototype.process = function(chunk, final) { + this.ondata(null, chunk, final); + }; + ZipPassThrough2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + this.c.p(chunk); + this.size += chunk.length; + if (final) + this.crc = this.c.d(); + this.process(chunk, final || false); + }; + return ZipPassThrough2; +}(); +var ZipDeflate = function() { + function ZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new Deflate(opts, function(dat, final) { + _this.ondata(null, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + } + ZipDeflate2.prototype.process = function(chunk, final) { + try { + this.d.push(chunk, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + ZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return ZipDeflate2; +}(); +var AsyncZipDeflate = function() { + function AsyncZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new AsyncDeflate(opts, function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + this.terminate = this.d.terminate; + } + AsyncZipDeflate2.prototype.process = function(chunk, final) { + this.d.push(chunk, final); + }; + AsyncZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return AsyncZipDeflate2; +}(); +var Zip = function() { + function Zip2(cb) { + this.ondata = cb; + this.u = []; + this.d = 1; + } + Zip2.prototype.add = function(file) { + var _this = this; + if (!this.ondata) + err(5); + if (this.d & 2) + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false); + else { + var f = strToU8(file.filename), fl_1 = f.length; + var com = file.comment, o = com && strToU8(com); + var u = fl_1 != file.filename.length || o && com.length != o.length; + var hl_1 = fl_1 + exfl(file.extra) + 30; + if (fl_1 > 65535) + this.ondata(err(11, 0, 1), null, false); + var header = new u8(hl_1); + wzh(header, 0, file, f, u, -1); + var chks_1 = [header]; + var pAll_1 = function() { + for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) { + var chk = chks_2[_i]; + _this.ondata(null, chk, false); + } + chks_1 = []; + }; + var tr_1 = this.d; + this.d = 0; + var ind_1 = this.u.length; + var uf_1 = mrg(file, { + f, + u, + o, + t: function() { + if (file.terminate) + file.terminate(); + }, + r: function() { + pAll_1(); + if (tr_1) { + var nxt = _this.u[ind_1 + 1]; + if (nxt) + nxt.r(); + else + _this.d = 1; + } + tr_1 = 1; + } + }); + var cl_1 = 0; + file.ondata = function(err2, dat, final) { + if (err2) { + _this.ondata(err2, dat, final); + _this.terminate(); + } else { + cl_1 += dat.length; + chks_1.push(dat); + if (final) { + var dd = new u8(16); + wbytes(dd, 0, 134695760); + wbytes(dd, 4, file.crc); + wbytes(dd, 8, cl_1); + wbytes(dd, 12, file.size); + chks_1.push(dd); + uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size; + if (tr_1) + uf_1.r(); + tr_1 = 1; + } else if (tr_1) + pAll_1(); + } + }; + this.u.push(uf_1); + } + }; + Zip2.prototype.end = function() { + var _this = this; + if (this.d & 2) { + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true); + return; + } + if (this.d) + this.e(); + else + this.u.push({ + r: function() { + if (!(_this.d & 1)) + return; + _this.u.splice(-1, 1); + _this.e(); + }, + t: function() { + } + }); + this.d = 3; + }; + Zip2.prototype.e = function() { + var bt = 0, l2 = 0, tl = 0; + for (var _i = 0, _a3 = this.u; _i < _a3.length; _i++) { + var f = _a3[_i]; + tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0); + } + var out = new u8(tl + 22); + for (var _b3 = 0, _c = this.u; _b3 < _c.length; _b3++) { + var f = _c[_b3]; + wzh(out, bt, f, f.f, f.u, -f.c - 2, l2, f.o); + bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l2 += f.b; + } + wzf(out, bt, this.u.length, tl, l2); + this.ondata(null, out, true); + this.d = 2; + }; + Zip2.prototype.terminate = function() { + for (var _i = 0, _a3 = this.u; _i < _a3.length; _i++) { + var f = _a3[_i]; + f.t(); + } + this.d = 2; + }; + return Zip2; +}(); +function zipSync(data2, opts) { + if (!opts) + opts = {}; + var r = {}; + var files = []; + fltn(data2, "", r, opts); + var o = 0; + var tot = 0; + for (var fn in r) { + var _a3 = r[fn], file = _a3[0], p2 = _a3[1]; + var compression = p2.level == 0 ? 0 : 8; + var f = strToU8(fn), s = f.length; + var com = p2.comment, m = com && strToU8(com), ms = m && m.length; + var exl = exfl(p2.extra); + if (s > 65535) + err(11); + var d = compression ? deflateSync(file, p2) : file, l2 = d.length; + var c2 = crc(); + c2.p(file); + files.push(mrg(p2, { + size: file.length, + crc: c2.d(), + c: d, + f, + m, + u: s != fn.length || m && com.length != ms, + o, + compression + })); + o += 30 + s + exl + l2; + tot += 76 + 2 * (s + exl) + (ms || 0) + l2; + } + var out = new u8(tot + 22), oe = o, cdl = tot - o; + for (var i = 0; i < files.length; ++i) { + var f = files[i]; + wzh(out, f.o, f, f.f, f.u, f.c.length); + var badd = 30 + f.f.length + exfl(f.extra); + out.set(f.c, f.o + badd); + wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0); + } + wzf(out, o, files.length, cdl, oe); + return out; +} +var UnzipPassThrough = function() { + function UnzipPassThrough2() { + } + UnzipPassThrough2.prototype.push = function(data2, final) { + this.ondata(null, data2, final); + }; + UnzipPassThrough2.compression = 0; + return UnzipPassThrough2; +}(); +var UnzipInflate = function() { + function UnzipInflate2() { + var _this = this; + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } + UnzipInflate2.prototype.push = function(data2, final) { + try { + this.i.push(data2, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + UnzipInflate2.compression = 8; + return UnzipInflate2; +}(); +var AsyncUnzipInflate = function() { + function AsyncUnzipInflate2(_, sz) { + var _this = this; + if (sz < 32e4) { + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } else { + this.i = new AsyncInflate(function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.terminate = this.i.terminate; + } + } + AsyncUnzipInflate2.prototype.push = function(data2, final) { + if (this.i.terminate) + data2 = slc(data2, 0); + this.i.push(data2, final); + }; + AsyncUnzipInflate2.compression = 8; + return AsyncUnzipInflate2; +}(); +var Unzip = function() { + function Unzip2(cb) { + this.onfile = cb; + this.k = []; + this.o = { + 0: UnzipPassThrough + }; + this.p = et; + } + Unzip2.prototype.push = function(chunk, final) { + var _this = this; + if (!this.onfile) + err(5); + if (!this.p) + err(4); + if (this.c > 0) { + var len = Math.min(this.c, chunk.length); + var toAdd = chunk.subarray(0, len); + this.c -= len; + if (this.d) + this.d.push(toAdd, !this.c); + else + this.k[0].push(toAdd); + chunk = chunk.subarray(len); + if (chunk.length) + return this.push(chunk, final); + } else { + var f = 0, i = 0, is = void 0, buf = void 0; + if (!this.p.length) + buf = chunk; + else if (!chunk.length) + buf = this.p; + else { + buf = new u8(this.p.length + chunk.length); + buf.set(this.p), buf.set(chunk, this.p.length); + } + var l2 = buf.length, oc = this.c, add2 = oc && this.d; + var _loop_2 = function() { + var _a3; + var sig = b4(buf, i); + if (sig == 67324752) { + f = 1, is = i; + this_1.d = null; + this_1.c = 0; + var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28); + if (l2 > i + 30 + fnl + es) { + var chks_3 = []; + this_1.k.unshift(chks_3); + f = 2; + var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22); + var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u); + if (sc_1 == 4294967295) { + _a3 = dd ? [-2] : z64e(buf, i), sc_1 = _a3[0], su_1 = _a3[1]; + } else if (dd) + sc_1 = -1; + i += es; + this_1.c = sc_1; + var d_1; + var file_1 = { + name: fn_1, + compression: cmp_1, + start: function() { + if (!file_1.ondata) + err(5); + if (!sc_1) + file_1.ondata(null, et, true); + else { + var ctr = _this.o[cmp_1]; + if (!ctr) + file_1.ondata(err(14, "unknown compression type " + cmp_1, 1), null, false); + d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1); + d_1.ondata = function(err2, dat3, final2) { + file_1.ondata(err2, dat3, final2); + }; + for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) { + var dat2 = chks_4[_i]; + d_1.push(dat2, false); + } + if (_this.k[0] == chks_3 && _this.c) + _this.d = d_1; + else + d_1.push(et, true); + } + }, + terminate: function() { + if (d_1 && d_1.terminate) + d_1.terminate(); + } + }; + if (sc_1 >= 0) + file_1.size = sc_1, file_1.originalSize = su_1; + this_1.onfile(file_1); + } + return "break"; + } else if (oc) { + if (sig == 134695760) { + is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0; + return "break"; + } else if (sig == 33639248) { + is = i -= 4, f = 3, this_1.c = 0; + return "break"; + } + } + }; + var this_1 = this; + for (; i < l2 - 4; ++i) { + var state_1 = _loop_2(); + if (state_1 === "break") + break; + } + this.p = et; + if (oc < 0) { + var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 134695760 && 4)) : buf.subarray(0, i); + if (add2) + add2.push(dat, !!f); + else + this.k[+(f == 2)].push(dat); + } + if (f & 2) + return this.push(buf.subarray(i), final); + this.p = buf.subarray(i); + } + if (final) { + if (this.c) + err(13); + this.p = null; + } + }; + Unzip2.prototype.register = function(decoder) { + this.o[decoder.compression] = decoder; + }; + return Unzip2; +}(); +function unzipSync(data2, opts) { + var files = {}; + var e = data2.length - 22; + for (; b4(data2, e) != 101010256; --e) { + if (!e || data2.length - e > 65558) + err(13); + } + ; + var c2 = b2(data2, e + 8); + if (!c2) + return {}; + var o = b4(data2, e + 16); + var z = o == 4294967295 || c2 == 65535; + if (z) { + var ze = b4(data2, e - 12); + z = b4(data2, ze) == 101075792; + if (z) { + c2 = b4(data2, ze + 32); + o = b4(data2, ze + 48); + } + } + var fltr = opts && opts.filter; + for (var i = 0; i < c2; ++i) { + var _a3 = zh(data2, o, z), c_2 = _a3[0], sc = _a3[1], su = _a3[2], fn = _a3[3], no = _a3[4], off = _a3[5], b3 = slzh(data2, off); + o = no; + if (!fltr || fltr({ + name: fn, + size: sc, + originalSize: su, + compression: c_2 + })) { + if (!c_2) + files[fn] = slc(data2, b3, b3 + sc); + else if (c_2 == 8) + files[fn] = inflateSync(data2.subarray(b3, b3 + sc), { out: new u8(su) }); + else + err(14, "unknown compression type " + c_2); + } + } + return files; +} + +// node_modules/three/examples/jsm/exporters/EXRExporter.js +var textEncoder = new TextEncoder(); +var NO_COMPRESSION = 0; +var ZIPS_COMPRESSION = 2; +var ZIP_COMPRESSION = 3; +var EXRExporter = class { + parse(arg1, arg2, arg3) { + if (!arg1 || !(arg1.isWebGLRenderer || arg1.isDataTexture)) { + throw Error("EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture."); + } else if (arg1.isWebGLRenderer) { + const renderer2 = arg1, renderTarget = arg2, options = arg3; + supportedRTT(renderTarget); + const info = buildInfoRTT(renderTarget, options), dataBuffer = getPixelData(renderer2, renderTarget, info), rawContentBuffer = reorganizeDataBuffer(dataBuffer, info), chunks = compressData(rawContentBuffer, info); + return fillData(chunks, info); + } else if (arg1.isDataTexture) { + const texture = arg1, options = arg2; + supportedDT(texture); + const info = buildInfoDT(texture, options), dataBuffer = texture.image.data, rawContentBuffer = reorganizeDataBuffer(dataBuffer, info), chunks = compressData(rawContentBuffer, info); + return fillData(chunks, info); + } + } +}; +function supportedRTT(renderTarget) { + if (!renderTarget || !renderTarget.isWebGLRenderTarget) { + throw Error("EXRExporter.parse: Unsupported second parameter, expected instance of WebGLRenderTarget."); + } + if (renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { + throw Error("EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget."); + } + if (renderTarget.texture.type !== FloatType && renderTarget.texture.type !== HalfFloatType) { + throw Error("EXRExporter.parse: Unsupported WebGLRenderTarget texture type."); + } + if (renderTarget.texture.format !== RGBAFormat) { + throw Error("EXRExporter.parse: Unsupported WebGLRenderTarget texture format, expected RGBAFormat."); + } +} +function supportedDT(texture) { + if (texture.type !== FloatType && texture.type !== HalfFloatType) { + throw Error("EXRExporter.parse: Unsupported DataTexture texture type."); + } + if (texture.format !== RGBAFormat) { + throw Error("EXRExporter.parse: Unsupported DataTexture texture format, expected RGBAFormat."); + } + if (!texture.image.data) { + throw Error("EXRExporter.parse: Invalid DataTexture image data."); + } + if (texture.type === FloatType && texture.image.data.constructor.name !== "Float32Array") { + throw Error("EXRExporter.parse: DataTexture image data doesn't match type, expected 'Float32Array'."); + } + if (texture.type === HalfFloatType && texture.image.data.constructor.name !== "Uint16Array") { + throw Error("EXRExporter.parse: DataTexture image data doesn't match type, expected 'Uint16Array'."); + } +} +function buildInfoRTT(renderTarget, options = {}) { + const compressionSizes = { + 0: 1, + 2: 1, + 3: 16 + }; + const WIDTH = renderTarget.width, HEIGHT = renderTarget.height, TYPE = renderTarget.texture.type, FORMAT = renderTarget.texture.format, COMPRESSION = options.compression !== void 0 ? options.compression : ZIP_COMPRESSION, EXPORTER_TYPE = options.type !== void 0 ? options.type : HalfFloatType, OUT_TYPE = EXPORTER_TYPE === FloatType ? 2 : 1, COMPRESSION_SIZE = compressionSizes[COMPRESSION], NUM_CHANNELS = 4; + return { + width: WIDTH, + height: HEIGHT, + type: TYPE, + format: FORMAT, + compression: COMPRESSION, + blockLines: COMPRESSION_SIZE, + dataType: OUT_TYPE, + dataSize: 2 * OUT_TYPE, + numBlocks: Math.ceil(HEIGHT / COMPRESSION_SIZE), + numInputChannels: 4, + numOutputChannels: NUM_CHANNELS + }; +} +function buildInfoDT(texture, options = {}) { + const compressionSizes = { + 0: 1, + 2: 1, + 3: 16 + }; + const WIDTH = texture.image.width, HEIGHT = texture.image.height, TYPE = texture.type, FORMAT = texture.format, COMPRESSION = options.compression !== void 0 ? options.compression : ZIP_COMPRESSION, EXPORTER_TYPE = options.type !== void 0 ? options.type : HalfFloatType, OUT_TYPE = EXPORTER_TYPE === FloatType ? 2 : 1, COMPRESSION_SIZE = compressionSizes[COMPRESSION], NUM_CHANNELS = 4; + return { + width: WIDTH, + height: HEIGHT, + type: TYPE, + format: FORMAT, + compression: COMPRESSION, + blockLines: COMPRESSION_SIZE, + dataType: OUT_TYPE, + dataSize: 2 * OUT_TYPE, + numBlocks: Math.ceil(HEIGHT / COMPRESSION_SIZE), + numInputChannels: 4, + numOutputChannels: NUM_CHANNELS + }; +} +function getPixelData(renderer2, rtt, info) { + let dataBuffer; + if (info.type === FloatType) { + dataBuffer = new Float32Array(info.width * info.height * info.numInputChannels); + } else { + dataBuffer = new Uint16Array(info.width * info.height * info.numInputChannels); + } + renderer2.readRenderTargetPixels(rtt, 0, 0, info.width, info.height, dataBuffer); + return dataBuffer; +} +function reorganizeDataBuffer(inBuffer, info) { + const w = info.width, h = info.height, dec = { r: 0, g: 0, b: 0, a: 0 }, offset = { value: 0 }, cOffset = info.numOutputChannels == 4 ? 1 : 0, getValue = info.type == FloatType ? getFloat32 : getFloat16, setValue = info.dataType == 1 ? setFloat16 : setFloat32, outBuffer = new Uint8Array(info.width * info.height * info.numOutputChannels * info.dataSize), dv = new DataView(outBuffer.buffer); + for (let y2 = 0; y2 < h; ++y2) { + for (let x2 = 0; x2 < w; ++x2) { + const i = y2 * w * 4 + x2 * 4; + const r = getValue(inBuffer, i); + const g2 = getValue(inBuffer, i + 1); + const b3 = getValue(inBuffer, i + 2); + const a2 = getValue(inBuffer, i + 3); + const line2 = (h - y2 - 1) * w * (3 + cOffset) * info.dataSize; + decodeLinear(dec, r, g2, b3, a2); + offset.value = line2 + x2 * info.dataSize; + setValue(dv, dec.a, offset); + offset.value = line2 + cOffset * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.b, offset); + offset.value = line2 + (1 + cOffset) * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.g, offset); + offset.value = line2 + (2 + cOffset) * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.r, offset); + } + } + return outBuffer; +} +function compressData(inBuffer, info) { + let compress, tmpBuffer, sum2 = 0; + const chunks = { data: new Array(), totalSize: 0 }, size2 = info.width * info.numOutputChannels * info.blockLines * info.dataSize; + switch (info.compression) { + case 0: + compress = compressNONE; + break; + case 2: + case 3: + compress = compressZIP; + break; + } + if (info.compression !== 0) { + tmpBuffer = new Uint8Array(size2); + } + for (let i = 0; i < info.numBlocks; ++i) { + const arr = inBuffer.subarray(size2 * i, size2 * (i + 1)); + const block = compress(arr, tmpBuffer); + sum2 += block.length; + chunks.data.push({ dataChunk: block, size: block.length }); + } + chunks.totalSize = sum2; + return chunks; +} +function compressNONE(data2) { + return data2; +} +function compressZIP(data2, tmpBuffer) { + let t1 = 0, t22 = Math.floor((data2.length + 1) / 2), s = 0; + const stop = data2.length - 1; + while (true) { + if (s > stop) break; + tmpBuffer[t1++] = data2[s++]; + if (s > stop) break; + tmpBuffer[t22++] = data2[s++]; + } + let p2 = tmpBuffer[0]; + for (let t3 = 1; t3 < tmpBuffer.length; t3++) { + const d = tmpBuffer[t3] - p2 + (128 + 256); + p2 = tmpBuffer[t3]; + tmpBuffer[t3] = d; + } + const deflate = zlibSync(tmpBuffer); + return deflate; +} +function fillHeader(outBuffer, chunks, info) { + const offset = { value: 0 }; + const dv = new DataView(outBuffer.buffer); + setUint32(dv, 20000630, offset); + setUint32(dv, 2, offset); + setString(dv, "compression", offset); + setString(dv, "compression", offset); + setUint32(dv, 1, offset); + setUint8(dv, info.compression, offset); + setString(dv, "screenWindowCenter", offset); + setString(dv, "v2f", offset); + setUint32(dv, 8, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setString(dv, "screenWindowWidth", offset); + setString(dv, "float", offset); + setUint32(dv, 4, offset); + setFloat32(dv, 1, offset); + setString(dv, "pixelAspectRatio", offset); + setString(dv, "float", offset); + setUint32(dv, 4, offset); + setFloat32(dv, 1, offset); + setString(dv, "lineOrder", offset); + setString(dv, "lineOrder", offset); + setUint32(dv, 1, offset); + setUint8(dv, 0, offset); + setString(dv, "dataWindow", offset); + setString(dv, "box2i", offset); + setUint32(dv, 16, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setUint32(dv, info.width - 1, offset); + setUint32(dv, info.height - 1, offset); + setString(dv, "displayWindow", offset); + setString(dv, "box2i", offset); + setUint32(dv, 16, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setUint32(dv, info.width - 1, offset); + setUint32(dv, info.height - 1, offset); + setString(dv, "channels", offset); + setString(dv, "chlist", offset); + setUint32(dv, info.numOutputChannels * 18 + 1, offset); + setString(dv, "A", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "B", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "G", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "R", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setUint8(dv, 0, offset); + setUint8(dv, 0, offset); + let sum2 = offset.value + info.numBlocks * 8; + for (let i = 0; i < chunks.data.length; ++i) { + setUint64(dv, sum2, offset); + sum2 += chunks.data[i].size + 8; + } +} +function fillData(chunks, info) { + const TableSize = info.numBlocks * 8, HeaderSize = 259 + 18 * info.numOutputChannels, offset = { value: HeaderSize + TableSize }, outBuffer = new Uint8Array(HeaderSize + TableSize + chunks.totalSize + info.numBlocks * 8), dv = new DataView(outBuffer.buffer); + fillHeader(outBuffer, chunks, info); + for (let i = 0; i < chunks.data.length; ++i) { + const data2 = chunks.data[i].dataChunk; + const size2 = chunks.data[i].size; + setUint32(dv, i * info.blockLines, offset); + setUint32(dv, size2, offset); + outBuffer.set(data2, offset.value); + offset.value += size2; + } + return outBuffer; +} +function decodeLinear(dec, r, g2, b3, a2) { + dec.r = r; + dec.g = g2; + dec.b = b3; + dec.a = a2; +} +function setUint8(dv, value2, offset) { + dv.setUint8(offset.value, value2); + offset.value += 1; +} +function setUint32(dv, value2, offset) { + dv.setUint32(offset.value, value2, true); + offset.value += 4; +} +function setFloat16(dv, value2, offset) { + dv.setUint16(offset.value, DataUtils.toHalfFloat(value2), true); + offset.value += 2; +} +function setFloat32(dv, value2, offset) { + dv.setFloat32(offset.value, value2, true); + offset.value += 4; +} +function setUint64(dv, value2, offset) { + dv.setBigUint64(offset.value, BigInt(value2), true); + offset.value += 8; +} +function setString(dv, string, offset) { + const tmp = textEncoder.encode(string + "\0"); + for (let i = 0; i < tmp.length; ++i) { + setUint8(dv, tmp[i], offset); + } +} +function decodeFloat16(binary) { + const exponent = (binary & 31744) >> 10, fraction = binary & 1023; + return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); +} +function getFloat16(arr, i) { + return decodeFloat16(arr[i]); +} +function getFloat32(arr, i) { + return arr[i]; +} + +// node_modules/three/examples/jsm/utils/TextureUtils.js +var _renderer; +var fullscreenQuadGeometry; +var fullscreenQuadMaterial; +var fullscreenQuad; +function decompress(texture, maxTextureSize = Infinity, renderer2 = null) { + if (!fullscreenQuadGeometry) fullscreenQuadGeometry = new PlaneGeometry(2, 2, 1, 1); + if (!fullscreenQuadMaterial) fullscreenQuadMaterial = new ShaderMaterial({ + uniforms: { blitTexture: new Uniform(texture) }, + vertexShader: ` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = vec4(position.xy * 1.0,0.,.999999); + }`, + fragmentShader: ` + uniform sampler2D blitTexture; + varying vec2 vUv; + + void main(){ + gl_FragColor = vec4(vUv.xy, 0, 1); + + #ifdef IS_SRGB + gl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) ); + #else + gl_FragColor = texture2D( blitTexture, vUv); + #endif + }` + }); + fullscreenQuadMaterial.uniforms.blitTexture.value = texture; + fullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace; + fullscreenQuadMaterial.needsUpdate = true; + if (!fullscreenQuad) { + fullscreenQuad = new Mesh(fullscreenQuadGeometry, fullscreenQuadMaterial); + fullscreenQuad.frustumCulled = false; + } + const _camera2 = new PerspectiveCamera(); + const _scene = new Scene(); + _scene.add(fullscreenQuad); + if (renderer2 === null) { + renderer2 = _renderer = new WebGLRenderer({ antialias: false }); + } + const width2 = Math.min(texture.image.width, maxTextureSize); + const height2 = Math.min(texture.image.height, maxTextureSize); + renderer2.setSize(width2, height2); + renderer2.clear(); + renderer2.render(_scene, _camera2); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + canvas.width = width2; + canvas.height = height2; + context.drawImage(renderer2.domElement, 0, 0, width2, height2); + const readableTexture = new CanvasTexture(canvas); + readableTexture.minFilter = texture.minFilter; + readableTexture.magFilter = texture.magFilter; + readableTexture.wrapS = texture.wrapS; + readableTexture.wrapT = texture.wrapT; + readableTexture.name = texture.name; + if (_renderer) { + _renderer.forceContextLoss(); + _renderer.dispose(); + _renderer = null; + } + return readableTexture; +} + +// node_modules/three/examples/jsm/exporters/GLTFExporter.js +var KHR_mesh_quantization_ExtraAttrTypes = { + POSITION: [ + "byte", + "byte normalized", + "unsigned byte", + "unsigned byte normalized", + "short", + "short normalized", + "unsigned short", + "unsigned short normalized" + ], + NORMAL: [ + "byte normalized", + "short normalized" + ], + TANGENT: [ + "byte normalized", + "short normalized" + ], + TEXCOORD: [ + "byte", + "byte normalized", + "unsigned byte", + "short", + "short normalized", + "unsigned short" + ] +}; +var GLTFExporter = class { + constructor() { + this.pluginCallbacks = []; + this.register(function(writer) { + return new GLTFLightExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsUnlitExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsTransmissionExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsVolumeExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsIorExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsSpecularExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsClearcoatExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsDispersionExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsIridescenceExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsSheenExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsAnisotropyExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsEmissiveStrengthExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsBumpExtension(writer); + }); + this.register(function(writer) { + return new GLTFMeshGpuInstancing(writer); + }); + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) { + this.pluginCallbacks.push(callback); + } + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) { + this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + } + return this; + } + /** + * Parse scenes and generate GLTF output + * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes + * @param {Function} onDone Callback on completed + * @param {Function} onError Callback on errors + * @param {Object} options options + */ + parse(input, onDone, onError, options) { + const writer = new GLTFWriter(); + const plugins = []; + for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) { + plugins.push(this.pluginCallbacks[i](writer)); + } + writer.setPlugins(plugins); + writer.write(input, onDone, options).catch(onError); + } + parseAsync(input, options) { + const scope = this; + return new Promise(function(resolve, reject2) { + scope.parse(input, resolve, reject2, options); + }); + } +}; +var WEBGL_CONSTANTS = { + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + BYTE: 5120, + UNSIGNED_BYTE: 5121, + SHORT: 5122, + UNSIGNED_SHORT: 5123, + INT: 5124, + UNSIGNED_INT: 5125, + FLOAT: 5126, + ARRAY_BUFFER: 34962, + ELEMENT_ARRAY_BUFFER: 34963, + NEAREST: 9728, + LINEAR: 9729, + NEAREST_MIPMAP_NEAREST: 9984, + LINEAR_MIPMAP_NEAREST: 9985, + NEAREST_MIPMAP_LINEAR: 9986, + LINEAR_MIPMAP_LINEAR: 9987, + CLAMP_TO_EDGE: 33071, + MIRRORED_REPEAT: 33648, + REPEAT: 10497 +}; +var KHR_MESH_QUANTIZATION = "KHR_mesh_quantization"; +var THREE_TO_WEBGL = {}; +THREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS.NEAREST; +THREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST; +THREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR; +THREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS.LINEAR; +THREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST; +THREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR; +THREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE; +THREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS.REPEAT; +THREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT; +var PATH_PROPERTIES = { + scale: "scale", + position: "translation", + quaternion: "rotation", + morphTargetInfluences: "weights" +}; +var DEFAULT_SPECULAR_COLOR = new Color(); +var GLB_HEADER_BYTES = 12; +var GLB_HEADER_MAGIC = 1179937895; +var GLB_VERSION = 2; +var GLB_CHUNK_PREFIX_BYTES = 8; +var GLB_CHUNK_TYPE_JSON = 1313821514; +var GLB_CHUNK_TYPE_BIN = 5130562; +function equalArray(array1, array2) { + return array1.length === array2.length && array1.every(function(element, index2) { + return element === array2[index2]; + }); +} +function stringToArrayBuffer(text2) { + return new TextEncoder().encode(text2).buffer; +} +function isIdentityMatrix(matrix3) { + return equalArray(matrix3.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); +} +function getMinMax(attribute, start, count) { + const output = { + min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY), + max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY) + }; + for (let i = start; i < start + count; i++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + let value2; + if (attribute.itemSize > 4) { + value2 = attribute.array[i * attribute.itemSize + a2]; + } else { + if (a2 === 0) value2 = attribute.getX(i); + else if (a2 === 1) value2 = attribute.getY(i); + else if (a2 === 2) value2 = attribute.getZ(i); + else if (a2 === 3) value2 = attribute.getW(i); + if (attribute.normalized === true) { + value2 = MathUtils.normalize(value2, attribute.array); + } + } + output.min[a2] = Math.min(output.min[a2], value2); + output.max[a2] = Math.max(output.max[a2], value2); + } + } + return output; +} +function getPaddedBufferSize(bufferSize) { + return Math.ceil(bufferSize / 4) * 4; +} +function getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) { + const paddedLength = getPaddedBufferSize(arrayBuffer.byteLength); + if (paddedLength !== arrayBuffer.byteLength) { + const array = new Uint8Array(paddedLength); + array.set(new Uint8Array(arrayBuffer)); + if (paddingByte !== 0) { + for (let i = arrayBuffer.byteLength; i < paddedLength; i++) { + array[i] = paddingByte; + } + } + return array.buffer; + } + return arrayBuffer; +} +function getCanvas() { + if (typeof document === "undefined" && typeof OffscreenCanvas !== "undefined") { + return new OffscreenCanvas(1, 1); + } + return document.createElement("canvas"); +} +function getToBlobPromise(canvas, mimeType) { + if (canvas.toBlob !== void 0) { + return new Promise((resolve) => canvas.toBlob(resolve, mimeType)); + } + let quality; + if (mimeType === "image/jpeg") { + quality = 0.92; + } else if (mimeType === "image/webp") { + quality = 0.8; + } + return canvas.convertToBlob({ + type: mimeType, + quality + }); +} +var GLTFWriter = class { + constructor() { + this.plugins = []; + this.options = {}; + this.pending = []; + this.buffers = []; + this.byteOffset = 0; + this.buffers = []; + this.nodeMap = /* @__PURE__ */ new Map(); + this.skins = []; + this.extensionsUsed = {}; + this.extensionsRequired = {}; + this.uids = /* @__PURE__ */ new Map(); + this.uid = 0; + this.json = { + asset: { + version: "2.0", + generator: "THREE.GLTFExporter r" + REVISION + } + }; + this.cache = { + meshes: /* @__PURE__ */ new Map(), + attributes: /* @__PURE__ */ new Map(), + attributesNormalized: /* @__PURE__ */ new Map(), + materials: /* @__PURE__ */ new Map(), + textures: /* @__PURE__ */ new Map(), + images: /* @__PURE__ */ new Map() + }; + } + setPlugins(plugins) { + this.plugins = plugins; + } + /** + * Parse scenes and generate GLTF output + * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes + * @param {Function} onDone Callback on completed + * @param {Object} options options + */ + async write(input, onDone, options = {}) { + this.options = Object.assign({ + // default options + binary: false, + trs: false, + onlyVisible: true, + maxTextureSize: Infinity, + animations: [], + includeCustomExtensions: false + }, options); + if (this.options.animations.length > 0) { + this.options.trs = true; + } + this.processInput(input); + await Promise.all(this.pending); + const writer = this; + const buffers = writer.buffers; + const json = writer.json; + options = writer.options; + const extensionsUsed = writer.extensionsUsed; + const extensionsRequired = writer.extensionsRequired; + const blob = new Blob(buffers, { type: "application/octet-stream" }); + const extensionsUsedList = Object.keys(extensionsUsed); + const extensionsRequiredList = Object.keys(extensionsRequired); + if (extensionsUsedList.length > 0) json.extensionsUsed = extensionsUsedList; + if (extensionsRequiredList.length > 0) json.extensionsRequired = extensionsRequiredList; + if (json.buffers && json.buffers.length > 0) json.buffers[0].byteLength = blob.size; + if (options.binary === true) { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + reader.onloadend = function() { + const binaryChunk = getPaddedArrayBuffer(reader.result); + const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); + binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true); + binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true); + const jsonChunk = getPaddedArrayBuffer(stringToArrayBuffer(JSON.stringify(json)), 32); + const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); + jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true); + jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true); + const header = new ArrayBuffer(GLB_HEADER_BYTES); + const headerView = new DataView(header); + headerView.setUint32(0, GLB_HEADER_MAGIC, true); + headerView.setUint32(4, GLB_VERSION, true); + const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength; + headerView.setUint32(8, totalByteLength, true); + const glbBlob = new Blob([ + header, + jsonChunkPrefix, + jsonChunk, + binaryChunkPrefix, + binaryChunk + ], { type: "application/octet-stream" }); + const glbReader = new FileReader(); + glbReader.readAsArrayBuffer(glbBlob); + glbReader.onloadend = function() { + onDone(glbReader.result); + }; + }; + } else { + if (json.buffers && json.buffers.length > 0) { + const reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onloadend = function() { + const base64data = reader.result; + json.buffers[0].uri = base64data; + onDone(json); + }; + } else { + onDone(json); + } + } + } + /** + * Serializes a userData. + * + * @param {THREE.Object3D|THREE.Material} object + * @param {Object} objectDef + */ + serializeUserData(object, objectDef) { + if (Object.keys(object.userData).length === 0) return; + const options = this.options; + const extensionsUsed = this.extensionsUsed; + try { + const json = JSON.parse(JSON.stringify(object.userData)); + if (options.includeCustomExtensions && json.gltfExtensions) { + if (objectDef.extensions === void 0) objectDef.extensions = {}; + for (const extensionName in json.gltfExtensions) { + objectDef.extensions[extensionName] = json.gltfExtensions[extensionName]; + extensionsUsed[extensionName] = true; + } + delete json.gltfExtensions; + } + if (Object.keys(json).length > 0) objectDef.extras = json; + } catch (error) { + console.warn("THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message); + } + } + /** + * Returns ids for buffer attributes. + * @param {Object} object + * @return {Integer} + */ + getUID(attribute, isRelativeCopy = false) { + if (this.uids.has(attribute) === false) { + const uids2 = /* @__PURE__ */ new Map(); + uids2.set(true, this.uid++); + uids2.set(false, this.uid++); + this.uids.set(attribute, uids2); + } + const uids = this.uids.get(attribute); + return uids.get(isRelativeCopy); + } + /** + * Checks if normal attribute values are normalized. + * + * @param {BufferAttribute} normal + * @returns {Boolean} + */ + isNormalizedNormalAttribute(normal) { + const cache = this.cache; + if (cache.attributesNormalized.has(normal)) return false; + const v = new Vector3(); + for (let i = 0, il = normal.count; i < il; i++) { + if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4) return false; + } + return true; + } + /** + * Creates normalized normal buffer attribute. + * + * @param {BufferAttribute} normal + * @returns {BufferAttribute} + * + */ + createNormalizedNormalAttribute(normal) { + const cache = this.cache; + if (cache.attributesNormalized.has(normal)) return cache.attributesNormalized.get(normal); + const attribute = normal.clone(); + const v = new Vector3(); + for (let i = 0, il = attribute.count; i < il; i++) { + v.fromBufferAttribute(attribute, i); + if (v.x === 0 && v.y === 0 && v.z === 0) { + v.setX(1); + } else { + v.normalize(); + } + attribute.setXYZ(i, v.x, v.y, v.z); + } + cache.attributesNormalized.set(normal, attribute); + return attribute; + } + /** + * Applies a texture transform, if present, to the map definition. Requires + * the KHR_texture_transform extension. + * + * @param {Object} mapDef + * @param {THREE.Texture} texture + */ + applyTextureTransform(mapDef, texture) { + let didTransform = false; + const transformDef = {}; + if (texture.offset.x !== 0 || texture.offset.y !== 0) { + transformDef.offset = texture.offset.toArray(); + didTransform = true; + } + if (texture.rotation !== 0) { + transformDef.rotation = texture.rotation; + didTransform = true; + } + if (texture.repeat.x !== 1 || texture.repeat.y !== 1) { + transformDef.scale = texture.repeat.toArray(); + didTransform = true; + } + if (didTransform) { + mapDef.extensions = mapDef.extensions || {}; + mapDef.extensions["KHR_texture_transform"] = transformDef; + this.extensionsUsed["KHR_texture_transform"] = true; + } + } + buildMetalRoughTexture(metalnessMap, roughnessMap) { + if (metalnessMap === roughnessMap) return metalnessMap; + function getEncodingConversion(map2) { + if (map2.colorSpace === SRGBColorSpace) { + return function SRGBToLinear(c2) { + return c2 < 0.04045 ? c2 * 0.0773993808 : Math.pow(c2 * 0.9478672986 + 0.0521327014, 2.4); + }; + } + return function LinearToLinear(c2) { + return c2; + }; + } + console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."); + if (metalnessMap instanceof CompressedTexture) { + metalnessMap = decompress(metalnessMap); + } + if (roughnessMap instanceof CompressedTexture) { + roughnessMap = decompress(roughnessMap); + } + const metalness = metalnessMap ? metalnessMap.image : null; + const roughness = roughnessMap ? roughnessMap.image : null; + const width2 = Math.max(metalness ? metalness.width : 0, roughness ? roughness.width : 0); + const height2 = Math.max(metalness ? metalness.height : 0, roughness ? roughness.height : 0); + const canvas = getCanvas(); + canvas.width = width2; + canvas.height = height2; + const context = canvas.getContext("2d", { + willReadFrequently: true + }); + context.fillStyle = "#00ffff"; + context.fillRect(0, 0, width2, height2); + const composite = context.getImageData(0, 0, width2, height2); + if (metalness) { + context.drawImage(metalness, 0, 0, width2, height2); + const convert = getEncodingConversion(metalnessMap); + const data2 = context.getImageData(0, 0, width2, height2).data; + for (let i = 2; i < data2.length; i += 4) { + composite.data[i] = convert(data2[i] / 256) * 256; + } + } + if (roughness) { + context.drawImage(roughness, 0, 0, width2, height2); + const convert = getEncodingConversion(roughnessMap); + const data2 = context.getImageData(0, 0, width2, height2).data; + for (let i = 1; i < data2.length; i += 4) { + composite.data[i] = convert(data2[i] / 256) * 256; + } + } + context.putImageData(composite, 0, 0); + const reference = metalnessMap || roughnessMap; + const texture = reference.clone(); + texture.source = new Source(canvas); + texture.colorSpace = NoColorSpace; + texture.channel = (metalnessMap || roughnessMap).channel; + if (metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel) { + console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."); + } + return texture; + } + /** + * Process a buffer to append to the default one. + * @param {ArrayBuffer} buffer + * @return {Integer} + */ + processBuffer(buffer) { + const json = this.json; + const buffers = this.buffers; + if (!json.buffers) json.buffers = [{ byteLength: 0 }]; + buffers.push(buffer); + return 0; + } + /** + * Process and generate a BufferView + * @param {BufferAttribute} attribute + * @param {number} componentType + * @param {number} start + * @param {number} count + * @param {number} target (Optional) Target usage of the BufferView + * @return {Object} + */ + processBufferView(attribute, componentType, start, count, target) { + const json = this.json; + if (!json.bufferViews) json.bufferViews = []; + let componentSize; + switch (componentType) { + case WEBGL_CONSTANTS.BYTE: + case WEBGL_CONSTANTS.UNSIGNED_BYTE: + componentSize = 1; + break; + case WEBGL_CONSTANTS.SHORT: + case WEBGL_CONSTANTS.UNSIGNED_SHORT: + componentSize = 2; + break; + default: + componentSize = 4; + } + let byteStride = attribute.itemSize * componentSize; + if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) { + byteStride = Math.ceil(byteStride / 4) * 4; + } + const byteLength = getPaddedBufferSize(count * byteStride); + const dataView = new DataView(new ArrayBuffer(byteLength)); + let offset = 0; + for (let i = start; i < start + count; i++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + let value2; + if (attribute.itemSize > 4) { + value2 = attribute.array[i * attribute.itemSize + a2]; + } else { + if (a2 === 0) value2 = attribute.getX(i); + else if (a2 === 1) value2 = attribute.getY(i); + else if (a2 === 2) value2 = attribute.getZ(i); + else if (a2 === 3) value2 = attribute.getW(i); + if (attribute.normalized === true) { + value2 = MathUtils.normalize(value2, attribute.array); + } + } + if (componentType === WEBGL_CONSTANTS.FLOAT) { + dataView.setFloat32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.INT) { + dataView.setInt32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) { + dataView.setUint32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.SHORT) { + dataView.setInt16(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) { + dataView.setUint16(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.BYTE) { + dataView.setInt8(offset, value2); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) { + dataView.setUint8(offset, value2); + } + offset += componentSize; + } + if (offset % byteStride !== 0) { + offset += byteStride - offset % byteStride; + } + } + const bufferViewDef = { + buffer: this.processBuffer(dataView.buffer), + byteOffset: this.byteOffset, + byteLength + }; + if (target !== void 0) bufferViewDef.target = target; + if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) { + bufferViewDef.byteStride = byteStride; + } + this.byteOffset += byteLength; + json.bufferViews.push(bufferViewDef); + const output = { + id: json.bufferViews.length - 1, + byteLength: 0 + }; + return output; + } + /** + * Process and generate a BufferView from an image Blob. + * @param {Blob} blob + * @return {Promise} + */ + processBufferViewImage(blob) { + const writer = this; + const json = writer.json; + if (!json.bufferViews) json.bufferViews = []; + return new Promise(function(resolve) { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + reader.onloadend = function() { + const buffer = getPaddedArrayBuffer(reader.result); + const bufferViewDef = { + buffer: writer.processBuffer(buffer), + byteOffset: writer.byteOffset, + byteLength: buffer.byteLength + }; + writer.byteOffset += buffer.byteLength; + resolve(json.bufferViews.push(bufferViewDef) - 1); + }; + }); + } + /** + * Process attribute to generate an accessor + * @param {BufferAttribute} attribute Attribute to process + * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range + * @param {Integer} start (Optional) + * @param {Integer} count (Optional) + * @return {Integer|null} Index of the processed accessor on the "accessors" array + */ + processAccessor(attribute, geometry, start, count) { + const json = this.json; + const types = { + 1: "SCALAR", + 2: "VEC2", + 3: "VEC3", + 4: "VEC4", + 9: "MAT3", + 16: "MAT4" + }; + let componentType; + if (attribute.array.constructor === Float32Array) { + componentType = WEBGL_CONSTANTS.FLOAT; + } else if (attribute.array.constructor === Int32Array) { + componentType = WEBGL_CONSTANTS.INT; + } else if (attribute.array.constructor === Uint32Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_INT; + } else if (attribute.array.constructor === Int16Array) { + componentType = WEBGL_CONSTANTS.SHORT; + } else if (attribute.array.constructor === Uint16Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT; + } else if (attribute.array.constructor === Int8Array) { + componentType = WEBGL_CONSTANTS.BYTE; + } else if (attribute.array.constructor === Uint8Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE; + } else { + throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: " + attribute.array.constructor.name); + } + if (start === void 0) start = 0; + if (count === void 0 || count === Infinity) count = attribute.count; + if (count === 0) return null; + const minMax = getMinMax(attribute, start, count); + let bufferViewTarget; + if (geometry !== void 0) { + bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER; + } + const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget); + const accessorDef = { + bufferView: bufferView.id, + byteOffset: bufferView.byteOffset, + componentType, + count, + max: minMax.max, + min: minMax.min, + type: types[attribute.itemSize] + }; + if (attribute.normalized === true) accessorDef.normalized = true; + if (!json.accessors) json.accessors = []; + return json.accessors.push(accessorDef) - 1; + } + /** + * Process image + * @param {Image} image to process + * @param {Integer} format of the image (RGBAFormat) + * @param {Boolean} flipY before writing out the image + * @param {String} mimeType export format + * @return {Integer} Index of the processed texture in the "images" array + */ + processImage(image, format, flipY, mimeType = "image/png") { + if (image !== null) { + const writer = this; + const cache = writer.cache; + const json = writer.json; + const options = writer.options; + const pending = writer.pending; + if (!cache.images.has(image)) cache.images.set(image, {}); + const cachedImages = cache.images.get(image); + const key2 = mimeType + ":flipY/" + flipY.toString(); + if (cachedImages[key2] !== void 0) return cachedImages[key2]; + if (!json.images) json.images = []; + const imageDef = { mimeType }; + const canvas = getCanvas(); + canvas.width = Math.min(image.width, options.maxTextureSize); + canvas.height = Math.min(image.height, options.maxTextureSize); + const ctx = canvas.getContext("2d", { + willReadFrequently: true + }); + if (flipY === true) { + ctx.translate(0, canvas.height); + ctx.scale(1, -1); + } + if (image.data !== void 0) { + if (format !== RGBAFormat) { + console.error("GLTFExporter: Only RGBAFormat is supported.", format); + } + if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) { + console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image); + } + const data2 = new Uint8ClampedArray(image.height * image.width * 4); + for (let i = 0; i < data2.length; i += 4) { + data2[i + 0] = image.data[i + 0]; + data2[i + 1] = image.data[i + 1]; + data2[i + 2] = image.data[i + 2]; + data2[i + 3] = image.data[i + 3]; + } + ctx.putImageData(new ImageData(data2, image.width, image.height), 0, 0); + } else { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas) { + ctx.drawImage(image, 0, 0, canvas.width, canvas.height); + } else { + throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas."); + } + } + if (options.binary === true) { + pending.push( + getToBlobPromise(canvas, mimeType).then((blob) => writer.processBufferViewImage(blob)).then((bufferViewIndex) => { + imageDef.bufferView = bufferViewIndex; + }) + ); + } else { + if (canvas.toDataURL !== void 0) { + imageDef.uri = canvas.toDataURL(mimeType); + } else { + pending.push( + getToBlobPromise(canvas, mimeType).then((blob) => new FileReader().readAsDataURL(blob)).then((dataURL) => { + imageDef.uri = dataURL; + }) + ); + } + } + const index2 = json.images.push(imageDef) - 1; + cachedImages[key2] = index2; + return index2; + } else { + throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture."); + } + } + /** + * Process sampler + * @param {Texture} map Texture to process + * @return {Integer} Index of the processed texture in the "samplers" array + */ + processSampler(map2) { + const json = this.json; + if (!json.samplers) json.samplers = []; + const samplerDef = { + magFilter: THREE_TO_WEBGL[map2.magFilter], + minFilter: THREE_TO_WEBGL[map2.minFilter], + wrapS: THREE_TO_WEBGL[map2.wrapS], + wrapT: THREE_TO_WEBGL[map2.wrapT] + }; + return json.samplers.push(samplerDef) - 1; + } + /** + * Process texture + * @param {Texture} map Map to process + * @return {Integer} Index of the processed texture in the "textures" array + */ + processTexture(map2) { + const writer = this; + const options = writer.options; + const cache = this.cache; + const json = this.json; + if (cache.textures.has(map2)) return cache.textures.get(map2); + if (!json.textures) json.textures = []; + if (map2 instanceof CompressedTexture) { + map2 = decompress(map2, options.maxTextureSize); + } + let mimeType = map2.userData.mimeType; + if (mimeType === "image/webp") mimeType = "image/png"; + const textureDef = { + sampler: this.processSampler(map2), + source: this.processImage(map2.image, map2.format, map2.flipY, mimeType) + }; + if (map2.name) textureDef.name = map2.name; + this._invokeAll(function(ext) { + ext.writeTexture && ext.writeTexture(map2, textureDef); + }); + const index2 = json.textures.push(textureDef) - 1; + cache.textures.set(map2, index2); + return index2; + } + /** + * Process material + * @param {THREE.Material} material Material to process + * @return {Integer|null} Index of the processed material in the "materials" array + */ + processMaterial(material) { + const cache = this.cache; + const json = this.json; + if (cache.materials.has(material)) return cache.materials.get(material); + if (material.isShaderMaterial) { + console.warn("GLTFExporter: THREE.ShaderMaterial not supported."); + return null; + } + if (!json.materials) json.materials = []; + const materialDef = { pbrMetallicRoughness: {} }; + if (material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true) { + console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results."); + } + const color = material.color.toArray().concat([material.opacity]); + if (!equalArray(color, [1, 1, 1, 1])) { + materialDef.pbrMetallicRoughness.baseColorFactor = color; + } + if (material.isMeshStandardMaterial) { + materialDef.pbrMetallicRoughness.metallicFactor = material.metalness; + materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness; + } else { + materialDef.pbrMetallicRoughness.metallicFactor = 0.5; + materialDef.pbrMetallicRoughness.roughnessFactor = 0.5; + } + if (material.metalnessMap || material.roughnessMap) { + const metalRoughTexture = this.buildMetalRoughTexture(material.metalnessMap, material.roughnessMap); + const metalRoughMapDef = { + index: this.processTexture(metalRoughTexture), + channel: metalRoughTexture.channel + }; + this.applyTextureTransform(metalRoughMapDef, metalRoughTexture); + materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef; + } + if (material.map) { + const baseColorMapDef = { + index: this.processTexture(material.map), + texCoord: material.map.channel + }; + this.applyTextureTransform(baseColorMapDef, material.map); + materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef; + } + if (material.emissive) { + const emissive = material.emissive; + const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b); + if (maxEmissiveComponent > 0) { + materialDef.emissiveFactor = material.emissive.toArray(); + } + if (material.emissiveMap) { + const emissiveMapDef = { + index: this.processTexture(material.emissiveMap), + texCoord: material.emissiveMap.channel + }; + this.applyTextureTransform(emissiveMapDef, material.emissiveMap); + materialDef.emissiveTexture = emissiveMapDef; + } + } + if (material.normalMap) { + const normalMapDef = { + index: this.processTexture(material.normalMap), + texCoord: material.normalMap.channel + }; + if (material.normalScale && material.normalScale.x !== 1) { + normalMapDef.scale = material.normalScale.x; + } + this.applyTextureTransform(normalMapDef, material.normalMap); + materialDef.normalTexture = normalMapDef; + } + if (material.aoMap) { + const occlusionMapDef = { + index: this.processTexture(material.aoMap), + texCoord: material.aoMap.channel + }; + if (material.aoMapIntensity !== 1) { + occlusionMapDef.strength = material.aoMapIntensity; + } + this.applyTextureTransform(occlusionMapDef, material.aoMap); + materialDef.occlusionTexture = occlusionMapDef; + } + if (material.transparent) { + materialDef.alphaMode = "BLEND"; + } else { + if (material.alphaTest > 0) { + materialDef.alphaMode = "MASK"; + materialDef.alphaCutoff = material.alphaTest; + } + } + if (material.side === DoubleSide) materialDef.doubleSided = true; + if (material.name !== "") materialDef.name = material.name; + this.serializeUserData(material, materialDef); + this._invokeAll(function(ext) { + ext.writeMaterial && ext.writeMaterial(material, materialDef); + }); + const index2 = json.materials.push(materialDef) - 1; + cache.materials.set(material, index2); + return index2; + } + /** + * Process mesh + * @param {THREE.Mesh} mesh Mesh to process + * @return {Integer|null} Index of the processed mesh in the "meshes" array + */ + processMesh(mesh) { + const cache = this.cache; + const json = this.json; + const meshCacheKeyParts = [mesh.geometry.uuid]; + if (Array.isArray(mesh.material)) { + for (let i = 0, l2 = mesh.material.length; i < l2; i++) { + meshCacheKeyParts.push(mesh.material[i].uuid); + } + } else { + meshCacheKeyParts.push(mesh.material.uuid); + } + const meshCacheKey = meshCacheKeyParts.join(":"); + if (cache.meshes.has(meshCacheKey)) return cache.meshes.get(meshCacheKey); + const geometry = mesh.geometry; + let mode; + if (mesh.isLineSegments) { + mode = WEBGL_CONSTANTS.LINES; + } else if (mesh.isLineLoop) { + mode = WEBGL_CONSTANTS.LINE_LOOP; + } else if (mesh.isLine) { + mode = WEBGL_CONSTANTS.LINE_STRIP; + } else if (mesh.isPoints) { + mode = WEBGL_CONSTANTS.POINTS; + } else { + mode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES; + } + const meshDef = {}; + const attributes = {}; + const primitives = []; + const targets = []; + const nameConversion = { + uv: "TEXCOORD_0", + uv1: "TEXCOORD_1", + uv2: "TEXCOORD_2", + uv3: "TEXCOORD_3", + color: "COLOR_0", + skinWeight: "WEIGHTS_0", + skinIndex: "JOINTS_0" + }; + const originalNormal = geometry.getAttribute("normal"); + if (originalNormal !== void 0 && !this.isNormalizedNormalAttribute(originalNormal)) { + console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."); + geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal)); + } + let modifiedAttribute = null; + for (let attributeName in geometry.attributes) { + if (attributeName.slice(0, 5) === "morph") continue; + const attribute = geometry.attributes[attributeName]; + attributeName = nameConversion[attributeName] || attributeName.toUpperCase(); + const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/; + if (!validVertexAttributes.test(attributeName)) attributeName = "_" + attributeName; + if (cache.attributes.has(this.getUID(attribute))) { + attributes[attributeName] = cache.attributes.get(this.getUID(attribute)); + continue; + } + modifiedAttribute = null; + const array = attribute.array; + if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) { + console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'); + modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized); + } + const accessor = this.processAccessor(modifiedAttribute || attribute, geometry); + if (accessor !== null) { + if (!attributeName.startsWith("_")) { + this.detectMeshQuantization(attributeName, attribute); + } + attributes[attributeName] = accessor; + cache.attributes.set(this.getUID(attribute), accessor); + } + } + if (originalNormal !== void 0) geometry.setAttribute("normal", originalNormal); + if (Object.keys(attributes).length === 0) return null; + if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) { + const weights = []; + const targetNames = []; + const reverseDictionary = {}; + if (mesh.morphTargetDictionary !== void 0) { + for (const key2 in mesh.morphTargetDictionary) { + reverseDictionary[mesh.morphTargetDictionary[key2]] = key2; + } + } + for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) { + const target = {}; + let warned = false; + for (const attributeName in geometry.morphAttributes) { + if (attributeName !== "position" && attributeName !== "normal") { + if (!warned) { + console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."); + warned = true; + } + continue; + } + const attribute = geometry.morphAttributes[attributeName][i]; + const gltfAttributeName = attributeName.toUpperCase(); + const baseAttribute = geometry.attributes[attributeName]; + if (cache.attributes.has(this.getUID(attribute, true))) { + target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute, true)); + continue; + } + const relativeAttribute = attribute.clone(); + if (!geometry.morphTargetsRelative) { + for (let j = 0, jl = attribute.count; j < jl; j++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + if (a2 === 0) relativeAttribute.setX(j, attribute.getX(j) - baseAttribute.getX(j)); + if (a2 === 1) relativeAttribute.setY(j, attribute.getY(j) - baseAttribute.getY(j)); + if (a2 === 2) relativeAttribute.setZ(j, attribute.getZ(j) - baseAttribute.getZ(j)); + if (a2 === 3) relativeAttribute.setW(j, attribute.getW(j) - baseAttribute.getW(j)); + } + } + } + target[gltfAttributeName] = this.processAccessor(relativeAttribute, geometry); + cache.attributes.set(this.getUID(baseAttribute, true), target[gltfAttributeName]); + } + targets.push(target); + weights.push(mesh.morphTargetInfluences[i]); + if (mesh.morphTargetDictionary !== void 0) targetNames.push(reverseDictionary[i]); + } + meshDef.weights = weights; + if (targetNames.length > 0) { + meshDef.extras = {}; + meshDef.extras.targetNames = targetNames; + } + } + const isMultiMaterial = Array.isArray(mesh.material); + if (isMultiMaterial && geometry.groups.length === 0) return null; + let didForceIndices = false; + if (isMultiMaterial && geometry.index === null) { + const indices = []; + for (let i = 0, il = geometry.attributes.position.count; i < il; i++) { + indices[i] = i; + } + geometry.setIndex(indices); + didForceIndices = true; + } + const materials = isMultiMaterial ? mesh.material : [mesh.material]; + const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }]; + for (let i = 0, il = groups.length; i < il; i++) { + const primitive = { + mode, + attributes + }; + this.serializeUserData(geometry, primitive); + if (targets.length > 0) primitive.targets = targets; + if (geometry.index !== null) { + let cacheKey = this.getUID(geometry.index); + if (groups[i].start !== void 0 || groups[i].count !== void 0) { + cacheKey += ":" + groups[i].start + ":" + groups[i].count; + } + if (cache.attributes.has(cacheKey)) { + primitive.indices = cache.attributes.get(cacheKey); + } else { + primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count); + cache.attributes.set(cacheKey, primitive.indices); + } + if (primitive.indices === null) delete primitive.indices; + } + const material = this.processMaterial(materials[groups[i].materialIndex]); + if (material !== null) primitive.material = material; + primitives.push(primitive); + } + if (didForceIndices === true) { + geometry.setIndex(null); + } + meshDef.primitives = primitives; + if (!json.meshes) json.meshes = []; + this._invokeAll(function(ext) { + ext.writeMesh && ext.writeMesh(mesh, meshDef); + }); + const index2 = json.meshes.push(meshDef) - 1; + cache.meshes.set(meshCacheKey, index2); + return index2; + } + /** + * If a vertex attribute with a + * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview) + * is used, it is checked whether it is a valid data type according to the + * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md) + * extension. + * In this case the extension is automatically added to the list of used extensions. + * + * @param {string} attributeName + * @param {THREE.BufferAttribute} attribute + */ + detectMeshQuantization(attributeName, attribute) { + if (this.extensionsUsed[KHR_MESH_QUANTIZATION]) return; + let attrType = void 0; + switch (attribute.array.constructor) { + case Int8Array: + attrType = "byte"; + break; + case Uint8Array: + attrType = "unsigned byte"; + break; + case Int16Array: + attrType = "short"; + break; + case Uint16Array: + attrType = "unsigned short"; + break; + default: + return; + } + if (attribute.normalized) attrType += " normalized"; + const attrNamePrefix = attributeName.split("_", 1)[0]; + if (KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix] && KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix].includes(attrType)) { + this.extensionsUsed[KHR_MESH_QUANTIZATION] = true; + this.extensionsRequired[KHR_MESH_QUANTIZATION] = true; + } + } + /** + * Process camera + * @param {THREE.Camera} camera Camera to process + * @return {Integer} Index of the processed mesh in the "camera" array + */ + processCamera(camera) { + const json = this.json; + if (!json.cameras) json.cameras = []; + const isOrtho = camera.isOrthographicCamera; + const cameraDef = { + type: isOrtho ? "orthographic" : "perspective" + }; + if (isOrtho) { + cameraDef.orthographic = { + xmag: camera.right * 2, + ymag: camera.top * 2, + zfar: camera.far <= 0 ? 1e-3 : camera.far, + znear: camera.near < 0 ? 0 : camera.near + }; + } else { + cameraDef.perspective = { + aspectRatio: camera.aspect, + yfov: MathUtils.degToRad(camera.fov), + zfar: camera.far <= 0 ? 1e-3 : camera.far, + znear: camera.near < 0 ? 0 : camera.near + }; + } + if (camera.name !== "") cameraDef.name = camera.type; + return json.cameras.push(cameraDef) - 1; + } + /** + * Creates glTF animation entry from AnimationClip object. + * + * Status: + * - Only properties listed in PATH_PROPERTIES may be animated. + * + * @param {THREE.AnimationClip} clip + * @param {THREE.Object3D} root + * @return {number|null} + */ + processAnimation(clip, root) { + const json = this.json; + const nodeMap = this.nodeMap; + if (!json.animations) json.animations = []; + clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root); + const tracks = clip.tracks; + const channels = []; + const samplers = []; + for (let i = 0; i < tracks.length; ++i) { + const track = tracks[i]; + const trackBinding = PropertyBinding.parseTrackName(track.name); + let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName); + const trackProperty = PATH_PROPERTIES[trackBinding.propertyName]; + if (trackBinding.objectName === "bones") { + if (trackNode.isSkinnedMesh === true) { + trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex); + } else { + trackNode = void 0; + } + } + if (!trackNode || !trackProperty) { + console.warn('THREE.GLTFExporter: Could not export animation track "%s".', track.name); + continue; + } + const inputItemSize = 1; + let outputItemSize = track.values.length / track.times.length; + if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) { + outputItemSize /= trackNode.morphTargetInfluences.length; + } + let interpolation; + if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) { + interpolation = "CUBICSPLINE"; + outputItemSize /= 3; + } else if (track.getInterpolation() === InterpolateDiscrete) { + interpolation = "STEP"; + } else { + interpolation = "LINEAR"; + } + samplers.push({ + input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)), + output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)), + interpolation + }); + channels.push({ + sampler: samplers.length - 1, + target: { + node: nodeMap.get(trackNode), + path: trackProperty + } + }); + } + json.animations.push({ + name: clip.name || "clip_" + json.animations.length, + samplers, + channels + }); + return json.animations.length - 1; + } + /** + * @param {THREE.Object3D} object + * @return {number|null} + */ + processSkin(object) { + const json = this.json; + const nodeMap = this.nodeMap; + const node = json.nodes[nodeMap.get(object)]; + const skeleton = object.skeleton; + if (skeleton === void 0) return null; + const rootJoint = object.skeleton.bones[0]; + if (rootJoint === void 0) return null; + const joints = []; + const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16); + const temporaryBoneInverse = new Matrix4(); + for (let i = 0; i < skeleton.bones.length; ++i) { + joints.push(nodeMap.get(skeleton.bones[i])); + temporaryBoneInverse.copy(skeleton.boneInverses[i]); + temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16); + } + if (json.skins === void 0) json.skins = []; + json.skins.push({ + inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)), + joints, + skeleton: nodeMap.get(rootJoint) + }); + const skinIndex = node.skin = json.skins.length - 1; + return skinIndex; + } + /** + * Process Object3D node + * @param {THREE.Object3D} node Object3D to processNode + * @return {Integer} Index of the node in the nodes list + */ + processNode(object) { + const json = this.json; + const options = this.options; + const nodeMap = this.nodeMap; + if (!json.nodes) json.nodes = []; + const nodeDef = {}; + if (options.trs) { + const rotation2 = object.quaternion.toArray(); + const position2 = object.position.toArray(); + const scale2 = object.scale.toArray(); + if (!equalArray(rotation2, [0, 0, 0, 1])) { + nodeDef.rotation = rotation2; + } + if (!equalArray(position2, [0, 0, 0])) { + nodeDef.translation = position2; + } + if (!equalArray(scale2, [1, 1, 1])) { + nodeDef.scale = scale2; + } + } else { + if (object.matrixAutoUpdate) { + object.updateMatrix(); + } + if (isIdentityMatrix(object.matrix) === false) { + nodeDef.matrix = object.matrix.elements; + } + } + if (object.name !== "") nodeDef.name = String(object.name); + this.serializeUserData(object, nodeDef); + if (object.isMesh || object.isLine || object.isPoints) { + const meshIndex = this.processMesh(object); + if (meshIndex !== null) nodeDef.mesh = meshIndex; + } else if (object.isCamera) { + nodeDef.camera = this.processCamera(object); + } + if (object.isSkinnedMesh) this.skins.push(object); + if (object.children.length > 0) { + const children = []; + for (let i = 0, l2 = object.children.length; i < l2; i++) { + const child = object.children[i]; + if (child.visible || options.onlyVisible === false) { + const nodeIndex2 = this.processNode(child); + if (nodeIndex2 !== null) children.push(nodeIndex2); + } + } + if (children.length > 0) nodeDef.children = children; + } + this._invokeAll(function(ext) { + ext.writeNode && ext.writeNode(object, nodeDef); + }); + const nodeIndex = json.nodes.push(nodeDef) - 1; + nodeMap.set(object, nodeIndex); + return nodeIndex; + } + /** + * Process Scene + * @param {Scene} node Scene to process + */ + processScene(scene) { + const json = this.json; + const options = this.options; + if (!json.scenes) { + json.scenes = []; + json.scene = 0; + } + const sceneDef = {}; + if (scene.name !== "") sceneDef.name = scene.name; + json.scenes.push(sceneDef); + const nodes = []; + for (let i = 0, l2 = scene.children.length; i < l2; i++) { + const child = scene.children[i]; + if (child.visible || options.onlyVisible === false) { + const nodeIndex = this.processNode(child); + if (nodeIndex !== null) nodes.push(nodeIndex); + } + } + if (nodes.length > 0) sceneDef.nodes = nodes; + this.serializeUserData(scene, sceneDef); + } + /** + * Creates a Scene to hold a list of objects and parse it + * @param {Array} objects List of objects to process + */ + processObjects(objects) { + const scene = new Scene(); + scene.name = "AuxScene"; + for (let i = 0; i < objects.length; i++) { + scene.children.push(objects[i]); + } + this.processScene(scene); + } + /** + * @param {THREE.Object3D|Array} input + */ + processInput(input) { + const options = this.options; + input = input instanceof Array ? input : [input]; + this._invokeAll(function(ext) { + ext.beforeParse && ext.beforeParse(input); + }); + const objectsWithoutScene = []; + for (let i = 0; i < input.length; i++) { + if (input[i] instanceof Scene) { + this.processScene(input[i]); + } else { + objectsWithoutScene.push(input[i]); + } + } + if (objectsWithoutScene.length > 0) this.processObjects(objectsWithoutScene); + for (let i = 0; i < this.skins.length; ++i) { + this.processSkin(this.skins[i]); + } + for (let i = 0; i < options.animations.length; ++i) { + this.processAnimation(options.animations[i], input[0]); + } + this._invokeAll(function(ext) { + ext.afterParse && ext.afterParse(input); + }); + } + _invokeAll(func) { + for (let i = 0, il = this.plugins.length; i < il; i++) { + func(this.plugins[i]); + } + } +}; +var GLTFLightExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_lights_punctual"; + } + writeNode(light, nodeDef) { + if (!light.isLight) return; + if (!light.isDirectionalLight && !light.isPointLight && !light.isSpotLight) { + console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light); + return; + } + const writer = this.writer; + const json = writer.json; + const extensionsUsed = writer.extensionsUsed; + const lightDef = {}; + if (light.name) lightDef.name = light.name; + lightDef.color = light.color.toArray(); + lightDef.intensity = light.intensity; + if (light.isDirectionalLight) { + lightDef.type = "directional"; + } else if (light.isPointLight) { + lightDef.type = "point"; + if (light.distance > 0) lightDef.range = light.distance; + } else if (light.isSpotLight) { + lightDef.type = "spot"; + if (light.distance > 0) lightDef.range = light.distance; + lightDef.spot = {}; + lightDef.spot.innerConeAngle = (1 - light.penumbra) * light.angle; + lightDef.spot.outerConeAngle = light.angle; + } + if (light.decay !== void 0 && light.decay !== 2) { + console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."); + } + if (light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) { + console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."); + } + if (!extensionsUsed[this.name]) { + json.extensions = json.extensions || {}; + json.extensions[this.name] = { lights: [] }; + extensionsUsed[this.name] = true; + } + const lights = json.extensions[this.name].lights; + lights.push(lightDef); + nodeDef.extensions = nodeDef.extensions || {}; + nodeDef.extensions[this.name] = { light: lights.length - 1 }; + } +}; +var GLTFMaterialsUnlitExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_unlit"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshBasicMaterial) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = {}; + extensionsUsed[this.name] = true; + materialDef.pbrMetallicRoughness.metallicFactor = 0; + materialDef.pbrMetallicRoughness.roughnessFactor = 0.9; + } +}; +var GLTFMaterialsClearcoatExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_clearcoat"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.clearcoat === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.clearcoatFactor = material.clearcoat; + if (material.clearcoatMap) { + const clearcoatMapDef = { + index: writer.processTexture(material.clearcoatMap), + texCoord: material.clearcoatMap.channel + }; + writer.applyTextureTransform(clearcoatMapDef, material.clearcoatMap); + extensionDef.clearcoatTexture = clearcoatMapDef; + } + extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness; + if (material.clearcoatRoughnessMap) { + const clearcoatRoughnessMapDef = { + index: writer.processTexture(material.clearcoatRoughnessMap), + texCoord: material.clearcoatRoughnessMap.channel + }; + writer.applyTextureTransform(clearcoatRoughnessMapDef, material.clearcoatRoughnessMap); + extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef; + } + if (material.clearcoatNormalMap) { + const clearcoatNormalMapDef = { + index: writer.processTexture(material.clearcoatNormalMap), + texCoord: material.clearcoatNormalMap.channel + }; + if (material.clearcoatNormalScale.x !== 1) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x; + writer.applyTextureTransform(clearcoatNormalMapDef, material.clearcoatNormalMap); + extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsDispersionExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_dispersion"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.dispersion === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.dispersion = material.dispersion; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsIridescenceExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_iridescence"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.iridescence === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.iridescenceFactor = material.iridescence; + if (material.iridescenceMap) { + const iridescenceMapDef = { + index: writer.processTexture(material.iridescenceMap), + texCoord: material.iridescenceMap.channel + }; + writer.applyTextureTransform(iridescenceMapDef, material.iridescenceMap); + extensionDef.iridescenceTexture = iridescenceMapDef; + } + extensionDef.iridescenceIor = material.iridescenceIOR; + extensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[0]; + extensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[1]; + if (material.iridescenceThicknessMap) { + const iridescenceThicknessMapDef = { + index: writer.processTexture(material.iridescenceThicknessMap), + texCoord: material.iridescenceThicknessMap.channel + }; + writer.applyTextureTransform(iridescenceThicknessMapDef, material.iridescenceThicknessMap); + extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsTransmissionExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_transmission"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.transmissionFactor = material.transmission; + if (material.transmissionMap) { + const transmissionMapDef = { + index: writer.processTexture(material.transmissionMap), + texCoord: material.transmissionMap.channel + }; + writer.applyTextureTransform(transmissionMapDef, material.transmissionMap); + extensionDef.transmissionTexture = transmissionMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsVolumeExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_volume"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.thicknessFactor = material.thickness; + if (material.thicknessMap) { + const thicknessMapDef = { + index: writer.processTexture(material.thicknessMap), + texCoord: material.thicknessMap.channel + }; + writer.applyTextureTransform(thicknessMapDef, material.thicknessMap); + extensionDef.thicknessTexture = thicknessMapDef; + } + extensionDef.attenuationDistance = material.attenuationDistance; + extensionDef.attenuationColor = material.attenuationColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsIorExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_ior"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.ior === 1.5) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.ior = material.ior; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsSpecularExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_specular"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.specularIntensity === 1 && material.specularColor.equals(DEFAULT_SPECULAR_COLOR) && !material.specularIntensityMap && !material.specularColorMap) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.specularIntensityMap) { + const specularIntensityMapDef = { + index: writer.processTexture(material.specularIntensityMap), + texCoord: material.specularIntensityMap.channel + }; + writer.applyTextureTransform(specularIntensityMapDef, material.specularIntensityMap); + extensionDef.specularTexture = specularIntensityMapDef; + } + if (material.specularColorMap) { + const specularColorMapDef = { + index: writer.processTexture(material.specularColorMap), + texCoord: material.specularColorMap.channel + }; + writer.applyTextureTransform(specularColorMapDef, material.specularColorMap); + extensionDef.specularColorTexture = specularColorMapDef; + } + extensionDef.specularFactor = material.specularIntensity; + extensionDef.specularColorFactor = material.specularColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsSheenExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_sheen"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.sheen == 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.sheenRoughnessMap) { + const sheenRoughnessMapDef = { + index: writer.processTexture(material.sheenRoughnessMap), + texCoord: material.sheenRoughnessMap.channel + }; + writer.applyTextureTransform(sheenRoughnessMapDef, material.sheenRoughnessMap); + extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef; + } + if (material.sheenColorMap) { + const sheenColorMapDef = { + index: writer.processTexture(material.sheenColorMap), + texCoord: material.sheenColorMap.channel + }; + writer.applyTextureTransform(sheenColorMapDef, material.sheenColorMap); + extensionDef.sheenColorTexture = sheenColorMapDef; + } + extensionDef.sheenRoughnessFactor = material.sheenRoughness; + extensionDef.sheenColorFactor = material.sheenColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsAnisotropyExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_anisotropy"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.anisotropy == 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.anisotropyMap) { + const anisotropyMapDef = { index: writer.processTexture(material.anisotropyMap) }; + writer.applyTextureTransform(anisotropyMapDef, material.anisotropyMap); + extensionDef.anisotropyTexture = anisotropyMapDef; + } + extensionDef.anisotropyStrength = material.anisotropy; + extensionDef.anisotropyRotation = material.anisotropyRotation; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsEmissiveStrengthExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_emissive_strength"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshStandardMaterial || material.emissiveIntensity === 1) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.emissiveStrength = material.emissiveIntensity; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsBumpExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "EXT_materials_bump"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshStandardMaterial || material.bumpScale === 1 && !material.bumpMap) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.bumpMap) { + const bumpMapDef = { + index: writer.processTexture(material.bumpMap), + texCoord: material.bumpMap.channel + }; + writer.applyTextureTransform(bumpMapDef, material.bumpMap); + extensionDef.bumpTexture = bumpMapDef; + } + extensionDef.bumpFactor = material.bumpScale; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMeshGpuInstancing = class { + constructor(writer) { + this.writer = writer; + this.name = "EXT_mesh_gpu_instancing"; + } + writeNode(object, nodeDef) { + if (!object.isInstancedMesh) return; + const writer = this.writer; + const mesh = object; + const translationAttr = new Float32Array(mesh.count * 3); + const rotationAttr = new Float32Array(mesh.count * 4); + const scaleAttr = new Float32Array(mesh.count * 3); + const matrix3 = new Matrix4(); + const position2 = new Vector3(); + const quaternion = new Quaternion(); + const scale2 = new Vector3(); + for (let i = 0; i < mesh.count; i++) { + mesh.getMatrixAt(i, matrix3); + matrix3.decompose(position2, quaternion, scale2); + position2.toArray(translationAttr, i * 3); + quaternion.toArray(rotationAttr, i * 4); + scale2.toArray(scaleAttr, i * 3); + } + const attributes = { + TRANSLATION: writer.processAccessor(new BufferAttribute(translationAttr, 3)), + ROTATION: writer.processAccessor(new BufferAttribute(rotationAttr, 4)), + SCALE: writer.processAccessor(new BufferAttribute(scaleAttr, 3)) + }; + if (mesh.instanceColor) + attributes._COLOR_0 = writer.processAccessor(mesh.instanceColor); + nodeDef.extensions = nodeDef.extensions || {}; + nodeDef.extensions[this.name] = { attributes }; + writer.extensionsUsed[this.name] = true; + writer.extensionsRequired[this.name] = true; + } +}; +GLTFExporter.Utils = { + insertKeyframe: function(track, time2) { + const tolerance = 1e-3; + const valueSize = track.getValueSize(); + const times = new track.TimeBufferType(track.times.length + 1); + const values2 = new track.ValueBufferType(track.values.length + valueSize); + const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize)); + let index2; + if (track.times.length === 0) { + times[0] = time2; + for (let i = 0; i < valueSize; i++) { + values2[i] = 0; + } + index2 = 0; + } else if (time2 < track.times[0]) { + if (Math.abs(track.times[0] - time2) < tolerance) return 0; + times[0] = time2; + times.set(track.times, 1); + values2.set(interpolant.evaluate(time2), 0); + values2.set(track.values, valueSize); + index2 = 0; + } else if (time2 > track.times[track.times.length - 1]) { + if (Math.abs(track.times[track.times.length - 1] - time2) < tolerance) { + return track.times.length - 1; + } + times[times.length - 1] = time2; + times.set(track.times, 0); + values2.set(track.values, 0); + values2.set(interpolant.evaluate(time2), track.values.length); + index2 = times.length - 1; + } else { + for (let i = 0; i < track.times.length; i++) { + if (Math.abs(track.times[i] - time2) < tolerance) return i; + if (track.times[i] < time2 && track.times[i + 1] > time2) { + times.set(track.times.slice(0, i + 1), 0); + times[i + 1] = time2; + times.set(track.times.slice(i + 1), i + 2); + values2.set(track.values.slice(0, (i + 1) * valueSize), 0); + values2.set(interpolant.evaluate(time2), (i + 1) * valueSize); + values2.set(track.values.slice((i + 1) * valueSize), (i + 2) * valueSize); + index2 = i + 1; + break; + } + } + } + track.times = times; + track.values = values2; + return index2; + }, + mergeMorphTargetTracks: function(clip, root) { + const tracks = []; + const mergedTracks = {}; + const sourceTracks = clip.tracks; + for (let i = 0; i < sourceTracks.length; ++i) { + let sourceTrack = sourceTracks[i]; + const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name); + const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName); + if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) { + tracks.push(sourceTrack); + continue; + } + if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) { + if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation."); + } + console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."); + sourceTrack = sourceTrack.clone(); + sourceTrack.setInterpolation(InterpolateLinear); + } + const targetCount = sourceTrackNode.morphTargetInfluences.length; + const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex]; + if (targetIndex === void 0) { + throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex); + } + let mergedTrack; + if (mergedTracks[sourceTrackNode.uuid] === void 0) { + mergedTrack = sourceTrack.clone(); + const values2 = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length); + for (let j = 0; j < mergedTrack.times.length; j++) { + values2[j * targetCount + targetIndex] = mergedTrack.values[j]; + } + mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences"; + mergedTrack.values = values2; + mergedTracks[sourceTrackNode.uuid] = mergedTrack; + tracks.push(mergedTrack); + continue; + } + const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1)); + mergedTrack = mergedTracks[sourceTrackNode.uuid]; + for (let j = 0; j < mergedTrack.times.length; j++) { + mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]); + } + for (let j = 0; j < sourceTrack.times.length; j++) { + const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]); + mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j]; + } + } + clip.tracks = tracks; + return clip; + } +}; + +// node_modules/three/examples/jsm/libs/ktx-parse.module.js +var t = 0; +var n = 2; +var l = 1; +var p = 1; +var y = 1; +var x = 2; +var E = 0; +var F = 1; +var X = 10; +var R = 0; +var Y = 1; +var q = 2; +var Q = 15; +var Z = 128; +var $ = 64; +var et2 = 16; +var nt = 0; +var ct = 9; +var gt = 15; +var yt = 16; +var dt = 22; +var Ot = 37; +var Ft = 43; +var $t = 76; +var se = 83; +var pe = 97; +var xe = 100; +var de = 103; +var Ae = 109; +var Sn = 165; +var In = 166; +var Si = class { + constructor() { + this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null; + } +}; +var Ii = class { + constructor(t3, e, n2, i) { + this._dataView = new DataView(t3.buffer, t3.byteOffset + e, n2), this._littleEndian = i, this._offset = 0; + } + _nextUint8() { + const t3 = this._dataView.getUint8(this._offset); + return this._offset += 1, t3; + } + _nextUint16() { + const t3 = this._dataView.getUint16(this._offset, this._littleEndian); + return this._offset += 2, t3; + } + _nextUint32() { + const t3 = this._dataView.getUint32(this._offset, this._littleEndian); + return this._offset += 4, t3; + } + _nextUint64() { + const t3 = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian); + return this._offset += 8, t3; + } + _nextInt32() { + const t3 = this._dataView.getInt32(this._offset, this._littleEndian); + return this._offset += 4, t3; + } + _skip(t3) { + return this._offset += t3, this; + } + _scan(t3, e = 0) { + const n2 = this._offset; + let i = 0; + for (; this._dataView.getUint8(this._offset) !== e && i < t3; ) i++, this._offset++; + return i < t3 && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + n2, i); + } +}; +var Oi = new Uint8Array([0]); +var Ti = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10]; +function Vi(t3) { + return "undefined" != typeof TextEncoder ? new TextEncoder().encode(t3) : Buffer.from(t3); +} +function Ei(t3) { + return "undefined" != typeof TextDecoder ? new TextDecoder().decode(t3) : Buffer.from(t3).toString("utf8"); +} +function Fi(t3) { + let e = 0; + for (const n3 of t3) e += n3.byteLength; + const n2 = new Uint8Array(e); + let i = 0; + for (const e2 of t3) n2.set(new Uint8Array(e2), i), i += e2.byteLength; + return n2; +} +function Pi(t3) { + const e = new Uint8Array(t3.buffer, t3.byteOffset, Ti.length); + if (e[0] !== Ti[0] || e[1] !== Ti[1] || e[2] !== Ti[2] || e[3] !== Ti[3] || e[4] !== Ti[4] || e[5] !== Ti[5] || e[6] !== Ti[6] || e[7] !== Ti[7] || e[8] !== Ti[8] || e[9] !== Ti[9] || e[10] !== Ti[10] || e[11] !== Ti[11]) throw new Error("Missing KTX 2.0 identifier."); + const n2 = new Si(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new Ii(t3, Ti.length, i, true); + n2.vkFormat = s._nextUint32(), n2.typeSize = s._nextUint32(), n2.pixelWidth = s._nextUint32(), n2.pixelHeight = s._nextUint32(), n2.pixelDepth = s._nextUint32(), n2.layerCount = s._nextUint32(), n2.faceCount = s._nextUint32(); + const a2 = s._nextUint32(); + n2.supercompressionScheme = s._nextUint32(); + const r = s._nextUint32(), o = s._nextUint32(), l2 = s._nextUint32(), f = s._nextUint32(), U = s._nextUint64(), c2 = s._nextUint64(), h = new Ii(t3, Ti.length + i, 3 * a2 * 8, true); + for (let e2 = 0; e2 < a2; e2++) n2.levels.push({ levelData: new Uint8Array(t3.buffer, t3.byteOffset + h._nextUint64(), h._nextUint64()), uncompressedByteLength: h._nextUint64() }); + const _ = new Ii(t3, r, o, true), p2 = { vendorId: _._skip(4)._nextUint16(), descriptorType: _._nextUint16(), versionNumber: _._nextUint16(), descriptorBlockSize: _._nextUint16(), colorModel: _._nextUint8(), colorPrimaries: _._nextUint8(), transferFunction: _._nextUint8(), flags: _._nextUint8(), texelBlockDimension: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], bytesPlane: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], samples: [] }, g2 = (p2.descriptorBlockSize / 4 - 6) / 4; + for (let t4 = 0; t4 < g2; t4++) { + const e2 = { bitOffset: _._nextUint16(), bitLength: _._nextUint8(), channelType: _._nextUint8(), samplePosition: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], sampleLower: -Infinity, sampleUpper: Infinity }; + 64 & e2.channelType ? (e2.sampleLower = _._nextInt32(), e2.sampleUpper = _._nextInt32()) : (e2.sampleLower = _._nextUint32(), e2.sampleUpper = _._nextUint32()), p2.samples[t4] = e2; + } + n2.dataFormatDescriptor.length = 0, n2.dataFormatDescriptor.push(p2); + const y2 = new Ii(t3, l2, f, true); + for (; y2._offset < f; ) { + const t4 = y2._nextUint32(), e2 = y2._scan(t4), i2 = Ei(e2), s2 = y2._scan(t4 - e2.byteLength); + n2.keyValue[i2] = i2.match(/^ktx/i) ? Ei(s2) : s2, y2._offset % 4 && y2._skip(4 - y2._offset % 4); + } + if (c2 <= 0) return n2; + const x2 = new Ii(t3, U, c2, true), u = x2._nextUint16(), b3 = x2._nextUint16(), d = x2._nextUint32(), m = x2._nextUint32(), w = x2._nextUint32(), D = x2._nextUint32(), B2 = []; + for (let t4 = 0; t4 < a2; t4++) B2.push({ imageFlags: x2._nextUint32(), rgbSliceByteOffset: x2._nextUint32(), rgbSliceByteLength: x2._nextUint32(), alphaSliceByteOffset: x2._nextUint32(), alphaSliceByteLength: x2._nextUint32() }); + const L = U + x2._offset, A2 = L + d, k2 = A2 + m, v = k2 + w, S = new Uint8Array(t3.buffer, t3.byteOffset + L, d), I2 = new Uint8Array(t3.buffer, t3.byteOffset + A2, m), O = new Uint8Array(t3.buffer, t3.byteOffset + k2, w), T = new Uint8Array(t3.buffer, t3.byteOffset + v, D); + return n2.globalData = { endpointCount: u, selectorCount: b3, imageDescs: B2, endpointsData: S, selectorsData: I2, tablesData: O, extendedData: T }, n2; +} +function Ci() { + return (Ci = Object.assign || function(t3) { + for (var e = 1; e < arguments.length; e++) { + var n2 = arguments[e]; + for (var i in n2) Object.prototype.hasOwnProperty.call(n2, i) && (t3[i] = n2[i]); + } + return t3; + }).apply(this, arguments); +} +var zi = { keepWriter: false }; +function Mi(t3, e = {}) { + e = Ci({}, zi, e); + let n2 = new ArrayBuffer(0); + if (t3.globalData) { + const e2 = new ArrayBuffer(20 + 5 * t3.globalData.imageDescs.length * 4), i2 = new DataView(e2); + i2.setUint16(0, t3.globalData.endpointCount, true), i2.setUint16(2, t3.globalData.selectorCount, true), i2.setUint32(4, t3.globalData.endpointsData.byteLength, true), i2.setUint32(8, t3.globalData.selectorsData.byteLength, true), i2.setUint32(12, t3.globalData.tablesData.byteLength, true), i2.setUint32(16, t3.globalData.extendedData.byteLength, true); + for (let e3 = 0; e3 < t3.globalData.imageDescs.length; e3++) { + const n3 = t3.globalData.imageDescs[e3]; + i2.setUint32(20 + 5 * e3 * 4 + 0, n3.imageFlags, true), i2.setUint32(20 + 5 * e3 * 4 + 4, n3.rgbSliceByteOffset, true), i2.setUint32(20 + 5 * e3 * 4 + 8, n3.rgbSliceByteLength, true), i2.setUint32(20 + 5 * e3 * 4 + 12, n3.alphaSliceByteOffset, true), i2.setUint32(20 + 5 * e3 * 4 + 16, n3.alphaSliceByteLength, true); + } + n2 = Fi([e2, t3.globalData.endpointsData, t3.globalData.selectorsData, t3.globalData.tablesData, t3.globalData.extendedData]); + } + const i = []; + let s = t3.keyValue; + e.keepWriter || (s = Ci({}, t3.keyValue, { KTXwriter: "KTX-Parse v0.3.1" })); + for (const t4 in s) { + const e2 = s[t4], n3 = Vi(t4), a3 = "string" == typeof e2 ? Vi(e2) : e2, r2 = n3.byteLength + 1 + a3.byteLength + 1, o2 = r2 % 4 ? 4 - r2 % 4 : 0; + i.push(Fi([new Uint32Array([r2]), n3, Oi, a3, Oi, new Uint8Array(o2).fill(0)])); + } + const a2 = Fi(i); + if (1 !== t3.dataFormatDescriptor.length || 0 !== t3.dataFormatDescriptor[0].descriptorType) throw new Error("Only BASICFORMAT Data Format Descriptor output supported."); + const r = t3.dataFormatDescriptor[0], o = new ArrayBuffer(28 + 16 * r.samples.length), l2 = new DataView(o), f = 24 + 16 * r.samples.length; + if (l2.setUint32(0, o.byteLength, true), l2.setUint16(4, r.vendorId, true), l2.setUint16(6, r.descriptorType, true), l2.setUint16(8, r.versionNumber, true), l2.setUint16(10, f, true), l2.setUint8(12, r.colorModel), l2.setUint8(13, r.colorPrimaries), l2.setUint8(14, r.transferFunction), l2.setUint8(15, r.flags), !Array.isArray(r.texelBlockDimension)) throw new Error("texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`."); + l2.setUint8(16, r.texelBlockDimension[0]), l2.setUint8(17, r.texelBlockDimension[1]), l2.setUint8(18, r.texelBlockDimension[2]), l2.setUint8(19, r.texelBlockDimension[3]); + for (let t4 = 0; t4 < 8; t4++) l2.setUint8(20 + t4, r.bytesPlane[t4]); + for (let t4 = 0; t4 < r.samples.length; t4++) { + const e2 = r.samples[t4], n3 = 28 + 16 * t4; + if (e2.channelID) throw new Error("channelID has been renamed to channelType."); + l2.setUint16(n3 + 0, e2.bitOffset, true), l2.setUint8(n3 + 2, e2.bitLength), l2.setUint8(n3 + 3, e2.channelType), l2.setUint8(n3 + 4, e2.samplePosition[0]), l2.setUint8(n3 + 5, e2.samplePosition[1]), l2.setUint8(n3 + 6, e2.samplePosition[2]), l2.setUint8(n3 + 7, e2.samplePosition[3]), 64 & e2.channelType ? (l2.setInt32(n3 + 8, e2.sampleLower, true), l2.setInt32(n3 + 12, e2.sampleUpper, true)) : (l2.setUint32(n3 + 8, e2.sampleLower, true), l2.setUint32(n3 + 12, e2.sampleUpper, true)); + } + const U = Ti.length + 68 + 3 * t3.levels.length * 8, c2 = U + o.byteLength; + let h = n2.byteLength > 0 ? c2 + a2.byteLength : 0; + h % 8 && (h += 8 - h % 8); + const _ = [], p2 = new DataView(new ArrayBuffer(3 * t3.levels.length * 8)); + let g2 = (h || c2 + a2.byteLength) + n2.byteLength; + for (let e2 = 0; e2 < t3.levels.length; e2++) { + const n3 = t3.levels[e2]; + _.push(n3.levelData), p2.setBigUint64(24 * e2 + 0, BigInt(g2), true), p2.setBigUint64(24 * e2 + 8, BigInt(n3.levelData.byteLength), true), p2.setBigUint64(24 * e2 + 16, BigInt(n3.uncompressedByteLength), true), g2 += n3.levelData.byteLength; + } + const y2 = new ArrayBuffer(68), x2 = new DataView(y2); + return x2.setUint32(0, t3.vkFormat, true), x2.setUint32(4, t3.typeSize, true), x2.setUint32(8, t3.pixelWidth, true), x2.setUint32(12, t3.pixelHeight, true), x2.setUint32(16, t3.pixelDepth, true), x2.setUint32(20, t3.layerCount, true), x2.setUint32(24, t3.faceCount, true), x2.setUint32(28, t3.levels.length, true), x2.setUint32(32, t3.supercompressionScheme, true), x2.setUint32(36, U, true), x2.setUint32(40, o.byteLength, true), x2.setUint32(44, c2, true), x2.setUint32(48, a2.byteLength, true), x2.setBigUint64(52, BigInt(n2.byteLength > 0 ? h : 0), true), x2.setBigUint64(60, BigInt(n2.byteLength), true), new Uint8Array(Fi([new Uint8Array(Ti).buffer, y2, p2.buffer, o, a2, h > 0 ? new ArrayBuffer(h - (c2 + a2.byteLength)) : new ArrayBuffer(0), n2, ..._])); +} + +// node_modules/three/examples/jsm/exporters/KTX2Exporter.js +var VK_FORMAT_MAP = { + [RGBAFormat]: { + [FloatType]: { + [NoColorSpace]: Ae, + [LinearSRGBColorSpace]: Ae + }, + [HalfFloatType]: { + [NoColorSpace]: pe, + [LinearSRGBColorSpace]: pe + }, + [UnsignedByteType]: { + [NoColorSpace]: Ot, + [LinearSRGBColorSpace]: Ot, + [SRGBColorSpace]: Ft + } + }, + [RGFormat]: { + [FloatType]: { + [NoColorSpace]: de, + [LinearSRGBColorSpace]: de + }, + [HalfFloatType]: { + [NoColorSpace]: se, + [LinearSRGBColorSpace]: se + }, + [UnsignedByteType]: { + [NoColorSpace]: yt, + [LinearSRGBColorSpace]: yt, + [SRGBColorSpace]: dt + } + }, + [RedFormat]: { + [FloatType]: { + [NoColorSpace]: xe, + [LinearSRGBColorSpace]: xe + }, + [HalfFloatType]: { + [NoColorSpace]: $t, + [LinearSRGBColorSpace]: $t + }, + [UnsignedByteType]: { + [NoColorSpace]: ct, + [LinearSRGBColorSpace]: ct, + [SRGBColorSpace]: gt + } + } +}; +var KHR_DF_CHANNEL_MAP = { + 0: R, + 1: Y, + 2: q, + 3: Q +}; +var ERROR_INPUT = "THREE.KTX2Exporter: Supported inputs are DataTexture, Data3DTexture, or WebGLRenderer and WebGLRenderTarget."; +var ERROR_FORMAT = "THREE.KTX2Exporter: Supported formats are RGBAFormat, RGFormat, or RedFormat."; +var ERROR_TYPE = 'THREE.KTX2Exporter: Supported types are FloatType, HalfFloatType, or UnsignedByteType."'; +var ERROR_COLOR_SPACE = "THREE.KTX2Exporter: Supported color spaces are SRGBColorSpace (UnsignedByteType only), LinearSRGBColorSpace, or NoColorSpace."; +var KTX2Exporter = class { + parse(arg1, arg2) { + let texture; + if (arg1.isDataTexture || arg1.isData3DTexture) { + texture = arg1; + } else if (arg1.isWebGLRenderer && arg2.isWebGLRenderTarget) { + texture = toDataTexture(arg1, arg2); + } else { + throw new Error(ERROR_INPUT); + } + if (VK_FORMAT_MAP[texture.format] === void 0) { + throw new Error(ERROR_FORMAT); + } + if (VK_FORMAT_MAP[texture.format][texture.type] === void 0) { + throw new Error(ERROR_TYPE); + } + if (VK_FORMAT_MAP[texture.format][texture.type][texture.colorSpace] === void 0) { + throw new Error(ERROR_COLOR_SPACE); + } + const array = texture.image.data; + const channelCount = getChannelCount(texture); + const container = new Si(); + container.vkFormat = VK_FORMAT_MAP[texture.format][texture.type][texture.colorSpace]; + container.typeSize = array.BYTES_PER_ELEMENT; + container.pixelWidth = texture.image.width; + container.pixelHeight = texture.image.height; + if (texture.isData3DTexture) { + container.pixelDepth = texture.image.depth; + } + const basicDesc = container.dataFormatDescriptor[0]; + basicDesc.colorModel = l; + basicDesc.colorPrimaries = texture.colorSpace === NoColorSpace ? E : F; + basicDesc.transferFunction = texture.colorSpace === SRGBColorSpace ? x : y; + basicDesc.texelBlockDimension = [0, 0, 0, 0]; + basicDesc.bytesPlane = [ + container.typeSize * channelCount, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]; + for (let i = 0; i < channelCount; ++i) { + let channelType = KHR_DF_CHANNEL_MAP[i]; + if (texture.colorSpace === LinearSRGBColorSpace || texture.colorSpace === NoColorSpace) { + channelType |= et2; + } + if (texture.type === FloatType || texture.type === HalfFloatType) { + channelType |= Z; + channelType |= $; + } + basicDesc.samples.push({ + channelType, + bitOffset: i * array.BYTES_PER_ELEMENT, + bitLength: array.BYTES_PER_ELEMENT * 8 - 1, + samplePosition: [0, 0, 0, 0], + sampleLower: texture.type === UnsignedByteType ? 0 : -1, + sampleUpper: texture.type === UnsignedByteType ? 255 : 1 + }); + } + container.levels = [{ + levelData: new Uint8Array(array.buffer, array.byteOffset, array.byteLength), + uncompressedByteLength: array.byteLength + }]; + container.keyValue["KTXwriter"] = `three.js ${REVISION}`; + return Mi(container, { keepWriter: true }); + } +}; +function toDataTexture(renderer2, rtt) { + const channelCount = getChannelCount(rtt.texture); + let view; + if (rtt.texture.type === FloatType) { + view = new Float32Array(rtt.width * rtt.height * channelCount); + } else if (rtt.texture.type === HalfFloatType) { + view = new Uint16Array(rtt.width * rtt.height * channelCount); + } else if (rtt.texture.type === UnsignedByteType) { + view = new Uint8Array(rtt.width * rtt.height * channelCount); + } else { + throw new Error(ERROR_TYPE); + } + renderer2.readRenderTargetPixels(rtt, 0, 0, rtt.width, rtt.height, view); + return new DataTexture(view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type); +} +function getChannelCount(texture) { + switch (texture.format) { + case RGBAFormat: + return 4; + case RGFormat: + case RGIntegerFormat: + return 2; + case RedFormat: + case RedIntegerFormat: + return 1; + default: + throw new Error(ERROR_FORMAT); + } +} + +// node_modules/three/examples/jsm/libs/mmdparser.module.js +function CharsetEncoder() { +} +CharsetEncoder.prototype.s2u = function(uint8Array) { + var t3 = this.s2uTable; + var str = ""; + var p2 = 0; + while (p2 < uint8Array.length) { + var key2 = uint8Array[p2++]; + if (!(key2 >= 0 && key2 <= 126 || key2 >= 161 && key2 <= 223) && p2 < uint8Array.length) { + key2 = key2 << 8 | uint8Array[p2++]; + } + if (t3[key2] === void 0) { + console.error("unknown char code " + key2 + "."); + return str; + } + str += String.fromCharCode(t3[key2]); + } + return str; +}; +CharsetEncoder.prototype.s2uTable = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + 10: 10, + 11: 11, + 12: 12, + 13: 13, + 14: 14, + 15: 15, + 16: 16, + 17: 17, + 18: 18, + 19: 19, + 20: 20, + 21: 21, + 22: 22, + 23: 23, + 24: 24, + 25: 25, + 26: 26, + 27: 27, + 28: 28, + 29: 29, + 30: 30, + 31: 31, + 32: 32, + 33: 33, + 34: 34, + 35: 35, + 36: 36, + 37: 37, + 38: 38, + 39: 39, + 40: 40, + 41: 41, + 42: 42, + 43: 43, + 44: 44, + 45: 45, + 46: 46, + 47: 47, + 48: 48, + 49: 49, + 50: 50, + 51: 51, + 52: 52, + 53: 53, + 54: 54, + 55: 55, + 56: 56, + 57: 57, + 58: 58, + 59: 59, + 60: 60, + 61: 61, + 62: 62, + 63: 63, + 64: 64, + 65: 65, + 66: 66, + 67: 67, + 68: 68, + 69: 69, + 70: 70, + 71: 71, + 72: 72, + 73: 73, + 74: 74, + 75: 75, + 76: 76, + 77: 77, + 78: 78, + 79: 79, + 80: 80, + 81: 81, + 82: 82, + 83: 83, + 84: 84, + 85: 85, + 86: 86, + 87: 87, + 88: 88, + 89: 89, + 90: 90, + 91: 91, + 92: 92, + 93: 93, + 94: 94, + 95: 95, + 96: 96, + 97: 97, + 98: 98, + 99: 99, + 100: 100, + 101: 101, + 102: 102, + 103: 103, + 104: 104, + 105: 105, + 106: 106, + 107: 107, + 108: 108, + 109: 109, + 110: 110, + 111: 111, + 112: 112, + 113: 113, + 114: 114, + 115: 115, + 116: 116, + 117: 117, + 118: 118, + 119: 119, + 120: 120, + 121: 121, + 122: 122, + 123: 123, + 124: 124, + 125: 125, + 126: 126, + 161: 65377, + 162: 65378, + 163: 65379, + 164: 65380, + 165: 65381, + 166: 65382, + 167: 65383, + 168: 65384, + 169: 65385, + 170: 65386, + 171: 65387, + 172: 65388, + 173: 65389, + 174: 65390, + 175: 65391, + 176: 65392, + 177: 65393, + 178: 65394, + 179: 65395, + 180: 65396, + 181: 65397, + 182: 65398, + 183: 65399, + 184: 65400, + 185: 65401, + 186: 65402, + 187: 65403, + 188: 65404, + 189: 65405, + 190: 65406, + 191: 65407, + 192: 65408, + 193: 65409, + 194: 65410, + 195: 65411, + 196: 65412, + 197: 65413, + 198: 65414, + 199: 65415, + 200: 65416, + 201: 65417, + 202: 65418, + 203: 65419, + 204: 65420, + 205: 65421, + 206: 65422, + 207: 65423, + 208: 65424, + 209: 65425, + 210: 65426, + 211: 65427, + 212: 65428, + 213: 65429, + 214: 65430, + 215: 65431, + 216: 65432, + 217: 65433, + 218: 65434, + 219: 65435, + 220: 65436, + 221: 65437, + 222: 65438, + 223: 65439, + 33088: 12288, + 33089: 12289, + 33090: 12290, + 33091: 65292, + 33092: 65294, + 33093: 12539, + 33094: 65306, + 33095: 65307, + 33096: 65311, + 33097: 65281, + 33098: 12443, + 33099: 12444, + 33100: 180, + 33101: 65344, + 33102: 168, + 33103: 65342, + 33104: 65507, + 33105: 65343, + 33106: 12541, + 33107: 12542, + 33108: 12445, + 33109: 12446, + 33110: 12291, + 33111: 20189, + 33112: 12293, + 33113: 12294, + 33114: 12295, + 33115: 12540, + 33116: 8213, + 33117: 8208, + 33118: 65295, + 33119: 65340, + 33120: 65374, + 33121: 8741, + 33122: 65372, + 33123: 8230, + 33124: 8229, + 33125: 8216, + 33126: 8217, + 33127: 8220, + 33128: 8221, + 33129: 65288, + 33130: 65289, + 33131: 12308, + 33132: 12309, + 33133: 65339, + 33134: 65341, + 33135: 65371, + 33136: 65373, + 33137: 12296, + 33138: 12297, + 33139: 12298, + 33140: 12299, + 33141: 12300, + 33142: 12301, + 33143: 12302, + 33144: 12303, + 33145: 12304, + 33146: 12305, + 33147: 65291, + 33148: 65293, + 33149: 177, + 33150: 215, + 33152: 247, + 33153: 65309, + 33154: 8800, + 33155: 65308, + 33156: 65310, + 33157: 8806, + 33158: 8807, + 33159: 8734, + 33160: 8756, + 33161: 9794, + 33162: 9792, + 33163: 176, + 33164: 8242, + 33165: 8243, + 33166: 8451, + 33167: 65509, + 33168: 65284, + 33169: 65504, + 33170: 65505, + 33171: 65285, + 33172: 65283, + 33173: 65286, + 33174: 65290, + 33175: 65312, + 33176: 167, + 33177: 9734, + 33178: 9733, + 33179: 9675, + 33180: 9679, + 33181: 9678, + 33182: 9671, + 33183: 9670, + 33184: 9633, + 33185: 9632, + 33186: 9651, + 33187: 9650, + 33188: 9661, + 33189: 9660, + 33190: 8251, + 33191: 12306, + 33192: 8594, + 33193: 8592, + 33194: 8593, + 33195: 8595, + 33196: 12307, + 33208: 8712, + 33209: 8715, + 33210: 8838, + 33211: 8839, + 33212: 8834, + 33213: 8835, + 33214: 8746, + 33215: 8745, + 33224: 8743, + 33225: 8744, + 33226: 65506, + 33227: 8658, + 33228: 8660, + 33229: 8704, + 33230: 8707, + 33242: 8736, + 33243: 8869, + 33244: 8978, + 33245: 8706, + 33246: 8711, + 33247: 8801, + 33248: 8786, + 33249: 8810, + 33250: 8811, + 33251: 8730, + 33252: 8765, + 33253: 8733, + 33254: 8757, + 33255: 8747, + 33256: 8748, + 33264: 8491, + 33265: 8240, + 33266: 9839, + 33267: 9837, + 33268: 9834, + 33269: 8224, + 33270: 8225, + 33271: 182, + 33276: 9711, + 33359: 65296, + 33360: 65297, + 33361: 65298, + 33362: 65299, + 33363: 65300, + 33364: 65301, + 33365: 65302, + 33366: 65303, + 33367: 65304, + 33368: 65305, + 33376: 65313, + 33377: 65314, + 33378: 65315, + 33379: 65316, + 33380: 65317, + 33381: 65318, + 33382: 65319, + 33383: 65320, + 33384: 65321, + 33385: 65322, + 33386: 65323, + 33387: 65324, + 33388: 65325, + 33389: 65326, + 33390: 65327, + 33391: 65328, + 33392: 65329, + 33393: 65330, + 33394: 65331, + 33395: 65332, + 33396: 65333, + 33397: 65334, + 33398: 65335, + 33399: 65336, + 33400: 65337, + 33401: 65338, + 33409: 65345, + 33410: 65346, + 33411: 65347, + 33412: 65348, + 33413: 65349, + 33414: 65350, + 33415: 65351, + 33416: 65352, + 33417: 65353, + 33418: 65354, + 33419: 65355, + 33420: 65356, + 33421: 65357, + 33422: 65358, + 33423: 65359, + 33424: 65360, + 33425: 65361, + 33426: 65362, + 33427: 65363, + 33428: 65364, + 33429: 65365, + 33430: 65366, + 33431: 65367, + 33432: 65368, + 33433: 65369, + 33434: 65370, + 33439: 12353, + 33440: 12354, + 33441: 12355, + 33442: 12356, + 33443: 12357, + 33444: 12358, + 33445: 12359, + 33446: 12360, + 33447: 12361, + 33448: 12362, + 33449: 12363, + 33450: 12364, + 33451: 12365, + 33452: 12366, + 33453: 12367, + 33454: 12368, + 33455: 12369, + 33456: 12370, + 33457: 12371, + 33458: 12372, + 33459: 12373, + 33460: 12374, + 33461: 12375, + 33462: 12376, + 33463: 12377, + 33464: 12378, + 33465: 12379, + 33466: 12380, + 33467: 12381, + 33468: 12382, + 33469: 12383, + 33470: 12384, + 33471: 12385, + 33472: 12386, + 33473: 12387, + 33474: 12388, + 33475: 12389, + 33476: 12390, + 33477: 12391, + 33478: 12392, + 33479: 12393, + 33480: 12394, + 33481: 12395, + 33482: 12396, + 33483: 12397, + 33484: 12398, + 33485: 12399, + 33486: 12400, + 33487: 12401, + 33488: 12402, + 33489: 12403, + 33490: 12404, + 33491: 12405, + 33492: 12406, + 33493: 12407, + 33494: 12408, + 33495: 12409, + 33496: 12410, + 33497: 12411, + 33498: 12412, + 33499: 12413, + 33500: 12414, + 33501: 12415, + 33502: 12416, + 33503: 12417, + 33504: 12418, + 33505: 12419, + 33506: 12420, + 33507: 12421, + 33508: 12422, + 33509: 12423, + 33510: 12424, + 33511: 12425, + 33512: 12426, + 33513: 12427, + 33514: 12428, + 33515: 12429, + 33516: 12430, + 33517: 12431, + 33518: 12432, + 33519: 12433, + 33520: 12434, + 33521: 12435, + 33600: 12449, + 33601: 12450, + 33602: 12451, + 33603: 12452, + 33604: 12453, + 33605: 12454, + 33606: 12455, + 33607: 12456, + 33608: 12457, + 33609: 12458, + 33610: 12459, + 33611: 12460, + 33612: 12461, + 33613: 12462, + 33614: 12463, + 33615: 12464, + 33616: 12465, + 33617: 12466, + 33618: 12467, + 33619: 12468, + 33620: 12469, + 33621: 12470, + 33622: 12471, + 33623: 12472, + 33624: 12473, + 33625: 12474, + 33626: 12475, + 33627: 12476, + 33628: 12477, + 33629: 12478, + 33630: 12479, + 33631: 12480, + 33632: 12481, + 33633: 12482, + 33634: 12483, + 33635: 12484, + 33636: 12485, + 33637: 12486, + 33638: 12487, + 33639: 12488, + 33640: 12489, + 33641: 12490, + 33642: 12491, + 33643: 12492, + 33644: 12493, + 33645: 12494, + 33646: 12495, + 33647: 12496, + 33648: 12497, + 33649: 12498, + 33650: 12499, + 33651: 12500, + 33652: 12501, + 33653: 12502, + 33654: 12503, + 33655: 12504, + 33656: 12505, + 33657: 12506, + 33658: 12507, + 33659: 12508, + 33660: 12509, + 33661: 12510, + 33662: 12511, + 33664: 12512, + 33665: 12513, + 33666: 12514, + 33667: 12515, + 33668: 12516, + 33669: 12517, + 33670: 12518, + 33671: 12519, + 33672: 12520, + 33673: 12521, + 33674: 12522, + 33675: 12523, + 33676: 12524, + 33677: 12525, + 33678: 12526, + 33679: 12527, + 33680: 12528, + 33681: 12529, + 33682: 12530, + 33683: 12531, + 33684: 12532, + 33685: 12533, + 33686: 12534, + 33695: 913, + 33696: 914, + 33697: 915, + 33698: 916, + 33699: 917, + 33700: 918, + 33701: 919, + 33702: 920, + 33703: 921, + 33704: 922, + 33705: 923, + 33706: 924, + 33707: 925, + 33708: 926, + 33709: 927, + 33710: 928, + 33711: 929, + 33712: 931, + 33713: 932, + 33714: 933, + 33715: 934, + 33716: 935, + 33717: 936, + 33718: 937, + 33727: 945, + 33728: 946, + 33729: 947, + 33730: 948, + 33731: 949, + 33732: 950, + 33733: 951, + 33734: 952, + 33735: 953, + 33736: 954, + 33737: 955, + 33738: 956, + 33739: 957, + 33740: 958, + 33741: 959, + 33742: 960, + 33743: 961, + 33744: 963, + 33745: 964, + 33746: 965, + 33747: 966, + 33748: 967, + 33749: 968, + 33750: 969, + 33856: 1040, + 33857: 1041, + 33858: 1042, + 33859: 1043, + 33860: 1044, + 33861: 1045, + 33862: 1025, + 33863: 1046, + 33864: 1047, + 33865: 1048, + 33866: 1049, + 33867: 1050, + 33868: 1051, + 33869: 1052, + 33870: 1053, + 33871: 1054, + 33872: 1055, + 33873: 1056, + 33874: 1057, + 33875: 1058, + 33876: 1059, + 33877: 1060, + 33878: 1061, + 33879: 1062, + 33880: 1063, + 33881: 1064, + 33882: 1065, + 33883: 1066, + 33884: 1067, + 33885: 1068, + 33886: 1069, + 33887: 1070, + 33888: 1071, + 33904: 1072, + 33905: 1073, + 33906: 1074, + 33907: 1075, + 33908: 1076, + 33909: 1077, + 33910: 1105, + 33911: 1078, + 33912: 1079, + 33913: 1080, + 33914: 1081, + 33915: 1082, + 33916: 1083, + 33917: 1084, + 33918: 1085, + 33920: 1086, + 33921: 1087, + 33922: 1088, + 33923: 1089, + 33924: 1090, + 33925: 1091, + 33926: 1092, + 33927: 1093, + 33928: 1094, + 33929: 1095, + 33930: 1096, + 33931: 1097, + 33932: 1098, + 33933: 1099, + 33934: 1100, + 33935: 1101, + 33936: 1102, + 33937: 1103, + 33951: 9472, + 33952: 9474, + 33953: 9484, + 33954: 9488, + 33955: 9496, + 33956: 9492, + 33957: 9500, + 33958: 9516, + 33959: 9508, + 33960: 9524, + 33961: 9532, + 33962: 9473, + 33963: 9475, + 33964: 9487, + 33965: 9491, + 33966: 9499, + 33967: 9495, + 33968: 9507, + 33969: 9523, + 33970: 9515, + 33971: 9531, + 33972: 9547, + 33973: 9504, + 33974: 9519, + 33975: 9512, + 33976: 9527, + 33977: 9535, + 33978: 9501, + 33979: 9520, + 33980: 9509, + 33981: 9528, + 33982: 9538, + 34624: 9312, + 34625: 9313, + 34626: 9314, + 34627: 9315, + 34628: 9316, + 34629: 9317, + 34630: 9318, + 34631: 9319, + 34632: 9320, + 34633: 9321, + 34634: 9322, + 34635: 9323, + 34636: 9324, + 34637: 9325, + 34638: 9326, + 34639: 9327, + 34640: 9328, + 34641: 9329, + 34642: 9330, + 34643: 9331, + 34644: 8544, + 34645: 8545, + 34646: 8546, + 34647: 8547, + 34648: 8548, + 34649: 8549, + 34650: 8550, + 34651: 8551, + 34652: 8552, + 34653: 8553, + 34655: 13129, + 34656: 13076, + 34657: 13090, + 34658: 13133, + 34659: 13080, + 34660: 13095, + 34661: 13059, + 34662: 13110, + 34663: 13137, + 34664: 13143, + 34665: 13069, + 34666: 13094, + 34667: 13091, + 34668: 13099, + 34669: 13130, + 34670: 13115, + 34671: 13212, + 34672: 13213, + 34673: 13214, + 34674: 13198, + 34675: 13199, + 34676: 13252, + 34677: 13217, + 34686: 13179, + 34688: 12317, + 34689: 12319, + 34690: 8470, + 34691: 13261, + 34692: 8481, + 34693: 12964, + 34694: 12965, + 34695: 12966, + 34696: 12967, + 34697: 12968, + 34698: 12849, + 34699: 12850, + 34700: 12857, + 34701: 13182, + 34702: 13181, + 34703: 13180, + 34704: 8786, + 34705: 8801, + 34706: 8747, + 34707: 8750, + 34708: 8721, + 34709: 8730, + 34710: 8869, + 34711: 8736, + 34712: 8735, + 34713: 8895, + 34714: 8757, + 34715: 8745, + 34716: 8746, + 34975: 20124, + 34976: 21782, + 34977: 23043, + 34978: 38463, + 34979: 21696, + 34980: 24859, + 34981: 25384, + 34982: 23030, + 34983: 36898, + 34984: 33909, + 34985: 33564, + 34986: 31312, + 34987: 24746, + 34988: 25569, + 34989: 28197, + 34990: 26093, + 34991: 33894, + 34992: 33446, + 34993: 39925, + 34994: 26771, + 34995: 22311, + 34996: 26017, + 34997: 25201, + 34998: 23451, + 34999: 22992, + 35e3: 34427, + 35001: 39156, + 35002: 32098, + 35003: 32190, + 35004: 39822, + 35005: 25110, + 35006: 31903, + 35007: 34999, + 35008: 23433, + 35009: 24245, + 35010: 25353, + 35011: 26263, + 35012: 26696, + 35013: 38343, + 35014: 38797, + 35015: 26447, + 35016: 20197, + 35017: 20234, + 35018: 20301, + 35019: 20381, + 35020: 20553, + 35021: 22258, + 35022: 22839, + 35023: 22996, + 35024: 23041, + 35025: 23561, + 35026: 24799, + 35027: 24847, + 35028: 24944, + 35029: 26131, + 35030: 26885, + 35031: 28858, + 35032: 30031, + 35033: 30064, + 35034: 31227, + 35035: 32173, + 35036: 32239, + 35037: 32963, + 35038: 33806, + 35039: 34915, + 35040: 35586, + 35041: 36949, + 35042: 36986, + 35043: 21307, + 35044: 20117, + 35045: 20133, + 35046: 22495, + 35047: 32946, + 35048: 37057, + 35049: 30959, + 35050: 19968, + 35051: 22769, + 35052: 28322, + 35053: 36920, + 35054: 31282, + 35055: 33576, + 35056: 33419, + 35057: 39983, + 35058: 20801, + 35059: 21360, + 35060: 21693, + 35061: 21729, + 35062: 22240, + 35063: 23035, + 35064: 24341, + 35065: 39154, + 35066: 28139, + 35067: 32996, + 35068: 34093, + 35136: 38498, + 35137: 38512, + 35138: 38560, + 35139: 38907, + 35140: 21515, + 35141: 21491, + 35142: 23431, + 35143: 28879, + 35144: 32701, + 35145: 36802, + 35146: 38632, + 35147: 21359, + 35148: 40284, + 35149: 31418, + 35150: 19985, + 35151: 30867, + 35152: 33276, + 35153: 28198, + 35154: 22040, + 35155: 21764, + 35156: 27421, + 35157: 34074, + 35158: 39995, + 35159: 23013, + 35160: 21417, + 35161: 28006, + 35162: 29916, + 35163: 38287, + 35164: 22082, + 35165: 20113, + 35166: 36939, + 35167: 38642, + 35168: 33615, + 35169: 39180, + 35170: 21473, + 35171: 21942, + 35172: 23344, + 35173: 24433, + 35174: 26144, + 35175: 26355, + 35176: 26628, + 35177: 27704, + 35178: 27891, + 35179: 27945, + 35180: 29787, + 35181: 30408, + 35182: 31310, + 35183: 38964, + 35184: 33521, + 35185: 34907, + 35186: 35424, + 35187: 37613, + 35188: 28082, + 35189: 30123, + 35190: 30410, + 35191: 39365, + 35192: 24742, + 35193: 35585, + 35194: 36234, + 35195: 38322, + 35196: 27022, + 35197: 21421, + 35198: 20870, + 35200: 22290, + 35201: 22576, + 35202: 22852, + 35203: 23476, + 35204: 24310, + 35205: 24616, + 35206: 25513, + 35207: 25588, + 35208: 27839, + 35209: 28436, + 35210: 28814, + 35211: 28948, + 35212: 29017, + 35213: 29141, + 35214: 29503, + 35215: 32257, + 35216: 33398, + 35217: 33489, + 35218: 34199, + 35219: 36960, + 35220: 37467, + 35221: 40219, + 35222: 22633, + 35223: 26044, + 35224: 27738, + 35225: 29989, + 35226: 20985, + 35227: 22830, + 35228: 22885, + 35229: 24448, + 35230: 24540, + 35231: 25276, + 35232: 26106, + 35233: 27178, + 35234: 27431, + 35235: 27572, + 35236: 29579, + 35237: 32705, + 35238: 35158, + 35239: 40236, + 35240: 40206, + 35241: 40644, + 35242: 23713, + 35243: 27798, + 35244: 33659, + 35245: 20740, + 35246: 23627, + 35247: 25014, + 35248: 33222, + 35249: 26742, + 35250: 29281, + 35251: 20057, + 35252: 20474, + 35253: 21368, + 35254: 24681, + 35255: 28201, + 35256: 31311, + 35257: 38899, + 35258: 19979, + 35259: 21270, + 35260: 20206, + 35261: 20309, + 35262: 20285, + 35263: 20385, + 35264: 20339, + 35265: 21152, + 35266: 21487, + 35267: 22025, + 35268: 22799, + 35269: 23233, + 35270: 23478, + 35271: 23521, + 35272: 31185, + 35273: 26247, + 35274: 26524, + 35275: 26550, + 35276: 27468, + 35277: 27827, + 35278: 28779, + 35279: 29634, + 35280: 31117, + 35281: 31166, + 35282: 31292, + 35283: 31623, + 35284: 33457, + 35285: 33499, + 35286: 33540, + 35287: 33655, + 35288: 33775, + 35289: 33747, + 35290: 34662, + 35291: 35506, + 35292: 22057, + 35293: 36008, + 35294: 36838, + 35295: 36942, + 35296: 38686, + 35297: 34442, + 35298: 20420, + 35299: 23784, + 35300: 25105, + 35301: 29273, + 35302: 30011, + 35303: 33253, + 35304: 33469, + 35305: 34558, + 35306: 36032, + 35307: 38597, + 35308: 39187, + 35309: 39381, + 35310: 20171, + 35311: 20250, + 35312: 35299, + 35313: 22238, + 35314: 22602, + 35315: 22730, + 35316: 24315, + 35317: 24555, + 35318: 24618, + 35319: 24724, + 35320: 24674, + 35321: 25040, + 35322: 25106, + 35323: 25296, + 35324: 25913, + 35392: 39745, + 35393: 26214, + 35394: 26800, + 35395: 28023, + 35396: 28784, + 35397: 30028, + 35398: 30342, + 35399: 32117, + 35400: 33445, + 35401: 34809, + 35402: 38283, + 35403: 38542, + 35404: 35997, + 35405: 20977, + 35406: 21182, + 35407: 22806, + 35408: 21683, + 35409: 23475, + 35410: 23830, + 35411: 24936, + 35412: 27010, + 35413: 28079, + 35414: 30861, + 35415: 33995, + 35416: 34903, + 35417: 35442, + 35418: 37799, + 35419: 39608, + 35420: 28012, + 35421: 39336, + 35422: 34521, + 35423: 22435, + 35424: 26623, + 35425: 34510, + 35426: 37390, + 35427: 21123, + 35428: 22151, + 35429: 21508, + 35430: 24275, + 35431: 25313, + 35432: 25785, + 35433: 26684, + 35434: 26680, + 35435: 27579, + 35436: 29554, + 35437: 30906, + 35438: 31339, + 35439: 35226, + 35440: 35282, + 35441: 36203, + 35442: 36611, + 35443: 37101, + 35444: 38307, + 35445: 38548, + 35446: 38761, + 35447: 23398, + 35448: 23731, + 35449: 27005, + 35450: 38989, + 35451: 38990, + 35452: 25499, + 35453: 31520, + 35454: 27179, + 35456: 27263, + 35457: 26806, + 35458: 39949, + 35459: 28511, + 35460: 21106, + 35461: 21917, + 35462: 24688, + 35463: 25324, + 35464: 27963, + 35465: 28167, + 35466: 28369, + 35467: 33883, + 35468: 35088, + 35469: 36676, + 35470: 19988, + 35471: 39993, + 35472: 21494, + 35473: 26907, + 35474: 27194, + 35475: 38788, + 35476: 26666, + 35477: 20828, + 35478: 31427, + 35479: 33970, + 35480: 37340, + 35481: 37772, + 35482: 22107, + 35483: 40232, + 35484: 26658, + 35485: 33541, + 35486: 33841, + 35487: 31909, + 35488: 21e3, + 35489: 33477, + 35490: 29926, + 35491: 20094, + 35492: 20355, + 35493: 20896, + 35494: 23506, + 35495: 21002, + 35496: 21208, + 35497: 21223, + 35498: 24059, + 35499: 21914, + 35500: 22570, + 35501: 23014, + 35502: 23436, + 35503: 23448, + 35504: 23515, + 35505: 24178, + 35506: 24185, + 35507: 24739, + 35508: 24863, + 35509: 24931, + 35510: 25022, + 35511: 25563, + 35512: 25954, + 35513: 26577, + 35514: 26707, + 35515: 26874, + 35516: 27454, + 35517: 27475, + 35518: 27735, + 35519: 28450, + 35520: 28567, + 35521: 28485, + 35522: 29872, + 35523: 29976, + 35524: 30435, + 35525: 30475, + 35526: 31487, + 35527: 31649, + 35528: 31777, + 35529: 32233, + 35530: 32566, + 35531: 32752, + 35532: 32925, + 35533: 33382, + 35534: 33694, + 35535: 35251, + 35536: 35532, + 35537: 36011, + 35538: 36996, + 35539: 37969, + 35540: 38291, + 35541: 38289, + 35542: 38306, + 35543: 38501, + 35544: 38867, + 35545: 39208, + 35546: 33304, + 35547: 20024, + 35548: 21547, + 35549: 23736, + 35550: 24012, + 35551: 29609, + 35552: 30284, + 35553: 30524, + 35554: 23721, + 35555: 32747, + 35556: 36107, + 35557: 38593, + 35558: 38929, + 35559: 38996, + 35560: 39e3, + 35561: 20225, + 35562: 20238, + 35563: 21361, + 35564: 21916, + 35565: 22120, + 35566: 22522, + 35567: 22855, + 35568: 23305, + 35569: 23492, + 35570: 23696, + 35571: 24076, + 35572: 24190, + 35573: 24524, + 35574: 25582, + 35575: 26426, + 35576: 26071, + 35577: 26082, + 35578: 26399, + 35579: 26827, + 35580: 26820, + 35648: 27231, + 35649: 24112, + 35650: 27589, + 35651: 27671, + 35652: 27773, + 35653: 30079, + 35654: 31048, + 35655: 23395, + 35656: 31232, + 35657: 32e3, + 35658: 24509, + 35659: 35215, + 35660: 35352, + 35661: 36020, + 35662: 36215, + 35663: 36556, + 35664: 36637, + 35665: 39138, + 35666: 39438, + 35667: 39740, + 35668: 20096, + 35669: 20605, + 35670: 20736, + 35671: 22931, + 35672: 23452, + 35673: 25135, + 35674: 25216, + 35675: 25836, + 35676: 27450, + 35677: 29344, + 35678: 30097, + 35679: 31047, + 35680: 32681, + 35681: 34811, + 35682: 35516, + 35683: 35696, + 35684: 25516, + 35685: 33738, + 35686: 38816, + 35687: 21513, + 35688: 21507, + 35689: 21931, + 35690: 26708, + 35691: 27224, + 35692: 35440, + 35693: 30759, + 35694: 26485, + 35695: 40653, + 35696: 21364, + 35697: 23458, + 35698: 33050, + 35699: 34384, + 35700: 36870, + 35701: 19992, + 35702: 20037, + 35703: 20167, + 35704: 20241, + 35705: 21450, + 35706: 21560, + 35707: 23470, + 35708: 24339, + 35709: 24613, + 35710: 25937, + 35712: 26429, + 35713: 27714, + 35714: 27762, + 35715: 27875, + 35716: 28792, + 35717: 29699, + 35718: 31350, + 35719: 31406, + 35720: 31496, + 35721: 32026, + 35722: 31998, + 35723: 32102, + 35724: 26087, + 35725: 29275, + 35726: 21435, + 35727: 23621, + 35728: 24040, + 35729: 25298, + 35730: 25312, + 35731: 25369, + 35732: 28192, + 35733: 34394, + 35734: 35377, + 35735: 36317, + 35736: 37624, + 35737: 28417, + 35738: 31142, + 35739: 39770, + 35740: 20136, + 35741: 20139, + 35742: 20140, + 35743: 20379, + 35744: 20384, + 35745: 20689, + 35746: 20807, + 35747: 31478, + 35748: 20849, + 35749: 20982, + 35750: 21332, + 35751: 21281, + 35752: 21375, + 35753: 21483, + 35754: 21932, + 35755: 22659, + 35756: 23777, + 35757: 24375, + 35758: 24394, + 35759: 24623, + 35760: 24656, + 35761: 24685, + 35762: 25375, + 35763: 25945, + 35764: 27211, + 35765: 27841, + 35766: 29378, + 35767: 29421, + 35768: 30703, + 35769: 33016, + 35770: 33029, + 35771: 33288, + 35772: 34126, + 35773: 37111, + 35774: 37857, + 35775: 38911, + 35776: 39255, + 35777: 39514, + 35778: 20208, + 35779: 20957, + 35780: 23597, + 35781: 26241, + 35782: 26989, + 35783: 23616, + 35784: 26354, + 35785: 26997, + 35786: 29577, + 35787: 26704, + 35788: 31873, + 35789: 20677, + 35790: 21220, + 35791: 22343, + 35792: 24062, + 35793: 37670, + 35794: 26020, + 35795: 27427, + 35796: 27453, + 35797: 29748, + 35798: 31105, + 35799: 31165, + 35800: 31563, + 35801: 32202, + 35802: 33465, + 35803: 33740, + 35804: 34943, + 35805: 35167, + 35806: 35641, + 35807: 36817, + 35808: 37329, + 35809: 21535, + 35810: 37504, + 35811: 20061, + 35812: 20534, + 35813: 21477, + 35814: 21306, + 35815: 29399, + 35816: 29590, + 35817: 30697, + 35818: 33510, + 35819: 36527, + 35820: 39366, + 35821: 39368, + 35822: 39378, + 35823: 20855, + 35824: 24858, + 35825: 34398, + 35826: 21936, + 35827: 31354, + 35828: 20598, + 35829: 23507, + 35830: 36935, + 35831: 38533, + 35832: 20018, + 35833: 27355, + 35834: 37351, + 35835: 23633, + 35836: 23624, + 35904: 25496, + 35905: 31391, + 35906: 27795, + 35907: 38772, + 35908: 36705, + 35909: 31402, + 35910: 29066, + 35911: 38536, + 35912: 31874, + 35913: 26647, + 35914: 32368, + 35915: 26705, + 35916: 37740, + 35917: 21234, + 35918: 21531, + 35919: 34219, + 35920: 35347, + 35921: 32676, + 35922: 36557, + 35923: 37089, + 35924: 21350, + 35925: 34952, + 35926: 31041, + 35927: 20418, + 35928: 20670, + 35929: 21009, + 35930: 20804, + 35931: 21843, + 35932: 22317, + 35933: 29674, + 35934: 22411, + 35935: 22865, + 35936: 24418, + 35937: 24452, + 35938: 24693, + 35939: 24950, + 35940: 24935, + 35941: 25001, + 35942: 25522, + 35943: 25658, + 35944: 25964, + 35945: 26223, + 35946: 26690, + 35947: 28179, + 35948: 30054, + 35949: 31293, + 35950: 31995, + 35951: 32076, + 35952: 32153, + 35953: 32331, + 35954: 32619, + 35955: 33550, + 35956: 33610, + 35957: 34509, + 35958: 35336, + 35959: 35427, + 35960: 35686, + 35961: 36605, + 35962: 38938, + 35963: 40335, + 35964: 33464, + 35965: 36814, + 35966: 39912, + 35968: 21127, + 35969: 25119, + 35970: 25731, + 35971: 28608, + 35972: 38553, + 35973: 26689, + 35974: 20625, + 35975: 27424, + 35976: 27770, + 35977: 28500, + 35978: 31348, + 35979: 32080, + 35980: 34880, + 35981: 35363, + 35982: 26376, + 35983: 20214, + 35984: 20537, + 35985: 20518, + 35986: 20581, + 35987: 20860, + 35988: 21048, + 35989: 21091, + 35990: 21927, + 35991: 22287, + 35992: 22533, + 35993: 23244, + 35994: 24314, + 35995: 25010, + 35996: 25080, + 35997: 25331, + 35998: 25458, + 35999: 26908, + 36e3: 27177, + 36001: 29309, + 36002: 29356, + 36003: 29486, + 36004: 30740, + 36005: 30831, + 36006: 32121, + 36007: 30476, + 36008: 32937, + 36009: 35211, + 36010: 35609, + 36011: 36066, + 36012: 36562, + 36013: 36963, + 36014: 37749, + 36015: 38522, + 36016: 38997, + 36017: 39443, + 36018: 40568, + 36019: 20803, + 36020: 21407, + 36021: 21427, + 36022: 24187, + 36023: 24358, + 36024: 28187, + 36025: 28304, + 36026: 29572, + 36027: 29694, + 36028: 32067, + 36029: 33335, + 36030: 35328, + 36031: 35578, + 36032: 38480, + 36033: 20046, + 36034: 20491, + 36035: 21476, + 36036: 21628, + 36037: 22266, + 36038: 22993, + 36039: 23396, + 36040: 24049, + 36041: 24235, + 36042: 24359, + 36043: 25144, + 36044: 25925, + 36045: 26543, + 36046: 28246, + 36047: 29392, + 36048: 31946, + 36049: 34996, + 36050: 32929, + 36051: 32993, + 36052: 33776, + 36053: 34382, + 36054: 35463, + 36055: 36328, + 36056: 37431, + 36057: 38599, + 36058: 39015, + 36059: 40723, + 36060: 20116, + 36061: 20114, + 36062: 20237, + 36063: 21320, + 36064: 21577, + 36065: 21566, + 36066: 23087, + 36067: 24460, + 36068: 24481, + 36069: 24735, + 36070: 26791, + 36071: 27278, + 36072: 29786, + 36073: 30849, + 36074: 35486, + 36075: 35492, + 36076: 35703, + 36077: 37264, + 36078: 20062, + 36079: 39881, + 36080: 20132, + 36081: 20348, + 36082: 20399, + 36083: 20505, + 36084: 20502, + 36085: 20809, + 36086: 20844, + 36087: 21151, + 36088: 21177, + 36089: 21246, + 36090: 21402, + 36091: 21475, + 36092: 21521, + 36160: 21518, + 36161: 21897, + 36162: 22353, + 36163: 22434, + 36164: 22909, + 36165: 23380, + 36166: 23389, + 36167: 23439, + 36168: 24037, + 36169: 24039, + 36170: 24055, + 36171: 24184, + 36172: 24195, + 36173: 24218, + 36174: 24247, + 36175: 24344, + 36176: 24658, + 36177: 24908, + 36178: 25239, + 36179: 25304, + 36180: 25511, + 36181: 25915, + 36182: 26114, + 36183: 26179, + 36184: 26356, + 36185: 26477, + 36186: 26657, + 36187: 26775, + 36188: 27083, + 36189: 27743, + 36190: 27946, + 36191: 28009, + 36192: 28207, + 36193: 28317, + 36194: 30002, + 36195: 30343, + 36196: 30828, + 36197: 31295, + 36198: 31968, + 36199: 32005, + 36200: 32024, + 36201: 32094, + 36202: 32177, + 36203: 32789, + 36204: 32771, + 36205: 32943, + 36206: 32945, + 36207: 33108, + 36208: 33167, + 36209: 33322, + 36210: 33618, + 36211: 34892, + 36212: 34913, + 36213: 35611, + 36214: 36002, + 36215: 36092, + 36216: 37066, + 36217: 37237, + 36218: 37489, + 36219: 30783, + 36220: 37628, + 36221: 38308, + 36222: 38477, + 36224: 38917, + 36225: 39321, + 36226: 39640, + 36227: 40251, + 36228: 21083, + 36229: 21163, + 36230: 21495, + 36231: 21512, + 36232: 22741, + 36233: 25335, + 36234: 28640, + 36235: 35946, + 36236: 36703, + 36237: 40633, + 36238: 20811, + 36239: 21051, + 36240: 21578, + 36241: 22269, + 36242: 31296, + 36243: 37239, + 36244: 40288, + 36245: 40658, + 36246: 29508, + 36247: 28425, + 36248: 33136, + 36249: 29969, + 36250: 24573, + 36251: 24794, + 36252: 39592, + 36253: 29403, + 36254: 36796, + 36255: 27492, + 36256: 38915, + 36257: 20170, + 36258: 22256, + 36259: 22372, + 36260: 22718, + 36261: 23130, + 36262: 24680, + 36263: 25031, + 36264: 26127, + 36265: 26118, + 36266: 26681, + 36267: 26801, + 36268: 28151, + 36269: 30165, + 36270: 32058, + 36271: 33390, + 36272: 39746, + 36273: 20123, + 36274: 20304, + 36275: 21449, + 36276: 21766, + 36277: 23919, + 36278: 24038, + 36279: 24046, + 36280: 26619, + 36281: 27801, + 36282: 29811, + 36283: 30722, + 36284: 35408, + 36285: 37782, + 36286: 35039, + 36287: 22352, + 36288: 24231, + 36289: 25387, + 36290: 20661, + 36291: 20652, + 36292: 20877, + 36293: 26368, + 36294: 21705, + 36295: 22622, + 36296: 22971, + 36297: 23472, + 36298: 24425, + 36299: 25165, + 36300: 25505, + 36301: 26685, + 36302: 27507, + 36303: 28168, + 36304: 28797, + 36305: 37319, + 36306: 29312, + 36307: 30741, + 36308: 30758, + 36309: 31085, + 36310: 25998, + 36311: 32048, + 36312: 33756, + 36313: 35009, + 36314: 36617, + 36315: 38555, + 36316: 21092, + 36317: 22312, + 36318: 26448, + 36319: 32618, + 36320: 36001, + 36321: 20916, + 36322: 22338, + 36323: 38442, + 36324: 22586, + 36325: 27018, + 36326: 32948, + 36327: 21682, + 36328: 23822, + 36329: 22524, + 36330: 30869, + 36331: 40442, + 36332: 20316, + 36333: 21066, + 36334: 21643, + 36335: 25662, + 36336: 26152, + 36337: 26388, + 36338: 26613, + 36339: 31364, + 36340: 31574, + 36341: 32034, + 36342: 37679, + 36343: 26716, + 36344: 39853, + 36345: 31545, + 36346: 21273, + 36347: 20874, + 36348: 21047, + 36416: 23519, + 36417: 25334, + 36418: 25774, + 36419: 25830, + 36420: 26413, + 36421: 27578, + 36422: 34217, + 36423: 38609, + 36424: 30352, + 36425: 39894, + 36426: 25420, + 36427: 37638, + 36428: 39851, + 36429: 30399, + 36430: 26194, + 36431: 19977, + 36432: 20632, + 36433: 21442, + 36434: 23665, + 36435: 24808, + 36436: 25746, + 36437: 25955, + 36438: 26719, + 36439: 29158, + 36440: 29642, + 36441: 29987, + 36442: 31639, + 36443: 32386, + 36444: 34453, + 36445: 35715, + 36446: 36059, + 36447: 37240, + 36448: 39184, + 36449: 26028, + 36450: 26283, + 36451: 27531, + 36452: 20181, + 36453: 20180, + 36454: 20282, + 36455: 20351, + 36456: 21050, + 36457: 21496, + 36458: 21490, + 36459: 21987, + 36460: 22235, + 36461: 22763, + 36462: 22987, + 36463: 22985, + 36464: 23039, + 36465: 23376, + 36466: 23629, + 36467: 24066, + 36468: 24107, + 36469: 24535, + 36470: 24605, + 36471: 25351, + 36472: 25903, + 36473: 23388, + 36474: 26031, + 36475: 26045, + 36476: 26088, + 36477: 26525, + 36478: 27490, + 36480: 27515, + 36481: 27663, + 36482: 29509, + 36483: 31049, + 36484: 31169, + 36485: 31992, + 36486: 32025, + 36487: 32043, + 36488: 32930, + 36489: 33026, + 36490: 33267, + 36491: 35222, + 36492: 35422, + 36493: 35433, + 36494: 35430, + 36495: 35468, + 36496: 35566, + 36497: 36039, + 36498: 36060, + 36499: 38604, + 36500: 39164, + 36501: 27503, + 36502: 20107, + 36503: 20284, + 36504: 20365, + 36505: 20816, + 36506: 23383, + 36507: 23546, + 36508: 24904, + 36509: 25345, + 36510: 26178, + 36511: 27425, + 36512: 28363, + 36513: 27835, + 36514: 29246, + 36515: 29885, + 36516: 30164, + 36517: 30913, + 36518: 31034, + 36519: 32780, + 36520: 32819, + 36521: 33258, + 36522: 33940, + 36523: 36766, + 36524: 27728, + 36525: 40575, + 36526: 24335, + 36527: 35672, + 36528: 40235, + 36529: 31482, + 36530: 36600, + 36531: 23437, + 36532: 38635, + 36533: 19971, + 36534: 21489, + 36535: 22519, + 36536: 22833, + 36537: 23241, + 36538: 23460, + 36539: 24713, + 36540: 28287, + 36541: 28422, + 36542: 30142, + 36543: 36074, + 36544: 23455, + 36545: 34048, + 36546: 31712, + 36547: 20594, + 36548: 26612, + 36549: 33437, + 36550: 23649, + 36551: 34122, + 36552: 32286, + 36553: 33294, + 36554: 20889, + 36555: 23556, + 36556: 25448, + 36557: 36198, + 36558: 26012, + 36559: 29038, + 36560: 31038, + 36561: 32023, + 36562: 32773, + 36563: 35613, + 36564: 36554, + 36565: 36974, + 36566: 34503, + 36567: 37034, + 36568: 20511, + 36569: 21242, + 36570: 23610, + 36571: 26451, + 36572: 28796, + 36573: 29237, + 36574: 37196, + 36575: 37320, + 36576: 37675, + 36577: 33509, + 36578: 23490, + 36579: 24369, + 36580: 24825, + 36581: 20027, + 36582: 21462, + 36583: 23432, + 36584: 25163, + 36585: 26417, + 36586: 27530, + 36587: 29417, + 36588: 29664, + 36589: 31278, + 36590: 33131, + 36591: 36259, + 36592: 37202, + 36593: 39318, + 36594: 20754, + 36595: 21463, + 36596: 21610, + 36597: 23551, + 36598: 25480, + 36599: 27193, + 36600: 32172, + 36601: 38656, + 36602: 22234, + 36603: 21454, + 36604: 21608, + 36672: 23447, + 36673: 23601, + 36674: 24030, + 36675: 20462, + 36676: 24833, + 36677: 25342, + 36678: 27954, + 36679: 31168, + 36680: 31179, + 36681: 32066, + 36682: 32333, + 36683: 32722, + 36684: 33261, + 36685: 33311, + 36686: 33936, + 36687: 34886, + 36688: 35186, + 36689: 35728, + 36690: 36468, + 36691: 36655, + 36692: 36913, + 36693: 37195, + 36694: 37228, + 36695: 38598, + 36696: 37276, + 36697: 20160, + 36698: 20303, + 36699: 20805, + 36700: 21313, + 36701: 24467, + 36702: 25102, + 36703: 26580, + 36704: 27713, + 36705: 28171, + 36706: 29539, + 36707: 32294, + 36708: 37325, + 36709: 37507, + 36710: 21460, + 36711: 22809, + 36712: 23487, + 36713: 28113, + 36714: 31069, + 36715: 32302, + 36716: 31899, + 36717: 22654, + 36718: 29087, + 36719: 20986, + 36720: 34899, + 36721: 36848, + 36722: 20426, + 36723: 23803, + 36724: 26149, + 36725: 30636, + 36726: 31459, + 36727: 33308, + 36728: 39423, + 36729: 20934, + 36730: 24490, + 36731: 26092, + 36732: 26991, + 36733: 27529, + 36734: 28147, + 36736: 28310, + 36737: 28516, + 36738: 30462, + 36739: 32020, + 36740: 24033, + 36741: 36981, + 36742: 37255, + 36743: 38918, + 36744: 20966, + 36745: 21021, + 36746: 25152, + 36747: 26257, + 36748: 26329, + 36749: 28186, + 36750: 24246, + 36751: 32210, + 36752: 32626, + 36753: 26360, + 36754: 34223, + 36755: 34295, + 36756: 35576, + 36757: 21161, + 36758: 21465, + 36759: 22899, + 36760: 24207, + 36761: 24464, + 36762: 24661, + 36763: 37604, + 36764: 38500, + 36765: 20663, + 36766: 20767, + 36767: 21213, + 36768: 21280, + 36769: 21319, + 36770: 21484, + 36771: 21736, + 36772: 21830, + 36773: 21809, + 36774: 22039, + 36775: 22888, + 36776: 22974, + 36777: 23100, + 36778: 23477, + 36779: 23558, + 36780: 23567, + 36781: 23569, + 36782: 23578, + 36783: 24196, + 36784: 24202, + 36785: 24288, + 36786: 24432, + 36787: 25215, + 36788: 25220, + 36789: 25307, + 36790: 25484, + 36791: 25463, + 36792: 26119, + 36793: 26124, + 36794: 26157, + 36795: 26230, + 36796: 26494, + 36797: 26786, + 36798: 27167, + 36799: 27189, + 36800: 27836, + 36801: 28040, + 36802: 28169, + 36803: 28248, + 36804: 28988, + 36805: 28966, + 36806: 29031, + 36807: 30151, + 36808: 30465, + 36809: 30813, + 36810: 30977, + 36811: 31077, + 36812: 31216, + 36813: 31456, + 36814: 31505, + 36815: 31911, + 36816: 32057, + 36817: 32918, + 36818: 33750, + 36819: 33931, + 36820: 34121, + 36821: 34909, + 36822: 35059, + 36823: 35359, + 36824: 35388, + 36825: 35412, + 36826: 35443, + 36827: 35937, + 36828: 36062, + 36829: 37284, + 36830: 37478, + 36831: 37758, + 36832: 37912, + 36833: 38556, + 36834: 38808, + 36835: 19978, + 36836: 19976, + 36837: 19998, + 36838: 20055, + 36839: 20887, + 36840: 21104, + 36841: 22478, + 36842: 22580, + 36843: 22732, + 36844: 23330, + 36845: 24120, + 36846: 24773, + 36847: 25854, + 36848: 26465, + 36849: 26454, + 36850: 27972, + 36851: 29366, + 36852: 30067, + 36853: 31331, + 36854: 33976, + 36855: 35698, + 36856: 37304, + 36857: 37664, + 36858: 22065, + 36859: 22516, + 36860: 39166, + 36928: 25325, + 36929: 26893, + 36930: 27542, + 36931: 29165, + 36932: 32340, + 36933: 32887, + 36934: 33394, + 36935: 35302, + 36936: 39135, + 36937: 34645, + 36938: 36785, + 36939: 23611, + 36940: 20280, + 36941: 20449, + 36942: 20405, + 36943: 21767, + 36944: 23072, + 36945: 23517, + 36946: 23529, + 36947: 24515, + 36948: 24910, + 36949: 25391, + 36950: 26032, + 36951: 26187, + 36952: 26862, + 36953: 27035, + 36954: 28024, + 36955: 28145, + 36956: 30003, + 36957: 30137, + 36958: 30495, + 36959: 31070, + 36960: 31206, + 36961: 32051, + 36962: 33251, + 36963: 33455, + 36964: 34218, + 36965: 35242, + 36966: 35386, + 36967: 36523, + 36968: 36763, + 36969: 36914, + 36970: 37341, + 36971: 38663, + 36972: 20154, + 36973: 20161, + 36974: 20995, + 36975: 22645, + 36976: 22764, + 36977: 23563, + 36978: 29978, + 36979: 23613, + 36980: 33102, + 36981: 35338, + 36982: 36805, + 36983: 38499, + 36984: 38765, + 36985: 31525, + 36986: 35535, + 36987: 38920, + 36988: 37218, + 36989: 22259, + 36990: 21416, + 36992: 36887, + 36993: 21561, + 36994: 22402, + 36995: 24101, + 36996: 25512, + 36997: 27700, + 36998: 28810, + 36999: 30561, + 37e3: 31883, + 37001: 32736, + 37002: 34928, + 37003: 36930, + 37004: 37204, + 37005: 37648, + 37006: 37656, + 37007: 38543, + 37008: 29790, + 37009: 39620, + 37010: 23815, + 37011: 23913, + 37012: 25968, + 37013: 26530, + 37014: 36264, + 37015: 38619, + 37016: 25454, + 37017: 26441, + 37018: 26905, + 37019: 33733, + 37020: 38935, + 37021: 38592, + 37022: 35070, + 37023: 28548, + 37024: 25722, + 37025: 23544, + 37026: 19990, + 37027: 28716, + 37028: 30045, + 37029: 26159, + 37030: 20932, + 37031: 21046, + 37032: 21218, + 37033: 22995, + 37034: 24449, + 37035: 24615, + 37036: 25104, + 37037: 25919, + 37038: 25972, + 37039: 26143, + 37040: 26228, + 37041: 26866, + 37042: 26646, + 37043: 27491, + 37044: 28165, + 37045: 29298, + 37046: 29983, + 37047: 30427, + 37048: 31934, + 37049: 32854, + 37050: 22768, + 37051: 35069, + 37052: 35199, + 37053: 35488, + 37054: 35475, + 37055: 35531, + 37056: 36893, + 37057: 37266, + 37058: 38738, + 37059: 38745, + 37060: 25993, + 37061: 31246, + 37062: 33030, + 37063: 38587, + 37064: 24109, + 37065: 24796, + 37066: 25114, + 37067: 26021, + 37068: 26132, + 37069: 26512, + 37070: 30707, + 37071: 31309, + 37072: 31821, + 37073: 32318, + 37074: 33034, + 37075: 36012, + 37076: 36196, + 37077: 36321, + 37078: 36447, + 37079: 30889, + 37080: 20999, + 37081: 25305, + 37082: 25509, + 37083: 25666, + 37084: 25240, + 37085: 35373, + 37086: 31363, + 37087: 31680, + 37088: 35500, + 37089: 38634, + 37090: 32118, + 37091: 33292, + 37092: 34633, + 37093: 20185, + 37094: 20808, + 37095: 21315, + 37096: 21344, + 37097: 23459, + 37098: 23554, + 37099: 23574, + 37100: 24029, + 37101: 25126, + 37102: 25159, + 37103: 25776, + 37104: 26643, + 37105: 26676, + 37106: 27849, + 37107: 27973, + 37108: 27927, + 37109: 26579, + 37110: 28508, + 37111: 29006, + 37112: 29053, + 37113: 26059, + 37114: 31359, + 37115: 31661, + 37116: 32218, + 37184: 32330, + 37185: 32680, + 37186: 33146, + 37187: 33307, + 37188: 33337, + 37189: 34214, + 37190: 35438, + 37191: 36046, + 37192: 36341, + 37193: 36984, + 37194: 36983, + 37195: 37549, + 37196: 37521, + 37197: 38275, + 37198: 39854, + 37199: 21069, + 37200: 21892, + 37201: 28472, + 37202: 28982, + 37203: 20840, + 37204: 31109, + 37205: 32341, + 37206: 33203, + 37207: 31950, + 37208: 22092, + 37209: 22609, + 37210: 23720, + 37211: 25514, + 37212: 26366, + 37213: 26365, + 37214: 26970, + 37215: 29401, + 37216: 30095, + 37217: 30094, + 37218: 30990, + 37219: 31062, + 37220: 31199, + 37221: 31895, + 37222: 32032, + 37223: 32068, + 37224: 34311, + 37225: 35380, + 37226: 38459, + 37227: 36961, + 37228: 40736, + 37229: 20711, + 37230: 21109, + 37231: 21452, + 37232: 21474, + 37233: 20489, + 37234: 21930, + 37235: 22766, + 37236: 22863, + 37237: 29245, + 37238: 23435, + 37239: 23652, + 37240: 21277, + 37241: 24803, + 37242: 24819, + 37243: 25436, + 37244: 25475, + 37245: 25407, + 37246: 25531, + 37248: 25805, + 37249: 26089, + 37250: 26361, + 37251: 24035, + 37252: 27085, + 37253: 27133, + 37254: 28437, + 37255: 29157, + 37256: 20105, + 37257: 30185, + 37258: 30456, + 37259: 31379, + 37260: 31967, + 37261: 32207, + 37262: 32156, + 37263: 32865, + 37264: 33609, + 37265: 33624, + 37266: 33900, + 37267: 33980, + 37268: 34299, + 37269: 35013, + 37270: 36208, + 37271: 36865, + 37272: 36973, + 37273: 37783, + 37274: 38684, + 37275: 39442, + 37276: 20687, + 37277: 22679, + 37278: 24974, + 37279: 33235, + 37280: 34101, + 37281: 36104, + 37282: 36896, + 37283: 20419, + 37284: 20596, + 37285: 21063, + 37286: 21363, + 37287: 24687, + 37288: 25417, + 37289: 26463, + 37290: 28204, + 37291: 36275, + 37292: 36895, + 37293: 20439, + 37294: 23646, + 37295: 36042, + 37296: 26063, + 37297: 32154, + 37298: 21330, + 37299: 34966, + 37300: 20854, + 37301: 25539, + 37302: 23384, + 37303: 23403, + 37304: 23562, + 37305: 25613, + 37306: 26449, + 37307: 36956, + 37308: 20182, + 37309: 22810, + 37310: 22826, + 37311: 27760, + 37312: 35409, + 37313: 21822, + 37314: 22549, + 37315: 22949, + 37316: 24816, + 37317: 25171, + 37318: 26561, + 37319: 33333, + 37320: 26965, + 37321: 38464, + 37322: 39364, + 37323: 39464, + 37324: 20307, + 37325: 22534, + 37326: 23550, + 37327: 32784, + 37328: 23729, + 37329: 24111, + 37330: 24453, + 37331: 24608, + 37332: 24907, + 37333: 25140, + 37334: 26367, + 37335: 27888, + 37336: 28382, + 37337: 32974, + 37338: 33151, + 37339: 33492, + 37340: 34955, + 37341: 36024, + 37342: 36864, + 37343: 36910, + 37344: 38538, + 37345: 40667, + 37346: 39899, + 37347: 20195, + 37348: 21488, + 37349: 22823, + 37350: 31532, + 37351: 37261, + 37352: 38988, + 37353: 40441, + 37354: 28381, + 37355: 28711, + 37356: 21331, + 37357: 21828, + 37358: 23429, + 37359: 25176, + 37360: 25246, + 37361: 25299, + 37362: 27810, + 37363: 28655, + 37364: 29730, + 37365: 35351, + 37366: 37944, + 37367: 28609, + 37368: 35582, + 37369: 33592, + 37370: 20967, + 37371: 34552, + 37372: 21482, + 37440: 21481, + 37441: 20294, + 37442: 36948, + 37443: 36784, + 37444: 22890, + 37445: 33073, + 37446: 24061, + 37447: 31466, + 37448: 36799, + 37449: 26842, + 37450: 35895, + 37451: 29432, + 37452: 40008, + 37453: 27197, + 37454: 35504, + 37455: 20025, + 37456: 21336, + 37457: 22022, + 37458: 22374, + 37459: 25285, + 37460: 25506, + 37461: 26086, + 37462: 27470, + 37463: 28129, + 37464: 28251, + 37465: 28845, + 37466: 30701, + 37467: 31471, + 37468: 31658, + 37469: 32187, + 37470: 32829, + 37471: 32966, + 37472: 34507, + 37473: 35477, + 37474: 37723, + 37475: 22243, + 37476: 22727, + 37477: 24382, + 37478: 26029, + 37479: 26262, + 37480: 27264, + 37481: 27573, + 37482: 30007, + 37483: 35527, + 37484: 20516, + 37485: 30693, + 37486: 22320, + 37487: 24347, + 37488: 24677, + 37489: 26234, + 37490: 27744, + 37491: 30196, + 37492: 31258, + 37493: 32622, + 37494: 33268, + 37495: 34584, + 37496: 36933, + 37497: 39347, + 37498: 31689, + 37499: 30044, + 37500: 31481, + 37501: 31569, + 37502: 33988, + 37504: 36880, + 37505: 31209, + 37506: 31378, + 37507: 33590, + 37508: 23265, + 37509: 30528, + 37510: 20013, + 37511: 20210, + 37512: 23449, + 37513: 24544, + 37514: 25277, + 37515: 26172, + 37516: 26609, + 37517: 27880, + 37518: 34411, + 37519: 34935, + 37520: 35387, + 37521: 37198, + 37522: 37619, + 37523: 39376, + 37524: 27159, + 37525: 28710, + 37526: 29482, + 37527: 33511, + 37528: 33879, + 37529: 36015, + 37530: 19969, + 37531: 20806, + 37532: 20939, + 37533: 21899, + 37534: 23541, + 37535: 24086, + 37536: 24115, + 37537: 24193, + 37538: 24340, + 37539: 24373, + 37540: 24427, + 37541: 24500, + 37542: 25074, + 37543: 25361, + 37544: 26274, + 37545: 26397, + 37546: 28526, + 37547: 29266, + 37548: 30010, + 37549: 30522, + 37550: 32884, + 37551: 33081, + 37552: 33144, + 37553: 34678, + 37554: 35519, + 37555: 35548, + 37556: 36229, + 37557: 36339, + 37558: 37530, + 37559: 38263, + 37560: 38914, + 37561: 40165, + 37562: 21189, + 37563: 25431, + 37564: 30452, + 37565: 26389, + 37566: 27784, + 37567: 29645, + 37568: 36035, + 37569: 37806, + 37570: 38515, + 37571: 27941, + 37572: 22684, + 37573: 26894, + 37574: 27084, + 37575: 36861, + 37576: 37786, + 37577: 30171, + 37578: 36890, + 37579: 22618, + 37580: 26626, + 37581: 25524, + 37582: 27131, + 37583: 20291, + 37584: 28460, + 37585: 26584, + 37586: 36795, + 37587: 34086, + 37588: 32180, + 37589: 37716, + 37590: 26943, + 37591: 28528, + 37592: 22378, + 37593: 22775, + 37594: 23340, + 37595: 32044, + 37596: 29226, + 37597: 21514, + 37598: 37347, + 37599: 40372, + 37600: 20141, + 37601: 20302, + 37602: 20572, + 37603: 20597, + 37604: 21059, + 37605: 35998, + 37606: 21576, + 37607: 22564, + 37608: 23450, + 37609: 24093, + 37610: 24213, + 37611: 24237, + 37612: 24311, + 37613: 24351, + 37614: 24716, + 37615: 25269, + 37616: 25402, + 37617: 25552, + 37618: 26799, + 37619: 27712, + 37620: 30855, + 37621: 31118, + 37622: 31243, + 37623: 32224, + 37624: 33351, + 37625: 35330, + 37626: 35558, + 37627: 36420, + 37628: 36883, + 37696: 37048, + 37697: 37165, + 37698: 37336, + 37699: 40718, + 37700: 27877, + 37701: 25688, + 37702: 25826, + 37703: 25973, + 37704: 28404, + 37705: 30340, + 37706: 31515, + 37707: 36969, + 37708: 37841, + 37709: 28346, + 37710: 21746, + 37711: 24505, + 37712: 25764, + 37713: 36685, + 37714: 36845, + 37715: 37444, + 37716: 20856, + 37717: 22635, + 37718: 22825, + 37719: 23637, + 37720: 24215, + 37721: 28155, + 37722: 32399, + 37723: 29980, + 37724: 36028, + 37725: 36578, + 37726: 39003, + 37727: 28857, + 37728: 20253, + 37729: 27583, + 37730: 28593, + 37731: 3e4, + 37732: 38651, + 37733: 20814, + 37734: 21520, + 37735: 22581, + 37736: 22615, + 37737: 22956, + 37738: 23648, + 37739: 24466, + 37740: 26007, + 37741: 26460, + 37742: 28193, + 37743: 30331, + 37744: 33759, + 37745: 36077, + 37746: 36884, + 37747: 37117, + 37748: 37709, + 37749: 30757, + 37750: 30778, + 37751: 21162, + 37752: 24230, + 37753: 22303, + 37754: 22900, + 37755: 24594, + 37756: 20498, + 37757: 20826, + 37758: 20908, + 37760: 20941, + 37761: 20992, + 37762: 21776, + 37763: 22612, + 37764: 22616, + 37765: 22871, + 37766: 23445, + 37767: 23798, + 37768: 23947, + 37769: 24764, + 37770: 25237, + 37771: 25645, + 37772: 26481, + 37773: 26691, + 37774: 26812, + 37775: 26847, + 37776: 30423, + 37777: 28120, + 37778: 28271, + 37779: 28059, + 37780: 28783, + 37781: 29128, + 37782: 24403, + 37783: 30168, + 37784: 31095, + 37785: 31561, + 37786: 31572, + 37787: 31570, + 37788: 31958, + 37789: 32113, + 37790: 21040, + 37791: 33891, + 37792: 34153, + 37793: 34276, + 37794: 35342, + 37795: 35588, + 37796: 35910, + 37797: 36367, + 37798: 36867, + 37799: 36879, + 37800: 37913, + 37801: 38518, + 37802: 38957, + 37803: 39472, + 37804: 38360, + 37805: 20685, + 37806: 21205, + 37807: 21516, + 37808: 22530, + 37809: 23566, + 37810: 24999, + 37811: 25758, + 37812: 27934, + 37813: 30643, + 37814: 31461, + 37815: 33012, + 37816: 33796, + 37817: 36947, + 37818: 37509, + 37819: 23776, + 37820: 40199, + 37821: 21311, + 37822: 24471, + 37823: 24499, + 37824: 28060, + 37825: 29305, + 37826: 30563, + 37827: 31167, + 37828: 31716, + 37829: 27602, + 37830: 29420, + 37831: 35501, + 37832: 26627, + 37833: 27233, + 37834: 20984, + 37835: 31361, + 37836: 26932, + 37837: 23626, + 37838: 40182, + 37839: 33515, + 37840: 23493, + 37841: 37193, + 37842: 28702, + 37843: 22136, + 37844: 23663, + 37845: 24775, + 37846: 25958, + 37847: 27788, + 37848: 35930, + 37849: 36929, + 37850: 38931, + 37851: 21585, + 37852: 26311, + 37853: 37389, + 37854: 22856, + 37855: 37027, + 37856: 20869, + 37857: 20045, + 37858: 20970, + 37859: 34201, + 37860: 35598, + 37861: 28760, + 37862: 25466, + 37863: 37707, + 37864: 26978, + 37865: 39348, + 37866: 32260, + 37867: 30071, + 37868: 21335, + 37869: 26976, + 37870: 36575, + 37871: 38627, + 37872: 27741, + 37873: 20108, + 37874: 23612, + 37875: 24336, + 37876: 36841, + 37877: 21250, + 37878: 36049, + 37879: 32905, + 37880: 34425, + 37881: 24319, + 37882: 26085, + 37883: 20083, + 37884: 20837, + 37952: 22914, + 37953: 23615, + 37954: 38894, + 37955: 20219, + 37956: 22922, + 37957: 24525, + 37958: 35469, + 37959: 28641, + 37960: 31152, + 37961: 31074, + 37962: 23527, + 37963: 33905, + 37964: 29483, + 37965: 29105, + 37966: 24180, + 37967: 24565, + 37968: 25467, + 37969: 25754, + 37970: 29123, + 37971: 31896, + 37972: 20035, + 37973: 24316, + 37974: 20043, + 37975: 22492, + 37976: 22178, + 37977: 24745, + 37978: 28611, + 37979: 32013, + 37980: 33021, + 37981: 33075, + 37982: 33215, + 37983: 36786, + 37984: 35223, + 37985: 34468, + 37986: 24052, + 37987: 25226, + 37988: 25773, + 37989: 35207, + 37990: 26487, + 37991: 27874, + 37992: 27966, + 37993: 29750, + 37994: 30772, + 37995: 23110, + 37996: 32629, + 37997: 33453, + 37998: 39340, + 37999: 20467, + 38e3: 24259, + 38001: 25309, + 38002: 25490, + 38003: 25943, + 38004: 26479, + 38005: 30403, + 38006: 29260, + 38007: 32972, + 38008: 32954, + 38009: 36649, + 38010: 37197, + 38011: 20493, + 38012: 22521, + 38013: 23186, + 38014: 26757, + 38016: 26995, + 38017: 29028, + 38018: 29437, + 38019: 36023, + 38020: 22770, + 38021: 36064, + 38022: 38506, + 38023: 36889, + 38024: 34687, + 38025: 31204, + 38026: 30695, + 38027: 33833, + 38028: 20271, + 38029: 21093, + 38030: 21338, + 38031: 25293, + 38032: 26575, + 38033: 27850, + 38034: 30333, + 38035: 31636, + 38036: 31893, + 38037: 33334, + 38038: 34180, + 38039: 36843, + 38040: 26333, + 38041: 28448, + 38042: 29190, + 38043: 32283, + 38044: 33707, + 38045: 39361, + 38046: 40614, + 38047: 20989, + 38048: 31665, + 38049: 30834, + 38050: 31672, + 38051: 32903, + 38052: 31560, + 38053: 27368, + 38054: 24161, + 38055: 32908, + 38056: 30033, + 38057: 30048, + 38058: 20843, + 38059: 37474, + 38060: 28300, + 38061: 30330, + 38062: 37271, + 38063: 39658, + 38064: 20240, + 38065: 32624, + 38066: 25244, + 38067: 31567, + 38068: 38309, + 38069: 40169, + 38070: 22138, + 38071: 22617, + 38072: 34532, + 38073: 38588, + 38074: 20276, + 38075: 21028, + 38076: 21322, + 38077: 21453, + 38078: 21467, + 38079: 24070, + 38080: 25644, + 38081: 26001, + 38082: 26495, + 38083: 27710, + 38084: 27726, + 38085: 29256, + 38086: 29359, + 38087: 29677, + 38088: 30036, + 38089: 32321, + 38090: 33324, + 38091: 34281, + 38092: 36009, + 38093: 31684, + 38094: 37318, + 38095: 29033, + 38096: 38930, + 38097: 39151, + 38098: 25405, + 38099: 26217, + 38100: 30058, + 38101: 30436, + 38102: 30928, + 38103: 34115, + 38104: 34542, + 38105: 21290, + 38106: 21329, + 38107: 21542, + 38108: 22915, + 38109: 24199, + 38110: 24444, + 38111: 24754, + 38112: 25161, + 38113: 25209, + 38114: 25259, + 38115: 26e3, + 38116: 27604, + 38117: 27852, + 38118: 30130, + 38119: 30382, + 38120: 30865, + 38121: 31192, + 38122: 32203, + 38123: 32631, + 38124: 32933, + 38125: 34987, + 38126: 35513, + 38127: 36027, + 38128: 36991, + 38129: 38750, + 38130: 39131, + 38131: 27147, + 38132: 31800, + 38133: 20633, + 38134: 23614, + 38135: 24494, + 38136: 26503, + 38137: 27608, + 38138: 29749, + 38139: 30473, + 38140: 32654, + 38208: 40763, + 38209: 26570, + 38210: 31255, + 38211: 21305, + 38212: 30091, + 38213: 39661, + 38214: 24422, + 38215: 33181, + 38216: 33777, + 38217: 32920, + 38218: 24380, + 38219: 24517, + 38220: 30050, + 38221: 31558, + 38222: 36924, + 38223: 26727, + 38224: 23019, + 38225: 23195, + 38226: 32016, + 38227: 30334, + 38228: 35628, + 38229: 20469, + 38230: 24426, + 38231: 27161, + 38232: 27703, + 38233: 28418, + 38234: 29922, + 38235: 31080, + 38236: 34920, + 38237: 35413, + 38238: 35961, + 38239: 24287, + 38240: 25551, + 38241: 30149, + 38242: 31186, + 38243: 33495, + 38244: 37672, + 38245: 37618, + 38246: 33948, + 38247: 34541, + 38248: 39981, + 38249: 21697, + 38250: 24428, + 38251: 25996, + 38252: 27996, + 38253: 28693, + 38254: 36007, + 38255: 36051, + 38256: 38971, + 38257: 25935, + 38258: 29942, + 38259: 19981, + 38260: 20184, + 38261: 22496, + 38262: 22827, + 38263: 23142, + 38264: 23500, + 38265: 20904, + 38266: 24067, + 38267: 24220, + 38268: 24598, + 38269: 25206, + 38270: 25975, + 38272: 26023, + 38273: 26222, + 38274: 28014, + 38275: 29238, + 38276: 31526, + 38277: 33104, + 38278: 33178, + 38279: 33433, + 38280: 35676, + 38281: 36e3, + 38282: 36070, + 38283: 36212, + 38284: 38428, + 38285: 38468, + 38286: 20398, + 38287: 25771, + 38288: 27494, + 38289: 33310, + 38290: 33889, + 38291: 34154, + 38292: 37096, + 38293: 23553, + 38294: 26963, + 38295: 39080, + 38296: 33914, + 38297: 34135, + 38298: 20239, + 38299: 21103, + 38300: 24489, + 38301: 24133, + 38302: 26381, + 38303: 31119, + 38304: 33145, + 38305: 35079, + 38306: 35206, + 38307: 28149, + 38308: 24343, + 38309: 25173, + 38310: 27832, + 38311: 20175, + 38312: 29289, + 38313: 39826, + 38314: 20998, + 38315: 21563, + 38316: 22132, + 38317: 22707, + 38318: 24996, + 38319: 25198, + 38320: 28954, + 38321: 22894, + 38322: 31881, + 38323: 31966, + 38324: 32027, + 38325: 38640, + 38326: 25991, + 38327: 32862, + 38328: 19993, + 38329: 20341, + 38330: 20853, + 38331: 22592, + 38332: 24163, + 38333: 24179, + 38334: 24330, + 38335: 26564, + 38336: 20006, + 38337: 34109, + 38338: 38281, + 38339: 38491, + 38340: 31859, + 38341: 38913, + 38342: 20731, + 38343: 22721, + 38344: 30294, + 38345: 30887, + 38346: 21029, + 38347: 30629, + 38348: 34065, + 38349: 31622, + 38350: 20559, + 38351: 22793, + 38352: 29255, + 38353: 31687, + 38354: 32232, + 38355: 36794, + 38356: 36820, + 38357: 36941, + 38358: 20415, + 38359: 21193, + 38360: 23081, + 38361: 24321, + 38362: 38829, + 38363: 20445, + 38364: 33303, + 38365: 37610, + 38366: 22275, + 38367: 25429, + 38368: 27497, + 38369: 29995, + 38370: 35036, + 38371: 36628, + 38372: 31298, + 38373: 21215, + 38374: 22675, + 38375: 24917, + 38376: 25098, + 38377: 26286, + 38378: 27597, + 38379: 31807, + 38380: 33769, + 38381: 20515, + 38382: 20472, + 38383: 21253, + 38384: 21574, + 38385: 22577, + 38386: 22857, + 38387: 23453, + 38388: 23792, + 38389: 23791, + 38390: 23849, + 38391: 24214, + 38392: 25265, + 38393: 25447, + 38394: 25918, + 38395: 26041, + 38396: 26379, + 38464: 27861, + 38465: 27873, + 38466: 28921, + 38467: 30770, + 38468: 32299, + 38469: 32990, + 38470: 33459, + 38471: 33804, + 38472: 34028, + 38473: 34562, + 38474: 35090, + 38475: 35370, + 38476: 35914, + 38477: 37030, + 38478: 37586, + 38479: 39165, + 38480: 40179, + 38481: 40300, + 38482: 20047, + 38483: 20129, + 38484: 20621, + 38485: 21078, + 38486: 22346, + 38487: 22952, + 38488: 24125, + 38489: 24536, + 38490: 24537, + 38491: 25151, + 38492: 26292, + 38493: 26395, + 38494: 26576, + 38495: 26834, + 38496: 20882, + 38497: 32033, + 38498: 32938, + 38499: 33192, + 38500: 35584, + 38501: 35980, + 38502: 36031, + 38503: 37502, + 38504: 38450, + 38505: 21536, + 38506: 38956, + 38507: 21271, + 38508: 20693, + 38509: 21340, + 38510: 22696, + 38511: 25778, + 38512: 26420, + 38513: 29287, + 38514: 30566, + 38515: 31302, + 38516: 37350, + 38517: 21187, + 38518: 27809, + 38519: 27526, + 38520: 22528, + 38521: 24140, + 38522: 22868, + 38523: 26412, + 38524: 32763, + 38525: 20961, + 38526: 30406, + 38528: 25705, + 38529: 30952, + 38530: 39764, + 38531: 40635, + 38532: 22475, + 38533: 22969, + 38534: 26151, + 38535: 26522, + 38536: 27598, + 38537: 21737, + 38538: 27097, + 38539: 24149, + 38540: 33180, + 38541: 26517, + 38542: 39850, + 38543: 26622, + 38544: 40018, + 38545: 26717, + 38546: 20134, + 38547: 20451, + 38548: 21448, + 38549: 25273, + 38550: 26411, + 38551: 27819, + 38552: 36804, + 38553: 20397, + 38554: 32365, + 38555: 40639, + 38556: 19975, + 38557: 24930, + 38558: 28288, + 38559: 28459, + 38560: 34067, + 38561: 21619, + 38562: 26410, + 38563: 39749, + 38564: 24051, + 38565: 31637, + 38566: 23724, + 38567: 23494, + 38568: 34588, + 38569: 28234, + 38570: 34001, + 38571: 31252, + 38572: 33032, + 38573: 22937, + 38574: 31885, + 38575: 27665, + 38576: 30496, + 38577: 21209, + 38578: 22818, + 38579: 28961, + 38580: 29279, + 38581: 30683, + 38582: 38695, + 38583: 40289, + 38584: 26891, + 38585: 23167, + 38586: 23064, + 38587: 20901, + 38588: 21517, + 38589: 21629, + 38590: 26126, + 38591: 30431, + 38592: 36855, + 38593: 37528, + 38594: 40180, + 38595: 23018, + 38596: 29277, + 38597: 28357, + 38598: 20813, + 38599: 26825, + 38600: 32191, + 38601: 32236, + 38602: 38754, + 38603: 40634, + 38604: 25720, + 38605: 27169, + 38606: 33538, + 38607: 22916, + 38608: 23391, + 38609: 27611, + 38610: 29467, + 38611: 30450, + 38612: 32178, + 38613: 32791, + 38614: 33945, + 38615: 20786, + 38616: 26408, + 38617: 40665, + 38618: 30446, + 38619: 26466, + 38620: 21247, + 38621: 39173, + 38622: 23588, + 38623: 25147, + 38624: 31870, + 38625: 36016, + 38626: 21839, + 38627: 24758, + 38628: 32011, + 38629: 38272, + 38630: 21249, + 38631: 20063, + 38632: 20918, + 38633: 22812, + 38634: 29242, + 38635: 32822, + 38636: 37326, + 38637: 24357, + 38638: 30690, + 38639: 21380, + 38640: 24441, + 38641: 32004, + 38642: 34220, + 38643: 35379, + 38644: 36493, + 38645: 38742, + 38646: 26611, + 38647: 34222, + 38648: 37971, + 38649: 24841, + 38650: 24840, + 38651: 27833, + 38652: 30290, + 38720: 35565, + 38721: 36664, + 38722: 21807, + 38723: 20305, + 38724: 20778, + 38725: 21191, + 38726: 21451, + 38727: 23461, + 38728: 24189, + 38729: 24736, + 38730: 24962, + 38731: 25558, + 38732: 26377, + 38733: 26586, + 38734: 28263, + 38735: 28044, + 38736: 29494, + 38737: 29495, + 38738: 30001, + 38739: 31056, + 38740: 35029, + 38741: 35480, + 38742: 36938, + 38743: 37009, + 38744: 37109, + 38745: 38596, + 38746: 34701, + 38747: 22805, + 38748: 20104, + 38749: 20313, + 38750: 19982, + 38751: 35465, + 38752: 36671, + 38753: 38928, + 38754: 20653, + 38755: 24188, + 38756: 22934, + 38757: 23481, + 38758: 24248, + 38759: 25562, + 38760: 25594, + 38761: 25793, + 38762: 26332, + 38763: 26954, + 38764: 27096, + 38765: 27915, + 38766: 28342, + 38767: 29076, + 38768: 29992, + 38769: 31407, + 38770: 32650, + 38771: 32768, + 38772: 33865, + 38773: 33993, + 38774: 35201, + 38775: 35617, + 38776: 36362, + 38777: 36965, + 38778: 38525, + 38779: 39178, + 38780: 24958, + 38781: 25233, + 38782: 27442, + 38784: 27779, + 38785: 28020, + 38786: 32716, + 38787: 32764, + 38788: 28096, + 38789: 32645, + 38790: 34746, + 38791: 35064, + 38792: 26469, + 38793: 33713, + 38794: 38972, + 38795: 38647, + 38796: 27931, + 38797: 32097, + 38798: 33853, + 38799: 37226, + 38800: 20081, + 38801: 21365, + 38802: 23888, + 38803: 27396, + 38804: 28651, + 38805: 34253, + 38806: 34349, + 38807: 35239, + 38808: 21033, + 38809: 21519, + 38810: 23653, + 38811: 26446, + 38812: 26792, + 38813: 29702, + 38814: 29827, + 38815: 30178, + 38816: 35023, + 38817: 35041, + 38818: 37324, + 38819: 38626, + 38820: 38520, + 38821: 24459, + 38822: 29575, + 38823: 31435, + 38824: 33870, + 38825: 25504, + 38826: 30053, + 38827: 21129, + 38828: 27969, + 38829: 28316, + 38830: 29705, + 38831: 30041, + 38832: 30827, + 38833: 31890, + 38834: 38534, + 38835: 31452, + 38836: 40845, + 38837: 20406, + 38838: 24942, + 38839: 26053, + 38840: 34396, + 38841: 20102, + 38842: 20142, + 38843: 20698, + 38844: 20001, + 38845: 20940, + 38846: 23534, + 38847: 26009, + 38848: 26753, + 38849: 28092, + 38850: 29471, + 38851: 30274, + 38852: 30637, + 38853: 31260, + 38854: 31975, + 38855: 33391, + 38856: 35538, + 38857: 36988, + 38858: 37327, + 38859: 38517, + 38860: 38936, + 38861: 21147, + 38862: 32209, + 38863: 20523, + 38864: 21400, + 38865: 26519, + 38866: 28107, + 38867: 29136, + 38868: 29747, + 38869: 33256, + 38870: 36650, + 38871: 38563, + 38872: 40023, + 38873: 40607, + 38874: 29792, + 38875: 22593, + 38876: 28057, + 38877: 32047, + 38878: 39006, + 38879: 20196, + 38880: 20278, + 38881: 20363, + 38882: 20919, + 38883: 21169, + 38884: 23994, + 38885: 24604, + 38886: 29618, + 38887: 31036, + 38888: 33491, + 38889: 37428, + 38890: 38583, + 38891: 38646, + 38892: 38666, + 38893: 40599, + 38894: 40802, + 38895: 26278, + 38896: 27508, + 38897: 21015, + 38898: 21155, + 38899: 28872, + 38900: 35010, + 38901: 24265, + 38902: 24651, + 38903: 24976, + 38904: 28451, + 38905: 29001, + 38906: 31806, + 38907: 32244, + 38908: 32879, + 38976: 34030, + 38977: 36899, + 38978: 37676, + 38979: 21570, + 38980: 39791, + 38981: 27347, + 38982: 28809, + 38983: 36034, + 38984: 36335, + 38985: 38706, + 38986: 21172, + 38987: 23105, + 38988: 24266, + 38989: 24324, + 38990: 26391, + 38991: 27004, + 38992: 27028, + 38993: 28010, + 38994: 28431, + 38995: 29282, + 38996: 29436, + 38997: 31725, + 38998: 32769, + 38999: 32894, + 39e3: 34635, + 39001: 37070, + 39002: 20845, + 39003: 40595, + 39004: 31108, + 39005: 32907, + 39006: 37682, + 39007: 35542, + 39008: 20525, + 39009: 21644, + 39010: 35441, + 39011: 27498, + 39012: 36036, + 39013: 33031, + 39014: 24785, + 39015: 26528, + 39016: 40434, + 39017: 20121, + 39018: 20120, + 39019: 39952, + 39020: 35435, + 39021: 34241, + 39022: 34152, + 39023: 26880, + 39024: 28286, + 39025: 30871, + 39026: 33109, + 39071: 24332, + 39072: 19984, + 39073: 19989, + 39074: 20010, + 39075: 20017, + 39076: 20022, + 39077: 20028, + 39078: 20031, + 39079: 20034, + 39080: 20054, + 39081: 20056, + 39082: 20098, + 39083: 20101, + 39084: 35947, + 39085: 20106, + 39086: 33298, + 39087: 24333, + 39088: 20110, + 39089: 20126, + 39090: 20127, + 39091: 20128, + 39092: 20130, + 39093: 20144, + 39094: 20147, + 39095: 20150, + 39096: 20174, + 39097: 20173, + 39098: 20164, + 39099: 20166, + 39100: 20162, + 39101: 20183, + 39102: 20190, + 39103: 20205, + 39104: 20191, + 39105: 20215, + 39106: 20233, + 39107: 20314, + 39108: 20272, + 39109: 20315, + 39110: 20317, + 39111: 20311, + 39112: 20295, + 39113: 20342, + 39114: 20360, + 39115: 20367, + 39116: 20376, + 39117: 20347, + 39118: 20329, + 39119: 20336, + 39120: 20369, + 39121: 20335, + 39122: 20358, + 39123: 20374, + 39124: 20760, + 39125: 20436, + 39126: 20447, + 39127: 20430, + 39128: 20440, + 39129: 20443, + 39130: 20433, + 39131: 20442, + 39132: 20432, + 39133: 20452, + 39134: 20453, + 39135: 20506, + 39136: 20520, + 39137: 20500, + 39138: 20522, + 39139: 20517, + 39140: 20485, + 39141: 20252, + 39142: 20470, + 39143: 20513, + 39144: 20521, + 39145: 20524, + 39146: 20478, + 39147: 20463, + 39148: 20497, + 39149: 20486, + 39150: 20547, + 39151: 20551, + 39152: 26371, + 39153: 20565, + 39154: 20560, + 39155: 20552, + 39156: 20570, + 39157: 20566, + 39158: 20588, + 39159: 20600, + 39160: 20608, + 39161: 20634, + 39162: 20613, + 39163: 20660, + 39164: 20658, + 39232: 20681, + 39233: 20682, + 39234: 20659, + 39235: 20674, + 39236: 20694, + 39237: 20702, + 39238: 20709, + 39239: 20717, + 39240: 20707, + 39241: 20718, + 39242: 20729, + 39243: 20725, + 39244: 20745, + 39245: 20737, + 39246: 20738, + 39247: 20758, + 39248: 20757, + 39249: 20756, + 39250: 20762, + 39251: 20769, + 39252: 20794, + 39253: 20791, + 39254: 20796, + 39255: 20795, + 39256: 20799, + 39257: 20800, + 39258: 20818, + 39259: 20812, + 39260: 20820, + 39261: 20834, + 39262: 31480, + 39263: 20841, + 39264: 20842, + 39265: 20846, + 39266: 20864, + 39267: 20866, + 39268: 22232, + 39269: 20876, + 39270: 20873, + 39271: 20879, + 39272: 20881, + 39273: 20883, + 39274: 20885, + 39275: 20886, + 39276: 20900, + 39277: 20902, + 39278: 20898, + 39279: 20905, + 39280: 20906, + 39281: 20907, + 39282: 20915, + 39283: 20913, + 39284: 20914, + 39285: 20912, + 39286: 20917, + 39287: 20925, + 39288: 20933, + 39289: 20937, + 39290: 20955, + 39291: 20960, + 39292: 34389, + 39293: 20969, + 39294: 20973, + 39296: 20976, + 39297: 20981, + 39298: 20990, + 39299: 20996, + 39300: 21003, + 39301: 21012, + 39302: 21006, + 39303: 21031, + 39304: 21034, + 39305: 21038, + 39306: 21043, + 39307: 21049, + 39308: 21071, + 39309: 21060, + 39310: 21067, + 39311: 21068, + 39312: 21086, + 39313: 21076, + 39314: 21098, + 39315: 21108, + 39316: 21097, + 39317: 21107, + 39318: 21119, + 39319: 21117, + 39320: 21133, + 39321: 21140, + 39322: 21138, + 39323: 21105, + 39324: 21128, + 39325: 21137, + 39326: 36776, + 39327: 36775, + 39328: 21164, + 39329: 21165, + 39330: 21180, + 39331: 21173, + 39332: 21185, + 39333: 21197, + 39334: 21207, + 39335: 21214, + 39336: 21219, + 39337: 21222, + 39338: 39149, + 39339: 21216, + 39340: 21235, + 39341: 21237, + 39342: 21240, + 39343: 21241, + 39344: 21254, + 39345: 21256, + 39346: 30008, + 39347: 21261, + 39348: 21264, + 39349: 21263, + 39350: 21269, + 39351: 21274, + 39352: 21283, + 39353: 21295, + 39354: 21297, + 39355: 21299, + 39356: 21304, + 39357: 21312, + 39358: 21318, + 39359: 21317, + 39360: 19991, + 39361: 21321, + 39362: 21325, + 39363: 20950, + 39364: 21342, + 39365: 21353, + 39366: 21358, + 39367: 22808, + 39368: 21371, + 39369: 21367, + 39370: 21378, + 39371: 21398, + 39372: 21408, + 39373: 21414, + 39374: 21413, + 39375: 21422, + 39376: 21424, + 39377: 21430, + 39378: 21443, + 39379: 31762, + 39380: 38617, + 39381: 21471, + 39382: 26364, + 39383: 29166, + 39384: 21486, + 39385: 21480, + 39386: 21485, + 39387: 21498, + 39388: 21505, + 39389: 21565, + 39390: 21568, + 39391: 21548, + 39392: 21549, + 39393: 21564, + 39394: 21550, + 39395: 21558, + 39396: 21545, + 39397: 21533, + 39398: 21582, + 39399: 21647, + 39400: 21621, + 39401: 21646, + 39402: 21599, + 39403: 21617, + 39404: 21623, + 39405: 21616, + 39406: 21650, + 39407: 21627, + 39408: 21632, + 39409: 21622, + 39410: 21636, + 39411: 21648, + 39412: 21638, + 39413: 21703, + 39414: 21666, + 39415: 21688, + 39416: 21669, + 39417: 21676, + 39418: 21700, + 39419: 21704, + 39420: 21672, + 39488: 21675, + 39489: 21698, + 39490: 21668, + 39491: 21694, + 39492: 21692, + 39493: 21720, + 39494: 21733, + 39495: 21734, + 39496: 21775, + 39497: 21780, + 39498: 21757, + 39499: 21742, + 39500: 21741, + 39501: 21754, + 39502: 21730, + 39503: 21817, + 39504: 21824, + 39505: 21859, + 39506: 21836, + 39507: 21806, + 39508: 21852, + 39509: 21829, + 39510: 21846, + 39511: 21847, + 39512: 21816, + 39513: 21811, + 39514: 21853, + 39515: 21913, + 39516: 21888, + 39517: 21679, + 39518: 21898, + 39519: 21919, + 39520: 21883, + 39521: 21886, + 39522: 21912, + 39523: 21918, + 39524: 21934, + 39525: 21884, + 39526: 21891, + 39527: 21929, + 39528: 21895, + 39529: 21928, + 39530: 21978, + 39531: 21957, + 39532: 21983, + 39533: 21956, + 39534: 21980, + 39535: 21988, + 39536: 21972, + 39537: 22036, + 39538: 22007, + 39539: 22038, + 39540: 22014, + 39541: 22013, + 39542: 22043, + 39543: 22009, + 39544: 22094, + 39545: 22096, + 39546: 29151, + 39547: 22068, + 39548: 22070, + 39549: 22066, + 39550: 22072, + 39552: 22123, + 39553: 22116, + 39554: 22063, + 39555: 22124, + 39556: 22122, + 39557: 22150, + 39558: 22144, + 39559: 22154, + 39560: 22176, + 39561: 22164, + 39562: 22159, + 39563: 22181, + 39564: 22190, + 39565: 22198, + 39566: 22196, + 39567: 22210, + 39568: 22204, + 39569: 22209, + 39570: 22211, + 39571: 22208, + 39572: 22216, + 39573: 22222, + 39574: 22225, + 39575: 22227, + 39576: 22231, + 39577: 22254, + 39578: 22265, + 39579: 22272, + 39580: 22271, + 39581: 22276, + 39582: 22281, + 39583: 22280, + 39584: 22283, + 39585: 22285, + 39586: 22291, + 39587: 22296, + 39588: 22294, + 39589: 21959, + 39590: 22300, + 39591: 22310, + 39592: 22327, + 39593: 22328, + 39594: 22350, + 39595: 22331, + 39596: 22336, + 39597: 22351, + 39598: 22377, + 39599: 22464, + 39600: 22408, + 39601: 22369, + 39602: 22399, + 39603: 22409, + 39604: 22419, + 39605: 22432, + 39606: 22451, + 39607: 22436, + 39608: 22442, + 39609: 22448, + 39610: 22467, + 39611: 22470, + 39612: 22484, + 39613: 22482, + 39614: 22483, + 39615: 22538, + 39616: 22486, + 39617: 22499, + 39618: 22539, + 39619: 22553, + 39620: 22557, + 39621: 22642, + 39622: 22561, + 39623: 22626, + 39624: 22603, + 39625: 22640, + 39626: 27584, + 39627: 22610, + 39628: 22589, + 39629: 22649, + 39630: 22661, + 39631: 22713, + 39632: 22687, + 39633: 22699, + 39634: 22714, + 39635: 22750, + 39636: 22715, + 39637: 22712, + 39638: 22702, + 39639: 22725, + 39640: 22739, + 39641: 22737, + 39642: 22743, + 39643: 22745, + 39644: 22744, + 39645: 22757, + 39646: 22748, + 39647: 22756, + 39648: 22751, + 39649: 22767, + 39650: 22778, + 39651: 22777, + 39652: 22779, + 39653: 22780, + 39654: 22781, + 39655: 22786, + 39656: 22794, + 39657: 22800, + 39658: 22811, + 39659: 26790, + 39660: 22821, + 39661: 22828, + 39662: 22829, + 39663: 22834, + 39664: 22840, + 39665: 22846, + 39666: 31442, + 39667: 22869, + 39668: 22864, + 39669: 22862, + 39670: 22874, + 39671: 22872, + 39672: 22882, + 39673: 22880, + 39674: 22887, + 39675: 22892, + 39676: 22889, + 39744: 22904, + 39745: 22913, + 39746: 22941, + 39747: 20318, + 39748: 20395, + 39749: 22947, + 39750: 22962, + 39751: 22982, + 39752: 23016, + 39753: 23004, + 39754: 22925, + 39755: 23001, + 39756: 23002, + 39757: 23077, + 39758: 23071, + 39759: 23057, + 39760: 23068, + 39761: 23049, + 39762: 23066, + 39763: 23104, + 39764: 23148, + 39765: 23113, + 39766: 23093, + 39767: 23094, + 39768: 23138, + 39769: 23146, + 39770: 23194, + 39771: 23228, + 39772: 23230, + 39773: 23243, + 39774: 23234, + 39775: 23229, + 39776: 23267, + 39777: 23255, + 39778: 23270, + 39779: 23273, + 39780: 23254, + 39781: 23290, + 39782: 23291, + 39783: 23308, + 39784: 23307, + 39785: 23318, + 39786: 23346, + 39787: 23248, + 39788: 23338, + 39789: 23350, + 39790: 23358, + 39791: 23363, + 39792: 23365, + 39793: 23360, + 39794: 23377, + 39795: 23381, + 39796: 23386, + 39797: 23387, + 39798: 23397, + 39799: 23401, + 39800: 23408, + 39801: 23411, + 39802: 23413, + 39803: 23416, + 39804: 25992, + 39805: 23418, + 39806: 23424, + 39808: 23427, + 39809: 23462, + 39810: 23480, + 39811: 23491, + 39812: 23495, + 39813: 23497, + 39814: 23508, + 39815: 23504, + 39816: 23524, + 39817: 23526, + 39818: 23522, + 39819: 23518, + 39820: 23525, + 39821: 23531, + 39822: 23536, + 39823: 23542, + 39824: 23539, + 39825: 23557, + 39826: 23559, + 39827: 23560, + 39828: 23565, + 39829: 23571, + 39830: 23584, + 39831: 23586, + 39832: 23592, + 39833: 23608, + 39834: 23609, + 39835: 23617, + 39836: 23622, + 39837: 23630, + 39838: 23635, + 39839: 23632, + 39840: 23631, + 39841: 23409, + 39842: 23660, + 39843: 23662, + 39844: 20066, + 39845: 23670, + 39846: 23673, + 39847: 23692, + 39848: 23697, + 39849: 23700, + 39850: 22939, + 39851: 23723, + 39852: 23739, + 39853: 23734, + 39854: 23740, + 39855: 23735, + 39856: 23749, + 39857: 23742, + 39858: 23751, + 39859: 23769, + 39860: 23785, + 39861: 23805, + 39862: 23802, + 39863: 23789, + 39864: 23948, + 39865: 23786, + 39866: 23819, + 39867: 23829, + 39868: 23831, + 39869: 23900, + 39870: 23839, + 39871: 23835, + 39872: 23825, + 39873: 23828, + 39874: 23842, + 39875: 23834, + 39876: 23833, + 39877: 23832, + 39878: 23884, + 39879: 23890, + 39880: 23886, + 39881: 23883, + 39882: 23916, + 39883: 23923, + 39884: 23926, + 39885: 23943, + 39886: 23940, + 39887: 23938, + 39888: 23970, + 39889: 23965, + 39890: 23980, + 39891: 23982, + 39892: 23997, + 39893: 23952, + 39894: 23991, + 39895: 23996, + 39896: 24009, + 39897: 24013, + 39898: 24019, + 39899: 24018, + 39900: 24022, + 39901: 24027, + 39902: 24043, + 39903: 24050, + 39904: 24053, + 39905: 24075, + 39906: 24090, + 39907: 24089, + 39908: 24081, + 39909: 24091, + 39910: 24118, + 39911: 24119, + 39912: 24132, + 39913: 24131, + 39914: 24128, + 39915: 24142, + 39916: 24151, + 39917: 24148, + 39918: 24159, + 39919: 24162, + 39920: 24164, + 39921: 24135, + 39922: 24181, + 39923: 24182, + 39924: 24186, + 39925: 40636, + 39926: 24191, + 39927: 24224, + 39928: 24257, + 39929: 24258, + 39930: 24264, + 39931: 24272, + 39932: 24271, + 4e4: 24278, + 40001: 24291, + 40002: 24285, + 40003: 24282, + 40004: 24283, + 40005: 24290, + 40006: 24289, + 40007: 24296, + 40008: 24297, + 40009: 24300, + 40010: 24305, + 40011: 24307, + 40012: 24304, + 40013: 24308, + 40014: 24312, + 40015: 24318, + 40016: 24323, + 40017: 24329, + 40018: 24413, + 40019: 24412, + 40020: 24331, + 40021: 24337, + 40022: 24342, + 40023: 24361, + 40024: 24365, + 40025: 24376, + 40026: 24385, + 40027: 24392, + 40028: 24396, + 40029: 24398, + 40030: 24367, + 40031: 24401, + 40032: 24406, + 40033: 24407, + 40034: 24409, + 40035: 24417, + 40036: 24429, + 40037: 24435, + 40038: 24439, + 40039: 24451, + 40040: 24450, + 40041: 24447, + 40042: 24458, + 40043: 24456, + 40044: 24465, + 40045: 24455, + 40046: 24478, + 40047: 24473, + 40048: 24472, + 40049: 24480, + 40050: 24488, + 40051: 24493, + 40052: 24508, + 40053: 24534, + 40054: 24571, + 40055: 24548, + 40056: 24568, + 40057: 24561, + 40058: 24541, + 40059: 24755, + 40060: 24575, + 40061: 24609, + 40062: 24672, + 40064: 24601, + 40065: 24592, + 40066: 24617, + 40067: 24590, + 40068: 24625, + 40069: 24603, + 40070: 24597, + 40071: 24619, + 40072: 24614, + 40073: 24591, + 40074: 24634, + 40075: 24666, + 40076: 24641, + 40077: 24682, + 40078: 24695, + 40079: 24671, + 40080: 24650, + 40081: 24646, + 40082: 24653, + 40083: 24675, + 40084: 24643, + 40085: 24676, + 40086: 24642, + 40087: 24684, + 40088: 24683, + 40089: 24665, + 40090: 24705, + 40091: 24717, + 40092: 24807, + 40093: 24707, + 40094: 24730, + 40095: 24708, + 40096: 24731, + 40097: 24726, + 40098: 24727, + 40099: 24722, + 40100: 24743, + 40101: 24715, + 40102: 24801, + 40103: 24760, + 40104: 24800, + 40105: 24787, + 40106: 24756, + 40107: 24560, + 40108: 24765, + 40109: 24774, + 40110: 24757, + 40111: 24792, + 40112: 24909, + 40113: 24853, + 40114: 24838, + 40115: 24822, + 40116: 24823, + 40117: 24832, + 40118: 24820, + 40119: 24826, + 40120: 24835, + 40121: 24865, + 40122: 24827, + 40123: 24817, + 40124: 24845, + 40125: 24846, + 40126: 24903, + 40127: 24894, + 40128: 24872, + 40129: 24871, + 40130: 24906, + 40131: 24895, + 40132: 24892, + 40133: 24876, + 40134: 24884, + 40135: 24893, + 40136: 24898, + 40137: 24900, + 40138: 24947, + 40139: 24951, + 40140: 24920, + 40141: 24921, + 40142: 24922, + 40143: 24939, + 40144: 24948, + 40145: 24943, + 40146: 24933, + 40147: 24945, + 40148: 24927, + 40149: 24925, + 40150: 24915, + 40151: 24949, + 40152: 24985, + 40153: 24982, + 40154: 24967, + 40155: 25004, + 40156: 24980, + 40157: 24986, + 40158: 24970, + 40159: 24977, + 40160: 25003, + 40161: 25006, + 40162: 25036, + 40163: 25034, + 40164: 25033, + 40165: 25079, + 40166: 25032, + 40167: 25027, + 40168: 25030, + 40169: 25018, + 40170: 25035, + 40171: 32633, + 40172: 25037, + 40173: 25062, + 40174: 25059, + 40175: 25078, + 40176: 25082, + 40177: 25076, + 40178: 25087, + 40179: 25085, + 40180: 25084, + 40181: 25086, + 40182: 25088, + 40183: 25096, + 40184: 25097, + 40185: 25101, + 40186: 25100, + 40187: 25108, + 40188: 25115, + 40256: 25118, + 40257: 25121, + 40258: 25130, + 40259: 25134, + 40260: 25136, + 40261: 25138, + 40262: 25139, + 40263: 25153, + 40264: 25166, + 40265: 25182, + 40266: 25187, + 40267: 25179, + 40268: 25184, + 40269: 25192, + 40270: 25212, + 40271: 25218, + 40272: 25225, + 40273: 25214, + 40274: 25234, + 40275: 25235, + 40276: 25238, + 40277: 25300, + 40278: 25219, + 40279: 25236, + 40280: 25303, + 40281: 25297, + 40282: 25275, + 40283: 25295, + 40284: 25343, + 40285: 25286, + 40286: 25812, + 40287: 25288, + 40288: 25308, + 40289: 25292, + 40290: 25290, + 40291: 25282, + 40292: 25287, + 40293: 25243, + 40294: 25289, + 40295: 25356, + 40296: 25326, + 40297: 25329, + 40298: 25383, + 40299: 25346, + 40300: 25352, + 40301: 25327, + 40302: 25333, + 40303: 25424, + 40304: 25406, + 40305: 25421, + 40306: 25628, + 40307: 25423, + 40308: 25494, + 40309: 25486, + 40310: 25472, + 40311: 25515, + 40312: 25462, + 40313: 25507, + 40314: 25487, + 40315: 25481, + 40316: 25503, + 40317: 25525, + 40318: 25451, + 40320: 25449, + 40321: 25534, + 40322: 25577, + 40323: 25536, + 40324: 25542, + 40325: 25571, + 40326: 25545, + 40327: 25554, + 40328: 25590, + 40329: 25540, + 40330: 25622, + 40331: 25652, + 40332: 25606, + 40333: 25619, + 40334: 25638, + 40335: 25654, + 40336: 25885, + 40337: 25623, + 40338: 25640, + 40339: 25615, + 40340: 25703, + 40341: 25711, + 40342: 25718, + 40343: 25678, + 40344: 25898, + 40345: 25749, + 40346: 25747, + 40347: 25765, + 40348: 25769, + 40349: 25736, + 40350: 25788, + 40351: 25818, + 40352: 25810, + 40353: 25797, + 40354: 25799, + 40355: 25787, + 40356: 25816, + 40357: 25794, + 40358: 25841, + 40359: 25831, + 40360: 33289, + 40361: 25824, + 40362: 25825, + 40363: 25260, + 40364: 25827, + 40365: 25839, + 40366: 25900, + 40367: 25846, + 40368: 25844, + 40369: 25842, + 40370: 25850, + 40371: 25856, + 40372: 25853, + 40373: 25880, + 40374: 25884, + 40375: 25861, + 40376: 25892, + 40377: 25891, + 40378: 25899, + 40379: 25908, + 40380: 25909, + 40381: 25911, + 40382: 25910, + 40383: 25912, + 40384: 30027, + 40385: 25928, + 40386: 25942, + 40387: 25941, + 40388: 25933, + 40389: 25944, + 40390: 25950, + 40391: 25949, + 40392: 25970, + 40393: 25976, + 40394: 25986, + 40395: 25987, + 40396: 35722, + 40397: 26011, + 40398: 26015, + 40399: 26027, + 40400: 26039, + 40401: 26051, + 40402: 26054, + 40403: 26049, + 40404: 26052, + 40405: 26060, + 40406: 26066, + 40407: 26075, + 40408: 26073, + 40409: 26080, + 40410: 26081, + 40411: 26097, + 40412: 26482, + 40413: 26122, + 40414: 26115, + 40415: 26107, + 40416: 26483, + 40417: 26165, + 40418: 26166, + 40419: 26164, + 40420: 26140, + 40421: 26191, + 40422: 26180, + 40423: 26185, + 40424: 26177, + 40425: 26206, + 40426: 26205, + 40427: 26212, + 40428: 26215, + 40429: 26216, + 40430: 26207, + 40431: 26210, + 40432: 26224, + 40433: 26243, + 40434: 26248, + 40435: 26254, + 40436: 26249, + 40437: 26244, + 40438: 26264, + 40439: 26269, + 40440: 26305, + 40441: 26297, + 40442: 26313, + 40443: 26302, + 40444: 26300, + 40512: 26308, + 40513: 26296, + 40514: 26326, + 40515: 26330, + 40516: 26336, + 40517: 26175, + 40518: 26342, + 40519: 26345, + 40520: 26352, + 40521: 26357, + 40522: 26359, + 40523: 26383, + 40524: 26390, + 40525: 26398, + 40526: 26406, + 40527: 26407, + 40528: 38712, + 40529: 26414, + 40530: 26431, + 40531: 26422, + 40532: 26433, + 40533: 26424, + 40534: 26423, + 40535: 26438, + 40536: 26462, + 40537: 26464, + 40538: 26457, + 40539: 26467, + 40540: 26468, + 40541: 26505, + 40542: 26480, + 40543: 26537, + 40544: 26492, + 40545: 26474, + 40546: 26508, + 40547: 26507, + 40548: 26534, + 40549: 26529, + 40550: 26501, + 40551: 26551, + 40552: 26607, + 40553: 26548, + 40554: 26604, + 40555: 26547, + 40556: 26601, + 40557: 26552, + 40558: 26596, + 40559: 26590, + 40560: 26589, + 40561: 26594, + 40562: 26606, + 40563: 26553, + 40564: 26574, + 40565: 26566, + 40566: 26599, + 40567: 27292, + 40568: 26654, + 40569: 26694, + 40570: 26665, + 40571: 26688, + 40572: 26701, + 40573: 26674, + 40574: 26702, + 40576: 26803, + 40577: 26667, + 40578: 26713, + 40579: 26723, + 40580: 26743, + 40581: 26751, + 40582: 26783, + 40583: 26767, + 40584: 26797, + 40585: 26772, + 40586: 26781, + 40587: 26779, + 40588: 26755, + 40589: 27310, + 40590: 26809, + 40591: 26740, + 40592: 26805, + 40593: 26784, + 40594: 26810, + 40595: 26895, + 40596: 26765, + 40597: 26750, + 40598: 26881, + 40599: 26826, + 40600: 26888, + 40601: 26840, + 40602: 26914, + 40603: 26918, + 40604: 26849, + 40605: 26892, + 40606: 26829, + 40607: 26836, + 40608: 26855, + 40609: 26837, + 40610: 26934, + 40611: 26898, + 40612: 26884, + 40613: 26839, + 40614: 26851, + 40615: 26917, + 40616: 26873, + 40617: 26848, + 40618: 26863, + 40619: 26920, + 40620: 26922, + 40621: 26906, + 40622: 26915, + 40623: 26913, + 40624: 26822, + 40625: 27001, + 40626: 26999, + 40627: 26972, + 40628: 27e3, + 40629: 26987, + 40630: 26964, + 40631: 27006, + 40632: 26990, + 40633: 26937, + 40634: 26996, + 40635: 26941, + 40636: 26969, + 40637: 26928, + 40638: 26977, + 40639: 26974, + 40640: 26973, + 40641: 27009, + 40642: 26986, + 40643: 27058, + 40644: 27054, + 40645: 27088, + 40646: 27071, + 40647: 27073, + 40648: 27091, + 40649: 27070, + 40650: 27086, + 40651: 23528, + 40652: 27082, + 40653: 27101, + 40654: 27067, + 40655: 27075, + 40656: 27047, + 40657: 27182, + 40658: 27025, + 40659: 27040, + 40660: 27036, + 40661: 27029, + 40662: 27060, + 40663: 27102, + 40664: 27112, + 40665: 27138, + 40666: 27163, + 40667: 27135, + 40668: 27402, + 40669: 27129, + 40670: 27122, + 40671: 27111, + 40672: 27141, + 40673: 27057, + 40674: 27166, + 40675: 27117, + 40676: 27156, + 40677: 27115, + 40678: 27146, + 40679: 27154, + 40680: 27329, + 40681: 27171, + 40682: 27155, + 40683: 27204, + 40684: 27148, + 40685: 27250, + 40686: 27190, + 40687: 27256, + 40688: 27207, + 40689: 27234, + 40690: 27225, + 40691: 27238, + 40692: 27208, + 40693: 27192, + 40694: 27170, + 40695: 27280, + 40696: 27277, + 40697: 27296, + 40698: 27268, + 40699: 27298, + 40700: 27299, + 40768: 27287, + 40769: 34327, + 40770: 27323, + 40771: 27331, + 40772: 27330, + 40773: 27320, + 40774: 27315, + 40775: 27308, + 40776: 27358, + 40777: 27345, + 40778: 27359, + 40779: 27306, + 40780: 27354, + 40781: 27370, + 40782: 27387, + 40783: 27397, + 40784: 34326, + 40785: 27386, + 40786: 27410, + 40787: 27414, + 40788: 39729, + 40789: 27423, + 40790: 27448, + 40791: 27447, + 40792: 30428, + 40793: 27449, + 40794: 39150, + 40795: 27463, + 40796: 27459, + 40797: 27465, + 40798: 27472, + 40799: 27481, + 40800: 27476, + 40801: 27483, + 40802: 27487, + 40803: 27489, + 40804: 27512, + 40805: 27513, + 40806: 27519, + 40807: 27520, + 40808: 27524, + 40809: 27523, + 40810: 27533, + 40811: 27544, + 40812: 27541, + 40813: 27550, + 40814: 27556, + 40815: 27562, + 40816: 27563, + 40817: 27567, + 40818: 27570, + 40819: 27569, + 40820: 27571, + 40821: 27575, + 40822: 27580, + 40823: 27590, + 40824: 27595, + 40825: 27603, + 40826: 27615, + 40827: 27628, + 40828: 27627, + 40829: 27635, + 40830: 27631, + 40832: 40638, + 40833: 27656, + 40834: 27667, + 40835: 27668, + 40836: 27675, + 40837: 27684, + 40838: 27683, + 40839: 27742, + 40840: 27733, + 40841: 27746, + 40842: 27754, + 40843: 27778, + 40844: 27789, + 40845: 27802, + 40846: 27777, + 40847: 27803, + 40848: 27774, + 40849: 27752, + 40850: 27763, + 40851: 27794, + 40852: 27792, + 40853: 27844, + 40854: 27889, + 40855: 27859, + 40856: 27837, + 40857: 27863, + 40858: 27845, + 40859: 27869, + 40860: 27822, + 40861: 27825, + 40862: 27838, + 40863: 27834, + 40864: 27867, + 40865: 27887, + 40866: 27865, + 40867: 27882, + 40868: 27935, + 40869: 34893, + 40870: 27958, + 40871: 27947, + 40872: 27965, + 40873: 27960, + 40874: 27929, + 40875: 27957, + 40876: 27955, + 40877: 27922, + 40878: 27916, + 40879: 28003, + 40880: 28051, + 40881: 28004, + 40882: 27994, + 40883: 28025, + 40884: 27993, + 40885: 28046, + 40886: 28053, + 40887: 28644, + 40888: 28037, + 40889: 28153, + 40890: 28181, + 40891: 28170, + 40892: 28085, + 40893: 28103, + 40894: 28134, + 40895: 28088, + 40896: 28102, + 40897: 28140, + 40898: 28126, + 40899: 28108, + 40900: 28136, + 40901: 28114, + 40902: 28101, + 40903: 28154, + 40904: 28121, + 40905: 28132, + 40906: 28117, + 40907: 28138, + 40908: 28142, + 40909: 28205, + 40910: 28270, + 40911: 28206, + 40912: 28185, + 40913: 28274, + 40914: 28255, + 40915: 28222, + 40916: 28195, + 40917: 28267, + 40918: 28203, + 40919: 28278, + 40920: 28237, + 40921: 28191, + 40922: 28227, + 40923: 28218, + 40924: 28238, + 40925: 28196, + 40926: 28415, + 40927: 28189, + 40928: 28216, + 40929: 28290, + 40930: 28330, + 40931: 28312, + 40932: 28361, + 40933: 28343, + 40934: 28371, + 40935: 28349, + 40936: 28335, + 40937: 28356, + 40938: 28338, + 40939: 28372, + 40940: 28373, + 40941: 28303, + 40942: 28325, + 40943: 28354, + 40944: 28319, + 40945: 28481, + 40946: 28433, + 40947: 28748, + 40948: 28396, + 40949: 28408, + 40950: 28414, + 40951: 28479, + 40952: 28402, + 40953: 28465, + 40954: 28399, + 40955: 28466, + 40956: 28364, + 57408: 28478, + 57409: 28435, + 57410: 28407, + 57411: 28550, + 57412: 28538, + 57413: 28536, + 57414: 28545, + 57415: 28544, + 57416: 28527, + 57417: 28507, + 57418: 28659, + 57419: 28525, + 57420: 28546, + 57421: 28540, + 57422: 28504, + 57423: 28558, + 57424: 28561, + 57425: 28610, + 57426: 28518, + 57427: 28595, + 57428: 28579, + 57429: 28577, + 57430: 28580, + 57431: 28601, + 57432: 28614, + 57433: 28586, + 57434: 28639, + 57435: 28629, + 57436: 28652, + 57437: 28628, + 57438: 28632, + 57439: 28657, + 57440: 28654, + 57441: 28635, + 57442: 28681, + 57443: 28683, + 57444: 28666, + 57445: 28689, + 57446: 28673, + 57447: 28687, + 57448: 28670, + 57449: 28699, + 57450: 28698, + 57451: 28532, + 57452: 28701, + 57453: 28696, + 57454: 28703, + 57455: 28720, + 57456: 28734, + 57457: 28722, + 57458: 28753, + 57459: 28771, + 57460: 28825, + 57461: 28818, + 57462: 28847, + 57463: 28913, + 57464: 28844, + 57465: 28856, + 57466: 28851, + 57467: 28846, + 57468: 28895, + 57469: 28875, + 57470: 28893, + 57472: 28889, + 57473: 28937, + 57474: 28925, + 57475: 28956, + 57476: 28953, + 57477: 29029, + 57478: 29013, + 57479: 29064, + 57480: 29030, + 57481: 29026, + 57482: 29004, + 57483: 29014, + 57484: 29036, + 57485: 29071, + 57486: 29179, + 57487: 29060, + 57488: 29077, + 57489: 29096, + 57490: 29100, + 57491: 29143, + 57492: 29113, + 57493: 29118, + 57494: 29138, + 57495: 29129, + 57496: 29140, + 57497: 29134, + 57498: 29152, + 57499: 29164, + 57500: 29159, + 57501: 29173, + 57502: 29180, + 57503: 29177, + 57504: 29183, + 57505: 29197, + 57506: 29200, + 57507: 29211, + 57508: 29224, + 57509: 29229, + 57510: 29228, + 57511: 29232, + 57512: 29234, + 57513: 29243, + 57514: 29244, + 57515: 29247, + 57516: 29248, + 57517: 29254, + 57518: 29259, + 57519: 29272, + 57520: 29300, + 57521: 29310, + 57522: 29314, + 57523: 29313, + 57524: 29319, + 57525: 29330, + 57526: 29334, + 57527: 29346, + 57528: 29351, + 57529: 29369, + 57530: 29362, + 57531: 29379, + 57532: 29382, + 57533: 29380, + 57534: 29390, + 57535: 29394, + 57536: 29410, + 57537: 29408, + 57538: 29409, + 57539: 29433, + 57540: 29431, + 57541: 20495, + 57542: 29463, + 57543: 29450, + 57544: 29468, + 57545: 29462, + 57546: 29469, + 57547: 29492, + 57548: 29487, + 57549: 29481, + 57550: 29477, + 57551: 29502, + 57552: 29518, + 57553: 29519, + 57554: 40664, + 57555: 29527, + 57556: 29546, + 57557: 29544, + 57558: 29552, + 57559: 29560, + 57560: 29557, + 57561: 29563, + 57562: 29562, + 57563: 29640, + 57564: 29619, + 57565: 29646, + 57566: 29627, + 57567: 29632, + 57568: 29669, + 57569: 29678, + 57570: 29662, + 57571: 29858, + 57572: 29701, + 57573: 29807, + 57574: 29733, + 57575: 29688, + 57576: 29746, + 57577: 29754, + 57578: 29781, + 57579: 29759, + 57580: 29791, + 57581: 29785, + 57582: 29761, + 57583: 29788, + 57584: 29801, + 57585: 29808, + 57586: 29795, + 57587: 29802, + 57588: 29814, + 57589: 29822, + 57590: 29835, + 57591: 29854, + 57592: 29863, + 57593: 29898, + 57594: 29903, + 57595: 29908, + 57596: 29681, + 57664: 29920, + 57665: 29923, + 57666: 29927, + 57667: 29929, + 57668: 29934, + 57669: 29938, + 57670: 29936, + 57671: 29937, + 57672: 29944, + 57673: 29943, + 57674: 29956, + 57675: 29955, + 57676: 29957, + 57677: 29964, + 57678: 29966, + 57679: 29965, + 57680: 29973, + 57681: 29971, + 57682: 29982, + 57683: 29990, + 57684: 29996, + 57685: 30012, + 57686: 30020, + 57687: 30029, + 57688: 30026, + 57689: 30025, + 57690: 30043, + 57691: 30022, + 57692: 30042, + 57693: 30057, + 57694: 30052, + 57695: 30055, + 57696: 30059, + 57697: 30061, + 57698: 30072, + 57699: 30070, + 57700: 30086, + 57701: 30087, + 57702: 30068, + 57703: 30090, + 57704: 30089, + 57705: 30082, + 57706: 30100, + 57707: 30106, + 57708: 30109, + 57709: 30117, + 57710: 30115, + 57711: 30146, + 57712: 30131, + 57713: 30147, + 57714: 30133, + 57715: 30141, + 57716: 30136, + 57717: 30140, + 57718: 30129, + 57719: 30157, + 57720: 30154, + 57721: 30162, + 57722: 30169, + 57723: 30179, + 57724: 30174, + 57725: 30206, + 57726: 30207, + 57728: 30204, + 57729: 30209, + 57730: 30192, + 57731: 30202, + 57732: 30194, + 57733: 30195, + 57734: 30219, + 57735: 30221, + 57736: 30217, + 57737: 30239, + 57738: 30247, + 57739: 30240, + 57740: 30241, + 57741: 30242, + 57742: 30244, + 57743: 30260, + 57744: 30256, + 57745: 30267, + 57746: 30279, + 57747: 30280, + 57748: 30278, + 57749: 30300, + 57750: 30296, + 57751: 30305, + 57752: 30306, + 57753: 30312, + 57754: 30313, + 57755: 30314, + 57756: 30311, + 57757: 30316, + 57758: 30320, + 57759: 30322, + 57760: 30326, + 57761: 30328, + 57762: 30332, + 57763: 30336, + 57764: 30339, + 57765: 30344, + 57766: 30347, + 57767: 30350, + 57768: 30358, + 57769: 30355, + 57770: 30361, + 57771: 30362, + 57772: 30384, + 57773: 30388, + 57774: 30392, + 57775: 30393, + 57776: 30394, + 57777: 30402, + 57778: 30413, + 57779: 30422, + 57780: 30418, + 57781: 30430, + 57782: 30433, + 57783: 30437, + 57784: 30439, + 57785: 30442, + 57786: 34351, + 57787: 30459, + 57788: 30472, + 57789: 30471, + 57790: 30468, + 57791: 30505, + 57792: 30500, + 57793: 30494, + 57794: 30501, + 57795: 30502, + 57796: 30491, + 57797: 30519, + 57798: 30520, + 57799: 30535, + 57800: 30554, + 57801: 30568, + 57802: 30571, + 57803: 30555, + 57804: 30565, + 57805: 30591, + 57806: 30590, + 57807: 30585, + 57808: 30606, + 57809: 30603, + 57810: 30609, + 57811: 30624, + 57812: 30622, + 57813: 30640, + 57814: 30646, + 57815: 30649, + 57816: 30655, + 57817: 30652, + 57818: 30653, + 57819: 30651, + 57820: 30663, + 57821: 30669, + 57822: 30679, + 57823: 30682, + 57824: 30684, + 57825: 30691, + 57826: 30702, + 57827: 30716, + 57828: 30732, + 57829: 30738, + 57830: 31014, + 57831: 30752, + 57832: 31018, + 57833: 30789, + 57834: 30862, + 57835: 30836, + 57836: 30854, + 57837: 30844, + 57838: 30874, + 57839: 30860, + 57840: 30883, + 57841: 30901, + 57842: 30890, + 57843: 30895, + 57844: 30929, + 57845: 30918, + 57846: 30923, + 57847: 30932, + 57848: 30910, + 57849: 30908, + 57850: 30917, + 57851: 30922, + 57852: 30956, + 57920: 30951, + 57921: 30938, + 57922: 30973, + 57923: 30964, + 57924: 30983, + 57925: 30994, + 57926: 30993, + 57927: 31001, + 57928: 31020, + 57929: 31019, + 57930: 31040, + 57931: 31072, + 57932: 31063, + 57933: 31071, + 57934: 31066, + 57935: 31061, + 57936: 31059, + 57937: 31098, + 57938: 31103, + 57939: 31114, + 57940: 31133, + 57941: 31143, + 57942: 40779, + 57943: 31146, + 57944: 31150, + 57945: 31155, + 57946: 31161, + 57947: 31162, + 57948: 31177, + 57949: 31189, + 57950: 31207, + 57951: 31212, + 57952: 31201, + 57953: 31203, + 57954: 31240, + 57955: 31245, + 57956: 31256, + 57957: 31257, + 57958: 31264, + 57959: 31263, + 57960: 31104, + 57961: 31281, + 57962: 31291, + 57963: 31294, + 57964: 31287, + 57965: 31299, + 57966: 31319, + 57967: 31305, + 57968: 31329, + 57969: 31330, + 57970: 31337, + 57971: 40861, + 57972: 31344, + 57973: 31353, + 57974: 31357, + 57975: 31368, + 57976: 31383, + 57977: 31381, + 57978: 31384, + 57979: 31382, + 57980: 31401, + 57981: 31432, + 57982: 31408, + 57984: 31414, + 57985: 31429, + 57986: 31428, + 57987: 31423, + 57988: 36995, + 57989: 31431, + 57990: 31434, + 57991: 31437, + 57992: 31439, + 57993: 31445, + 57994: 31443, + 57995: 31449, + 57996: 31450, + 57997: 31453, + 57998: 31457, + 57999: 31458, + 58e3: 31462, + 58001: 31469, + 58002: 31472, + 58003: 31490, + 58004: 31503, + 58005: 31498, + 58006: 31494, + 58007: 31539, + 58008: 31512, + 58009: 31513, + 58010: 31518, + 58011: 31541, + 58012: 31528, + 58013: 31542, + 58014: 31568, + 58015: 31610, + 58016: 31492, + 58017: 31565, + 58018: 31499, + 58019: 31564, + 58020: 31557, + 58021: 31605, + 58022: 31589, + 58023: 31604, + 58024: 31591, + 58025: 31600, + 58026: 31601, + 58027: 31596, + 58028: 31598, + 58029: 31645, + 58030: 31640, + 58031: 31647, + 58032: 31629, + 58033: 31644, + 58034: 31642, + 58035: 31627, + 58036: 31634, + 58037: 31631, + 58038: 31581, + 58039: 31641, + 58040: 31691, + 58041: 31681, + 58042: 31692, + 58043: 31695, + 58044: 31668, + 58045: 31686, + 58046: 31709, + 58047: 31721, + 58048: 31761, + 58049: 31764, + 58050: 31718, + 58051: 31717, + 58052: 31840, + 58053: 31744, + 58054: 31751, + 58055: 31763, + 58056: 31731, + 58057: 31735, + 58058: 31767, + 58059: 31757, + 58060: 31734, + 58061: 31779, + 58062: 31783, + 58063: 31786, + 58064: 31775, + 58065: 31799, + 58066: 31787, + 58067: 31805, + 58068: 31820, + 58069: 31811, + 58070: 31828, + 58071: 31823, + 58072: 31808, + 58073: 31824, + 58074: 31832, + 58075: 31839, + 58076: 31844, + 58077: 31830, + 58078: 31845, + 58079: 31852, + 58080: 31861, + 58081: 31875, + 58082: 31888, + 58083: 31908, + 58084: 31917, + 58085: 31906, + 58086: 31915, + 58087: 31905, + 58088: 31912, + 58089: 31923, + 58090: 31922, + 58091: 31921, + 58092: 31918, + 58093: 31929, + 58094: 31933, + 58095: 31936, + 58096: 31941, + 58097: 31938, + 58098: 31960, + 58099: 31954, + 58100: 31964, + 58101: 31970, + 58102: 39739, + 58103: 31983, + 58104: 31986, + 58105: 31988, + 58106: 31990, + 58107: 31994, + 58108: 32006, + 58176: 32002, + 58177: 32028, + 58178: 32021, + 58179: 32010, + 58180: 32069, + 58181: 32075, + 58182: 32046, + 58183: 32050, + 58184: 32063, + 58185: 32053, + 58186: 32070, + 58187: 32115, + 58188: 32086, + 58189: 32078, + 58190: 32114, + 58191: 32104, + 58192: 32110, + 58193: 32079, + 58194: 32099, + 58195: 32147, + 58196: 32137, + 58197: 32091, + 58198: 32143, + 58199: 32125, + 58200: 32155, + 58201: 32186, + 58202: 32174, + 58203: 32163, + 58204: 32181, + 58205: 32199, + 58206: 32189, + 58207: 32171, + 58208: 32317, + 58209: 32162, + 58210: 32175, + 58211: 32220, + 58212: 32184, + 58213: 32159, + 58214: 32176, + 58215: 32216, + 58216: 32221, + 58217: 32228, + 58218: 32222, + 58219: 32251, + 58220: 32242, + 58221: 32225, + 58222: 32261, + 58223: 32266, + 58224: 32291, + 58225: 32289, + 58226: 32274, + 58227: 32305, + 58228: 32287, + 58229: 32265, + 58230: 32267, + 58231: 32290, + 58232: 32326, + 58233: 32358, + 58234: 32315, + 58235: 32309, + 58236: 32313, + 58237: 32323, + 58238: 32311, + 58240: 32306, + 58241: 32314, + 58242: 32359, + 58243: 32349, + 58244: 32342, + 58245: 32350, + 58246: 32345, + 58247: 32346, + 58248: 32377, + 58249: 32362, + 58250: 32361, + 58251: 32380, + 58252: 32379, + 58253: 32387, + 58254: 32213, + 58255: 32381, + 58256: 36782, + 58257: 32383, + 58258: 32392, + 58259: 32393, + 58260: 32396, + 58261: 32402, + 58262: 32400, + 58263: 32403, + 58264: 32404, + 58265: 32406, + 58266: 32398, + 58267: 32411, + 58268: 32412, + 58269: 32568, + 58270: 32570, + 58271: 32581, + 58272: 32588, + 58273: 32589, + 58274: 32590, + 58275: 32592, + 58276: 32593, + 58277: 32597, + 58278: 32596, + 58279: 32600, + 58280: 32607, + 58281: 32608, + 58282: 32616, + 58283: 32617, + 58284: 32615, + 58285: 32632, + 58286: 32642, + 58287: 32646, + 58288: 32643, + 58289: 32648, + 58290: 32647, + 58291: 32652, + 58292: 32660, + 58293: 32670, + 58294: 32669, + 58295: 32666, + 58296: 32675, + 58297: 32687, + 58298: 32690, + 58299: 32697, + 58300: 32686, + 58301: 32694, + 58302: 32696, + 58303: 35697, + 58304: 32709, + 58305: 32710, + 58306: 32714, + 58307: 32725, + 58308: 32724, + 58309: 32737, + 58310: 32742, + 58311: 32745, + 58312: 32755, + 58313: 32761, + 58314: 39132, + 58315: 32774, + 58316: 32772, + 58317: 32779, + 58318: 32786, + 58319: 32792, + 58320: 32793, + 58321: 32796, + 58322: 32801, + 58323: 32808, + 58324: 32831, + 58325: 32827, + 58326: 32842, + 58327: 32838, + 58328: 32850, + 58329: 32856, + 58330: 32858, + 58331: 32863, + 58332: 32866, + 58333: 32872, + 58334: 32883, + 58335: 32882, + 58336: 32880, + 58337: 32886, + 58338: 32889, + 58339: 32893, + 58340: 32895, + 58341: 32900, + 58342: 32902, + 58343: 32901, + 58344: 32923, + 58345: 32915, + 58346: 32922, + 58347: 32941, + 58348: 20880, + 58349: 32940, + 58350: 32987, + 58351: 32997, + 58352: 32985, + 58353: 32989, + 58354: 32964, + 58355: 32986, + 58356: 32982, + 58357: 33033, + 58358: 33007, + 58359: 33009, + 58360: 33051, + 58361: 33065, + 58362: 33059, + 58363: 33071, + 58364: 33099, + 58432: 38539, + 58433: 33094, + 58434: 33086, + 58435: 33107, + 58436: 33105, + 58437: 33020, + 58438: 33137, + 58439: 33134, + 58440: 33125, + 58441: 33126, + 58442: 33140, + 58443: 33155, + 58444: 33160, + 58445: 33162, + 58446: 33152, + 58447: 33154, + 58448: 33184, + 58449: 33173, + 58450: 33188, + 58451: 33187, + 58452: 33119, + 58453: 33171, + 58454: 33193, + 58455: 33200, + 58456: 33205, + 58457: 33214, + 58458: 33208, + 58459: 33213, + 58460: 33216, + 58461: 33218, + 58462: 33210, + 58463: 33225, + 58464: 33229, + 58465: 33233, + 58466: 33241, + 58467: 33240, + 58468: 33224, + 58469: 33242, + 58470: 33247, + 58471: 33248, + 58472: 33255, + 58473: 33274, + 58474: 33275, + 58475: 33278, + 58476: 33281, + 58477: 33282, + 58478: 33285, + 58479: 33287, + 58480: 33290, + 58481: 33293, + 58482: 33296, + 58483: 33302, + 58484: 33321, + 58485: 33323, + 58486: 33336, + 58487: 33331, + 58488: 33344, + 58489: 33369, + 58490: 33368, + 58491: 33373, + 58492: 33370, + 58493: 33375, + 58494: 33380, + 58496: 33378, + 58497: 33384, + 58498: 33386, + 58499: 33387, + 58500: 33326, + 58501: 33393, + 58502: 33399, + 58503: 33400, + 58504: 33406, + 58505: 33421, + 58506: 33426, + 58507: 33451, + 58508: 33439, + 58509: 33467, + 58510: 33452, + 58511: 33505, + 58512: 33507, + 58513: 33503, + 58514: 33490, + 58515: 33524, + 58516: 33523, + 58517: 33530, + 58518: 33683, + 58519: 33539, + 58520: 33531, + 58521: 33529, + 58522: 33502, + 58523: 33542, + 58524: 33500, + 58525: 33545, + 58526: 33497, + 58527: 33589, + 58528: 33588, + 58529: 33558, + 58530: 33586, + 58531: 33585, + 58532: 33600, + 58533: 33593, + 58534: 33616, + 58535: 33605, + 58536: 33583, + 58537: 33579, + 58538: 33559, + 58539: 33560, + 58540: 33669, + 58541: 33690, + 58542: 33706, + 58543: 33695, + 58544: 33698, + 58545: 33686, + 58546: 33571, + 58547: 33678, + 58548: 33671, + 58549: 33674, + 58550: 33660, + 58551: 33717, + 58552: 33651, + 58553: 33653, + 58554: 33696, + 58555: 33673, + 58556: 33704, + 58557: 33780, + 58558: 33811, + 58559: 33771, + 58560: 33742, + 58561: 33789, + 58562: 33795, + 58563: 33752, + 58564: 33803, + 58565: 33729, + 58566: 33783, + 58567: 33799, + 58568: 33760, + 58569: 33778, + 58570: 33805, + 58571: 33826, + 58572: 33824, + 58573: 33725, + 58574: 33848, + 58575: 34054, + 58576: 33787, + 58577: 33901, + 58578: 33834, + 58579: 33852, + 58580: 34138, + 58581: 33924, + 58582: 33911, + 58583: 33899, + 58584: 33965, + 58585: 33902, + 58586: 33922, + 58587: 33897, + 58588: 33862, + 58589: 33836, + 58590: 33903, + 58591: 33913, + 58592: 33845, + 58593: 33994, + 58594: 33890, + 58595: 33977, + 58596: 33983, + 58597: 33951, + 58598: 34009, + 58599: 33997, + 58600: 33979, + 58601: 34010, + 58602: 34e3, + 58603: 33985, + 58604: 33990, + 58605: 34006, + 58606: 33953, + 58607: 34081, + 58608: 34047, + 58609: 34036, + 58610: 34071, + 58611: 34072, + 58612: 34092, + 58613: 34079, + 58614: 34069, + 58615: 34068, + 58616: 34044, + 58617: 34112, + 58618: 34147, + 58619: 34136, + 58620: 34120, + 58688: 34113, + 58689: 34306, + 58690: 34123, + 58691: 34133, + 58692: 34176, + 58693: 34212, + 58694: 34184, + 58695: 34193, + 58696: 34186, + 58697: 34216, + 58698: 34157, + 58699: 34196, + 58700: 34203, + 58701: 34282, + 58702: 34183, + 58703: 34204, + 58704: 34167, + 58705: 34174, + 58706: 34192, + 58707: 34249, + 58708: 34234, + 58709: 34255, + 58710: 34233, + 58711: 34256, + 58712: 34261, + 58713: 34269, + 58714: 34277, + 58715: 34268, + 58716: 34297, + 58717: 34314, + 58718: 34323, + 58719: 34315, + 58720: 34302, + 58721: 34298, + 58722: 34310, + 58723: 34338, + 58724: 34330, + 58725: 34352, + 58726: 34367, + 58727: 34381, + 58728: 20053, + 58729: 34388, + 58730: 34399, + 58731: 34407, + 58732: 34417, + 58733: 34451, + 58734: 34467, + 58735: 34473, + 58736: 34474, + 58737: 34443, + 58738: 34444, + 58739: 34486, + 58740: 34479, + 58741: 34500, + 58742: 34502, + 58743: 34480, + 58744: 34505, + 58745: 34851, + 58746: 34475, + 58747: 34516, + 58748: 34526, + 58749: 34537, + 58750: 34540, + 58752: 34527, + 58753: 34523, + 58754: 34543, + 58755: 34578, + 58756: 34566, + 58757: 34568, + 58758: 34560, + 58759: 34563, + 58760: 34555, + 58761: 34577, + 58762: 34569, + 58763: 34573, + 58764: 34553, + 58765: 34570, + 58766: 34612, + 58767: 34623, + 58768: 34615, + 58769: 34619, + 58770: 34597, + 58771: 34601, + 58772: 34586, + 58773: 34656, + 58774: 34655, + 58775: 34680, + 58776: 34636, + 58777: 34638, + 58778: 34676, + 58779: 34647, + 58780: 34664, + 58781: 34670, + 58782: 34649, + 58783: 34643, + 58784: 34659, + 58785: 34666, + 58786: 34821, + 58787: 34722, + 58788: 34719, + 58789: 34690, + 58790: 34735, + 58791: 34763, + 58792: 34749, + 58793: 34752, + 58794: 34768, + 58795: 38614, + 58796: 34731, + 58797: 34756, + 58798: 34739, + 58799: 34759, + 58800: 34758, + 58801: 34747, + 58802: 34799, + 58803: 34802, + 58804: 34784, + 58805: 34831, + 58806: 34829, + 58807: 34814, + 58808: 34806, + 58809: 34807, + 58810: 34830, + 58811: 34770, + 58812: 34833, + 58813: 34838, + 58814: 34837, + 58815: 34850, + 58816: 34849, + 58817: 34865, + 58818: 34870, + 58819: 34873, + 58820: 34855, + 58821: 34875, + 58822: 34884, + 58823: 34882, + 58824: 34898, + 58825: 34905, + 58826: 34910, + 58827: 34914, + 58828: 34923, + 58829: 34945, + 58830: 34942, + 58831: 34974, + 58832: 34933, + 58833: 34941, + 58834: 34997, + 58835: 34930, + 58836: 34946, + 58837: 34967, + 58838: 34962, + 58839: 34990, + 58840: 34969, + 58841: 34978, + 58842: 34957, + 58843: 34980, + 58844: 34992, + 58845: 35007, + 58846: 34993, + 58847: 35011, + 58848: 35012, + 58849: 35028, + 58850: 35032, + 58851: 35033, + 58852: 35037, + 58853: 35065, + 58854: 35074, + 58855: 35068, + 58856: 35060, + 58857: 35048, + 58858: 35058, + 58859: 35076, + 58860: 35084, + 58861: 35082, + 58862: 35091, + 58863: 35139, + 58864: 35102, + 58865: 35109, + 58866: 35114, + 58867: 35115, + 58868: 35137, + 58869: 35140, + 58870: 35131, + 58871: 35126, + 58872: 35128, + 58873: 35148, + 58874: 35101, + 58875: 35168, + 58876: 35166, + 58944: 35174, + 58945: 35172, + 58946: 35181, + 58947: 35178, + 58948: 35183, + 58949: 35188, + 58950: 35191, + 58951: 35198, + 58952: 35203, + 58953: 35208, + 58954: 35210, + 58955: 35219, + 58956: 35224, + 58957: 35233, + 58958: 35241, + 58959: 35238, + 58960: 35244, + 58961: 35247, + 58962: 35250, + 58963: 35258, + 58964: 35261, + 58965: 35263, + 58966: 35264, + 58967: 35290, + 58968: 35292, + 58969: 35293, + 58970: 35303, + 58971: 35316, + 58972: 35320, + 58973: 35331, + 58974: 35350, + 58975: 35344, + 58976: 35340, + 58977: 35355, + 58978: 35357, + 58979: 35365, + 58980: 35382, + 58981: 35393, + 58982: 35419, + 58983: 35410, + 58984: 35398, + 58985: 35400, + 58986: 35452, + 58987: 35437, + 58988: 35436, + 58989: 35426, + 58990: 35461, + 58991: 35458, + 58992: 35460, + 58993: 35496, + 58994: 35489, + 58995: 35473, + 58996: 35493, + 58997: 35494, + 58998: 35482, + 58999: 35491, + 59e3: 35524, + 59001: 35533, + 59002: 35522, + 59003: 35546, + 59004: 35563, + 59005: 35571, + 59006: 35559, + 59008: 35556, + 59009: 35569, + 59010: 35604, + 59011: 35552, + 59012: 35554, + 59013: 35575, + 59014: 35550, + 59015: 35547, + 59016: 35596, + 59017: 35591, + 59018: 35610, + 59019: 35553, + 59020: 35606, + 59021: 35600, + 59022: 35607, + 59023: 35616, + 59024: 35635, + 59025: 38827, + 59026: 35622, + 59027: 35627, + 59028: 35646, + 59029: 35624, + 59030: 35649, + 59031: 35660, + 59032: 35663, + 59033: 35662, + 59034: 35657, + 59035: 35670, + 59036: 35675, + 59037: 35674, + 59038: 35691, + 59039: 35679, + 59040: 35692, + 59041: 35695, + 59042: 35700, + 59043: 35709, + 59044: 35712, + 59045: 35724, + 59046: 35726, + 59047: 35730, + 59048: 35731, + 59049: 35734, + 59050: 35737, + 59051: 35738, + 59052: 35898, + 59053: 35905, + 59054: 35903, + 59055: 35912, + 59056: 35916, + 59057: 35918, + 59058: 35920, + 59059: 35925, + 59060: 35938, + 59061: 35948, + 59062: 35960, + 59063: 35962, + 59064: 35970, + 59065: 35977, + 59066: 35973, + 59067: 35978, + 59068: 35981, + 59069: 35982, + 59070: 35988, + 59071: 35964, + 59072: 35992, + 59073: 25117, + 59074: 36013, + 59075: 36010, + 59076: 36029, + 59077: 36018, + 59078: 36019, + 59079: 36014, + 59080: 36022, + 59081: 36040, + 59082: 36033, + 59083: 36068, + 59084: 36067, + 59085: 36058, + 59086: 36093, + 59087: 36090, + 59088: 36091, + 59089: 36100, + 59090: 36101, + 59091: 36106, + 59092: 36103, + 59093: 36111, + 59094: 36109, + 59095: 36112, + 59096: 40782, + 59097: 36115, + 59098: 36045, + 59099: 36116, + 59100: 36118, + 59101: 36199, + 59102: 36205, + 59103: 36209, + 59104: 36211, + 59105: 36225, + 59106: 36249, + 59107: 36290, + 59108: 36286, + 59109: 36282, + 59110: 36303, + 59111: 36314, + 59112: 36310, + 59113: 36300, + 59114: 36315, + 59115: 36299, + 59116: 36330, + 59117: 36331, + 59118: 36319, + 59119: 36323, + 59120: 36348, + 59121: 36360, + 59122: 36361, + 59123: 36351, + 59124: 36381, + 59125: 36382, + 59126: 36368, + 59127: 36383, + 59128: 36418, + 59129: 36405, + 59130: 36400, + 59131: 36404, + 59132: 36426, + 59200: 36423, + 59201: 36425, + 59202: 36428, + 59203: 36432, + 59204: 36424, + 59205: 36441, + 59206: 36452, + 59207: 36448, + 59208: 36394, + 59209: 36451, + 59210: 36437, + 59211: 36470, + 59212: 36466, + 59213: 36476, + 59214: 36481, + 59215: 36487, + 59216: 36485, + 59217: 36484, + 59218: 36491, + 59219: 36490, + 59220: 36499, + 59221: 36497, + 59222: 36500, + 59223: 36505, + 59224: 36522, + 59225: 36513, + 59226: 36524, + 59227: 36528, + 59228: 36550, + 59229: 36529, + 59230: 36542, + 59231: 36549, + 59232: 36552, + 59233: 36555, + 59234: 36571, + 59235: 36579, + 59236: 36604, + 59237: 36603, + 59238: 36587, + 59239: 36606, + 59240: 36618, + 59241: 36613, + 59242: 36629, + 59243: 36626, + 59244: 36633, + 59245: 36627, + 59246: 36636, + 59247: 36639, + 59248: 36635, + 59249: 36620, + 59250: 36646, + 59251: 36659, + 59252: 36667, + 59253: 36665, + 59254: 36677, + 59255: 36674, + 59256: 36670, + 59257: 36684, + 59258: 36681, + 59259: 36678, + 59260: 36686, + 59261: 36695, + 59262: 36700, + 59264: 36706, + 59265: 36707, + 59266: 36708, + 59267: 36764, + 59268: 36767, + 59269: 36771, + 59270: 36781, + 59271: 36783, + 59272: 36791, + 59273: 36826, + 59274: 36837, + 59275: 36834, + 59276: 36842, + 59277: 36847, + 59278: 36999, + 59279: 36852, + 59280: 36869, + 59281: 36857, + 59282: 36858, + 59283: 36881, + 59284: 36885, + 59285: 36897, + 59286: 36877, + 59287: 36894, + 59288: 36886, + 59289: 36875, + 59290: 36903, + 59291: 36918, + 59292: 36917, + 59293: 36921, + 59294: 36856, + 59295: 36943, + 59296: 36944, + 59297: 36945, + 59298: 36946, + 59299: 36878, + 59300: 36937, + 59301: 36926, + 59302: 36950, + 59303: 36952, + 59304: 36958, + 59305: 36968, + 59306: 36975, + 59307: 36982, + 59308: 38568, + 59309: 36978, + 59310: 36994, + 59311: 36989, + 59312: 36993, + 59313: 36992, + 59314: 37002, + 59315: 37001, + 59316: 37007, + 59317: 37032, + 59318: 37039, + 59319: 37041, + 59320: 37045, + 59321: 37090, + 59322: 37092, + 59323: 25160, + 59324: 37083, + 59325: 37122, + 59326: 37138, + 59327: 37145, + 59328: 37170, + 59329: 37168, + 59330: 37194, + 59331: 37206, + 59332: 37208, + 59333: 37219, + 59334: 37221, + 59335: 37225, + 59336: 37235, + 59337: 37234, + 59338: 37259, + 59339: 37257, + 59340: 37250, + 59341: 37282, + 59342: 37291, + 59343: 37295, + 59344: 37290, + 59345: 37301, + 59346: 37300, + 59347: 37306, + 59348: 37312, + 59349: 37313, + 59350: 37321, + 59351: 37323, + 59352: 37328, + 59353: 37334, + 59354: 37343, + 59355: 37345, + 59356: 37339, + 59357: 37372, + 59358: 37365, + 59359: 37366, + 59360: 37406, + 59361: 37375, + 59362: 37396, + 59363: 37420, + 59364: 37397, + 59365: 37393, + 59366: 37470, + 59367: 37463, + 59368: 37445, + 59369: 37449, + 59370: 37476, + 59371: 37448, + 59372: 37525, + 59373: 37439, + 59374: 37451, + 59375: 37456, + 59376: 37532, + 59377: 37526, + 59378: 37523, + 59379: 37531, + 59380: 37466, + 59381: 37583, + 59382: 37561, + 59383: 37559, + 59384: 37609, + 59385: 37647, + 59386: 37626, + 59387: 37700, + 59388: 37678, + 59456: 37657, + 59457: 37666, + 59458: 37658, + 59459: 37667, + 59460: 37690, + 59461: 37685, + 59462: 37691, + 59463: 37724, + 59464: 37728, + 59465: 37756, + 59466: 37742, + 59467: 37718, + 59468: 37808, + 59469: 37804, + 59470: 37805, + 59471: 37780, + 59472: 37817, + 59473: 37846, + 59474: 37847, + 59475: 37864, + 59476: 37861, + 59477: 37848, + 59478: 37827, + 59479: 37853, + 59480: 37840, + 59481: 37832, + 59482: 37860, + 59483: 37914, + 59484: 37908, + 59485: 37907, + 59486: 37891, + 59487: 37895, + 59488: 37904, + 59489: 37942, + 59490: 37931, + 59491: 37941, + 59492: 37921, + 59493: 37946, + 59494: 37953, + 59495: 37970, + 59496: 37956, + 59497: 37979, + 59498: 37984, + 59499: 37986, + 59500: 37982, + 59501: 37994, + 59502: 37417, + 59503: 38e3, + 59504: 38005, + 59505: 38007, + 59506: 38013, + 59507: 37978, + 59508: 38012, + 59509: 38014, + 59510: 38017, + 59511: 38015, + 59512: 38274, + 59513: 38279, + 59514: 38282, + 59515: 38292, + 59516: 38294, + 59517: 38296, + 59518: 38297, + 59520: 38304, + 59521: 38312, + 59522: 38311, + 59523: 38317, + 59524: 38332, + 59525: 38331, + 59526: 38329, + 59527: 38334, + 59528: 38346, + 59529: 28662, + 59530: 38339, + 59531: 38349, + 59532: 38348, + 59533: 38357, + 59534: 38356, + 59535: 38358, + 59536: 38364, + 59537: 38369, + 59538: 38373, + 59539: 38370, + 59540: 38433, + 59541: 38440, + 59542: 38446, + 59543: 38447, + 59544: 38466, + 59545: 38476, + 59546: 38479, + 59547: 38475, + 59548: 38519, + 59549: 38492, + 59550: 38494, + 59551: 38493, + 59552: 38495, + 59553: 38502, + 59554: 38514, + 59555: 38508, + 59556: 38541, + 59557: 38552, + 59558: 38549, + 59559: 38551, + 59560: 38570, + 59561: 38567, + 59562: 38577, + 59563: 38578, + 59564: 38576, + 59565: 38580, + 59566: 38582, + 59567: 38584, + 59568: 38585, + 59569: 38606, + 59570: 38603, + 59571: 38601, + 59572: 38605, + 59573: 35149, + 59574: 38620, + 59575: 38669, + 59576: 38613, + 59577: 38649, + 59578: 38660, + 59579: 38662, + 59580: 38664, + 59581: 38675, + 59582: 38670, + 59583: 38673, + 59584: 38671, + 59585: 38678, + 59586: 38681, + 59587: 38692, + 59588: 38698, + 59589: 38704, + 59590: 38713, + 59591: 38717, + 59592: 38718, + 59593: 38724, + 59594: 38726, + 59595: 38728, + 59596: 38722, + 59597: 38729, + 59598: 38748, + 59599: 38752, + 59600: 38756, + 59601: 38758, + 59602: 38760, + 59603: 21202, + 59604: 38763, + 59605: 38769, + 59606: 38777, + 59607: 38789, + 59608: 38780, + 59609: 38785, + 59610: 38778, + 59611: 38790, + 59612: 38795, + 59613: 38799, + 59614: 38800, + 59615: 38812, + 59616: 38824, + 59617: 38822, + 59618: 38819, + 59619: 38835, + 59620: 38836, + 59621: 38851, + 59622: 38854, + 59623: 38856, + 59624: 38859, + 59625: 38876, + 59626: 38893, + 59627: 40783, + 59628: 38898, + 59629: 31455, + 59630: 38902, + 59631: 38901, + 59632: 38927, + 59633: 38924, + 59634: 38968, + 59635: 38948, + 59636: 38945, + 59637: 38967, + 59638: 38973, + 59639: 38982, + 59640: 38991, + 59641: 38987, + 59642: 39019, + 59643: 39023, + 59644: 39024, + 59712: 39025, + 59713: 39028, + 59714: 39027, + 59715: 39082, + 59716: 39087, + 59717: 39089, + 59718: 39094, + 59719: 39108, + 59720: 39107, + 59721: 39110, + 59722: 39145, + 59723: 39147, + 59724: 39171, + 59725: 39177, + 59726: 39186, + 59727: 39188, + 59728: 39192, + 59729: 39201, + 59730: 39197, + 59731: 39198, + 59732: 39204, + 59733: 39200, + 59734: 39212, + 59735: 39214, + 59736: 39229, + 59737: 39230, + 59738: 39234, + 59739: 39241, + 59740: 39237, + 59741: 39248, + 59742: 39243, + 59743: 39249, + 59744: 39250, + 59745: 39244, + 59746: 39253, + 59747: 39319, + 59748: 39320, + 59749: 39333, + 59750: 39341, + 59751: 39342, + 59752: 39356, + 59753: 39391, + 59754: 39387, + 59755: 39389, + 59756: 39384, + 59757: 39377, + 59758: 39405, + 59759: 39406, + 59760: 39409, + 59761: 39410, + 59762: 39419, + 59763: 39416, + 59764: 39425, + 59765: 39439, + 59766: 39429, + 59767: 39394, + 59768: 39449, + 59769: 39467, + 59770: 39479, + 59771: 39493, + 59772: 39490, + 59773: 39488, + 59774: 39491, + 59776: 39486, + 59777: 39509, + 59778: 39501, + 59779: 39515, + 59780: 39511, + 59781: 39519, + 59782: 39522, + 59783: 39525, + 59784: 39524, + 59785: 39529, + 59786: 39531, + 59787: 39530, + 59788: 39597, + 59789: 39600, + 59790: 39612, + 59791: 39616, + 59792: 39631, + 59793: 39633, + 59794: 39635, + 59795: 39636, + 59796: 39646, + 59797: 39647, + 59798: 39650, + 59799: 39651, + 59800: 39654, + 59801: 39663, + 59802: 39659, + 59803: 39662, + 59804: 39668, + 59805: 39665, + 59806: 39671, + 59807: 39675, + 59808: 39686, + 59809: 39704, + 59810: 39706, + 59811: 39711, + 59812: 39714, + 59813: 39715, + 59814: 39717, + 59815: 39719, + 59816: 39720, + 59817: 39721, + 59818: 39722, + 59819: 39726, + 59820: 39727, + 59821: 39730, + 59822: 39748, + 59823: 39747, + 59824: 39759, + 59825: 39757, + 59826: 39758, + 59827: 39761, + 59828: 39768, + 59829: 39796, + 59830: 39827, + 59831: 39811, + 59832: 39825, + 59833: 39830, + 59834: 39831, + 59835: 39839, + 59836: 39840, + 59837: 39848, + 59838: 39860, + 59839: 39872, + 59840: 39882, + 59841: 39865, + 59842: 39878, + 59843: 39887, + 59844: 39889, + 59845: 39890, + 59846: 39907, + 59847: 39906, + 59848: 39908, + 59849: 39892, + 59850: 39905, + 59851: 39994, + 59852: 39922, + 59853: 39921, + 59854: 39920, + 59855: 39957, + 59856: 39956, + 59857: 39945, + 59858: 39955, + 59859: 39948, + 59860: 39942, + 59861: 39944, + 59862: 39954, + 59863: 39946, + 59864: 39940, + 59865: 39982, + 59866: 39963, + 59867: 39973, + 59868: 39972, + 59869: 39969, + 59870: 39984, + 59871: 40007, + 59872: 39986, + 59873: 40006, + 59874: 39998, + 59875: 40026, + 59876: 40032, + 59877: 40039, + 59878: 40054, + 59879: 40056, + 59880: 40167, + 59881: 40172, + 59882: 40176, + 59883: 40201, + 59884: 40200, + 59885: 40171, + 59886: 40195, + 59887: 40198, + 59888: 40234, + 59889: 40230, + 59890: 40367, + 59891: 40227, + 59892: 40223, + 59893: 40260, + 59894: 40213, + 59895: 40210, + 59896: 40257, + 59897: 40255, + 59898: 40254, + 59899: 40262, + 59900: 40264, + 59968: 40285, + 59969: 40286, + 59970: 40292, + 59971: 40273, + 59972: 40272, + 59973: 40281, + 59974: 40306, + 59975: 40329, + 59976: 40327, + 59977: 40363, + 59978: 40303, + 59979: 40314, + 59980: 40346, + 59981: 40356, + 59982: 40361, + 59983: 40370, + 59984: 40388, + 59985: 40385, + 59986: 40379, + 59987: 40376, + 59988: 40378, + 59989: 40390, + 59990: 40399, + 59991: 40386, + 59992: 40409, + 59993: 40403, + 59994: 40440, + 59995: 40422, + 59996: 40429, + 59997: 40431, + 59998: 40445, + 59999: 40474, + 6e4: 40475, + 60001: 40478, + 60002: 40565, + 60003: 40569, + 60004: 40573, + 60005: 40577, + 60006: 40584, + 60007: 40587, + 60008: 40588, + 60009: 40594, + 60010: 40597, + 60011: 40593, + 60012: 40605, + 60013: 40613, + 60014: 40617, + 60015: 40632, + 60016: 40618, + 60017: 40621, + 60018: 38753, + 60019: 40652, + 60020: 40654, + 60021: 40655, + 60022: 40656, + 60023: 40660, + 60024: 40668, + 60025: 40670, + 60026: 40669, + 60027: 40672, + 60028: 40677, + 60029: 40680, + 60030: 40687, + 60032: 40692, + 60033: 40694, + 60034: 40695, + 60035: 40697, + 60036: 40699, + 60037: 40700, + 60038: 40701, + 60039: 40711, + 60040: 40712, + 60041: 30391, + 60042: 40725, + 60043: 40737, + 60044: 40748, + 60045: 40766, + 60046: 40778, + 60047: 40786, + 60048: 40788, + 60049: 40803, + 60050: 40799, + 60051: 40800, + 60052: 40801, + 60053: 40806, + 60054: 40807, + 60055: 40812, + 60056: 40810, + 60057: 40823, + 60058: 40818, + 60059: 40822, + 60060: 40853, + 60061: 40860, + 60062: 40864, + 60063: 22575, + 60064: 27079, + 60065: 36953, + 60066: 29796, + 60067: 20956, + 60068: 29081, + 60736: 32394, + 60737: 35100, + 60738: 37704, + 60739: 37512, + 60740: 34012, + 60741: 20425, + 60742: 28859, + 60743: 26161, + 60744: 26824, + 60745: 37625, + 60746: 26363, + 60747: 24389, + 60748: 20008, + 60749: 20193, + 60750: 20220, + 60751: 20224, + 60752: 20227, + 60753: 20281, + 60754: 20310, + 60755: 20370, + 60756: 20362, + 60757: 20378, + 60758: 20372, + 60759: 20429, + 60760: 20544, + 60761: 20514, + 60762: 20479, + 60763: 20510, + 60764: 20550, + 60765: 20592, + 60766: 20546, + 60767: 20628, + 60768: 20724, + 60769: 20696, + 60770: 20810, + 60771: 20836, + 60772: 20893, + 60773: 20926, + 60774: 20972, + 60775: 21013, + 60776: 21148, + 60777: 21158, + 60778: 21184, + 60779: 21211, + 60780: 21248, + 60781: 21255, + 60782: 21284, + 60783: 21362, + 60784: 21395, + 60785: 21426, + 60786: 21469, + 60787: 64014, + 60788: 21660, + 60789: 21642, + 60790: 21673, + 60791: 21759, + 60792: 21894, + 60793: 22361, + 60794: 22373, + 60795: 22444, + 60796: 22472, + 60797: 22471, + 60798: 64015, + 60800: 64016, + 60801: 22686, + 60802: 22706, + 60803: 22795, + 60804: 22867, + 60805: 22875, + 60806: 22877, + 60807: 22883, + 60808: 22948, + 60809: 22970, + 60810: 23382, + 60811: 23488, + 60812: 29999, + 60813: 23512, + 60814: 23532, + 60815: 23582, + 60816: 23718, + 60817: 23738, + 60818: 23797, + 60819: 23847, + 60820: 23891, + 60821: 64017, + 60822: 23874, + 60823: 23917, + 60824: 23992, + 60825: 23993, + 60826: 24016, + 60827: 24353, + 60828: 24372, + 60829: 24423, + 60830: 24503, + 60831: 24542, + 60832: 24669, + 60833: 24709, + 60834: 24714, + 60835: 24798, + 60836: 24789, + 60837: 24864, + 60838: 24818, + 60839: 24849, + 60840: 24887, + 60841: 24880, + 60842: 24984, + 60843: 25107, + 60844: 25254, + 60845: 25589, + 60846: 25696, + 60847: 25757, + 60848: 25806, + 60849: 25934, + 60850: 26112, + 60851: 26133, + 60852: 26171, + 60853: 26121, + 60854: 26158, + 60855: 26142, + 60856: 26148, + 60857: 26213, + 60858: 26199, + 60859: 26201, + 60860: 64018, + 60861: 26227, + 60862: 26265, + 60863: 26272, + 60864: 26290, + 60865: 26303, + 60866: 26362, + 60867: 26382, + 60868: 63785, + 60869: 26470, + 60870: 26555, + 60871: 26706, + 60872: 26560, + 60873: 26625, + 60874: 26692, + 60875: 26831, + 60876: 64019, + 60877: 26984, + 60878: 64020, + 60879: 27032, + 60880: 27106, + 60881: 27184, + 60882: 27243, + 60883: 27206, + 60884: 27251, + 60885: 27262, + 60886: 27362, + 60887: 27364, + 60888: 27606, + 60889: 27711, + 60890: 27740, + 60891: 27782, + 60892: 27759, + 60893: 27866, + 60894: 27908, + 60895: 28039, + 60896: 28015, + 60897: 28054, + 60898: 28076, + 60899: 28111, + 60900: 28152, + 60901: 28146, + 60902: 28156, + 60903: 28217, + 60904: 28252, + 60905: 28199, + 60906: 28220, + 60907: 28351, + 60908: 28552, + 60909: 28597, + 60910: 28661, + 60911: 28677, + 60912: 28679, + 60913: 28712, + 60914: 28805, + 60915: 28843, + 60916: 28943, + 60917: 28932, + 60918: 29020, + 60919: 28998, + 60920: 28999, + 60921: 64021, + 60922: 29121, + 60923: 29182, + 60924: 29361, + 60992: 29374, + 60993: 29476, + 60994: 64022, + 60995: 29559, + 60996: 29629, + 60997: 29641, + 60998: 29654, + 60999: 29667, + 61e3: 29650, + 61001: 29703, + 61002: 29685, + 61003: 29734, + 61004: 29738, + 61005: 29737, + 61006: 29742, + 61007: 29794, + 61008: 29833, + 61009: 29855, + 61010: 29953, + 61011: 30063, + 61012: 30338, + 61013: 30364, + 61014: 30366, + 61015: 30363, + 61016: 30374, + 61017: 64023, + 61018: 30534, + 61019: 21167, + 61020: 30753, + 61021: 30798, + 61022: 30820, + 61023: 30842, + 61024: 31024, + 61025: 64024, + 61026: 64025, + 61027: 64026, + 61028: 31124, + 61029: 64027, + 61030: 31131, + 61031: 31441, + 61032: 31463, + 61033: 64028, + 61034: 31467, + 61035: 31646, + 61036: 64029, + 61037: 32072, + 61038: 32092, + 61039: 32183, + 61040: 32160, + 61041: 32214, + 61042: 32338, + 61043: 32583, + 61044: 32673, + 61045: 64030, + 61046: 33537, + 61047: 33634, + 61048: 33663, + 61049: 33735, + 61050: 33782, + 61051: 33864, + 61052: 33972, + 61053: 34131, + 61054: 34137, + 61056: 34155, + 61057: 64031, + 61058: 34224, + 61059: 64032, + 61060: 64033, + 61061: 34823, + 61062: 35061, + 61063: 35346, + 61064: 35383, + 61065: 35449, + 61066: 35495, + 61067: 35518, + 61068: 35551, + 61069: 64034, + 61070: 35574, + 61071: 35667, + 61072: 35711, + 61073: 36080, + 61074: 36084, + 61075: 36114, + 61076: 36214, + 61077: 64035, + 61078: 36559, + 61079: 64036, + 61080: 64037, + 61081: 36967, + 61082: 37086, + 61083: 64038, + 61084: 37141, + 61085: 37159, + 61086: 37338, + 61087: 37335, + 61088: 37342, + 61089: 37357, + 61090: 37358, + 61091: 37348, + 61092: 37349, + 61093: 37382, + 61094: 37392, + 61095: 37386, + 61096: 37434, + 61097: 37440, + 61098: 37436, + 61099: 37454, + 61100: 37465, + 61101: 37457, + 61102: 37433, + 61103: 37479, + 61104: 37543, + 61105: 37495, + 61106: 37496, + 61107: 37607, + 61108: 37591, + 61109: 37593, + 61110: 37584, + 61111: 64039, + 61112: 37589, + 61113: 37600, + 61114: 37587, + 61115: 37669, + 61116: 37665, + 61117: 37627, + 61118: 64040, + 61119: 37662, + 61120: 37631, + 61121: 37661, + 61122: 37634, + 61123: 37744, + 61124: 37719, + 61125: 37796, + 61126: 37830, + 61127: 37854, + 61128: 37880, + 61129: 37937, + 61130: 37957, + 61131: 37960, + 61132: 38290, + 61133: 63964, + 61134: 64041, + 61135: 38557, + 61136: 38575, + 61137: 38707, + 61138: 38715, + 61139: 38723, + 61140: 38733, + 61141: 38735, + 61142: 38737, + 61143: 38741, + 61144: 38999, + 61145: 39013, + 61146: 64042, + 61147: 64043, + 61148: 39207, + 61149: 64044, + 61150: 39326, + 61151: 39502, + 61152: 39641, + 61153: 39644, + 61154: 39797, + 61155: 39794, + 61156: 39823, + 61157: 39857, + 61158: 39867, + 61159: 39936, + 61160: 40304, + 61161: 40299, + 61162: 64045, + 61163: 40473, + 61164: 40657, + 61167: 8560, + 61168: 8561, + 61169: 8562, + 61170: 8563, + 61171: 8564, + 61172: 8565, + 61173: 8566, + 61174: 8567, + 61175: 8568, + 61176: 8569, + 61177: 65506, + 61178: 65508, + 61179: 65287, + 61180: 65282, + 61504: 57344, + 61505: 57345, + 61506: 57346, + 61507: 57347, + 61508: 57348, + 61509: 57349, + 61510: 57350, + 61511: 57351, + 61512: 57352, + 61513: 57353, + 61514: 57354, + 61515: 57355, + 61516: 57356, + 61517: 57357, + 61518: 57358, + 61519: 57359, + 61520: 57360, + 61521: 57361, + 61522: 57362, + 61523: 57363, + 61524: 57364, + 61525: 57365, + 61526: 57366, + 61527: 57367, + 61528: 57368, + 61529: 57369, + 61530: 57370, + 61531: 57371, + 61532: 57372, + 61533: 57373, + 61534: 57374, + 61535: 57375, + 61536: 57376, + 61537: 57377, + 61538: 57378, + 61539: 57379, + 61540: 57380, + 61541: 57381, + 61542: 57382, + 61543: 57383, + 61544: 57384, + 61545: 57385, + 61546: 57386, + 61547: 57387, + 61548: 57388, + 61549: 57389, + 61550: 57390, + 61551: 57391, + 61552: 57392, + 61553: 57393, + 61554: 57394, + 61555: 57395, + 61556: 57396, + 61557: 57397, + 61558: 57398, + 61559: 57399, + 61560: 57400, + 61561: 57401, + 61562: 57402, + 61563: 57403, + 61564: 57404, + 61565: 57405, + 61566: 57406, + 61568: 57407, + 61569: 57408, + 61570: 57409, + 61571: 57410, + 61572: 57411, + 61573: 57412, + 61574: 57413, + 61575: 57414, + 61576: 57415, + 61577: 57416, + 61578: 57417, + 61579: 57418, + 61580: 57419, + 61581: 57420, + 61582: 57421, + 61583: 57422, + 61584: 57423, + 61585: 57424, + 61586: 57425, + 61587: 57426, + 61588: 57427, + 61589: 57428, + 61590: 57429, + 61591: 57430, + 61592: 57431, + 61593: 57432, + 61594: 57433, + 61595: 57434, + 61596: 57435, + 61597: 57436, + 61598: 57437, + 61599: 57438, + 61600: 57439, + 61601: 57440, + 61602: 57441, + 61603: 57442, + 61604: 57443, + 61605: 57444, + 61606: 57445, + 61607: 57446, + 61608: 57447, + 61609: 57448, + 61610: 57449, + 61611: 57450, + 61612: 57451, + 61613: 57452, + 61614: 57453, + 61615: 57454, + 61616: 57455, + 61617: 57456, + 61618: 57457, + 61619: 57458, + 61620: 57459, + 61621: 57460, + 61622: 57461, + 61623: 57462, + 61624: 57463, + 61625: 57464, + 61626: 57465, + 61627: 57466, + 61628: 57467, + 61629: 57468, + 61630: 57469, + 61631: 57470, + 61632: 57471, + 61633: 57472, + 61634: 57473, + 61635: 57474, + 61636: 57475, + 61637: 57476, + 61638: 57477, + 61639: 57478, + 61640: 57479, + 61641: 57480, + 61642: 57481, + 61643: 57482, + 61644: 57483, + 61645: 57484, + 61646: 57485, + 61647: 57486, + 61648: 57487, + 61649: 57488, + 61650: 57489, + 61651: 57490, + 61652: 57491, + 61653: 57492, + 61654: 57493, + 61655: 57494, + 61656: 57495, + 61657: 57496, + 61658: 57497, + 61659: 57498, + 61660: 57499, + 61661: 57500, + 61662: 57501, + 61663: 57502, + 61664: 57503, + 61665: 57504, + 61666: 57505, + 61667: 57506, + 61668: 57507, + 61669: 57508, + 61670: 57509, + 61671: 57510, + 61672: 57511, + 61673: 57512, + 61674: 57513, + 61675: 57514, + 61676: 57515, + 61677: 57516, + 61678: 57517, + 61679: 57518, + 61680: 57519, + 61681: 57520, + 61682: 57521, + 61683: 57522, + 61684: 57523, + 61685: 57524, + 61686: 57525, + 61687: 57526, + 61688: 57527, + 61689: 57528, + 61690: 57529, + 61691: 57530, + 61692: 57531, + 61760: 57532, + 61761: 57533, + 61762: 57534, + 61763: 57535, + 61764: 57536, + 61765: 57537, + 61766: 57538, + 61767: 57539, + 61768: 57540, + 61769: 57541, + 61770: 57542, + 61771: 57543, + 61772: 57544, + 61773: 57545, + 61774: 57546, + 61775: 57547, + 61776: 57548, + 61777: 57549, + 61778: 57550, + 61779: 57551, + 61780: 57552, + 61781: 57553, + 61782: 57554, + 61783: 57555, + 61784: 57556, + 61785: 57557, + 61786: 57558, + 61787: 57559, + 61788: 57560, + 61789: 57561, + 61790: 57562, + 61791: 57563, + 61792: 57564, + 61793: 57565, + 61794: 57566, + 61795: 57567, + 61796: 57568, + 61797: 57569, + 61798: 57570, + 61799: 57571, + 61800: 57572, + 61801: 57573, + 61802: 57574, + 61803: 57575, + 61804: 57576, + 61805: 57577, + 61806: 57578, + 61807: 57579, + 61808: 57580, + 61809: 57581, + 61810: 57582, + 61811: 57583, + 61812: 57584, + 61813: 57585, + 61814: 57586, + 61815: 57587, + 61816: 57588, + 61817: 57589, + 61818: 57590, + 61819: 57591, + 61820: 57592, + 61821: 57593, + 61822: 57594, + 61824: 57595, + 61825: 57596, + 61826: 57597, + 61827: 57598, + 61828: 57599, + 61829: 57600, + 61830: 57601, + 61831: 57602, + 61832: 57603, + 61833: 57604, + 61834: 57605, + 61835: 57606, + 61836: 57607, + 61837: 57608, + 61838: 57609, + 61839: 57610, + 61840: 57611, + 61841: 57612, + 61842: 57613, + 61843: 57614, + 61844: 57615, + 61845: 57616, + 61846: 57617, + 61847: 57618, + 61848: 57619, + 61849: 57620, + 61850: 57621, + 61851: 57622, + 61852: 57623, + 61853: 57624, + 61854: 57625, + 61855: 57626, + 61856: 57627, + 61857: 57628, + 61858: 57629, + 61859: 57630, + 61860: 57631, + 61861: 57632, + 61862: 57633, + 61863: 57634, + 61864: 57635, + 61865: 57636, + 61866: 57637, + 61867: 57638, + 61868: 57639, + 61869: 57640, + 61870: 57641, + 61871: 57642, + 61872: 57643, + 61873: 57644, + 61874: 57645, + 61875: 57646, + 61876: 57647, + 61877: 57648, + 61878: 57649, + 61879: 57650, + 61880: 57651, + 61881: 57652, + 61882: 57653, + 61883: 57654, + 61884: 57655, + 61885: 57656, + 61886: 57657, + 61887: 57658, + 61888: 57659, + 61889: 57660, + 61890: 57661, + 61891: 57662, + 61892: 57663, + 61893: 57664, + 61894: 57665, + 61895: 57666, + 61896: 57667, + 61897: 57668, + 61898: 57669, + 61899: 57670, + 61900: 57671, + 61901: 57672, + 61902: 57673, + 61903: 57674, + 61904: 57675, + 61905: 57676, + 61906: 57677, + 61907: 57678, + 61908: 57679, + 61909: 57680, + 61910: 57681, + 61911: 57682, + 61912: 57683, + 61913: 57684, + 61914: 57685, + 61915: 57686, + 61916: 57687, + 61917: 57688, + 61918: 57689, + 61919: 57690, + 61920: 57691, + 61921: 57692, + 61922: 57693, + 61923: 57694, + 61924: 57695, + 61925: 57696, + 61926: 57697, + 61927: 57698, + 61928: 57699, + 61929: 57700, + 61930: 57701, + 61931: 57702, + 61932: 57703, + 61933: 57704, + 61934: 57705, + 61935: 57706, + 61936: 57707, + 61937: 57708, + 61938: 57709, + 61939: 57710, + 61940: 57711, + 61941: 57712, + 61942: 57713, + 61943: 57714, + 61944: 57715, + 61945: 57716, + 61946: 57717, + 61947: 57718, + 61948: 57719, + 62016: 57720, + 62017: 57721, + 62018: 57722, + 62019: 57723, + 62020: 57724, + 62021: 57725, + 62022: 57726, + 62023: 57727, + 62024: 57728, + 62025: 57729, + 62026: 57730, + 62027: 57731, + 62028: 57732, + 62029: 57733, + 62030: 57734, + 62031: 57735, + 62032: 57736, + 62033: 57737, + 62034: 57738, + 62035: 57739, + 62036: 57740, + 62037: 57741, + 62038: 57742, + 62039: 57743, + 62040: 57744, + 62041: 57745, + 62042: 57746, + 62043: 57747, + 62044: 57748, + 62045: 57749, + 62046: 57750, + 62047: 57751, + 62048: 57752, + 62049: 57753, + 62050: 57754, + 62051: 57755, + 62052: 57756, + 62053: 57757, + 62054: 57758, + 62055: 57759, + 62056: 57760, + 62057: 57761, + 62058: 57762, + 62059: 57763, + 62060: 57764, + 62061: 57765, + 62062: 57766, + 62063: 57767, + 62064: 57768, + 62065: 57769, + 62066: 57770, + 62067: 57771, + 62068: 57772, + 62069: 57773, + 62070: 57774, + 62071: 57775, + 62072: 57776, + 62073: 57777, + 62074: 57778, + 62075: 57779, + 62076: 57780, + 62077: 57781, + 62078: 57782, + 62080: 57783, + 62081: 57784, + 62082: 57785, + 62083: 57786, + 62084: 57787, + 62085: 57788, + 62086: 57789, + 62087: 57790, + 62088: 57791, + 62089: 57792, + 62090: 57793, + 62091: 57794, + 62092: 57795, + 62093: 57796, + 62094: 57797, + 62095: 57798, + 62096: 57799, + 62097: 57800, + 62098: 57801, + 62099: 57802, + 62100: 57803, + 62101: 57804, + 62102: 57805, + 62103: 57806, + 62104: 57807, + 62105: 57808, + 62106: 57809, + 62107: 57810, + 62108: 57811, + 62109: 57812, + 62110: 57813, + 62111: 57814, + 62112: 57815, + 62113: 57816, + 62114: 57817, + 62115: 57818, + 62116: 57819, + 62117: 57820, + 62118: 57821, + 62119: 57822, + 62120: 57823, + 62121: 57824, + 62122: 57825, + 62123: 57826, + 62124: 57827, + 62125: 57828, + 62126: 57829, + 62127: 57830, + 62128: 57831, + 62129: 57832, + 62130: 57833, + 62131: 57834, + 62132: 57835, + 62133: 57836, + 62134: 57837, + 62135: 57838, + 62136: 57839, + 62137: 57840, + 62138: 57841, + 62139: 57842, + 62140: 57843, + 62141: 57844, + 62142: 57845, + 62143: 57846, + 62144: 57847, + 62145: 57848, + 62146: 57849, + 62147: 57850, + 62148: 57851, + 62149: 57852, + 62150: 57853, + 62151: 57854, + 62152: 57855, + 62153: 57856, + 62154: 57857, + 62155: 57858, + 62156: 57859, + 62157: 57860, + 62158: 57861, + 62159: 57862, + 62160: 57863, + 62161: 57864, + 62162: 57865, + 62163: 57866, + 62164: 57867, + 62165: 57868, + 62166: 57869, + 62167: 57870, + 62168: 57871, + 62169: 57872, + 62170: 57873, + 62171: 57874, + 62172: 57875, + 62173: 57876, + 62174: 57877, + 62175: 57878, + 62176: 57879, + 62177: 57880, + 62178: 57881, + 62179: 57882, + 62180: 57883, + 62181: 57884, + 62182: 57885, + 62183: 57886, + 62184: 57887, + 62185: 57888, + 62186: 57889, + 62187: 57890, + 62188: 57891, + 62189: 57892, + 62190: 57893, + 62191: 57894, + 62192: 57895, + 62193: 57896, + 62194: 57897, + 62195: 57898, + 62196: 57899, + 62197: 57900, + 62198: 57901, + 62199: 57902, + 62200: 57903, + 62201: 57904, + 62202: 57905, + 62203: 57906, + 62204: 57907, + 62272: 57908, + 62273: 57909, + 62274: 57910, + 62275: 57911, + 62276: 57912, + 62277: 57913, + 62278: 57914, + 62279: 57915, + 62280: 57916, + 62281: 57917, + 62282: 57918, + 62283: 57919, + 62284: 57920, + 62285: 57921, + 62286: 57922, + 62287: 57923, + 62288: 57924, + 62289: 57925, + 62290: 57926, + 62291: 57927, + 62292: 57928, + 62293: 57929, + 62294: 57930, + 62295: 57931, + 62296: 57932, + 62297: 57933, + 62298: 57934, + 62299: 57935, + 62300: 57936, + 62301: 57937, + 62302: 57938, + 62303: 57939, + 62304: 57940, + 62305: 57941, + 62306: 57942, + 62307: 57943, + 62308: 57944, + 62309: 57945, + 62310: 57946, + 62311: 57947, + 62312: 57948, + 62313: 57949, + 62314: 57950, + 62315: 57951, + 62316: 57952, + 62317: 57953, + 62318: 57954, + 62319: 57955, + 62320: 57956, + 62321: 57957, + 62322: 57958, + 62323: 57959, + 62324: 57960, + 62325: 57961, + 62326: 57962, + 62327: 57963, + 62328: 57964, + 62329: 57965, + 62330: 57966, + 62331: 57967, + 62332: 57968, + 62333: 57969, + 62334: 57970, + 62336: 57971, + 62337: 57972, + 62338: 57973, + 62339: 57974, + 62340: 57975, + 62341: 57976, + 62342: 57977, + 62343: 57978, + 62344: 57979, + 62345: 57980, + 62346: 57981, + 62347: 57982, + 62348: 57983, + 62349: 57984, + 62350: 57985, + 62351: 57986, + 62352: 57987, + 62353: 57988, + 62354: 57989, + 62355: 57990, + 62356: 57991, + 62357: 57992, + 62358: 57993, + 62359: 57994, + 62360: 57995, + 62361: 57996, + 62362: 57997, + 62363: 57998, + 62364: 57999, + 62365: 58e3, + 62366: 58001, + 62367: 58002, + 62368: 58003, + 62369: 58004, + 62370: 58005, + 62371: 58006, + 62372: 58007, + 62373: 58008, + 62374: 58009, + 62375: 58010, + 62376: 58011, + 62377: 58012, + 62378: 58013, + 62379: 58014, + 62380: 58015, + 62381: 58016, + 62382: 58017, + 62383: 58018, + 62384: 58019, + 62385: 58020, + 62386: 58021, + 62387: 58022, + 62388: 58023, + 62389: 58024, + 62390: 58025, + 62391: 58026, + 62392: 58027, + 62393: 58028, + 62394: 58029, + 62395: 58030, + 62396: 58031, + 62397: 58032, + 62398: 58033, + 62399: 58034, + 62400: 58035, + 62401: 58036, + 62402: 58037, + 62403: 58038, + 62404: 58039, + 62405: 58040, + 62406: 58041, + 62407: 58042, + 62408: 58043, + 62409: 58044, + 62410: 58045, + 62411: 58046, + 62412: 58047, + 62413: 58048, + 62414: 58049, + 62415: 58050, + 62416: 58051, + 62417: 58052, + 62418: 58053, + 62419: 58054, + 62420: 58055, + 62421: 58056, + 62422: 58057, + 62423: 58058, + 62424: 58059, + 62425: 58060, + 62426: 58061, + 62427: 58062, + 62428: 58063, + 62429: 58064, + 62430: 58065, + 62431: 58066, + 62432: 58067, + 62433: 58068, + 62434: 58069, + 62435: 58070, + 62436: 58071, + 62437: 58072, + 62438: 58073, + 62439: 58074, + 62440: 58075, + 62441: 58076, + 62442: 58077, + 62443: 58078, + 62444: 58079, + 62445: 58080, + 62446: 58081, + 62447: 58082, + 62448: 58083, + 62449: 58084, + 62450: 58085, + 62451: 58086, + 62452: 58087, + 62453: 58088, + 62454: 58089, + 62455: 58090, + 62456: 58091, + 62457: 58092, + 62458: 58093, + 62459: 58094, + 62460: 58095, + 62528: 58096, + 62529: 58097, + 62530: 58098, + 62531: 58099, + 62532: 58100, + 62533: 58101, + 62534: 58102, + 62535: 58103, + 62536: 58104, + 62537: 58105, + 62538: 58106, + 62539: 58107, + 62540: 58108, + 62541: 58109, + 62542: 58110, + 62543: 58111, + 62544: 58112, + 62545: 58113, + 62546: 58114, + 62547: 58115, + 62548: 58116, + 62549: 58117, + 62550: 58118, + 62551: 58119, + 62552: 58120, + 62553: 58121, + 62554: 58122, + 62555: 58123, + 62556: 58124, + 62557: 58125, + 62558: 58126, + 62559: 58127, + 62560: 58128, + 62561: 58129, + 62562: 58130, + 62563: 58131, + 62564: 58132, + 62565: 58133, + 62566: 58134, + 62567: 58135, + 62568: 58136, + 62569: 58137, + 62570: 58138, + 62571: 58139, + 62572: 58140, + 62573: 58141, + 62574: 58142, + 62575: 58143, + 62576: 58144, + 62577: 58145, + 62578: 58146, + 62579: 58147, + 62580: 58148, + 62581: 58149, + 62582: 58150, + 62583: 58151, + 62584: 58152, + 62585: 58153, + 62586: 58154, + 62587: 58155, + 62588: 58156, + 62589: 58157, + 62590: 58158, + 62592: 58159, + 62593: 58160, + 62594: 58161, + 62595: 58162, + 62596: 58163, + 62597: 58164, + 62598: 58165, + 62599: 58166, + 62600: 58167, + 62601: 58168, + 62602: 58169, + 62603: 58170, + 62604: 58171, + 62605: 58172, + 62606: 58173, + 62607: 58174, + 62608: 58175, + 62609: 58176, + 62610: 58177, + 62611: 58178, + 62612: 58179, + 62613: 58180, + 62614: 58181, + 62615: 58182, + 62616: 58183, + 62617: 58184, + 62618: 58185, + 62619: 58186, + 62620: 58187, + 62621: 58188, + 62622: 58189, + 62623: 58190, + 62624: 58191, + 62625: 58192, + 62626: 58193, + 62627: 58194, + 62628: 58195, + 62629: 58196, + 62630: 58197, + 62631: 58198, + 62632: 58199, + 62633: 58200, + 62634: 58201, + 62635: 58202, + 62636: 58203, + 62637: 58204, + 62638: 58205, + 62639: 58206, + 62640: 58207, + 62641: 58208, + 62642: 58209, + 62643: 58210, + 62644: 58211, + 62645: 58212, + 62646: 58213, + 62647: 58214, + 62648: 58215, + 62649: 58216, + 62650: 58217, + 62651: 58218, + 62652: 58219, + 62653: 58220, + 62654: 58221, + 62655: 58222, + 62656: 58223, + 62657: 58224, + 62658: 58225, + 62659: 58226, + 62660: 58227, + 62661: 58228, + 62662: 58229, + 62663: 58230, + 62664: 58231, + 62665: 58232, + 62666: 58233, + 62667: 58234, + 62668: 58235, + 62669: 58236, + 62670: 58237, + 62671: 58238, + 62672: 58239, + 62673: 58240, + 62674: 58241, + 62675: 58242, + 62676: 58243, + 62677: 58244, + 62678: 58245, + 62679: 58246, + 62680: 58247, + 62681: 58248, + 62682: 58249, + 62683: 58250, + 62684: 58251, + 62685: 58252, + 62686: 58253, + 62687: 58254, + 62688: 58255, + 62689: 58256, + 62690: 58257, + 62691: 58258, + 62692: 58259, + 62693: 58260, + 62694: 58261, + 62695: 58262, + 62696: 58263, + 62697: 58264, + 62698: 58265, + 62699: 58266, + 62700: 58267, + 62701: 58268, + 62702: 58269, + 62703: 58270, + 62704: 58271, + 62705: 58272, + 62706: 58273, + 62707: 58274, + 62708: 58275, + 62709: 58276, + 62710: 58277, + 62711: 58278, + 62712: 58279, + 62713: 58280, + 62714: 58281, + 62715: 58282, + 62716: 58283, + 62784: 58284, + 62785: 58285, + 62786: 58286, + 62787: 58287, + 62788: 58288, + 62789: 58289, + 62790: 58290, + 62791: 58291, + 62792: 58292, + 62793: 58293, + 62794: 58294, + 62795: 58295, + 62796: 58296, + 62797: 58297, + 62798: 58298, + 62799: 58299, + 62800: 58300, + 62801: 58301, + 62802: 58302, + 62803: 58303, + 62804: 58304, + 62805: 58305, + 62806: 58306, + 62807: 58307, + 62808: 58308, + 62809: 58309, + 62810: 58310, + 62811: 58311, + 62812: 58312, + 62813: 58313, + 62814: 58314, + 62815: 58315, + 62816: 58316, + 62817: 58317, + 62818: 58318, + 62819: 58319, + 62820: 58320, + 62821: 58321, + 62822: 58322, + 62823: 58323, + 62824: 58324, + 62825: 58325, + 62826: 58326, + 62827: 58327, + 62828: 58328, + 62829: 58329, + 62830: 58330, + 62831: 58331, + 62832: 58332, + 62833: 58333, + 62834: 58334, + 62835: 58335, + 62836: 58336, + 62837: 58337, + 62838: 58338, + 62839: 58339, + 62840: 58340, + 62841: 58341, + 62842: 58342, + 62843: 58343, + 62844: 58344, + 62845: 58345, + 62846: 58346, + 62848: 58347, + 62849: 58348, + 62850: 58349, + 62851: 58350, + 62852: 58351, + 62853: 58352, + 62854: 58353, + 62855: 58354, + 62856: 58355, + 62857: 58356, + 62858: 58357, + 62859: 58358, + 62860: 58359, + 62861: 58360, + 62862: 58361, + 62863: 58362, + 62864: 58363, + 62865: 58364, + 62866: 58365, + 62867: 58366, + 62868: 58367, + 62869: 58368, + 62870: 58369, + 62871: 58370, + 62872: 58371, + 62873: 58372, + 62874: 58373, + 62875: 58374, + 62876: 58375, + 62877: 58376, + 62878: 58377, + 62879: 58378, + 62880: 58379, + 62881: 58380, + 62882: 58381, + 62883: 58382, + 62884: 58383, + 62885: 58384, + 62886: 58385, + 62887: 58386, + 62888: 58387, + 62889: 58388, + 62890: 58389, + 62891: 58390, + 62892: 58391, + 62893: 58392, + 62894: 58393, + 62895: 58394, + 62896: 58395, + 62897: 58396, + 62898: 58397, + 62899: 58398, + 62900: 58399, + 62901: 58400, + 62902: 58401, + 62903: 58402, + 62904: 58403, + 62905: 58404, + 62906: 58405, + 62907: 58406, + 62908: 58407, + 62909: 58408, + 62910: 58409, + 62911: 58410, + 62912: 58411, + 62913: 58412, + 62914: 58413, + 62915: 58414, + 62916: 58415, + 62917: 58416, + 62918: 58417, + 62919: 58418, + 62920: 58419, + 62921: 58420, + 62922: 58421, + 62923: 58422, + 62924: 58423, + 62925: 58424, + 62926: 58425, + 62927: 58426, + 62928: 58427, + 62929: 58428, + 62930: 58429, + 62931: 58430, + 62932: 58431, + 62933: 58432, + 62934: 58433, + 62935: 58434, + 62936: 58435, + 62937: 58436, + 62938: 58437, + 62939: 58438, + 62940: 58439, + 62941: 58440, + 62942: 58441, + 62943: 58442, + 62944: 58443, + 62945: 58444, + 62946: 58445, + 62947: 58446, + 62948: 58447, + 62949: 58448, + 62950: 58449, + 62951: 58450, + 62952: 58451, + 62953: 58452, + 62954: 58453, + 62955: 58454, + 62956: 58455, + 62957: 58456, + 62958: 58457, + 62959: 58458, + 62960: 58459, + 62961: 58460, + 62962: 58461, + 62963: 58462, + 62964: 58463, + 62965: 58464, + 62966: 58465, + 62967: 58466, + 62968: 58467, + 62969: 58468, + 62970: 58469, + 62971: 58470, + 62972: 58471, + 63040: 58472, + 63041: 58473, + 63042: 58474, + 63043: 58475, + 63044: 58476, + 63045: 58477, + 63046: 58478, + 63047: 58479, + 63048: 58480, + 63049: 58481, + 63050: 58482, + 63051: 58483, + 63052: 58484, + 63053: 58485, + 63054: 58486, + 63055: 58487, + 63056: 58488, + 63057: 58489, + 63058: 58490, + 63059: 58491, + 63060: 58492, + 63061: 58493, + 63062: 58494, + 63063: 58495, + 63064: 58496, + 63065: 58497, + 63066: 58498, + 63067: 58499, + 63068: 58500, + 63069: 58501, + 63070: 58502, + 63071: 58503, + 63072: 58504, + 63073: 58505, + 63074: 58506, + 63075: 58507, + 63076: 58508, + 63077: 58509, + 63078: 58510, + 63079: 58511, + 63080: 58512, + 63081: 58513, + 63082: 58514, + 63083: 58515, + 63084: 58516, + 63085: 58517, + 63086: 58518, + 63087: 58519, + 63088: 58520, + 63089: 58521, + 63090: 58522, + 63091: 58523, + 63092: 58524, + 63093: 58525, + 63094: 58526, + 63095: 58527, + 63096: 58528, + 63097: 58529, + 63098: 58530, + 63099: 58531, + 63100: 58532, + 63101: 58533, + 63102: 58534, + 63104: 58535, + 63105: 58536, + 63106: 58537, + 63107: 58538, + 63108: 58539, + 63109: 58540, + 63110: 58541, + 63111: 58542, + 63112: 58543, + 63113: 58544, + 63114: 58545, + 63115: 58546, + 63116: 58547, + 63117: 58548, + 63118: 58549, + 63119: 58550, + 63120: 58551, + 63121: 58552, + 63122: 58553, + 63123: 58554, + 63124: 58555, + 63125: 58556, + 63126: 58557, + 63127: 58558, + 63128: 58559, + 63129: 58560, + 63130: 58561, + 63131: 58562, + 63132: 58563, + 63133: 58564, + 63134: 58565, + 63135: 58566, + 63136: 58567, + 63137: 58568, + 63138: 58569, + 63139: 58570, + 63140: 58571, + 63141: 58572, + 63142: 58573, + 63143: 58574, + 63144: 58575, + 63145: 58576, + 63146: 58577, + 63147: 58578, + 63148: 58579, + 63149: 58580, + 63150: 58581, + 63151: 58582, + 63152: 58583, + 63153: 58584, + 63154: 58585, + 63155: 58586, + 63156: 58587, + 63157: 58588, + 63158: 58589, + 63159: 58590, + 63160: 58591, + 63161: 58592, + 63162: 58593, + 63163: 58594, + 63164: 58595, + 63165: 58596, + 63166: 58597, + 63167: 58598, + 63168: 58599, + 63169: 58600, + 63170: 58601, + 63171: 58602, + 63172: 58603, + 63173: 58604, + 63174: 58605, + 63175: 58606, + 63176: 58607, + 63177: 58608, + 63178: 58609, + 63179: 58610, + 63180: 58611, + 63181: 58612, + 63182: 58613, + 63183: 58614, + 63184: 58615, + 63185: 58616, + 63186: 58617, + 63187: 58618, + 63188: 58619, + 63189: 58620, + 63190: 58621, + 63191: 58622, + 63192: 58623, + 63193: 58624, + 63194: 58625, + 63195: 58626, + 63196: 58627, + 63197: 58628, + 63198: 58629, + 63199: 58630, + 63200: 58631, + 63201: 58632, + 63202: 58633, + 63203: 58634, + 63204: 58635, + 63205: 58636, + 63206: 58637, + 63207: 58638, + 63208: 58639, + 63209: 58640, + 63210: 58641, + 63211: 58642, + 63212: 58643, + 63213: 58644, + 63214: 58645, + 63215: 58646, + 63216: 58647, + 63217: 58648, + 63218: 58649, + 63219: 58650, + 63220: 58651, + 63221: 58652, + 63222: 58653, + 63223: 58654, + 63224: 58655, + 63225: 58656, + 63226: 58657, + 63227: 58658, + 63228: 58659, + 63296: 58660, + 63297: 58661, + 63298: 58662, + 63299: 58663, + 63300: 58664, + 63301: 58665, + 63302: 58666, + 63303: 58667, + 63304: 58668, + 63305: 58669, + 63306: 58670, + 63307: 58671, + 63308: 58672, + 63309: 58673, + 63310: 58674, + 63311: 58675, + 63312: 58676, + 63313: 58677, + 63314: 58678, + 63315: 58679, + 63316: 58680, + 63317: 58681, + 63318: 58682, + 63319: 58683, + 63320: 58684, + 63321: 58685, + 63322: 58686, + 63323: 58687, + 63324: 58688, + 63325: 58689, + 63326: 58690, + 63327: 58691, + 63328: 58692, + 63329: 58693, + 63330: 58694, + 63331: 58695, + 63332: 58696, + 63333: 58697, + 63334: 58698, + 63335: 58699, + 63336: 58700, + 63337: 58701, + 63338: 58702, + 63339: 58703, + 63340: 58704, + 63341: 58705, + 63342: 58706, + 63343: 58707, + 63344: 58708, + 63345: 58709, + 63346: 58710, + 63347: 58711, + 63348: 58712, + 63349: 58713, + 63350: 58714, + 63351: 58715, + 63352: 58716, + 63353: 58717, + 63354: 58718, + 63355: 58719, + 63356: 58720, + 63357: 58721, + 63358: 58722, + 63360: 58723, + 63361: 58724, + 63362: 58725, + 63363: 58726, + 63364: 58727, + 63365: 58728, + 63366: 58729, + 63367: 58730, + 63368: 58731, + 63369: 58732, + 63370: 58733, + 63371: 58734, + 63372: 58735, + 63373: 58736, + 63374: 58737, + 63375: 58738, + 63376: 58739, + 63377: 58740, + 63378: 58741, + 63379: 58742, + 63380: 58743, + 63381: 58744, + 63382: 58745, + 63383: 58746, + 63384: 58747, + 63385: 58748, + 63386: 58749, + 63387: 58750, + 63388: 58751, + 63389: 58752, + 63390: 58753, + 63391: 58754, + 63392: 58755, + 63393: 58756, + 63394: 58757, + 63395: 58758, + 63396: 58759, + 63397: 58760, + 63398: 58761, + 63399: 58762, + 63400: 58763, + 63401: 58764, + 63402: 58765, + 63403: 58766, + 63404: 58767, + 63405: 58768, + 63406: 58769, + 63407: 58770, + 63408: 58771, + 63409: 58772, + 63410: 58773, + 63411: 58774, + 63412: 58775, + 63413: 58776, + 63414: 58777, + 63415: 58778, + 63416: 58779, + 63417: 58780, + 63418: 58781, + 63419: 58782, + 63420: 58783, + 63421: 58784, + 63422: 58785, + 63423: 58786, + 63424: 58787, + 63425: 58788, + 63426: 58789, + 63427: 58790, + 63428: 58791, + 63429: 58792, + 63430: 58793, + 63431: 58794, + 63432: 58795, + 63433: 58796, + 63434: 58797, + 63435: 58798, + 63436: 58799, + 63437: 58800, + 63438: 58801, + 63439: 58802, + 63440: 58803, + 63441: 58804, + 63442: 58805, + 63443: 58806, + 63444: 58807, + 63445: 58808, + 63446: 58809, + 63447: 58810, + 63448: 58811, + 63449: 58812, + 63450: 58813, + 63451: 58814, + 63452: 58815, + 63453: 58816, + 63454: 58817, + 63455: 58818, + 63456: 58819, + 63457: 58820, + 63458: 58821, + 63459: 58822, + 63460: 58823, + 63461: 58824, + 63462: 58825, + 63463: 58826, + 63464: 58827, + 63465: 58828, + 63466: 58829, + 63467: 58830, + 63468: 58831, + 63469: 58832, + 63470: 58833, + 63471: 58834, + 63472: 58835, + 63473: 58836, + 63474: 58837, + 63475: 58838, + 63476: 58839, + 63477: 58840, + 63478: 58841, + 63479: 58842, + 63480: 58843, + 63481: 58844, + 63482: 58845, + 63483: 58846, + 63484: 58847, + 63552: 58848, + 63553: 58849, + 63554: 58850, + 63555: 58851, + 63556: 58852, + 63557: 58853, + 63558: 58854, + 63559: 58855, + 63560: 58856, + 63561: 58857, + 63562: 58858, + 63563: 58859, + 63564: 58860, + 63565: 58861, + 63566: 58862, + 63567: 58863, + 63568: 58864, + 63569: 58865, + 63570: 58866, + 63571: 58867, + 63572: 58868, + 63573: 58869, + 63574: 58870, + 63575: 58871, + 63576: 58872, + 63577: 58873, + 63578: 58874, + 63579: 58875, + 63580: 58876, + 63581: 58877, + 63582: 58878, + 63583: 58879, + 63584: 58880, + 63585: 58881, + 63586: 58882, + 63587: 58883, + 63588: 58884, + 63589: 58885, + 63590: 58886, + 63591: 58887, + 63592: 58888, + 63593: 58889, + 63594: 58890, + 63595: 58891, + 63596: 58892, + 63597: 58893, + 63598: 58894, + 63599: 58895, + 63600: 58896, + 63601: 58897, + 63602: 58898, + 63603: 58899, + 63604: 58900, + 63605: 58901, + 63606: 58902, + 63607: 58903, + 63608: 58904, + 63609: 58905, + 63610: 58906, + 63611: 58907, + 63612: 58908, + 63613: 58909, + 63614: 58910, + 63616: 58911, + 63617: 58912, + 63618: 58913, + 63619: 58914, + 63620: 58915, + 63621: 58916, + 63622: 58917, + 63623: 58918, + 63624: 58919, + 63625: 58920, + 63626: 58921, + 63627: 58922, + 63628: 58923, + 63629: 58924, + 63630: 58925, + 63631: 58926, + 63632: 58927, + 63633: 58928, + 63634: 58929, + 63635: 58930, + 63636: 58931, + 63637: 58932, + 63638: 58933, + 63639: 58934, + 63640: 58935, + 63641: 58936, + 63642: 58937, + 63643: 58938, + 63644: 58939, + 63645: 58940, + 63646: 58941, + 63647: 58942, + 63648: 58943, + 63649: 58944, + 63650: 58945, + 63651: 58946, + 63652: 58947, + 63653: 58948, + 63654: 58949, + 63655: 58950, + 63656: 58951, + 63657: 58952, + 63658: 58953, + 63659: 58954, + 63660: 58955, + 63661: 58956, + 63662: 58957, + 63663: 58958, + 63664: 58959, + 63665: 58960, + 63666: 58961, + 63667: 58962, + 63668: 58963, + 63669: 58964, + 63670: 58965, + 63671: 58966, + 63672: 58967, + 63673: 58968, + 63674: 58969, + 63675: 58970, + 63676: 58971, + 63677: 58972, + 63678: 58973, + 63679: 58974, + 63680: 58975, + 63681: 58976, + 63682: 58977, + 63683: 58978, + 63684: 58979, + 63685: 58980, + 63686: 58981, + 63687: 58982, + 63688: 58983, + 63689: 58984, + 63690: 58985, + 63691: 58986, + 63692: 58987, + 63693: 58988, + 63694: 58989, + 63695: 58990, + 63696: 58991, + 63697: 58992, + 63698: 58993, + 63699: 58994, + 63700: 58995, + 63701: 58996, + 63702: 58997, + 63703: 58998, + 63704: 58999, + 63705: 59e3, + 63706: 59001, + 63707: 59002, + 63708: 59003, + 63709: 59004, + 63710: 59005, + 63711: 59006, + 63712: 59007, + 63713: 59008, + 63714: 59009, + 63715: 59010, + 63716: 59011, + 63717: 59012, + 63718: 59013, + 63719: 59014, + 63720: 59015, + 63721: 59016, + 63722: 59017, + 63723: 59018, + 63724: 59019, + 63725: 59020, + 63726: 59021, + 63727: 59022, + 63728: 59023, + 63729: 59024, + 63730: 59025, + 63731: 59026, + 63732: 59027, + 63733: 59028, + 63734: 59029, + 63735: 59030, + 63736: 59031, + 63737: 59032, + 63738: 59033, + 63739: 59034, + 63740: 59035, + 64064: 8560, + 64065: 8561, + 64066: 8562, + 64067: 8563, + 64068: 8564, + 64069: 8565, + 64070: 8566, + 64071: 8567, + 64072: 8568, + 64073: 8569, + 64074: 8544, + 64075: 8545, + 64076: 8546, + 64077: 8547, + 64078: 8548, + 64079: 8549, + 64080: 8550, + 64081: 8551, + 64082: 8552, + 64083: 8553, + 64084: 65506, + 64085: 65508, + 64086: 65287, + 64087: 65282, + 64088: 12849, + 64089: 8470, + 64090: 8481, + 64091: 8757, + 64092: 32394, + 64093: 35100, + 64094: 37704, + 64095: 37512, + 64096: 34012, + 64097: 20425, + 64098: 28859, + 64099: 26161, + 64100: 26824, + 64101: 37625, + 64102: 26363, + 64103: 24389, + 64104: 20008, + 64105: 20193, + 64106: 20220, + 64107: 20224, + 64108: 20227, + 64109: 20281, + 64110: 20310, + 64111: 20370, + 64112: 20362, + 64113: 20378, + 64114: 20372, + 64115: 20429, + 64116: 20544, + 64117: 20514, + 64118: 20479, + 64119: 20510, + 64120: 20550, + 64121: 20592, + 64122: 20546, + 64123: 20628, + 64124: 20724, + 64125: 20696, + 64126: 20810, + 64128: 20836, + 64129: 20893, + 64130: 20926, + 64131: 20972, + 64132: 21013, + 64133: 21148, + 64134: 21158, + 64135: 21184, + 64136: 21211, + 64137: 21248, + 64138: 21255, + 64139: 21284, + 64140: 21362, + 64141: 21395, + 64142: 21426, + 64143: 21469, + 64144: 64014, + 64145: 21660, + 64146: 21642, + 64147: 21673, + 64148: 21759, + 64149: 21894, + 64150: 22361, + 64151: 22373, + 64152: 22444, + 64153: 22472, + 64154: 22471, + 64155: 64015, + 64156: 64016, + 64157: 22686, + 64158: 22706, + 64159: 22795, + 64160: 22867, + 64161: 22875, + 64162: 22877, + 64163: 22883, + 64164: 22948, + 64165: 22970, + 64166: 23382, + 64167: 23488, + 64168: 29999, + 64169: 23512, + 64170: 23532, + 64171: 23582, + 64172: 23718, + 64173: 23738, + 64174: 23797, + 64175: 23847, + 64176: 23891, + 64177: 64017, + 64178: 23874, + 64179: 23917, + 64180: 23992, + 64181: 23993, + 64182: 24016, + 64183: 24353, + 64184: 24372, + 64185: 24423, + 64186: 24503, + 64187: 24542, + 64188: 24669, + 64189: 24709, + 64190: 24714, + 64191: 24798, + 64192: 24789, + 64193: 24864, + 64194: 24818, + 64195: 24849, + 64196: 24887, + 64197: 24880, + 64198: 24984, + 64199: 25107, + 64200: 25254, + 64201: 25589, + 64202: 25696, + 64203: 25757, + 64204: 25806, + 64205: 25934, + 64206: 26112, + 64207: 26133, + 64208: 26171, + 64209: 26121, + 64210: 26158, + 64211: 26142, + 64212: 26148, + 64213: 26213, + 64214: 26199, + 64215: 26201, + 64216: 64018, + 64217: 26227, + 64218: 26265, + 64219: 26272, + 64220: 26290, + 64221: 26303, + 64222: 26362, + 64223: 26382, + 64224: 63785, + 64225: 26470, + 64226: 26555, + 64227: 26706, + 64228: 26560, + 64229: 26625, + 64230: 26692, + 64231: 26831, + 64232: 64019, + 64233: 26984, + 64234: 64020, + 64235: 27032, + 64236: 27106, + 64237: 27184, + 64238: 27243, + 64239: 27206, + 64240: 27251, + 64241: 27262, + 64242: 27362, + 64243: 27364, + 64244: 27606, + 64245: 27711, + 64246: 27740, + 64247: 27782, + 64248: 27759, + 64249: 27866, + 64250: 27908, + 64251: 28039, + 64252: 28015, + 64320: 28054, + 64321: 28076, + 64322: 28111, + 64323: 28152, + 64324: 28146, + 64325: 28156, + 64326: 28217, + 64327: 28252, + 64328: 28199, + 64329: 28220, + 64330: 28351, + 64331: 28552, + 64332: 28597, + 64333: 28661, + 64334: 28677, + 64335: 28679, + 64336: 28712, + 64337: 28805, + 64338: 28843, + 64339: 28943, + 64340: 28932, + 64341: 29020, + 64342: 28998, + 64343: 28999, + 64344: 64021, + 64345: 29121, + 64346: 29182, + 64347: 29361, + 64348: 29374, + 64349: 29476, + 64350: 64022, + 64351: 29559, + 64352: 29629, + 64353: 29641, + 64354: 29654, + 64355: 29667, + 64356: 29650, + 64357: 29703, + 64358: 29685, + 64359: 29734, + 64360: 29738, + 64361: 29737, + 64362: 29742, + 64363: 29794, + 64364: 29833, + 64365: 29855, + 64366: 29953, + 64367: 30063, + 64368: 30338, + 64369: 30364, + 64370: 30366, + 64371: 30363, + 64372: 30374, + 64373: 64023, + 64374: 30534, + 64375: 21167, + 64376: 30753, + 64377: 30798, + 64378: 30820, + 64379: 30842, + 64380: 31024, + 64381: 64024, + 64382: 64025, + 64384: 64026, + 64385: 31124, + 64386: 64027, + 64387: 31131, + 64388: 31441, + 64389: 31463, + 64390: 64028, + 64391: 31467, + 64392: 31646, + 64393: 64029, + 64394: 32072, + 64395: 32092, + 64396: 32183, + 64397: 32160, + 64398: 32214, + 64399: 32338, + 64400: 32583, + 64401: 32673, + 64402: 64030, + 64403: 33537, + 64404: 33634, + 64405: 33663, + 64406: 33735, + 64407: 33782, + 64408: 33864, + 64409: 33972, + 64410: 34131, + 64411: 34137, + 64412: 34155, + 64413: 64031, + 64414: 34224, + 64415: 64032, + 64416: 64033, + 64417: 34823, + 64418: 35061, + 64419: 35346, + 64420: 35383, + 64421: 35449, + 64422: 35495, + 64423: 35518, + 64424: 35551, + 64425: 64034, + 64426: 35574, + 64427: 35667, + 64428: 35711, + 64429: 36080, + 64430: 36084, + 64431: 36114, + 64432: 36214, + 64433: 64035, + 64434: 36559, + 64435: 64036, + 64436: 64037, + 64437: 36967, + 64438: 37086, + 64439: 64038, + 64440: 37141, + 64441: 37159, + 64442: 37338, + 64443: 37335, + 64444: 37342, + 64445: 37357, + 64446: 37358, + 64447: 37348, + 64448: 37349, + 64449: 37382, + 64450: 37392, + 64451: 37386, + 64452: 37434, + 64453: 37440, + 64454: 37436, + 64455: 37454, + 64456: 37465, + 64457: 37457, + 64458: 37433, + 64459: 37479, + 64460: 37543, + 64461: 37495, + 64462: 37496, + 64463: 37607, + 64464: 37591, + 64465: 37593, + 64466: 37584, + 64467: 64039, + 64468: 37589, + 64469: 37600, + 64470: 37587, + 64471: 37669, + 64472: 37665, + 64473: 37627, + 64474: 64040, + 64475: 37662, + 64476: 37631, + 64477: 37661, + 64478: 37634, + 64479: 37744, + 64480: 37719, + 64481: 37796, + 64482: 37830, + 64483: 37854, + 64484: 37880, + 64485: 37937, + 64486: 37957, + 64487: 37960, + 64488: 38290, + 64489: 63964, + 64490: 64041, + 64491: 38557, + 64492: 38575, + 64493: 38707, + 64494: 38715, + 64495: 38723, + 64496: 38733, + 64497: 38735, + 64498: 38737, + 64499: 38741, + 64500: 38999, + 64501: 39013, + 64502: 64042, + 64503: 64043, + 64504: 39207, + 64505: 64044, + 64506: 39326, + 64507: 39502, + 64508: 39641, + 64576: 39644, + 64577: 39797, + 64578: 39794, + 64579: 39823, + 64580: 39857, + 64581: 39867, + 64582: 39936, + 64583: 40304, + 64584: 40299, + 64585: 64045, + 64586: 40473, + 64587: 40657 +}; +function DataViewEx(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + this.encoder = new CharsetEncoder(); +} +DataViewEx.prototype = { + constructor: DataViewEx, + getInt8: function() { + var value2 = this.dv.getInt8(this.offset); + this.offset += 1; + return value2; + }, + getInt8Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt8()); + } + return a2; + }, + getUint8: function() { + var value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + }, + getUint8Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint8()); + } + return a2; + }, + getInt16: function() { + var value2 = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + }, + getInt16Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt16()); + } + return a2; + }, + getUint16: function() { + var value2 = this.dv.getUint16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + }, + getUint16Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint16()); + } + return a2; + }, + getInt32: function() { + var value2 = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getInt32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt32()); + } + return a2; + }, + getUint32: function() { + var value2 = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getUint32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint32()); + } + return a2; + }, + getFloat32: function() { + var value2 = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getFloat32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + }, + getFloat64: function() { + var value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + }, + getFloat64Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + }, + getIndex: function(type, isUnsigned) { + switch (type) { + case 1: + return isUnsigned === true ? this.getUint8() : this.getInt8(); + case 2: + return isUnsigned === true ? this.getUint16() : this.getInt16(); + case 4: + return this.getInt32(); + default: + throw "unknown number type " + type + " exception."; + } + }, + getIndexArray: function(type, size2, isUnsigned) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getIndex(type, isUnsigned)); + } + return a2; + }, + getChars: function(size2) { + var str = ""; + while (size2 > 0) { + var value2 = this.getUint8(); + size2--; + if (value2 === 0) { + break; + } + str += String.fromCharCode(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return str; + }, + getSjisStringsAsUnicode: function(size2) { + var a2 = []; + while (size2 > 0) { + var value2 = this.getUint8(); + size2--; + if (value2 === 0) { + break; + } + a2.push(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return this.encoder.s2u(new Uint8Array(a2)); + }, + getUnicodeStrings: function(size2) { + var str = ""; + while (size2 > 0) { + var value2 = this.getUint16(); + size2 -= 2; + if (value2 === 0) { + break; + } + str += String.fromCharCode(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return str; + }, + getTextBuffer: function() { + var size2 = this.getUint32(); + return this.getUnicodeStrings(size2); + } +}; +function DataCreationHelper() { +} +DataCreationHelper.prototype = { + constructor: DataCreationHelper, + leftToRightVector3: function(v) { + v[2] = -v[2]; + }, + leftToRightQuaternion: function(q2) { + q2[0] = -q2[0]; + q2[1] = -q2[1]; + }, + leftToRightEuler: function(r) { + r[0] = -r[0]; + r[1] = -r[1]; + }, + leftToRightIndexOrder: function(p2) { + var tmp = p2[2]; + p2[2] = p2[0]; + p2[0] = tmp; + }, + leftToRightVector3Range: function(v12, v2) { + var tmp = -v2[2]; + v2[2] = -v12[2]; + v12[2] = tmp; + }, + leftToRightEulerRange: function(r1, r2) { + var tmp1 = -r2[0]; + var tmp2 = -r2[1]; + r2[0] = -r1[0]; + r2[1] = -r1[1]; + r1[0] = tmp1; + r1[1] = tmp2; + } +}; +function Parser() { +} +Parser.prototype.parsePmd = function(buffer, leftToRight) { + var pmd = {}; + var dv = new DataViewEx(buffer); + pmd.metadata = {}; + pmd.metadata.format = "pmd"; + pmd.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = pmd.metadata; + metadata.magic = dv.getChars(3); + if (metadata.magic !== "Pmd") { + throw "PMD file magic is not Pmd, but " + metadata.magic; + } + metadata.version = dv.getFloat32(); + metadata.modelName = dv.getSjisStringsAsUnicode(20); + metadata.comment = dv.getSjisStringsAsUnicode(256); + }; + var parseVertices = function() { + var parseVertex = function() { + var p2 = {}; + p2.position = dv.getFloat32Array(3); + p2.normal = dv.getFloat32Array(3); + p2.uv = dv.getFloat32Array(2); + p2.skinIndices = dv.getUint16Array(2); + p2.skinWeights = [dv.getUint8() / 100]; + p2.skinWeights.push(1 - p2.skinWeights[0]); + p2.edgeFlag = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.vertexCount = dv.getUint32(); + pmd.vertices = []; + for (var i = 0; i < metadata.vertexCount; i++) { + pmd.vertices.push(parseVertex()); + } + }; + var parseFaces = function() { + var parseFace = function() { + var p2 = {}; + p2.indices = dv.getUint16Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.faceCount = dv.getUint32() / 3; + pmd.faces = []; + for (var i = 0; i < metadata.faceCount; i++) { + pmd.faces.push(parseFace()); + } + }; + var parseMaterials = function() { + var parseMaterial = function() { + var p2 = {}; + p2.diffuse = dv.getFloat32Array(4); + p2.shininess = dv.getFloat32(); + p2.specular = dv.getFloat32Array(3); + p2.ambient = dv.getFloat32Array(3); + p2.toonIndex = dv.getInt8(); + p2.edgeFlag = dv.getUint8(); + p2.faceCount = dv.getUint32() / 3; + p2.fileName = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + metadata.materialCount = dv.getUint32(); + pmd.materials = []; + for (var i = 0; i < metadata.materialCount; i++) { + pmd.materials.push(parseMaterial()); + } + }; + var parseBones = function() { + var parseBone = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.parentIndex = dv.getInt16(); + p2.tailIndex = dv.getInt16(); + p2.type = dv.getUint8(); + p2.ikIndex = dv.getInt16(); + p2.position = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneCount = dv.getUint16(); + pmd.bones = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmd.bones.push(parseBone()); + } + }; + var parseIks = function() { + var parseIk = function() { + var p2 = {}; + p2.target = dv.getUint16(); + p2.effector = dv.getUint16(); + p2.linkCount = dv.getUint8(); + p2.iteration = dv.getUint16(); + p2.maxAngle = dv.getFloat32(); + p2.links = []; + for (var i2 = 0; i2 < p2.linkCount; i2++) { + var link = {}; + link.index = dv.getUint16(); + p2.links.push(link); + } + return p2; + }; + var metadata = pmd.metadata; + metadata.ikCount = dv.getUint16(); + pmd.iks = []; + for (var i = 0; i < metadata.ikCount; i++) { + pmd.iks.push(parseIk()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.elementCount = dv.getUint32(); + p2.type = dv.getUint8(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + p2.elements.push({ + index: dv.getUint32(), + position: dv.getFloat32Array(3) + }); + } + return p2; + }; + var metadata = pmd.metadata; + metadata.morphCount = dv.getUint16(); + pmd.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + pmd.morphs.push(parseMorph()); + } + }; + var parseMorphFrames = function() { + var parseMorphFrame = function() { + var p2 = {}; + p2.index = dv.getUint16(); + return p2; + }; + var metadata = pmd.metadata; + metadata.morphFrameCount = dv.getUint8(); + pmd.morphFrames = []; + for (var i = 0; i < metadata.morphFrameCount; i++) { + pmd.morphFrames.push(parseMorphFrame()); + } + }; + var parseBoneFrameNames = function() { + var parseBoneFrameName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(50); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneFrameNameCount = dv.getUint8(); + pmd.boneFrameNames = []; + for (var i = 0; i < metadata.boneFrameNameCount; i++) { + pmd.boneFrameNames.push(parseBoneFrameName()); + } + }; + var parseBoneFrames = function() { + var parseBoneFrame = function() { + var p2 = {}; + p2.boneIndex = dv.getInt16(); + p2.frameIndex = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneFrameCount = dv.getUint32(); + pmd.boneFrames = []; + for (var i = 0; i < metadata.boneFrameCount; i++) { + pmd.boneFrames.push(parseBoneFrame()); + } + }; + var parseEnglishHeader = function() { + var metadata = pmd.metadata; + metadata.englishCompatibility = dv.getUint8(); + if (metadata.englishCompatibility > 0) { + metadata.englishModelName = dv.getSjisStringsAsUnicode(20); + metadata.englishComment = dv.getSjisStringsAsUnicode(256); + } + }; + var parseEnglishBoneNames = function() { + var parseEnglishBoneName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishBoneNames = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmd.englishBoneNames.push(parseEnglishBoneName()); + } + }; + var parseEnglishMorphNames = function() { + var parseEnglishMorphName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishMorphNames = []; + for (var i = 0; i < metadata.morphCount - 1; i++) { + pmd.englishMorphNames.push(parseEnglishMorphName()); + } + }; + var parseEnglishBoneFrameNames = function() { + var parseEnglishBoneFrameName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(50); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishBoneFrameNames = []; + for (var i = 0; i < metadata.boneFrameNameCount; i++) { + pmd.englishBoneFrameNames.push(parseEnglishBoneFrameName()); + } + }; + var parseToonTextures = function() { + var parseToonTexture = function() { + var p2 = {}; + p2.fileName = dv.getSjisStringsAsUnicode(100); + return p2; + }; + pmd.toonTextures = []; + for (var i = 0; i < 10; i++) { + pmd.toonTextures.push(parseToonTexture()); + } + }; + var parseRigidBodies = function() { + var parseRigidBody = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.boneIndex = dv.getInt16(); + p2.groupIndex = dv.getUint8(); + p2.groupTarget = dv.getUint16(); + p2.shapeType = dv.getUint8(); + p2.width = dv.getFloat32(); + p2.height = dv.getFloat32(); + p2.depth = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.weight = dv.getFloat32(); + p2.positionDamping = dv.getFloat32(); + p2.rotationDamping = dv.getFloat32(); + p2.restitution = dv.getFloat32(); + p2.friction = dv.getFloat32(); + p2.type = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.rigidBodyCount = dv.getUint32(); + pmd.rigidBodies = []; + for (var i = 0; i < metadata.rigidBodyCount; i++) { + pmd.rigidBodies.push(parseRigidBody()); + } + }; + var parseConstraints = function() { + var parseConstraint = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.rigidBodyIndex1 = dv.getUint32(); + p2.rigidBodyIndex2 = dv.getUint32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.translationLimitation1 = dv.getFloat32Array(3); + p2.translationLimitation2 = dv.getFloat32Array(3); + p2.rotationLimitation1 = dv.getFloat32Array(3); + p2.rotationLimitation2 = dv.getFloat32Array(3); + p2.springPosition = dv.getFloat32Array(3); + p2.springRotation = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.constraintCount = dv.getUint32(); + pmd.constraints = []; + for (var i = 0; i < metadata.constraintCount; i++) { + pmd.constraints.push(parseConstraint()); + } + }; + parseHeader(); + parseVertices(); + parseFaces(); + parseMaterials(); + parseBones(); + parseIks(); + parseMorphs(); + parseMorphFrames(); + parseBoneFrameNames(); + parseBoneFrames(); + parseEnglishHeader(); + parseEnglishBoneNames(); + parseEnglishMorphNames(); + parseEnglishBoneFrameNames(); + parseToonTextures(); + parseRigidBodies(); + parseConstraints(); + if (leftToRight === true) this.leftToRightModel(pmd); + return pmd; +}; +Parser.prototype.parsePmx = function(buffer, leftToRight) { + var pmx = {}; + var dv = new DataViewEx(buffer); + pmx.metadata = {}; + pmx.metadata.format = "pmx"; + pmx.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = pmx.metadata; + metadata.magic = dv.getChars(4); + if (metadata.magic !== "PMX ") { + throw "PMX file magic is not PMX , but " + metadata.magic; + } + metadata.version = dv.getFloat32(); + if (metadata.version !== 2 && metadata.version !== 2.1) { + throw "PMX version " + metadata.version + " is not supported."; + } + metadata.headerSize = dv.getUint8(); + metadata.encoding = dv.getUint8(); + metadata.additionalUvNum = dv.getUint8(); + metadata.vertexIndexSize = dv.getUint8(); + metadata.textureIndexSize = dv.getUint8(); + metadata.materialIndexSize = dv.getUint8(); + metadata.boneIndexSize = dv.getUint8(); + metadata.morphIndexSize = dv.getUint8(); + metadata.rigidBodyIndexSize = dv.getUint8(); + metadata.modelName = dv.getTextBuffer(); + metadata.englishModelName = dv.getTextBuffer(); + metadata.comment = dv.getTextBuffer(); + metadata.englishComment = dv.getTextBuffer(); + }; + var parseVertices = function() { + var parseVertex = function() { + var p2 = {}; + p2.position = dv.getFloat32Array(3); + p2.normal = dv.getFloat32Array(3); + p2.uv = dv.getFloat32Array(2); + p2.auvs = []; + for (var i2 = 0; i2 < pmx.metadata.additionalUvNum; i2++) { + p2.auvs.push(dv.getFloat32Array(4)); + } + p2.type = dv.getUint8(); + var indexSize = metadata.boneIndexSize; + if (p2.type === 0) { + p2.skinIndices = dv.getIndexArray(indexSize, 1); + p2.skinWeights = [1]; + } else if (p2.type === 1) { + p2.skinIndices = dv.getIndexArray(indexSize, 2); + p2.skinWeights = dv.getFloat32Array(1); + p2.skinWeights.push(1 - p2.skinWeights[0]); + } else if (p2.type === 2) { + p2.skinIndices = dv.getIndexArray(indexSize, 4); + p2.skinWeights = dv.getFloat32Array(4); + } else if (p2.type === 3) { + p2.skinIndices = dv.getIndexArray(indexSize, 2); + p2.skinWeights = dv.getFloat32Array(1); + p2.skinWeights.push(1 - p2.skinWeights[0]); + p2.skinC = dv.getFloat32Array(3); + p2.skinR0 = dv.getFloat32Array(3); + p2.skinR1 = dv.getFloat32Array(3); + p2.type = 1; + } else { + throw "unsupport bone type " + p2.type + " exception."; + } + p2.edgeRatio = dv.getFloat32(); + return p2; + }; + var metadata = pmx.metadata; + metadata.vertexCount = dv.getUint32(); + pmx.vertices = []; + for (var i = 0; i < metadata.vertexCount; i++) { + pmx.vertices.push(parseVertex()); + } + }; + var parseFaces = function() { + var parseFace = function() { + var p2 = {}; + p2.indices = dv.getIndexArray(metadata.vertexIndexSize, 3, true); + return p2; + }; + var metadata = pmx.metadata; + metadata.faceCount = dv.getUint32() / 3; + pmx.faces = []; + for (var i = 0; i < metadata.faceCount; i++) { + pmx.faces.push(parseFace()); + } + }; + var parseTextures = function() { + var parseTexture = function() { + return dv.getTextBuffer(); + }; + var metadata = pmx.metadata; + metadata.textureCount = dv.getUint32(); + pmx.textures = []; + for (var i = 0; i < metadata.textureCount; i++) { + pmx.textures.push(parseTexture()); + } + }; + var parseMaterials = function() { + var parseMaterial = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.diffuse = dv.getFloat32Array(4); + p2.specular = dv.getFloat32Array(3); + p2.shininess = dv.getFloat32(); + p2.ambient = dv.getFloat32Array(3); + p2.flag = dv.getUint8(); + p2.edgeColor = dv.getFloat32Array(4); + p2.edgeSize = dv.getFloat32(); + p2.textureIndex = dv.getIndex(pmx.metadata.textureIndexSize); + p2.envTextureIndex = dv.getIndex(pmx.metadata.textureIndexSize); + p2.envFlag = dv.getUint8(); + p2.toonFlag = dv.getUint8(); + if (p2.toonFlag === 0) { + p2.toonIndex = dv.getIndex(pmx.metadata.textureIndexSize); + } else if (p2.toonFlag === 1) { + p2.toonIndex = dv.getInt8(); + } else { + throw "unknown toon flag " + p2.toonFlag + " exception."; + } + p2.comment = dv.getTextBuffer(); + p2.faceCount = dv.getUint32() / 3; + return p2; + }; + var metadata = pmx.metadata; + metadata.materialCount = dv.getUint32(); + pmx.materials = []; + for (var i = 0; i < metadata.materialCount; i++) { + pmx.materials.push(parseMaterial()); + } + }; + var parseBones = function() { + var parseBone = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.position = dv.getFloat32Array(3); + p2.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); + p2.transformationClass = dv.getUint32(); + p2.flag = dv.getUint16(); + if (p2.flag & 1) { + p2.connectIndex = dv.getIndex(pmx.metadata.boneIndexSize); + } else { + p2.offsetPosition = dv.getFloat32Array(3); + } + if (p2.flag & 256 || p2.flag & 512) { + var grant = {}; + grant.isLocal = (p2.flag & 128) !== 0 ? true : false; + grant.affectRotation = (p2.flag & 256) !== 0 ? true : false; + grant.affectPosition = (p2.flag & 512) !== 0 ? true : false; + grant.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); + grant.ratio = dv.getFloat32(); + p2.grant = grant; + } + if (p2.flag & 1024) { + p2.fixAxis = dv.getFloat32Array(3); + } + if (p2.flag & 2048) { + p2.localXVector = dv.getFloat32Array(3); + p2.localZVector = dv.getFloat32Array(3); + } + if (p2.flag & 8192) { + p2.key = dv.getUint32(); + } + if (p2.flag & 32) { + var ik = {}; + ik.effector = dv.getIndex(pmx.metadata.boneIndexSize); + ik.target = null; + ik.iteration = dv.getUint32(); + ik.maxAngle = dv.getFloat32(); + ik.linkCount = dv.getUint32(); + ik.links = []; + for (var i2 = 0; i2 < ik.linkCount; i2++) { + var link = {}; + link.index = dv.getIndex(pmx.metadata.boneIndexSize); + link.angleLimitation = dv.getUint8(); + if (link.angleLimitation === 1) { + link.lowerLimitationAngle = dv.getFloat32Array(3); + link.upperLimitationAngle = dv.getFloat32Array(3); + } + ik.links.push(link); + } + p2.ik = ik; + } + return p2; + }; + var metadata = pmx.metadata; + metadata.boneCount = dv.getUint32(); + pmx.bones = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmx.bones.push(parseBone()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.panel = dv.getUint8(); + p2.type = dv.getUint8(); + p2.elementCount = dv.getUint32(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + if (p2.type === 0) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.morphIndexSize); + m.ratio = dv.getFloat32(); + p2.elements.push(m); + } else if (p2.type === 1) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); + m.position = dv.getFloat32Array(3); + p2.elements.push(m); + } else if (p2.type === 2) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.boneIndexSize); + m.position = dv.getFloat32Array(3); + m.rotation = dv.getFloat32Array(4); + p2.elements.push(m); + } else if (p2.type === 3) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); + m.uv = dv.getFloat32Array(4); + p2.elements.push(m); + } else if (p2.type === 4) { + } else if (p2.type === 5) { + } else if (p2.type === 6) { + } else if (p2.type === 7) { + } else if (p2.type === 8) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.materialIndexSize); + m.type = dv.getUint8(); + m.diffuse = dv.getFloat32Array(4); + m.specular = dv.getFloat32Array(3); + m.shininess = dv.getFloat32(); + m.ambient = dv.getFloat32Array(3); + m.edgeColor = dv.getFloat32Array(4); + m.edgeSize = dv.getFloat32(); + m.textureColor = dv.getFloat32Array(4); + m.sphereTextureColor = dv.getFloat32Array(4); + m.toonColor = dv.getFloat32Array(4); + p2.elements.push(m); + } + } + return p2; + }; + var metadata = pmx.metadata; + metadata.morphCount = dv.getUint32(); + pmx.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + pmx.morphs.push(parseMorph()); + } + }; + var parseFrames = function() { + var parseFrame = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.type = dv.getUint8(); + p2.elementCount = dv.getUint32(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + var e = {}; + e.target = dv.getUint8(); + e.index = e.target === 0 ? dv.getIndex(pmx.metadata.boneIndexSize) : dv.getIndex(pmx.metadata.morphIndexSize); + p2.elements.push(e); + } + return p2; + }; + var metadata = pmx.metadata; + metadata.frameCount = dv.getUint32(); + pmx.frames = []; + for (var i = 0; i < metadata.frameCount; i++) { + pmx.frames.push(parseFrame()); + } + }; + var parseRigidBodies = function() { + var parseRigidBody = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.boneIndex = dv.getIndex(pmx.metadata.boneIndexSize); + p2.groupIndex = dv.getUint8(); + p2.groupTarget = dv.getUint16(); + p2.shapeType = dv.getUint8(); + p2.width = dv.getFloat32(); + p2.height = dv.getFloat32(); + p2.depth = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.weight = dv.getFloat32(); + p2.positionDamping = dv.getFloat32(); + p2.rotationDamping = dv.getFloat32(); + p2.restitution = dv.getFloat32(); + p2.friction = dv.getFloat32(); + p2.type = dv.getUint8(); + return p2; + }; + var metadata = pmx.metadata; + metadata.rigidBodyCount = dv.getUint32(); + pmx.rigidBodies = []; + for (var i = 0; i < metadata.rigidBodyCount; i++) { + pmx.rigidBodies.push(parseRigidBody()); + } + }; + var parseConstraints = function() { + var parseConstraint = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.type = dv.getUint8(); + p2.rigidBodyIndex1 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); + p2.rigidBodyIndex2 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.translationLimitation1 = dv.getFloat32Array(3); + p2.translationLimitation2 = dv.getFloat32Array(3); + p2.rotationLimitation1 = dv.getFloat32Array(3); + p2.rotationLimitation2 = dv.getFloat32Array(3); + p2.springPosition = dv.getFloat32Array(3); + p2.springRotation = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmx.metadata; + metadata.constraintCount = dv.getUint32(); + pmx.constraints = []; + for (var i = 0; i < metadata.constraintCount; i++) { + pmx.constraints.push(parseConstraint()); + } + }; + parseHeader(); + parseVertices(); + parseFaces(); + parseTextures(); + parseMaterials(); + parseBones(); + parseMorphs(); + parseFrames(); + parseRigidBodies(); + parseConstraints(); + if (leftToRight === true) this.leftToRightModel(pmx); + return pmx; +}; +Parser.prototype.parseVmd = function(buffer, leftToRight) { + var vmd = {}; + var dv = new DataViewEx(buffer); + vmd.metadata = {}; + vmd.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = vmd.metadata; + metadata.magic = dv.getChars(30); + if (metadata.magic !== "Vocaloid Motion Data 0002") { + throw "VMD file magic is not Vocaloid Motion Data 0002, but " + metadata.magic; + } + metadata.name = dv.getSjisStringsAsUnicode(20); + }; + var parseMotions = function() { + var parseMotion = function() { + var p2 = {}; + p2.boneName = dv.getSjisStringsAsUnicode(15); + p2.frameNum = dv.getUint32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(4); + p2.interpolation = dv.getUint8Array(64); + return p2; + }; + var metadata = vmd.metadata; + metadata.motionCount = dv.getUint32(); + vmd.motions = []; + for (var i = 0; i < metadata.motionCount; i++) { + vmd.motions.push(parseMotion()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.morphName = dv.getSjisStringsAsUnicode(15); + p2.frameNum = dv.getUint32(); + p2.weight = dv.getFloat32(); + return p2; + }; + var metadata = vmd.metadata; + metadata.morphCount = dv.getUint32(); + vmd.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + vmd.morphs.push(parseMorph()); + } + }; + var parseCameras = function() { + var parseCamera = function() { + var p2 = {}; + p2.frameNum = dv.getUint32(); + p2.distance = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.interpolation = dv.getUint8Array(24); + p2.fov = dv.getUint32(); + p2.perspective = dv.getUint8(); + return p2; + }; + var metadata = vmd.metadata; + metadata.cameraCount = dv.getUint32(); + vmd.cameras = []; + for (var i = 0; i < metadata.cameraCount; i++) { + vmd.cameras.push(parseCamera()); + } + }; + parseHeader(); + parseMotions(); + parseMorphs(); + parseCameras(); + if (leftToRight === true) this.leftToRightVmd(vmd); + return vmd; +}; +Parser.prototype.parseVpd = function(text2, leftToRight) { + var vpd = {}; + vpd.metadata = {}; + vpd.metadata.coordinateSystem = "left"; + vpd.bones = []; + var commentPatternG = /\/\/\w*(\r|\n|\r\n)/g; + var newlinePattern = /\r|\n|\r\n/; + var lines = text2.replace(commentPatternG, "").split(newlinePattern); + function throwError() { + throw "the file seems not vpd file."; + } + function checkMagic() { + if (lines[0] !== "Vocaloid Pose Data file") { + throwError(); + } + } + function parseHeader() { + if (lines.length < 4) { + throwError(); + } + vpd.metadata.parentFile = lines[2]; + vpd.metadata.boneCount = parseInt(lines[3]); + } + function parseBones() { + var boneHeaderPattern = /^\s*(Bone[0-9]+)\s*\{\s*(.*)$/; + var boneVectorPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/; + var boneQuaternionPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/; + var boneFooterPattern = /^\s*}/; + var bones = vpd.bones; + var n2 = null; + var v = null; + var q2 = null; + for (var i = 4; i < lines.length; i++) { + var line2 = lines[i]; + var result; + result = line2.match(boneHeaderPattern); + if (result !== null) { + if (n2 !== null) { + throwError(); + } + n2 = result[2]; + } + result = line2.match(boneVectorPattern); + if (result !== null) { + if (v !== null) { + throwError(); + } + v = [ + parseFloat(result[1]), + parseFloat(result[2]), + parseFloat(result[3]) + ]; + } + result = line2.match(boneQuaternionPattern); + if (result !== null) { + if (q2 !== null) { + throwError(); + } + q2 = [ + parseFloat(result[1]), + parseFloat(result[2]), + parseFloat(result[3]), + parseFloat(result[4]) + ]; + } + result = line2.match(boneFooterPattern); + if (result !== null) { + if (n2 === null || v === null || q2 === null) { + throwError(); + } + bones.push({ + name: n2, + translation: v, + quaternion: q2 + }); + n2 = null; + v = null; + q2 = null; + } + } + if (n2 !== null || v !== null || q2 !== null) { + throwError(); + } + } + checkMagic(); + parseHeader(); + parseBones(); + if (leftToRight === true) this.leftToRightVpd(vpd); + return vpd; +}; +Parser.prototype.mergeVmds = function(vmds) { + var v = {}; + v.metadata = {}; + v.metadata.name = vmds[0].metadata.name; + v.metadata.coordinateSystem = vmds[0].metadata.coordinateSystem; + v.metadata.motionCount = 0; + v.metadata.morphCount = 0; + v.metadata.cameraCount = 0; + v.motions = []; + v.morphs = []; + v.cameras = []; + for (var i = 0; i < vmds.length; i++) { + var v2 = vmds[i]; + v.metadata.motionCount += v2.metadata.motionCount; + v.metadata.morphCount += v2.metadata.morphCount; + v.metadata.cameraCount += v2.metadata.cameraCount; + for (var j = 0; j < v2.metadata.motionCount; j++) { + v.motions.push(v2.motions[j]); + } + for (var j = 0; j < v2.metadata.morphCount; j++) { + v.morphs.push(v2.morphs[j]); + } + for (var j = 0; j < v2.metadata.cameraCount; j++) { + v.cameras.push(v2.cameras[j]); + } + } + return v; +}; +Parser.prototype.leftToRightModel = function(model) { + if (model.metadata.coordinateSystem === "right") { + return; + } + model.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < model.metadata.vertexCount; i++) { + helper.leftToRightVector3(model.vertices[i].position); + helper.leftToRightVector3(model.vertices[i].normal); + } + for (var i = 0; i < model.metadata.faceCount; i++) { + helper.leftToRightIndexOrder(model.faces[i].indices); + } + for (var i = 0; i < model.metadata.boneCount; i++) { + helper.leftToRightVector3(model.bones[i].position); + } + for (var i = 0; i < model.metadata.morphCount; i++) { + var m = model.morphs[i]; + if (model.metadata.format === "pmx" && m.type !== 1) { + continue; + } + for (var j = 0; j < m.elements.length; j++) { + helper.leftToRightVector3(m.elements[j].position); + } + } + for (var i = 0; i < model.metadata.rigidBodyCount; i++) { + helper.leftToRightVector3(model.rigidBodies[i].position); + helper.leftToRightEuler(model.rigidBodies[i].rotation); + } + for (var i = 0; i < model.metadata.constraintCount; i++) { + helper.leftToRightVector3(model.constraints[i].position); + helper.leftToRightEuler(model.constraints[i].rotation); + helper.leftToRightVector3Range(model.constraints[i].translationLimitation1, model.constraints[i].translationLimitation2); + helper.leftToRightEulerRange(model.constraints[i].rotationLimitation1, model.constraints[i].rotationLimitation2); + } +}; +Parser.prototype.leftToRightVmd = function(vmd) { + if (vmd.metadata.coordinateSystem === "right") { + return; + } + vmd.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < vmd.metadata.motionCount; i++) { + helper.leftToRightVector3(vmd.motions[i].position); + helper.leftToRightQuaternion(vmd.motions[i].rotation); + } + for (var i = 0; i < vmd.metadata.cameraCount; i++) { + helper.leftToRightVector3(vmd.cameras[i].position); + helper.leftToRightEuler(vmd.cameras[i].rotation); + } +}; +Parser.prototype.leftToRightVpd = function(vpd) { + if (vpd.metadata.coordinateSystem === "right") { + return; + } + vpd.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < vpd.bones.length; i++) { + helper.leftToRightVector3(vpd.bones[i].translation); + helper.leftToRightQuaternion(vpd.bones[i].quaternion); + } +}; +var MMDParser = { + CharsetEncoder, + Parser +}; + +// node_modules/three/examples/jsm/exporters/MMDExporter.js +var MMDExporter = class { + /* TODO: implement + // mesh -> pmd + this.parsePmd = function ( object ) { + + }; + */ + /* TODO: implement + // mesh -> pmx + this.parsePmx = function ( object ) { + + }; + */ + /* TODO: implement + // animation + skeleton -> vmd + this.parseVmd = function ( object ) { + + }; + */ + /* + * skeleton -> vpd + * Returns Shift_JIS encoded Uint8Array. Otherwise return strings. + */ + parseVpd(skin, outputShiftJis, useOriginalBones) { + if (skin.isSkinnedMesh !== true) { + console.warn("THREE.MMDExporter: parseVpd() requires SkinnedMesh instance."); + return null; + } + function toStringsFromNumber(num) { + if (Math.abs(num) < 1e-6) num = 0; + let a2 = num.toString(); + if (a2.indexOf(".") === -1) { + a2 += "."; + } + a2 += "000000"; + const index2 = a2.indexOf("."); + const d = a2.slice(0, index2); + const p2 = a2.slice(index2 + 1, index2 + 7); + return d + "." + p2; + } + function toStringsFromArray(array2) { + const a2 = []; + for (let i = 0, il = array2.length; i < il; i++) { + a2.push(toStringsFromNumber(array2[i])); + } + return a2.join(","); + } + skin.updateMatrixWorld(true); + const bones = skin.skeleton.bones; + const bones2 = getBindBones(skin); + const position2 = new Vector3(); + const quaternion = new Quaternion(); + const quaternion2 = new Quaternion(); + const matrix3 = new Matrix4(); + const array = []; + array.push("Vocaloid Pose Data file"); + array.push(""); + array.push((skin.name !== "" ? skin.name.replace(/\s/g, "_") : "skin") + ".osm;"); + array.push(bones.length + ";"); + array.push(""); + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + const bone2 = bones2[i]; + if (useOriginalBones === true && bone.userData.ik !== void 0 && bone.userData.ik.originalMatrix !== void 0) { + matrix3.fromArray(bone.userData.ik.originalMatrix); + } else { + matrix3.copy(bone.matrix); + } + position2.setFromMatrixPosition(matrix3); + quaternion.setFromRotationMatrix(matrix3); + const pArray = position2.sub(bone2.position).toArray(); + const qArray = quaternion2.copy(bone2.quaternion).conjugate().multiply(quaternion).toArray(); + pArray[2] = -pArray[2]; + qArray[0] = -qArray[0]; + qArray[1] = -qArray[1]; + array.push("Bone" + i + "{" + bone.name); + array.push(" " + toStringsFromArray(pArray) + ";"); + array.push(" " + toStringsFromArray(qArray) + ";"); + array.push("}"); + array.push(""); + } + array.push(""); + const lines = array.join("\n"); + return outputShiftJis === true ? unicodeToShiftjis(lines) : lines; + } +}; +var u2sTable; +function unicodeToShiftjis(str) { + if (u2sTable === void 0) { + const encoder = new MMDParser.CharsetEncoder(); + const table2 = encoder.s2uTable; + u2sTable = {}; + const keys2 = Object.keys(table2); + for (let i = 0, il = keys2.length; i < il; i++) { + let key2 = keys2[i]; + const value2 = table2[key2]; + key2 = parseInt(key2); + u2sTable[value2] = key2; + } + } + const array = []; + for (let i = 0, il = str.length; i < il; i++) { + const code = str.charCodeAt(i); + const value2 = u2sTable[code]; + if (value2 === void 0) { + throw new Error("cannot convert charcode 0x" + code.toString(16)); + } else if (value2 > 255) { + array.push(value2 >> 8 & 255); + array.push(value2 & 255); + } else { + array.push(value2 & 255); + } + } + return new Uint8Array(array); +} +function getBindBones(skin) { + const poseSkin = skin.clone(); + poseSkin.pose(); + return poseSkin.skeleton.bones; +} + +// node_modules/three/examples/jsm/exporters/OBJExporter.js +var OBJExporter = class { + parse(object) { + let output = ""; + let indexVertex = 0; + let indexVertexUvs = 0; + let indexNormals = 0; + const vertex = new Vector3(); + const color = new Color(); + const normal = new Vector3(); + const uv = new Vector2(); + const face = []; + function parseMesh(mesh) { + let nbVertex = 0; + let nbNormals = 0; + let nbVertexUvs = 0; + const geometry = mesh.geometry; + const normalMatrixWorld = new Matrix3(); + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const indices = geometry.getIndex(); + output += "o " + mesh.name + "\n"; + if (mesh.material && mesh.material.name) { + output += "usemtl " + mesh.material.name + "\n"; + } + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + if (uvs !== void 0) { + for (let i = 0, l2 = uvs.count; i < l2; i++, nbVertexUvs++) { + uv.fromBufferAttribute(uvs, i); + output += "vt " + uv.x + " " + uv.y + "\n"; + } + } + if (normals !== void 0) { + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = normals.count; i < l2; i++, nbNormals++) { + normal.fromBufferAttribute(normals, i); + normal.applyMatrix3(normalMatrixWorld).normalize(); + output += "vn " + normal.x + " " + normal.y + " " + normal.z + "\n"; + } + } + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + for (let m = 0; m < 3; m++) { + const j = indices.getX(i + m) + 1; + face[m] = indexVertex + j + (normals || uvs ? "/" + (uvs ? indexVertexUvs + j : "") + (normals ? "/" + (indexNormals + j) : "") : ""); + } + output += "f " + face.join(" ") + "\n"; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + for (let m = 0; m < 3; m++) { + const j = i + m + 1; + face[m] = indexVertex + j + (normals || uvs ? "/" + (uvs ? indexVertexUvs + j : "") + (normals ? "/" + (indexNormals + j) : "") : ""); + } + output += "f " + face.join(" ") + "\n"; + } + } + indexVertex += nbVertex; + indexVertexUvs += nbVertexUvs; + indexNormals += nbNormals; + } + function parseLine(line2) { + let nbVertex = 0; + const geometry = line2.geometry; + const type = line2.type; + const vertices = geometry.getAttribute("position"); + output += "o " + line2.name + "\n"; + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(line2.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + if (type === "Line") { + output += "l "; + for (let j = 1, l2 = vertices.count; j <= l2; j++) { + output += indexVertex + j + " "; + } + output += "\n"; + } + if (type === "LineSegments") { + for (let j = 1, k2 = j + 1, l2 = vertices.count; j < l2; j += 2, k2 = j + 1) { + output += "l " + (indexVertex + j) + " " + (indexVertex + k2) + "\n"; + } + } + indexVertex += nbVertex; + } + function parsePoints(points) { + let nbVertex = 0; + const geometry = points.geometry; + const vertices = geometry.getAttribute("position"); + const colors = geometry.getAttribute("color"); + output += "o " + points.name + "\n"; + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(points.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z; + if (colors !== void 0) { + color.fromBufferAttribute(colors, i).convertLinearToSRGB(); + output += " " + color.r + " " + color.g + " " + color.b; + } + output += "\n"; + } + output += "p "; + for (let j = 1, l2 = vertices.count; j <= l2; j++) { + output += indexVertex + j + " "; + } + output += "\n"; + } + indexVertex += nbVertex; + } + object.traverse(function(child) { + if (child.isMesh === true) { + parseMesh(child); + } + if (child.isLine === true) { + parseLine(child); + } + if (child.isPoints === true) { + parsePoints(child); + } + }); + return output; + } +}; + +// node_modules/three/examples/jsm/exporters/PLYExporter.js +var PLYExporter = class { + parse(object, onDone, options = {}) { + function traverseMeshes(cb) { + object.traverse(function(child) { + if (child.isMesh === true || child.isPoints) { + const mesh = child; + const geometry = mesh.geometry; + if (geometry.hasAttribute("position") === true) { + cb(mesh, geometry); + } + } + }); + } + const defaultOptions = { + binary: false, + excludeAttributes: [], + // normal, uv, color, index + littleEndian: false + }; + options = Object.assign(defaultOptions, options); + const excludeAttributes = options.excludeAttributes; + let includeIndices = true; + let includeNormals = false; + let includeColors = false; + let includeUVs = false; + let vertexCount = 0; + let faceCount = 0; + object.traverse(function(child) { + if (child.isMesh === true) { + const mesh = child; + const geometry = mesh.geometry; + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + if (vertices === void 0) { + return; + } + vertexCount += vertices.count; + faceCount += indices ? indices.count / 3 : vertices.count / 3; + if (normals !== void 0) includeNormals = true; + if (uvs !== void 0) includeUVs = true; + if (colors !== void 0) includeColors = true; + } else if (child.isPoints) { + const mesh = child; + const geometry = mesh.geometry; + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const colors = geometry.getAttribute("color"); + vertexCount += vertices.count; + if (normals !== void 0) includeNormals = true; + if (colors !== void 0) includeColors = true; + includeIndices = false; + } + }); + const tempColor = new Color(); + includeIndices = includeIndices && excludeAttributes.indexOf("index") === -1; + includeNormals = includeNormals && excludeAttributes.indexOf("normal") === -1; + includeColors = includeColors && excludeAttributes.indexOf("color") === -1; + includeUVs = includeUVs && excludeAttributes.indexOf("uv") === -1; + if (includeIndices && faceCount !== Math.floor(faceCount)) { + console.error( + "PLYExporter: Failed to generate a valid PLY file with triangle indices because the number of indices is not divisible by 3." + ); + return null; + } + const indexByteCount = 4; + let header = `ply +format ${options.binary ? options.littleEndian ? "binary_little_endian" : "binary_big_endian" : "ascii"} 1.0 +element vertex ${vertexCount} +property float x +property float y +property float z +`; + if (includeNormals === true) { + header += "property float nx\nproperty float ny\nproperty float nz\n"; + } + if (includeUVs === true) { + header += "property float s\nproperty float t\n"; + } + if (includeColors === true) { + header += "property uchar red\nproperty uchar green\nproperty uchar blue\n"; + } + if (includeIndices === true) { + header += `element face ${faceCount} +property list uchar int vertex_index +`; + } + header += "end_header\n"; + const vertex = new Vector3(); + const normalMatrixWorld = new Matrix3(); + let result = null; + if (options.binary === true) { + const headerBin = new TextEncoder().encode(header); + const vertexListLength = vertexCount * (4 * 3 + (includeNormals ? 4 * 3 : 0) + (includeColors ? 3 : 0) + (includeUVs ? 4 * 2 : 0)); + const faceListLength = includeIndices ? faceCount * (indexByteCount * 3 + 1) : 0; + const output = new DataView(new ArrayBuffer(headerBin.length + vertexListLength + faceListLength)); + new Uint8Array(output.buffer).set(headerBin, 0); + let vOffset = headerBin.length; + let fOffset = headerBin.length + vertexListLength; + let writtenVertices = 0; + traverseMeshes(function(mesh, geometry) { + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = vertices.count; i < l2; i++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + output.setFloat32(vOffset, vertex.x, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.y, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.z, options.littleEndian); + vOffset += 4; + if (includeNormals === true) { + if (normals != null) { + vertex.fromBufferAttribute(normals, i); + vertex.applyMatrix3(normalMatrixWorld).normalize(); + output.setFloat32(vOffset, vertex.x, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.y, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.z, options.littleEndian); + vOffset += 4; + } else { + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + } + } + if (includeUVs === true) { + if (uvs != null) { + output.setFloat32(vOffset, uvs.getX(i), options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, uvs.getY(i), options.littleEndian); + vOffset += 4; + } else { + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + } + } + if (includeColors === true) { + if (colors != null) { + tempColor.fromBufferAttribute(colors, i).convertLinearToSRGB(); + output.setUint8(vOffset, Math.floor(tempColor.r * 255)); + vOffset += 1; + output.setUint8(vOffset, Math.floor(tempColor.g * 255)); + vOffset += 1; + output.setUint8(vOffset, Math.floor(tempColor.b * 255)); + vOffset += 1; + } else { + output.setUint8(vOffset, 255); + vOffset += 1; + output.setUint8(vOffset, 255); + vOffset += 1; + output.setUint8(vOffset, 255); + vOffset += 1; + } + } + } + if (includeIndices === true) { + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + output.setUint8(fOffset, 3); + fOffset += 1; + output.setUint32(fOffset, indices.getX(i + 0) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, indices.getX(i + 1) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, indices.getX(i + 2) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + output.setUint8(fOffset, 3); + fOffset += 1; + output.setUint32(fOffset, writtenVertices + i, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, writtenVertices + i + 1, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, writtenVertices + i + 2, options.littleEndian); + fOffset += indexByteCount; + } + } + } + writtenVertices += vertices.count; + }); + result = output.buffer; + } else { + let writtenVertices = 0; + let vertexList = ""; + let faceList = ""; + traverseMeshes(function(mesh, geometry) { + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = vertices.count; i < l2; i++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + let line2 = vertex.x + " " + vertex.y + " " + vertex.z; + if (includeNormals === true) { + if (normals != null) { + vertex.fromBufferAttribute(normals, i); + vertex.applyMatrix3(normalMatrixWorld).normalize(); + line2 += " " + vertex.x + " " + vertex.y + " " + vertex.z; + } else { + line2 += " 0 0 0"; + } + } + if (includeUVs === true) { + if (uvs != null) { + line2 += " " + uvs.getX(i) + " " + uvs.getY(i); + } else { + line2 += " 0 0"; + } + } + if (includeColors === true) { + if (colors != null) { + tempColor.fromBufferAttribute(colors, i).convertLinearToSRGB(); + line2 += " " + Math.floor(tempColor.r * 255) + " " + Math.floor(tempColor.g * 255) + " " + Math.floor(tempColor.b * 255); + } else { + line2 += " 255 255 255"; + } + } + vertexList += line2 + "\n"; + } + if (includeIndices === true) { + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + faceList += `3 ${indices.getX(i + 0) + writtenVertices}`; + faceList += ` ${indices.getX(i + 1) + writtenVertices}`; + faceList += ` ${indices.getX(i + 2) + writtenVertices} +`; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + faceList += `3 ${writtenVertices + i} ${writtenVertices + i + 1} ${writtenVertices + i + 2} +`; + } + } + faceCount += indices ? indices.count / 3 : vertices.count / 3; + } + writtenVertices += vertices.count; + }); + result = `${header}${vertexList}${includeIndices ? `${faceList} +` : "\n"}`; + } + if (typeof onDone === "function") requestAnimationFrame(() => onDone(result)); + return result; + } +}; + +// node_modules/three/examples/jsm/exporters/STLExporter.js +var STLExporter = class { + parse(scene, options = {}) { + options = Object.assign({ + binary: false + }, options); + const binary = options.binary; + const objects = []; + let triangles = 0; + scene.traverse(function(object) { + if (object.isMesh) { + const geometry = object.geometry; + const index2 = geometry.index; + const positionAttribute = geometry.getAttribute("position"); + triangles += index2 !== null ? index2.count / 3 : positionAttribute.count / 3; + objects.push({ + object3d: object, + geometry + }); + } + }); + let output; + let offset = 80; + if (binary === true) { + const bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4; + const arrayBuffer = new ArrayBuffer(bufferLength); + output = new DataView(arrayBuffer); + output.setUint32(offset, triangles, true); + offset += 4; + } else { + output = ""; + output += "solid exported\n"; + } + const vA = new Vector3(); + const vB = new Vector3(); + const vC = new Vector3(); + const cb = new Vector3(); + const ab = new Vector3(); + const normal = new Vector3(); + for (let i = 0, il = objects.length; i < il; i++) { + const object = objects[i].object3d; + const geometry = objects[i].geometry; + const index2 = geometry.index; + const positionAttribute = geometry.getAttribute("position"); + if (index2 !== null) { + for (let j = 0; j < index2.count; j += 3) { + const a2 = index2.getX(j + 0); + const b3 = index2.getX(j + 1); + const c2 = index2.getX(j + 2); + writeFace(a2, b3, c2, positionAttribute, object); + } + } else { + for (let j = 0; j < positionAttribute.count; j += 3) { + const a2 = j + 0; + const b3 = j + 1; + const c2 = j + 2; + writeFace(a2, b3, c2, positionAttribute, object); + } + } + } + if (binary === false) { + output += "endsolid exported\n"; + } + return output; + function writeFace(a2, b3, c2, positionAttribute, object) { + vA.fromBufferAttribute(positionAttribute, a2); + vB.fromBufferAttribute(positionAttribute, b3); + vC.fromBufferAttribute(positionAttribute, c2); + if (object.isSkinnedMesh === true) { + object.applyBoneTransform(a2, vA); + object.applyBoneTransform(b3, vB); + object.applyBoneTransform(c2, vC); + } + vA.applyMatrix4(object.matrixWorld); + vB.applyMatrix4(object.matrixWorld); + vC.applyMatrix4(object.matrixWorld); + writeNormal(vA, vB, vC); + writeVertex(vA); + writeVertex(vB); + writeVertex(vC); + if (binary === true) { + output.setUint16(offset, 0, true); + offset += 2; + } else { + output += " endloop\n"; + output += " endfacet\n"; + } + } + function writeNormal(vA2, vB2, vC2) { + cb.subVectors(vC2, vB2); + ab.subVectors(vA2, vB2); + cb.cross(ab).normalize(); + normal.copy(cb).normalize(); + if (binary === true) { + output.setFloat32(offset, normal.x, true); + offset += 4; + output.setFloat32(offset, normal.y, true); + offset += 4; + output.setFloat32(offset, normal.z, true); + offset += 4; + } else { + output += " facet normal " + normal.x + " " + normal.y + " " + normal.z + "\n"; + output += " outer loop\n"; + } + } + function writeVertex(vertex) { + if (binary === true) { + output.setFloat32(offset, vertex.x, true); + offset += 4; + output.setFloat32(offset, vertex.y, true); + offset += 4; + output.setFloat32(offset, vertex.z, true); + offset += 4; + } else { + output += " vertex " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + } +}; + +// node_modules/three/examples/jsm/exporters/USDZExporter.js +var USDZExporter = class { + parse(scene, onDone, onError, options) { + this.parseAsync(scene, options).then(onDone).catch(onError); + } + async parseAsync(scene, options = {}) { + options = Object.assign({ + ar: { + anchoring: { type: "plane" }, + planeAnchoring: { alignment: "horizontal" } + }, + includeAnchoringProperties: true, + quickLookCompatible: false, + maxTextureSize: 1024 + }, options); + const files = {}; + const modelFileName = "model.usda"; + files[modelFileName] = null; + let output = buildHeader(); + output += buildSceneStart(options); + const materials = {}; + const textures = {}; + scene.traverseVisible((object) => { + if (object.isMesh) { + const geometry = object.geometry; + const material = object.material; + if (material.isMeshStandardMaterial) { + const geometryFileName = "geometries/Geometry_" + geometry.id + ".usda"; + if (!(geometryFileName in files)) { + const meshObject = buildMeshObject(geometry); + files[geometryFileName] = buildUSDFileAsString(meshObject); + } + if (!(material.uuid in materials)) { + materials[material.uuid] = material; + } + output += buildXform(object, geometry, material); + } else { + console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)", object); + } + } else if (object.isCamera) { + output += buildCamera(object); + } + }); + output += buildSceneEnd(); + output += buildMaterials(materials, textures, options.quickLookCompatible); + files[modelFileName] = strToU8(output); + output = null; + for (const id in textures) { + let texture = textures[id]; + if (texture.isCompressedTexture === true) { + texture = decompress(texture); + } + const canvas = imageToCanvas(texture.image, texture.flipY, options.maxTextureSize); + const blob = await new Promise((resolve) => canvas.toBlob(resolve, "image/png", 1)); + files[`textures/Texture_${id}.png`] = new Uint8Array(await blob.arrayBuffer()); + } + let offset = 0; + for (const filename in files) { + const file = files[filename]; + const headerSize = 34 + filename.length; + offset += headerSize; + const offsetMod64 = offset & 63; + if (offsetMod64 !== 4) { + const padLength = 64 - offsetMod64; + const padding = new Uint8Array(padLength); + files[filename] = [file, { extra: { 12345: padding } }]; + } + offset = file.length; + } + return zipSync(files, { level: 0 }); + } +}; +function imageToCanvas(image, flipY, maxTextureSize) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + const scale2 = maxTextureSize / Math.max(image.width, image.height); + const canvas = document.createElement("canvas"); + canvas.width = image.width * Math.min(1, scale2); + canvas.height = image.height * Math.min(1, scale2); + const context = canvas.getContext("2d"); + if (flipY === true) { + context.translate(0, canvas.height); + context.scale(1, -1); + } + context.drawImage(image, 0, 0, canvas.width, canvas.height); + return canvas; + } else { + throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture."); + } +} +var PRECISION = 7; +function buildHeader() { + return `#usda 1.0 +( + customLayerData = { + string creator = "Three.js USDZExporter" + } + defaultPrim = "Root" + metersPerUnit = 1 + upAxis = "Y" +) + +`; +} +function buildSceneStart(options) { + const alignment = options.includeAnchoringProperties === true ? ` + token preliminary:anchoring:type = "${options.ar.anchoring.type}" + token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}" + ` : ""; + return `def Xform "Root" +{ + def Scope "Scenes" ( + kind = "sceneLibrary" + ) + { + def Xform "Scene" ( + customData = { + bool preliminary_collidesWithEnvironment = 0 + string sceneName = "Scene" + } + sceneName = "Scene" + ) + {${alignment} +`; +} +function buildSceneEnd() { + return ` + } + } +} + +`; +} +function buildUSDFileAsString(dataToInsert) { + let output = buildHeader(); + output += dataToInsert; + return strToU8(output); +} +function buildXform(object, geometry, material) { + const name2 = "Object_" + object.id; + const transform2 = buildMatrix(object.matrixWorld); + if (object.matrixWorld.determinant() < 0) { + console.warn("THREE.USDZExporter: USDZ does not support negative scales", object); + } + return `def Xform "${name2}" ( + prepend references = @./geometries/Geometry_${geometry.id}.usda@ + prepend apiSchemas = ["MaterialBindingAPI"] +) +{ + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + rel material:binding = +} + +`; +} +function buildMatrix(matrix3) { + const array = matrix3.elements; + return `( ${buildMatrixRow(array, 0)}, ${buildMatrixRow(array, 4)}, ${buildMatrixRow(array, 8)}, ${buildMatrixRow(array, 12)} )`; +} +function buildMatrixRow(array, offset) { + return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`; +} +function buildMeshObject(geometry) { + const mesh = buildMesh(geometry); + return ` +def "Geometry" +{ +${mesh} +} +`; +} +function buildMesh(geometry) { + const name2 = "Geometry"; + const attributes = geometry.attributes; + const count = attributes.position.count; + return ` + def Mesh "${name2}" + { + int[] faceVertexCounts = [${buildMeshVertexCount(geometry)}] + int[] faceVertexIndices = [${buildMeshVertexIndices(geometry)}] + normal3f[] normals = [${buildVector3Array(attributes.normal, count)}] ( + interpolation = "vertex" + ) + point3f[] points = [${buildVector3Array(attributes.position, count)}] +${buildPrimvars(attributes)} + uniform token subdivisionScheme = "none" + } +`; +} +function buildMeshVertexCount(geometry) { + const count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count; + return Array(count / 3).fill(3).join(", "); +} +function buildMeshVertexIndices(geometry) { + const index2 = geometry.index; + const array = []; + if (index2 !== null) { + for (let i = 0; i < index2.count; i++) { + array.push(index2.getX(i)); + } + } else { + const length2 = geometry.attributes.position.count; + for (let i = 0; i < length2; i++) { + array.push(i); + } + } + return array.join(", "); +} +function buildVector3Array(attribute, count) { + if (attribute === void 0) { + console.warn("USDZExporter: Normals missing."); + return Array(count).fill("(0, 0, 0)").join(", "); + } + const array = []; + for (let i = 0; i < attribute.count; i++) { + const x2 = attribute.getX(i); + const y2 = attribute.getY(i); + const z = attribute.getZ(i); + array.push(`(${x2.toPrecision(PRECISION)}, ${y2.toPrecision(PRECISION)}, ${z.toPrecision(PRECISION)})`); + } + return array.join(", "); +} +function buildVector2Array(attribute) { + const array = []; + for (let i = 0; i < attribute.count; i++) { + const x2 = attribute.getX(i); + const y2 = attribute.getY(i); + array.push(`(${x2.toPrecision(PRECISION)}, ${1 - y2.toPrecision(PRECISION)})`); + } + return array.join(", "); +} +function buildPrimvars(attributes) { + let string = ""; + for (let i = 0; i < 4; i++) { + const id = i > 0 ? i : ""; + const attribute = attributes["uv" + id]; + if (attribute !== void 0) { + string += ` + texCoord2f[] primvars:st${id} = [${buildVector2Array(attribute)}] ( + interpolation = "vertex" + )`; + } + } + const colorAttribute = attributes.color; + if (colorAttribute !== void 0) { + const count = colorAttribute.count; + string += ` + color3f[] primvars:displayColor = [${buildVector3Array(colorAttribute, count)}] ( + interpolation = "vertex" + )`; + } + return string; +} +function buildMaterials(materials, textures, quickLookCompatible = false) { + const array = []; + for (const uuid in materials) { + const material = materials[uuid]; + array.push(buildMaterial(material, textures, quickLookCompatible)); + } + return `def "Materials" +{ +${array.join("")} +} + +`; +} +function buildMaterial(material, textures, quickLookCompatible = false) { + const pad = " "; + const inputs = []; + const samplers = []; + function buildTexture(texture, mapType, color) { + const id = texture.source.id + "_" + texture.flipY; + textures[id] = texture; + const uv = texture.channel > 0 ? "st" + texture.channel : "st"; + const WRAPPINGS = { + 1e3: "repeat", + // RepeatWrapping + 1001: "clamp", + // ClampToEdgeWrapping + 1002: "mirror" + // MirroredRepeatWrapping + }; + const repeat = texture.repeat.clone(); + const offset = texture.offset.clone(); + const rotation2 = texture.rotation; + const xRotationOffset = Math.sin(rotation2); + const yRotationOffset = Math.cos(rotation2); + offset.y = 1 - offset.y - repeat.y; + if (quickLookCompatible) { + offset.x = offset.x / repeat.x; + offset.y = offset.y / repeat.y; + offset.x += xRotationOffset / repeat.x; + offset.y += yRotationOffset - 1; + } else { + offset.x += xRotationOffset * repeat.x; + offset.y += (1 - yRotationOffset) * repeat.y; + } + return ` + def Shader "PrimvarReader_${mapType}" + { + uniform token info:id = "UsdPrimvarReader_float2" + float2 inputs:fallback = (0.0, 0.0) + token inputs:varname = "${uv}" + float2 outputs:result + } + + def Shader "Transform2d_${mapType}" + { + uniform token info:id = "UsdTransform2d" + token inputs:in.connect = + float inputs:rotation = ${(rotation2 * (180 / Math.PI)).toFixed(PRECISION)} + float2 inputs:scale = ${buildVector2(repeat)} + float2 inputs:translation = ${buildVector2(offset)} + float2 outputs:result + } + + def Shader "Texture_${texture.id}_${mapType}" + { + uniform token info:id = "UsdUVTexture" + asset inputs:file = @textures/Texture_${id}.png@ + float2 inputs:st.connect = + ${color !== void 0 ? "float4 inputs:scale = " + buildColor4(color) : ""} + token inputs:sourceColorSpace = "${texture.colorSpace === NoColorSpace ? "raw" : "sRGB"}" + token inputs:wrapS = "${WRAPPINGS[texture.wrapS]}" + token inputs:wrapT = "${WRAPPINGS[texture.wrapT]}" + float outputs:r + float outputs:g + float outputs:b + float3 outputs:rgb + ${material.transparent || material.alphaTest > 0 ? "float outputs:a" : ""} + }`; + } + if (material.side === DoubleSide) { + console.warn("THREE.USDZExporter: USDZ does not support double sided materials", material); + } + if (material.map !== null) { + inputs.push(`${pad}color3f inputs:diffuseColor.connect = `); + if (material.transparent) { + inputs.push(`${pad}float inputs:opacity.connect = `); + } else if (material.alphaTest > 0) { + inputs.push(`${pad}float inputs:opacity.connect = `); + inputs.push(`${pad}float inputs:opacityThreshold = ${material.alphaTest}`); + } + samplers.push(buildTexture(material.map, "diffuse", material.color)); + } else { + inputs.push(`${pad}color3f inputs:diffuseColor = ${buildColor(material.color)}`); + } + if (material.emissiveMap !== null) { + inputs.push(`${pad}color3f inputs:emissiveColor.connect = `); + samplers.push(buildTexture(material.emissiveMap, "emissive")); + } else if (material.emissive.getHex() > 0) { + inputs.push(`${pad}color3f inputs:emissiveColor = ${buildColor(material.emissive)}`); + } + if (material.normalMap !== null) { + inputs.push(`${pad}normal3f inputs:normal.connect = `); + samplers.push(buildTexture(material.normalMap, "normal")); + } + if (material.aoMap !== null) { + inputs.push(`${pad}float inputs:occlusion.connect = `); + samplers.push(buildTexture(material.aoMap, "occlusion")); + } + if (material.roughnessMap !== null && material.roughness === 1) { + inputs.push(`${pad}float inputs:roughness.connect = `); + samplers.push(buildTexture(material.roughnessMap, "roughness")); + } else { + inputs.push(`${pad}float inputs:roughness = ${material.roughness}`); + } + if (material.metalnessMap !== null && material.metalness === 1) { + inputs.push(`${pad}float inputs:metallic.connect = `); + samplers.push(buildTexture(material.metalnessMap, "metallic")); + } else { + inputs.push(`${pad}float inputs:metallic = ${material.metalness}`); + } + if (material.alphaMap !== null) { + inputs.push(`${pad}float inputs:opacity.connect = `); + inputs.push(`${pad}float inputs:opacityThreshold = 0.0001`); + samplers.push(buildTexture(material.alphaMap, "opacity")); + } else { + inputs.push(`${pad}float inputs:opacity = ${material.opacity}`); + } + if (material.isMeshPhysicalMaterial) { + inputs.push(`${pad}float inputs:clearcoat = ${material.clearcoat}`); + inputs.push(`${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`); + inputs.push(`${pad}float inputs:ior = ${material.ior}`); + } + return ` + def Material "Material_${material.id}" + { + def Shader "PreviewSurface" + { + uniform token info:id = "UsdPreviewSurface" +${inputs.join("\n")} + int inputs:useSpecularWorkflow = 0 + token outputs:surface + } + + token outputs:surface.connect = + +${samplers.join("\n")} + + } +`; +} +function buildColor(color) { + return `(${color.r}, ${color.g}, ${color.b})`; +} +function buildColor4(color) { + return `(${color.r}, ${color.g}, ${color.b}, 1.0)`; +} +function buildVector2(vector) { + return `(${vector.x}, ${vector.y})`; +} +function buildCamera(camera) { + const name2 = camera.name ? camera.name : "Camera_" + camera.id; + const transform2 = buildMatrix(camera.matrixWorld); + if (camera.matrixWorld.determinant() < 0) { + console.warn("THREE.USDZExporter: USDZ does not support negative scales", camera); + } + if (camera.isOrthographicCamera) { + return `def Camera "${name2}" + { + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + float2 clippingRange = (${camera.near.toPrecision(PRECISION)}, ${camera.far.toPrecision(PRECISION)}) + float horizontalAperture = ${((Math.abs(camera.left) + Math.abs(camera.right)) * 10).toPrecision(PRECISION)} + float verticalAperture = ${((Math.abs(camera.top) + Math.abs(camera.bottom)) * 10).toPrecision(PRECISION)} + token projection = "orthographic" + } + + `; + } else { + return `def Camera "${name2}" + { + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + float2 clippingRange = (${camera.near.toPrecision(PRECISION)}, ${camera.far.toPrecision(PRECISION)}) + float focalLength = ${camera.getFocalLength().toPrecision(PRECISION)} + float focusDistance = ${camera.focus.toPrecision(PRECISION)} + float horizontalAperture = ${camera.getFilmWidth().toPrecision(PRECISION)} + token projection = "perspective" + float verticalAperture = ${camera.getFilmHeight().toPrecision(PRECISION)} + } + + `; + } +} + +// node_modules/three/examples/jsm/geometries/BoxLineGeometry.js +var BoxLineGeometry = class extends BufferGeometry { + constructor(width2 = 1, height2 = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { + super(); + widthSegments = Math.floor(widthSegments); + heightSegments = Math.floor(heightSegments); + depthSegments = Math.floor(depthSegments); + const widthHalf = width2 / 2; + const heightHalf = height2 / 2; + const depthHalf = depth / 2; + const segmentWidth = width2 / widthSegments; + const segmentHeight = height2 / heightSegments; + const segmentDepth = depth / depthSegments; + const vertices = []; + let x2 = -widthHalf; + let y2 = -heightHalf; + let z = -depthHalf; + for (let i = 0; i <= widthSegments; i++) { + vertices.push(x2, -heightHalf, -depthHalf, x2, heightHalf, -depthHalf); + vertices.push(x2, heightHalf, -depthHalf, x2, heightHalf, depthHalf); + vertices.push(x2, heightHalf, depthHalf, x2, -heightHalf, depthHalf); + vertices.push(x2, -heightHalf, depthHalf, x2, -heightHalf, -depthHalf); + x2 += segmentWidth; + } + for (let i = 0; i <= heightSegments; i++) { + vertices.push(-widthHalf, y2, -depthHalf, widthHalf, y2, -depthHalf); + vertices.push(widthHalf, y2, -depthHalf, widthHalf, y2, depthHalf); + vertices.push(widthHalf, y2, depthHalf, -widthHalf, y2, depthHalf); + vertices.push(-widthHalf, y2, depthHalf, -widthHalf, y2, -depthHalf); + y2 += segmentHeight; + } + for (let i = 0; i <= depthSegments; i++) { + vertices.push(-widthHalf, -heightHalf, z, -widthHalf, heightHalf, z); + vertices.push(-widthHalf, heightHalf, z, widthHalf, heightHalf, z); + vertices.push(widthHalf, heightHalf, z, widthHalf, -heightHalf, z); + vertices.push(widthHalf, -heightHalf, z, -widthHalf, -heightHalf, z); + z += segmentDepth; + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } +}; + +// node_modules/three/examples/jsm/math/ConvexHull.js +var Visible = 0; +var Deleted = 1; +var _v12 = new Vector3(); +var _line3 = new Line3(); +var _plane3 = new Plane(); +var _closestPoint = new Vector3(); +var _triangle = new Triangle(); +var ConvexHull = class { + constructor() { + this.tolerance = -1; + this.faces = []; + this.newFaces = []; + this.assigned = new VertexList(); + this.unassigned = new VertexList(); + this.vertices = []; + } + setFromPoints(points) { + if (points.length >= 4) { + this.makeEmpty(); + for (let i = 0, l2 = points.length; i < l2; i++) { + this.vertices.push(new VertexNode(points[i])); + } + this.compute(); + } + return this; + } + setFromObject(object) { + const points = []; + object.updateMatrixWorld(true); + object.traverse(function(node) { + const geometry = node.geometry; + if (geometry !== void 0) { + const attribute = geometry.attributes.position; + if (attribute !== void 0) { + for (let i = 0, l2 = attribute.count; i < l2; i++) { + const point = new Vector3(); + point.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld); + points.push(point); + } + } + } + }); + return this.setFromPoints(points); + } + containsPoint(point) { + const faces = this.faces; + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + if (face.distanceToPoint(point) > this.tolerance) return false; + } + return true; + } + intersectRay(ray, target) { + const faces = this.faces; + let tNear = -Infinity; + let tFar = Infinity; + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + const vN = face.distanceToPoint(ray.origin); + const vD = face.normal.dot(ray.direction); + if (vN > 0 && vD >= 0) return null; + const t3 = vD !== 0 ? -vN / vD : 0; + if (t3 <= 0) continue; + if (vD > 0) { + tFar = Math.min(t3, tFar); + } else { + tNear = Math.max(t3, tNear); + } + if (tNear > tFar) { + return null; + } + } + if (tNear !== -Infinity) { + ray.at(tNear, target); + } else { + ray.at(tFar, target); + } + return target; + } + intersectsRay(ray) { + return this.intersectRay(ray, _v12) !== null; + } + makeEmpty() { + this.faces = []; + this.vertices = []; + return this; + } + // Adds a vertex to the 'assigned' list of vertices and assigns it to the given face + addVertexToFace(vertex, face) { + vertex.face = face; + if (face.outside === null) { + this.assigned.append(vertex); + } else { + this.assigned.insertBefore(face.outside, vertex); + } + face.outside = vertex; + return this; + } + // Removes a vertex from the 'assigned' list of vertices and from the given face + removeVertexFromFace(vertex, face) { + if (vertex === face.outside) { + if (vertex.next !== null && vertex.next.face === face) { + face.outside = vertex.next; + } else { + face.outside = null; + } + } + this.assigned.remove(vertex); + return this; + } + // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list + removeAllVerticesFromFace(face) { + if (face.outside !== null) { + const start = face.outside; + let end = face.outside; + while (end.next !== null && end.next.face === face) { + end = end.next; + } + this.assigned.removeSubList(start, end); + start.prev = end.next = null; + face.outside = null; + return start; + } + } + // Removes all the visible vertices that 'face' is able to see + deleteFaceVertices(face, absorbingFace) { + const faceVertices = this.removeAllVerticesFromFace(face); + if (faceVertices !== void 0) { + if (absorbingFace === void 0) { + this.unassigned.appendChain(faceVertices); + } else { + let vertex = faceVertices; + do { + const nextVertex = vertex.next; + const distance = absorbingFace.distanceToPoint(vertex.point); + if (distance > this.tolerance) { + this.addVertexToFace(vertex, absorbingFace); + } else { + this.unassigned.append(vertex); + } + vertex = nextVertex; + } while (vertex !== null); + } + } + return this; + } + // Reassigns as many vertices as possible from the unassigned list to the new faces + resolveUnassignedPoints(newFaces) { + if (this.unassigned.isEmpty() === false) { + let vertex = this.unassigned.first(); + do { + const nextVertex = vertex.next; + let maxDistance = this.tolerance; + let maxFace = null; + for (let i = 0; i < newFaces.length; i++) { + const face = newFaces[i]; + if (face.mark === Visible) { + const distance = face.distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + maxFace = face; + } + if (maxDistance > 1e3 * this.tolerance) break; + } + } + if (maxFace !== null) { + this.addVertexToFace(vertex, maxFace); + } + vertex = nextVertex; + } while (vertex !== null); + } + return this; + } + // Computes the extremes of a simplex which will be the initial hull + computeExtremes() { + const min = new Vector3(); + const max2 = new Vector3(); + const minVertices = []; + const maxVertices = []; + for (let i = 0; i < 3; i++) { + minVertices[i] = maxVertices[i] = this.vertices[0]; + } + min.copy(this.vertices[0].point); + max2.copy(this.vertices[0].point); + for (let i = 0, l2 = this.vertices.length; i < l2; i++) { + const vertex = this.vertices[i]; + const point = vertex.point; + for (let j = 0; j < 3; j++) { + if (point.getComponent(j) < min.getComponent(j)) { + min.setComponent(j, point.getComponent(j)); + minVertices[j] = vertex; + } + } + for (let j = 0; j < 3; j++) { + if (point.getComponent(j) > max2.getComponent(j)) { + max2.setComponent(j, point.getComponent(j)); + maxVertices[j] = vertex; + } + } + } + this.tolerance = 3 * Number.EPSILON * (Math.max(Math.abs(min.x), Math.abs(max2.x)) + Math.max(Math.abs(min.y), Math.abs(max2.y)) + Math.max(Math.abs(min.z), Math.abs(max2.z))); + return { min: minVertices, max: maxVertices }; + } + // Computes the initial simplex assigning to its faces all the points + // that are candidates to form part of the hull + computeInitialHull() { + const vertices = this.vertices; + const extremes = this.computeExtremes(); + const min = extremes.min; + const max2 = extremes.max; + let maxDistance = 0; + let index2 = 0; + for (let i = 0; i < 3; i++) { + const distance = max2[i].point.getComponent(i) - min[i].point.getComponent(i); + if (distance > maxDistance) { + maxDistance = distance; + index2 = i; + } + } + const v0 = min[index2]; + const v12 = max2[index2]; + let v2; + let v3; + maxDistance = 0; + _line3.set(v0.point, v12.point); + for (let i = 0, l2 = this.vertices.length; i < l2; i++) { + const vertex = vertices[i]; + if (vertex !== v0 && vertex !== v12) { + _line3.closestPointToPoint(vertex.point, true, _closestPoint); + const distance = _closestPoint.distanceToSquared(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + v2 = vertex; + } + } + } + maxDistance = -1; + _plane3.setFromCoplanarPoints(v0.point, v12.point, v2.point); + for (let i = 0, l2 = this.vertices.length; i < l2; i++) { + const vertex = vertices[i]; + if (vertex !== v0 && vertex !== v12 && vertex !== v2) { + const distance = Math.abs(_plane3.distanceToPoint(vertex.point)); + if (distance > maxDistance) { + maxDistance = distance; + v3 = vertex; + } + } + } + const faces = []; + if (_plane3.distanceToPoint(v3.point) < 0) { + faces.push( + Face.create(v0, v12, v2), + Face.create(v3, v12, v0), + Face.create(v3, v2, v12), + Face.create(v3, v0, v2) + ); + for (let i = 0; i < 3; i++) { + const j = (i + 1) % 3; + faces[i + 1].getEdge(2).setTwin(faces[0].getEdge(j)); + faces[i + 1].getEdge(1).setTwin(faces[j + 1].getEdge(0)); + } + } else { + faces.push( + Face.create(v0, v2, v12), + Face.create(v3, v0, v12), + Face.create(v3, v12, v2), + Face.create(v3, v2, v0) + ); + for (let i = 0; i < 3; i++) { + const j = (i + 1) % 3; + faces[i + 1].getEdge(2).setTwin(faces[0].getEdge((3 - i) % 3)); + faces[i + 1].getEdge(0).setTwin(faces[j + 1].getEdge(1)); + } + } + for (let i = 0; i < 4; i++) { + this.faces.push(faces[i]); + } + for (let i = 0, l2 = vertices.length; i < l2; i++) { + const vertex = vertices[i]; + if (vertex !== v0 && vertex !== v12 && vertex !== v2 && vertex !== v3) { + maxDistance = this.tolerance; + let maxFace = null; + for (let j = 0; j < 4; j++) { + const distance = this.faces[j].distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + maxFace = this.faces[j]; + } + } + if (maxFace !== null) { + this.addVertexToFace(vertex, maxFace); + } + } + } + return this; + } + // Removes inactive faces + reindexFaces() { + const activeFaces = []; + for (let i = 0; i < this.faces.length; i++) { + const face = this.faces[i]; + if (face.mark === Visible) { + activeFaces.push(face); + } + } + this.faces = activeFaces; + return this; + } + // Finds the next vertex to create faces with the current hull + nextVertexToAdd() { + if (this.assigned.isEmpty() === false) { + let eyeVertex, maxDistance = 0; + const eyeFace = this.assigned.first().face; + let vertex = eyeFace.outside; + do { + const distance = eyeFace.distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + eyeVertex = vertex; + } + vertex = vertex.next; + } while (vertex !== null && vertex.face === eyeFace); + return eyeVertex; + } + } + // Computes a chain of half edges in CCW order called the 'horizon'. + // For an edge to be part of the horizon it must join a face that can see + // 'eyePoint' and a face that cannot see 'eyePoint'. + computeHorizon(eyePoint, crossEdge, face, horizon) { + this.deleteFaceVertices(face); + face.mark = Deleted; + let edge; + if (crossEdge === null) { + edge = crossEdge = face.getEdge(0); + } else { + edge = crossEdge.next; + } + do { + const twinEdge = edge.twin; + const oppositeFace = twinEdge.face; + if (oppositeFace.mark === Visible) { + if (oppositeFace.distanceToPoint(eyePoint) > this.tolerance) { + this.computeHorizon(eyePoint, twinEdge, oppositeFace, horizon); + } else { + horizon.push(edge); + } + } + edge = edge.next; + } while (edge !== crossEdge); + return this; + } + // Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order + addAdjoiningFace(eyeVertex, horizonEdge) { + const face = Face.create(eyeVertex, horizonEdge.tail(), horizonEdge.head()); + this.faces.push(face); + face.getEdge(-1).setTwin(horizonEdge.twin); + return face.getEdge(0); + } + // Adds 'horizon.length' faces to the hull, each face will be linked with the + // horizon opposite face and the face on the left/right + addNewFaces(eyeVertex, horizon) { + this.newFaces = []; + let firstSideEdge = null; + let previousSideEdge = null; + for (let i = 0; i < horizon.length; i++) { + const horizonEdge = horizon[i]; + const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge); + if (firstSideEdge === null) { + firstSideEdge = sideEdge; + } else { + sideEdge.next.setTwin(previousSideEdge); + } + this.newFaces.push(sideEdge.face); + previousSideEdge = sideEdge; + } + firstSideEdge.next.setTwin(previousSideEdge); + return this; + } + // Adds a vertex to the hull + addVertexToHull(eyeVertex) { + const horizon = []; + this.unassigned.clear(); + this.removeVertexFromFace(eyeVertex, eyeVertex.face); + this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon); + this.addNewFaces(eyeVertex, horizon); + this.resolveUnassignedPoints(this.newFaces); + return this; + } + cleanup() { + this.assigned.clear(); + this.unassigned.clear(); + this.newFaces = []; + return this; + } + compute() { + let vertex; + this.computeInitialHull(); + while ((vertex = this.nextVertexToAdd()) !== void 0) { + this.addVertexToHull(vertex); + } + this.reindexFaces(); + this.cleanup(); + return this; + } +}; +var Face = class _Face { + constructor() { + this.normal = new Vector3(); + this.midpoint = new Vector3(); + this.area = 0; + this.constant = 0; + this.outside = null; + this.mark = Visible; + this.edge = null; + } + static create(a2, b3, c2) { + const face = new _Face(); + const e0 = new HalfEdge(a2, face); + const e1 = new HalfEdge(b3, face); + const e2 = new HalfEdge(c2, face); + e0.next = e2.prev = e1; + e1.next = e0.prev = e2; + e2.next = e1.prev = e0; + face.edge = e0; + return face.compute(); + } + getEdge(i) { + let edge = this.edge; + while (i > 0) { + edge = edge.next; + i--; + } + while (i < 0) { + edge = edge.prev; + i++; + } + return edge; + } + compute() { + const a2 = this.edge.tail(); + const b3 = this.edge.head(); + const c2 = this.edge.next.head(); + _triangle.set(a2.point, b3.point, c2.point); + _triangle.getNormal(this.normal); + _triangle.getMidpoint(this.midpoint); + this.area = _triangle.getArea(); + this.constant = this.normal.dot(this.midpoint); + return this; + } + distanceToPoint(point) { + return this.normal.dot(point) - this.constant; + } +}; +var HalfEdge = class { + constructor(vertex, face) { + this.vertex = vertex; + this.prev = null; + this.next = null; + this.twin = null; + this.face = face; + } + head() { + return this.vertex; + } + tail() { + return this.prev ? this.prev.vertex : null; + } + length() { + const head2 = this.head(); + const tail = this.tail(); + if (tail !== null) { + return tail.point.distanceTo(head2.point); + } + return -1; + } + lengthSquared() { + const head2 = this.head(); + const tail = this.tail(); + if (tail !== null) { + return tail.point.distanceToSquared(head2.point); + } + return -1; + } + setTwin(edge) { + this.twin = edge; + edge.twin = this; + return this; + } +}; +var VertexNode = class { + constructor(point) { + this.point = point; + this.prev = null; + this.next = null; + this.face = null; + } +}; +var VertexList = class { + constructor() { + this.head = null; + this.tail = null; + } + first() { + return this.head; + } + last() { + return this.tail; + } + clear() { + this.head = this.tail = null; + return this; + } + // Inserts a vertex before the target vertex + insertBefore(target, vertex) { + vertex.prev = target.prev; + vertex.next = target; + if (vertex.prev === null) { + this.head = vertex; + } else { + vertex.prev.next = vertex; + } + target.prev = vertex; + return this; + } + // Inserts a vertex after the target vertex + insertAfter(target, vertex) { + vertex.prev = target; + vertex.next = target.next; + if (vertex.next === null) { + this.tail = vertex; + } else { + vertex.next.prev = vertex; + } + target.next = vertex; + return this; + } + // Appends a vertex to the end of the linked list + append(vertex) { + if (this.head === null) { + this.head = vertex; + } else { + this.tail.next = vertex; + } + vertex.prev = this.tail; + vertex.next = null; + this.tail = vertex; + return this; + } + // Appends a chain of vertices where 'vertex' is the head. + appendChain(vertex) { + if (this.head === null) { + this.head = vertex; + } else { + this.tail.next = vertex; + } + vertex.prev = this.tail; + while (vertex.next !== null) { + vertex = vertex.next; + } + this.tail = vertex; + return this; + } + // Removes a vertex from the linked list + remove(vertex) { + if (vertex.prev === null) { + this.head = vertex.next; + } else { + vertex.prev.next = vertex.next; + } + if (vertex.next === null) { + this.tail = vertex.prev; + } else { + vertex.next.prev = vertex.prev; + } + return this; + } + // Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b + removeSubList(a2, b3) { + if (a2.prev === null) { + this.head = b3.next; + } else { + a2.prev.next = b3.next; + } + if (b3.next === null) { + this.tail = a2.prev; + } else { + b3.next.prev = a2.prev; + } + return this; + } + isEmpty() { + return this.head === null; + } +}; + +// node_modules/three/examples/jsm/geometries/ConvexGeometry.js +var ConvexGeometry = class extends BufferGeometry { + constructor(points = []) { + super(); + const vertices = []; + const normals = []; + const convexHull = new ConvexHull().setFromPoints(points); + const faces = convexHull.faces; + for (let i = 0; i < faces.length; i++) { + const face = faces[i]; + let edge = face.edge; + do { + const point = edge.head().point; + vertices.push(point.x, point.y, point.z); + normals.push(face.normal.x, face.normal.y, face.normal.z); + edge = edge.next; + } while (edge !== face.edge); + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + } +}; + +// node_modules/three/examples/jsm/geometries/DecalGeometry.js +var DecalGeometry = class extends BufferGeometry { + constructor(mesh, position2, orientation, size2) { + super(); + const vertices = []; + const normals = []; + const uvs = []; + const plane = new Vector3(); + const projectorMatrix = new Matrix4(); + projectorMatrix.makeRotationFromEuler(orientation); + projectorMatrix.setPosition(position2); + const projectorMatrixInverse = new Matrix4(); + projectorMatrixInverse.copy(projectorMatrix).invert(); + generate(); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generate() { + let decalVertices = []; + const vertex = new Vector3(); + const normal = new Vector3(); + const geometry = mesh.geometry; + const positionAttribute = geometry.attributes.position; + const normalAttribute = geometry.attributes.normal; + if (geometry.index !== null) { + const index2 = geometry.index; + for (let i = 0; i < index2.count; i++) { + vertex.fromBufferAttribute(positionAttribute, index2.getX(i)); + normal.fromBufferAttribute(normalAttribute, index2.getX(i)); + pushDecalVertex(decalVertices, vertex, normal); + } + } else { + for (let i = 0; i < positionAttribute.count; i++) { + vertex.fromBufferAttribute(positionAttribute, i); + normal.fromBufferAttribute(normalAttribute, i); + pushDecalVertex(decalVertices, vertex, normal); + } + } + decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1)); + for (let i = 0; i < decalVertices.length; i++) { + const decalVertex = decalVertices[i]; + uvs.push( + 0.5 + decalVertex.position.x / size2.x, + 0.5 + decalVertex.position.y / size2.y + ); + decalVertex.position.applyMatrix4(projectorMatrix); + vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z); + normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z); + } + } + function pushDecalVertex(decalVertices, vertex, normal) { + vertex.applyMatrix4(mesh.matrixWorld); + vertex.applyMatrix4(projectorMatrixInverse); + normal.transformDirection(mesh.matrixWorld); + decalVertices.push(new DecalVertex(vertex.clone(), normal.clone())); + } + function clipGeometry(inVertices, plane2) { + const outVertices = []; + const s = 0.5 * Math.abs(size2.dot(plane2)); + for (let i = 0; i < inVertices.length; i += 3) { + let total = 0; + let nV1; + let nV2; + let nV3; + let nV4; + const d1 = inVertices[i + 0].position.dot(plane2) - s; + const d2 = inVertices[i + 1].position.dot(plane2) - s; + const d3 = inVertices[i + 2].position.dot(plane2) - s; + const v1Out = d1 > 0; + const v2Out = d2 > 0; + const v3Out = d3 > 0; + total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0); + switch (total) { + case 0: { + outVertices.push(inVertices[i]); + outVertices.push(inVertices[i + 1]); + outVertices.push(inVertices[i + 2]); + break; + } + case 1: { + if (v1Out) { + nV1 = inVertices[i + 1]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i], nV1, plane2, s); + nV4 = clip(inVertices[i], nV2, plane2, s); + } + if (v2Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i + 1], nV1, plane2, s); + nV4 = clip(inVertices[i + 1], nV2, plane2, s); + outVertices.push(nV3); + outVertices.push(nV2.clone()); + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3.clone()); + outVertices.push(nV4); + break; + } + if (v3Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 1]; + nV3 = clip(inVertices[i + 2], nV1, plane2, s); + nV4 = clip(inVertices[i + 2], nV2, plane2, s); + } + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3); + outVertices.push(nV4); + outVertices.push(nV3.clone()); + outVertices.push(nV2.clone()); + break; + } + case 2: { + if (!v1Out) { + nV1 = inVertices[i].clone(); + nV2 = clip(nV1, inVertices[i + 1], plane2, s); + nV3 = clip(nV1, inVertices[i + 2], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v2Out) { + nV1 = inVertices[i + 1].clone(); + nV2 = clip(nV1, inVertices[i + 2], plane2, s); + nV3 = clip(nV1, inVertices[i], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v3Out) { + nV1 = inVertices[i + 2].clone(); + nV2 = clip(nV1, inVertices[i], plane2, s); + nV3 = clip(nV1, inVertices[i + 1], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + break; + } + case 3: { + break; + } + } + } + return outVertices; + } + function clip(v0, v12, p2, s) { + const d0 = v0.position.dot(p2) - s; + const d1 = v12.position.dot(p2) - s; + const s0 = d0 / (d0 - d1); + const v = new DecalVertex( + new Vector3( + v0.position.x + s0 * (v12.position.x - v0.position.x), + v0.position.y + s0 * (v12.position.y - v0.position.y), + v0.position.z + s0 * (v12.position.z - v0.position.z) + ), + new Vector3( + v0.normal.x + s0 * (v12.normal.x - v0.normal.x), + v0.normal.y + s0 * (v12.normal.y - v0.normal.y), + v0.normal.z + s0 * (v12.normal.z - v0.normal.z) + ) + ); + return v; + } + } +}; +var DecalVertex = class { + constructor(position2, normal) { + this.position = position2; + this.normal = normal; + } + clone() { + return new this.constructor(this.position.clone(), this.normal.clone()); + } +}; + +// node_modules/three/examples/jsm/geometries/ParametricGeometry.js +var ParametricGeometry = class extends BufferGeometry { + constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) { + super(); + this.type = "ParametricGeometry"; + this.parameters = { + func, + slices, + stacks + }; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const EPS2 = 1e-5; + const normal = new Vector3(); + const p0 = new Vector3(), p1 = new Vector3(); + const pu = new Vector3(), pv = new Vector3(); + const sliceCount = slices + 1; + for (let i = 0; i <= stacks; i++) { + const v = i / stacks; + for (let j = 0; j <= slices; j++) { + const u = j / slices; + func(u, v, p0); + vertices.push(p0.x, p0.y, p0.z); + if (u - EPS2 >= 0) { + func(u - EPS2, v, p1); + pu.subVectors(p0, p1); + } else { + func(u + EPS2, v, p1); + pu.subVectors(p1, p0); + } + if (v - EPS2 >= 0) { + func(u, v - EPS2, p1); + pv.subVectors(p0, p1); + } else { + func(u, v + EPS2, p1); + pv.subVectors(p1, p0); + } + normal.crossVectors(pu, pv).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u, v); + } + } + for (let i = 0; i < stacks; i++) { + for (let j = 0; j < slices; j++) { + const a2 = i * sliceCount + j; + const b3 = i * sliceCount + j + 1; + const c2 = (i + 1) * sliceCount + j + 1; + const d = (i + 1) * sliceCount + j; + indices.push(a2, b3, d); + indices.push(b3, c2, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +}; + +// node_modules/three/examples/jsm/geometries/ParametricGeometries.js +var ParametricGeometries = { + klein: function(v, u, target) { + u *= Math.PI; + v *= 2 * Math.PI; + u = u * 2; + let x2, z; + if (u < Math.PI) { + x2 = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v); + z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v); + } else { + x2 = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI); + z = -8 * Math.sin(u); + } + const y2 = -2 * (1 - Math.cos(u) / 2) * Math.sin(v); + target.set(x2, y2, z); + }, + plane: function(width2, height2) { + return function(u, v, target) { + const x2 = u * width2; + const y2 = 0; + const z = v * height2; + target.set(x2, y2, z); + }; + }, + mobius: function(u, t3, target) { + u = u - 0.5; + const v = 2 * Math.PI * t3; + const a2 = 2; + const x2 = Math.cos(v) * (a2 + u * Math.cos(v / 2)); + const y2 = Math.sin(v) * (a2 + u * Math.cos(v / 2)); + const z = u * Math.sin(v / 2); + target.set(x2, y2, z); + }, + mobius3d: function(u, t3, target) { + u *= Math.PI; + t3 *= 2 * Math.PI; + u = u * 2; + const phi = u / 2; + const major = 2.25, a2 = 0.125, b3 = 0.65; + let x2 = a2 * Math.cos(t3) * Math.cos(phi) - b3 * Math.sin(t3) * Math.sin(phi); + const z = a2 * Math.cos(t3) * Math.sin(phi) + b3 * Math.sin(t3) * Math.cos(phi); + const y2 = (major + x2) * Math.sin(u); + x2 = (major + x2) * Math.cos(u); + target.set(x2, y2, z); + } +}; +ParametricGeometries.TubeGeometry = class TubeGeometry extends ParametricGeometry { + constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) { + const numpoints = segments + 1; + const frames2 = path.computeFrenetFrames(segments, closed), tangents = frames2.tangents, normals = frames2.normals, binormals = frames2.binormals; + const position2 = new Vector3(); + function ParametricTube(u, v, target) { + v *= 2 * Math.PI; + const i = Math.floor(u * (numpoints - 1)); + path.getPointAt(u, position2); + const normal = normals[i]; + const binormal = binormals[i]; + const cx = -radius * Math.cos(v); + const cy = radius * Math.sin(v); + position2.x += cx * normal.x + cy * binormal.x; + position2.y += cx * normal.y + cy * binormal.y; + position2.z += cx * normal.z + cy * binormal.z; + target.copy(position2); + } + super(ParametricTube, segments, segmentsRadius); + this.tangents = tangents; + this.normals = normals; + this.binormals = binormals; + this.path = path; + this.segments = segments; + this.radius = radius; + this.segmentsRadius = segmentsRadius; + this.closed = closed; + } +}; +ParametricGeometries.TorusKnotGeometry = class TorusKnotGeometry extends ParametricGeometries.TubeGeometry { + constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p2 = 2, q2 = 3) { + class TorusKnotCurve extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const r = 0.5; + const x2 = (1 + r * Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (1 + r * Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = r * Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(radius); + } + } + const segments = segmentsT; + const radiusSegments = segmentsR; + const extrudePath = new TorusKnotCurve(); + super(extrudePath, segments, tube, radiusSegments, true, false); + this.radius = radius; + this.tube = tube; + this.segmentsT = segmentsT; + this.segmentsR = segmentsR; + this.p = p2; + this.q = q2; + } +}; +ParametricGeometries.SphereGeometry = class SphereGeometry2 extends ParametricGeometry { + constructor(size2, u, v) { + function sphere(u2, v2, target) { + u2 *= Math.PI; + v2 *= 2 * Math.PI; + const x2 = size2 * Math.sin(u2) * Math.cos(v2); + const y2 = size2 * Math.sin(u2) * Math.sin(v2); + const z = size2 * Math.cos(u2); + target.set(x2, y2, z); + } + super(sphere, u, v); + } +}; +ParametricGeometries.PlaneGeometry = class PlaneGeometry2 extends ParametricGeometry { + constructor(width2, depth, segmentsWidth, segmentsDepth) { + function plane(u, v, target) { + const x2 = u * width2; + const y2 = 0; + const z = v * depth; + target.set(x2, y2, z); + } + super(plane, segmentsWidth, segmentsDepth); + } +}; + +// node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js +var _tempNormal = new Vector3(); +function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) { + const totArcLength = 2 * Math.PI * radius / 4; + const centerLength = Math.max(sideLength - 2 * radius, 0); + const halfArc = Math.PI / 4; + _tempNormal.copy(normal); + _tempNormal[projectionAxis] = 0; + _tempNormal.normalize(); + const arcUvRatio = 0.5 * totArcLength / (totArcLength + centerLength); + const arcAngleRatio = 1 - _tempNormal.angleTo(faceDirVector) / halfArc; + if (Math.sign(_tempNormal[uvAxis]) === 1) { + return arcAngleRatio * arcUvRatio; + } else { + const lenUv = centerLength / (totArcLength + centerLength); + return lenUv + arcUvRatio + arcUvRatio * (1 - arcAngleRatio); + } +} +var RoundedBoxGeometry = class extends BoxGeometry { + constructor(width2 = 1, height2 = 1, depth = 1, segments = 2, radius = 0.1) { + segments = segments * 2 + 1; + radius = Math.min(width2 / 2, height2 / 2, depth / 2, radius); + super(1, 1, 1, segments, segments, segments); + if (segments === 1) return; + const geometry2 = this.toNonIndexed(); + this.index = null; + this.attributes.position = geometry2.attributes.position; + this.attributes.normal = geometry2.attributes.normal; + this.attributes.uv = geometry2.attributes.uv; + const position2 = new Vector3(); + const normal = new Vector3(); + const box = new Vector3(width2, height2, depth).divideScalar(2).subScalar(radius); + const positions = this.attributes.position.array; + const normals = this.attributes.normal.array; + const uvs = this.attributes.uv.array; + const faceTris = positions.length / 6; + const faceDirVector = new Vector3(); + const halfSegmentSize = 0.5 / segments; + for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) { + position2.fromArray(positions, i); + normal.copy(position2); + normal.x -= Math.sign(normal.x) * halfSegmentSize; + normal.y -= Math.sign(normal.y) * halfSegmentSize; + normal.z -= Math.sign(normal.z) * halfSegmentSize; + normal.normalize(); + positions[i + 0] = box.x * Math.sign(position2.x) + normal.x * radius; + positions[i + 1] = box.y * Math.sign(position2.y) + normal.y * radius; + positions[i + 2] = box.z * Math.sign(position2.z) + normal.z * radius; + normals[i + 0] = normal.x; + normals[i + 1] = normal.y; + normals[i + 2] = normal.z; + const side = Math.floor(i / faceTris); + switch (side) { + case 0: + faceDirVector.set(1, 0, 0); + uvs[j + 0] = getUv(faceDirVector, normal, "z", "y", radius, depth); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height2); + break; + case 1: + faceDirVector.set(-1, 0, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "z", "y", radius, depth); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height2); + break; + case 2: + faceDirVector.set(0, 1, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width2); + uvs[j + 1] = getUv(faceDirVector, normal, "z", "x", radius, depth); + break; + case 3: + faceDirVector.set(0, -1, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "z", "x", radius, depth); + break; + case 4: + faceDirVector.set(0, 0, 1); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "y", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height2); + break; + case 5: + faceDirVector.set(0, 0, -1); + uvs[j + 0] = getUv(faceDirVector, normal, "x", "y", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height2); + break; + } + } + } +}; + +// node_modules/three/examples/jsm/geometries/TeapotGeometry.js +var TeapotGeometry = class extends BufferGeometry { + constructor(size2 = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true) { + const teapotPatches = [ + /*rim*/ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 3, + 16, + 17, + 18, + 7, + 19, + 20, + 21, + 11, + 22, + 23, + 24, + 15, + 25, + 26, + 27, + 18, + 28, + 29, + 30, + 21, + 31, + 32, + 33, + 24, + 34, + 35, + 36, + 27, + 37, + 38, + 39, + 30, + 40, + 41, + 0, + 33, + 42, + 43, + 4, + 36, + 44, + 45, + 8, + 39, + 46, + 47, + 12, + /*body*/ + 12, + 13, + 14, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 15, + 25, + 26, + 27, + 51, + 60, + 61, + 62, + 55, + 63, + 64, + 65, + 59, + 66, + 67, + 68, + 27, + 37, + 38, + 39, + 62, + 69, + 70, + 71, + 65, + 72, + 73, + 74, + 68, + 75, + 76, + 77, + 39, + 46, + 47, + 12, + 71, + 78, + 79, + 48, + 74, + 80, + 81, + 52, + 77, + 82, + 83, + 56, + 56, + 57, + 58, + 59, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 59, + 66, + 67, + 68, + 87, + 96, + 97, + 98, + 91, + 99, + 100, + 101, + 95, + 102, + 103, + 104, + 68, + 75, + 76, + 77, + 98, + 105, + 106, + 107, + 101, + 108, + 109, + 110, + 104, + 111, + 112, + 113, + 77, + 82, + 83, + 56, + 107, + 114, + 115, + 84, + 110, + 116, + 117, + 88, + 113, + 118, + 119, + 92, + /*handle*/ + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 123, + 136, + 137, + 120, + 127, + 138, + 139, + 124, + 131, + 140, + 141, + 128, + 135, + 142, + 143, + 132, + 132, + 133, + 134, + 135, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 68, + 152, + 153, + 154, + 135, + 142, + 143, + 132, + 147, + 155, + 156, + 144, + 151, + 157, + 158, + 148, + 154, + 159, + 160, + 68, + /*spout*/ + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 164, + 177, + 178, + 161, + 168, + 179, + 180, + 165, + 172, + 181, + 182, + 169, + 176, + 183, + 184, + 173, + 173, + 174, + 175, + 176, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 176, + 183, + 184, + 173, + 188, + 197, + 198, + 185, + 192, + 199, + 200, + 189, + 196, + 201, + 202, + 193, + /*lid*/ + 203, + 203, + 203, + 203, + 204, + 205, + 206, + 207, + 208, + 208, + 208, + 208, + 209, + 210, + 211, + 212, + 203, + 203, + 203, + 203, + 207, + 213, + 214, + 215, + 208, + 208, + 208, + 208, + 212, + 216, + 217, + 218, + 203, + 203, + 203, + 203, + 215, + 219, + 220, + 221, + 208, + 208, + 208, + 208, + 218, + 222, + 223, + 224, + 203, + 203, + 203, + 203, + 221, + 225, + 226, + 204, + 208, + 208, + 208, + 208, + 224, + 227, + 228, + 209, + 209, + 210, + 211, + 212, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 212, + 216, + 217, + 218, + 232, + 241, + 242, + 243, + 236, + 244, + 245, + 246, + 240, + 247, + 248, + 249, + 218, + 222, + 223, + 224, + 243, + 250, + 251, + 252, + 246, + 253, + 254, + 255, + 249, + 256, + 257, + 258, + 224, + 227, + 228, + 209, + 252, + 259, + 260, + 229, + 255, + 261, + 262, + 233, + 258, + 263, + 264, + 237, + /*bottom*/ + 265, + 265, + 265, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 92, + 119, + 118, + 113, + 265, + 265, + 265, + 265, + 269, + 274, + 275, + 276, + 273, + 277, + 278, + 279, + 113, + 112, + 111, + 104, + 265, + 265, + 265, + 265, + 276, + 280, + 281, + 282, + 279, + 283, + 284, + 285, + 104, + 103, + 102, + 95, + 265, + 265, + 265, + 265, + 282, + 286, + 287, + 266, + 285, + 288, + 289, + 270, + 95, + 94, + 93, + 92 + ]; + const teapotVertices = [ + 1.4, + 0, + 2.4, + 1.4, + -0.784, + 2.4, + 0.784, + -1.4, + 2.4, + 0, + -1.4, + 2.4, + 1.3375, + 0, + 2.53125, + 1.3375, + -0.749, + 2.53125, + 0.749, + -1.3375, + 2.53125, + 0, + -1.3375, + 2.53125, + 1.4375, + 0, + 2.53125, + 1.4375, + -0.805, + 2.53125, + 0.805, + -1.4375, + 2.53125, + 0, + -1.4375, + 2.53125, + 1.5, + 0, + 2.4, + 1.5, + -0.84, + 2.4, + 0.84, + -1.5, + 2.4, + 0, + -1.5, + 2.4, + -0.784, + -1.4, + 2.4, + -1.4, + -0.784, + 2.4, + -1.4, + 0, + 2.4, + -0.749, + -1.3375, + 2.53125, + -1.3375, + -0.749, + 2.53125, + -1.3375, + 0, + 2.53125, + -0.805, + -1.4375, + 2.53125, + -1.4375, + -0.805, + 2.53125, + -1.4375, + 0, + 2.53125, + -0.84, + -1.5, + 2.4, + -1.5, + -0.84, + 2.4, + -1.5, + 0, + 2.4, + -1.4, + 0.784, + 2.4, + -0.784, + 1.4, + 2.4, + 0, + 1.4, + 2.4, + -1.3375, + 0.749, + 2.53125, + -0.749, + 1.3375, + 2.53125, + 0, + 1.3375, + 2.53125, + -1.4375, + 0.805, + 2.53125, + -0.805, + 1.4375, + 2.53125, + 0, + 1.4375, + 2.53125, + -1.5, + 0.84, + 2.4, + -0.84, + 1.5, + 2.4, + 0, + 1.5, + 2.4, + 0.784, + 1.4, + 2.4, + 1.4, + 0.784, + 2.4, + 0.749, + 1.3375, + 2.53125, + 1.3375, + 0.749, + 2.53125, + 0.805, + 1.4375, + 2.53125, + 1.4375, + 0.805, + 2.53125, + 0.84, + 1.5, + 2.4, + 1.5, + 0.84, + 2.4, + 1.75, + 0, + 1.875, + 1.75, + -0.98, + 1.875, + 0.98, + -1.75, + 1.875, + 0, + -1.75, + 1.875, + 2, + 0, + 1.35, + 2, + -1.12, + 1.35, + 1.12, + -2, + 1.35, + 0, + -2, + 1.35, + 2, + 0, + 0.9, + 2, + -1.12, + 0.9, + 1.12, + -2, + 0.9, + 0, + -2, + 0.9, + -0.98, + -1.75, + 1.875, + -1.75, + -0.98, + 1.875, + -1.75, + 0, + 1.875, + -1.12, + -2, + 1.35, + -2, + -1.12, + 1.35, + -2, + 0, + 1.35, + -1.12, + -2, + 0.9, + -2, + -1.12, + 0.9, + -2, + 0, + 0.9, + -1.75, + 0.98, + 1.875, + -0.98, + 1.75, + 1.875, + 0, + 1.75, + 1.875, + -2, + 1.12, + 1.35, + -1.12, + 2, + 1.35, + 0, + 2, + 1.35, + -2, + 1.12, + 0.9, + -1.12, + 2, + 0.9, + 0, + 2, + 0.9, + 0.98, + 1.75, + 1.875, + 1.75, + 0.98, + 1.875, + 1.12, + 2, + 1.35, + 2, + 1.12, + 1.35, + 1.12, + 2, + 0.9, + 2, + 1.12, + 0.9, + 2, + 0, + 0.45, + 2, + -1.12, + 0.45, + 1.12, + -2, + 0.45, + 0, + -2, + 0.45, + 1.5, + 0, + 0.225, + 1.5, + -0.84, + 0.225, + 0.84, + -1.5, + 0.225, + 0, + -1.5, + 0.225, + 1.5, + 0, + 0.15, + 1.5, + -0.84, + 0.15, + 0.84, + -1.5, + 0.15, + 0, + -1.5, + 0.15, + -1.12, + -2, + 0.45, + -2, + -1.12, + 0.45, + -2, + 0, + 0.45, + -0.84, + -1.5, + 0.225, + -1.5, + -0.84, + 0.225, + -1.5, + 0, + 0.225, + -0.84, + -1.5, + 0.15, + -1.5, + -0.84, + 0.15, + -1.5, + 0, + 0.15, + -2, + 1.12, + 0.45, + -1.12, + 2, + 0.45, + 0, + 2, + 0.45, + -1.5, + 0.84, + 0.225, + -0.84, + 1.5, + 0.225, + 0, + 1.5, + 0.225, + -1.5, + 0.84, + 0.15, + -0.84, + 1.5, + 0.15, + 0, + 1.5, + 0.15, + 1.12, + 2, + 0.45, + 2, + 1.12, + 0.45, + 0.84, + 1.5, + 0.225, + 1.5, + 0.84, + 0.225, + 0.84, + 1.5, + 0.15, + 1.5, + 0.84, + 0.15, + -1.6, + 0, + 2.025, + -1.6, + -0.3, + 2.025, + -1.5, + -0.3, + 2.25, + -1.5, + 0, + 2.25, + -2.3, + 0, + 2.025, + -2.3, + -0.3, + 2.025, + -2.5, + -0.3, + 2.25, + -2.5, + 0, + 2.25, + -2.7, + 0, + 2.025, + -2.7, + -0.3, + 2.025, + -3, + -0.3, + 2.25, + -3, + 0, + 2.25, + -2.7, + 0, + 1.8, + -2.7, + -0.3, + 1.8, + -3, + -0.3, + 1.8, + -3, + 0, + 1.8, + -1.5, + 0.3, + 2.25, + -1.6, + 0.3, + 2.025, + -2.5, + 0.3, + 2.25, + -2.3, + 0.3, + 2.025, + -3, + 0.3, + 2.25, + -2.7, + 0.3, + 2.025, + -3, + 0.3, + 1.8, + -2.7, + 0.3, + 1.8, + -2.7, + 0, + 1.575, + -2.7, + -0.3, + 1.575, + -3, + -0.3, + 1.35, + -3, + 0, + 1.35, + -2.5, + 0, + 1.125, + -2.5, + -0.3, + 1.125, + -2.65, + -0.3, + 0.9375, + -2.65, + 0, + 0.9375, + -2, + -0.3, + 0.9, + -1.9, + -0.3, + 0.6, + -1.9, + 0, + 0.6, + -3, + 0.3, + 1.35, + -2.7, + 0.3, + 1.575, + -2.65, + 0.3, + 0.9375, + -2.5, + 0.3, + 1.125, + -1.9, + 0.3, + 0.6, + -2, + 0.3, + 0.9, + 1.7, + 0, + 1.425, + 1.7, + -0.66, + 1.425, + 1.7, + -0.66, + 0.6, + 1.7, + 0, + 0.6, + 2.6, + 0, + 1.425, + 2.6, + -0.66, + 1.425, + 3.1, + -0.66, + 0.825, + 3.1, + 0, + 0.825, + 2.3, + 0, + 2.1, + 2.3, + -0.25, + 2.1, + 2.4, + -0.25, + 2.025, + 2.4, + 0, + 2.025, + 2.7, + 0, + 2.4, + 2.7, + -0.25, + 2.4, + 3.3, + -0.25, + 2.4, + 3.3, + 0, + 2.4, + 1.7, + 0.66, + 0.6, + 1.7, + 0.66, + 1.425, + 3.1, + 0.66, + 0.825, + 2.6, + 0.66, + 1.425, + 2.4, + 0.25, + 2.025, + 2.3, + 0.25, + 2.1, + 3.3, + 0.25, + 2.4, + 2.7, + 0.25, + 2.4, + 2.8, + 0, + 2.475, + 2.8, + -0.25, + 2.475, + 3.525, + -0.25, + 2.49375, + 3.525, + 0, + 2.49375, + 2.9, + 0, + 2.475, + 2.9, + -0.15, + 2.475, + 3.45, + -0.15, + 2.5125, + 3.45, + 0, + 2.5125, + 2.8, + 0, + 2.4, + 2.8, + -0.15, + 2.4, + 3.2, + -0.15, + 2.4, + 3.2, + 0, + 2.4, + 3.525, + 0.25, + 2.49375, + 2.8, + 0.25, + 2.475, + 3.45, + 0.15, + 2.5125, + 2.9, + 0.15, + 2.475, + 3.2, + 0.15, + 2.4, + 2.8, + 0.15, + 2.4, + 0, + 0, + 3.15, + 0.8, + 0, + 3.15, + 0.8, + -0.45, + 3.15, + 0.45, + -0.8, + 3.15, + 0, + -0.8, + 3.15, + 0, + 0, + 2.85, + 0.2, + 0, + 2.7, + 0.2, + -0.112, + 2.7, + 0.112, + -0.2, + 2.7, + 0, + -0.2, + 2.7, + -0.45, + -0.8, + 3.15, + -0.8, + -0.45, + 3.15, + -0.8, + 0, + 3.15, + -0.112, + -0.2, + 2.7, + -0.2, + -0.112, + 2.7, + -0.2, + 0, + 2.7, + -0.8, + 0.45, + 3.15, + -0.45, + 0.8, + 3.15, + 0, + 0.8, + 3.15, + -0.2, + 0.112, + 2.7, + -0.112, + 0.2, + 2.7, + 0, + 0.2, + 2.7, + 0.45, + 0.8, + 3.15, + 0.8, + 0.45, + 3.15, + 0.112, + 0.2, + 2.7, + 0.2, + 0.112, + 2.7, + 0.4, + 0, + 2.55, + 0.4, + -0.224, + 2.55, + 0.224, + -0.4, + 2.55, + 0, + -0.4, + 2.55, + 1.3, + 0, + 2.55, + 1.3, + -0.728, + 2.55, + 0.728, + -1.3, + 2.55, + 0, + -1.3, + 2.55, + 1.3, + 0, + 2.4, + 1.3, + -0.728, + 2.4, + 0.728, + -1.3, + 2.4, + 0, + -1.3, + 2.4, + -0.224, + -0.4, + 2.55, + -0.4, + -0.224, + 2.55, + -0.4, + 0, + 2.55, + -0.728, + -1.3, + 2.55, + -1.3, + -0.728, + 2.55, + -1.3, + 0, + 2.55, + -0.728, + -1.3, + 2.4, + -1.3, + -0.728, + 2.4, + -1.3, + 0, + 2.4, + -0.4, + 0.224, + 2.55, + -0.224, + 0.4, + 2.55, + 0, + 0.4, + 2.55, + -1.3, + 0.728, + 2.55, + -0.728, + 1.3, + 2.55, + 0, + 1.3, + 2.55, + -1.3, + 0.728, + 2.4, + -0.728, + 1.3, + 2.4, + 0, + 1.3, + 2.4, + 0.224, + 0.4, + 2.55, + 0.4, + 0.224, + 2.55, + 0.728, + 1.3, + 2.55, + 1.3, + 0.728, + 2.55, + 0.728, + 1.3, + 2.4, + 1.3, + 0.728, + 2.4, + 0, + 0, + 0, + 1.425, + 0, + 0, + 1.425, + 0.798, + 0, + 0.798, + 1.425, + 0, + 0, + 1.425, + 0, + 1.5, + 0, + 0.075, + 1.5, + 0.84, + 0.075, + 0.84, + 1.5, + 0.075, + 0, + 1.5, + 0.075, + -0.798, + 1.425, + 0, + -1.425, + 0.798, + 0, + -1.425, + 0, + 0, + -0.84, + 1.5, + 0.075, + -1.5, + 0.84, + 0.075, + -1.5, + 0, + 0.075, + -1.425, + -0.798, + 0, + -0.798, + -1.425, + 0, + 0, + -1.425, + 0, + -1.5, + -0.84, + 0.075, + -0.84, + -1.5, + 0.075, + 0, + -1.5, + 0.075, + 0.798, + -1.425, + 0, + 1.425, + -0.798, + 0, + 0.84, + -1.5, + 0.075, + 1.5, + -0.84, + 0.075 + ]; + super(); + segments = Math.max(2, Math.floor(segments)); + const blinnScale = 1.3; + const maxHeight = 3.15 * (blinn ? 1 : blinnScale); + const maxHeight2 = maxHeight / 2; + const trueSize = size2 / maxHeight2; + let numTriangles = bottom ? (8 * segments - 4) * segments : 0; + numTriangles += lid ? (16 * segments - 4) * segments : 0; + numTriangles += body ? 40 * segments * segments : 0; + const indices = new Uint32Array(numTriangles * 3); + let numVertices = bottom ? 4 : 0; + numVertices += lid ? 8 : 0; + numVertices += body ? 20 : 0; + numVertices *= (segments + 1) * (segments + 1); + const vertices = new Float32Array(numVertices * 3); + const normals = new Float32Array(numVertices * 3); + const uvs = new Float32Array(numVertices * 2); + const ms = new Matrix4(); + ms.set( + -1, + 3, + -3, + 1, + 3, + -6, + 3, + 0, + -3, + 3, + 0, + 0, + 1, + 0, + 0, + 0 + ); + const g2 = []; + const sp = []; + const tp = []; + const dsp = []; + const dtp = []; + const mgm = []; + const vert = []; + const sdir = []; + const tdir = []; + const norm = new Vector3(); + let tcoord; + let sval; + let tval; + let p2; + let dsval = 0; + let dtval = 0; + const normOut = new Vector3(); + const gmx = new Matrix4(); + const tmtx = new Matrix4(); + const vsp = new Vector4(); + const vtp = new Vector4(); + const vdsp = new Vector4(); + const vdtp = new Vector4(); + const vsdir = new Vector3(); + const vtdir = new Vector3(); + const mst = ms.clone(); + mst.transpose(); + const notDegenerate = (vtx1, vtx2, vtx3) => ( + // if any vertex matches, return false + !(vertices[vtx1 * 3] === vertices[vtx2 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx2 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx2 * 3 + 2] || vertices[vtx1 * 3] === vertices[vtx3 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx3 * 3 + 2] || vertices[vtx2 * 3] === vertices[vtx3 * 3] && vertices[vtx2 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx2 * 3 + 2] === vertices[vtx3 * 3 + 2]) + ); + for (let i = 0; i < 3; i++) { + mgm[i] = new Matrix4(); + } + const minPatches = body ? 0 : 20; + const maxPatches = bottom ? 32 : 28; + const vertPerRow = segments + 1; + let surfCount = 0; + let vertCount = 0; + let normCount = 0; + let uvCount = 0; + let indexCount = 0; + for (let surf = minPatches; surf < maxPatches; surf++) { + if (lid || (surf < 20 || surf >= 28)) { + for (let i = 0; i < 3; i++) { + for (let r = 0; r < 4; r++) { + for (let c2 = 0; c2 < 4; c2++) { + g2[c2 * 4 + r] = teapotVertices[teapotPatches[surf * 16 + r * 4 + c2] * 3 + i]; + if (fitLid && (surf >= 20 && surf < 28) && i !== 2) { + g2[c2 * 4 + r] *= 1.077; + } + if (!blinn && i === 2) { + g2[c2 * 4 + r] *= blinnScale; + } + } + } + gmx.set(g2[0], g2[1], g2[2], g2[3], g2[4], g2[5], g2[6], g2[7], g2[8], g2[9], g2[10], g2[11], g2[12], g2[13], g2[14], g2[15]); + tmtx.multiplyMatrices(gmx, ms); + mgm[i].multiplyMatrices(mst, tmtx); + } + for (let sstep = 0; sstep <= segments; sstep++) { + const s = sstep / segments; + for (let tstep = 0; tstep <= segments; tstep++) { + const t3 = tstep / segments; + for (p2 = 4, sval = tval = 1; p2--; ) { + sp[p2] = sval; + tp[p2] = tval; + sval *= s; + tval *= t3; + if (p2 === 3) { + dsp[p2] = dtp[p2] = 0; + dsval = dtval = 1; + } else { + dsp[p2] = dsval * (3 - p2); + dtp[p2] = dtval * (3 - p2); + dsval *= s; + dtval *= t3; + } + } + vsp.fromArray(sp); + vtp.fromArray(tp); + vdsp.fromArray(dsp); + vdtp.fromArray(dtp); + for (let i = 0; i < 3; i++) { + tcoord = vsp.clone(); + tcoord.applyMatrix4(mgm[i]); + vert[i] = tcoord.dot(vtp); + tcoord = vdsp.clone(); + tcoord.applyMatrix4(mgm[i]); + sdir[i] = tcoord.dot(vtp); + tcoord = vsp.clone(); + tcoord.applyMatrix4(mgm[i]); + tdir[i] = tcoord.dot(vdtp); + } + vsdir.fromArray(sdir); + vtdir.fromArray(tdir); + norm.crossVectors(vtdir, vsdir); + norm.normalize(); + if (vert[0] === 0 && vert[1] === 0) { + normOut.set(0, vert[2] > maxHeight2 ? 1 : -1, 0); + } else { + normOut.set(norm.x, norm.z, -norm.y); + } + vertices[vertCount++] = trueSize * vert[0]; + vertices[vertCount++] = trueSize * (vert[2] - maxHeight2); + vertices[vertCount++] = -trueSize * vert[1]; + normals[normCount++] = normOut.x; + normals[normCount++] = normOut.y; + normals[normCount++] = normOut.z; + uvs[uvCount++] = 1 - t3; + uvs[uvCount++] = 1 - s; + } + } + for (let sstep = 0; sstep < segments; sstep++) { + for (let tstep = 0; tstep < segments; tstep++) { + const v12 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep; + const v2 = v12 + 1; + const v3 = v2 + vertPerRow; + const v4 = v12 + vertPerRow; + if (notDegenerate(v12, v2, v3)) { + indices[indexCount++] = v12; + indices[indexCount++] = v2; + indices[indexCount++] = v3; + } + if (notDegenerate(v12, v3, v4)) { + indices[indexCount++] = v12; + indices[indexCount++] = v3; + indices[indexCount++] = v4; + } + } + } + surfCount++; + } + } + this.setIndex(new BufferAttribute(indices, 1)); + this.setAttribute("position", new BufferAttribute(vertices, 3)); + this.setAttribute("normal", new BufferAttribute(normals, 3)); + this.setAttribute("uv", new BufferAttribute(uvs, 2)); + this.computeBoundingSphere(); + } +}; + +// node_modules/three/examples/jsm/geometries/TextGeometry.js +var TextGeometry = class extends ExtrudeGeometry { + constructor(text2, parameters = {}) { + const font = parameters.font; + if (font === void 0) { + super(); + } else { + const shapes = font.generateShapes(text2, parameters.size); + if (parameters.depth === void 0 && parameters.height !== void 0) { + console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"); + } + parameters.depth = parameters.depth !== void 0 ? parameters.depth : parameters.height !== void 0 ? parameters.height : 50; + if (parameters.bevelThickness === void 0) parameters.bevelThickness = 10; + if (parameters.bevelSize === void 0) parameters.bevelSize = 8; + if (parameters.bevelEnabled === void 0) parameters.bevelEnabled = false; + super(shapes, parameters); + } + this.type = "TextGeometry"; + } +}; + +// node_modules/three/examples/jsm/helpers/LightProbeHelper.js +var LightProbeHelper = class extends Mesh { + constructor(lightProbe, size2) { + const material = new ShaderMaterial({ + type: "LightProbeHelperMaterial", + uniforms: { + sh: { value: lightProbe.sh.coefficients }, + // by reference + intensity: { value: lightProbe.intensity } + }, + vertexShader: [ + "varying vec3 vNormal;", + "void main() {", + " vNormal = normalize( normalMatrix * normal );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "#define RECIPROCAL_PI 0.318309886", + "vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {", + " // matrix is assumed to be orthogonal", + " return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );", + "}", + "// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf", + "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", + " // normal is assumed to have unit length", + " float x = normal.x, y = normal.y, z = normal.z;", + " // band 0", + " vec3 result = shCoefficients[ 0 ] * 0.886227;", + " // band 1", + " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", + " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", + " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", + " // band 2", + " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", + " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", + " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", + " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", + " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", + " return result;", + "}", + "uniform vec3 sh[ 9 ]; // sh coefficients", + "uniform float intensity; // light probe intensity", + "varying vec3 vNormal;", + "void main() {", + " vec3 normal = normalize( vNormal );", + " vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );", + " vec3 irradiance = shGetIrradianceAt( worldNormal, sh );", + " vec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;", + " gl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );", + "}" + ].join("\n") + }); + const geometry = new SphereGeometry(1, 32, 16); + super(geometry, material); + this.lightProbe = lightProbe; + this.size = size2; + this.type = "LightProbeHelper"; + this.onBeforeRender(); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } + onBeforeRender() { + this.position.copy(this.lightProbe.position); + this.scale.set(1, 1, 1).multiplyScalar(this.size); + this.material.uniforms.intensity.value = this.lightProbe.intensity; + } +}; + +// node_modules/three/examples/jsm/helpers/OctreeHelper.js +var OctreeHelper = class extends LineSegments { + constructor(octree, color = 16776960) { + super(new BufferGeometry(), new LineBasicMaterial({ color, toneMapped: false })); + this.octree = octree; + this.color = color; + this.type = "OctreeHelper"; + this.update(); + } + update() { + const vertices = []; + function traverse(tree) { + for (let i = 0; i < tree.length; i++) { + const min = tree[i].box.min; + const max2 = tree[i].box.max; + vertices.push(max2.x, max2.y, max2.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, max2.y, max2.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, min.y, min.z); + vertices.push(min.x, min.y, min.z); + vertices.push(max2.x, min.y, min.z); + vertices.push(max2.x, min.y, min.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(max2.x, max2.y, max2.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(min.x, min.y, min.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, min.y, min.z); + traverse(tree[i].subTrees); + } + } + traverse(this.octree.subTrees); + this.geometry.dispose(); + this.geometry = new BufferGeometry(); + this.geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js +var PositionalAudioHelper = class extends Line { + constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) { + const geometry = new BufferGeometry(); + const divisions = divisionsInnerAngle + divisionsOuterAngle * 2; + const positions = new Float32Array((divisions * 3 + 3) * 3); + geometry.setAttribute("position", new BufferAttribute(positions, 3)); + const materialInnerAngle = new LineBasicMaterial({ color: 65280 }); + const materialOuterAngle = new LineBasicMaterial({ color: 16776960 }); + super(geometry, [materialOuterAngle, materialInnerAngle]); + this.audio = audio; + this.range = range; + this.divisionsInnerAngle = divisionsInnerAngle; + this.divisionsOuterAngle = divisionsOuterAngle; + this.type = "PositionalAudioHelper"; + this.update(); + } + update() { + const audio = this.audio; + const range = this.range; + const divisionsInnerAngle = this.divisionsInnerAngle; + const divisionsOuterAngle = this.divisionsOuterAngle; + const coneInnerAngle = MathUtils.degToRad(audio.panner.coneInnerAngle); + const coneOuterAngle = MathUtils.degToRad(audio.panner.coneOuterAngle); + const halfConeInnerAngle = coneInnerAngle / 2; + const halfConeOuterAngle = coneOuterAngle / 2; + let start = 0; + let count = 0; + let i; + let stride; + const geometry = this.geometry; + const positionAttribute = geometry.attributes.position; + geometry.clearGroups(); + function generateSegment(from, to, divisions, materialIndex) { + const step = (to - from) / divisions; + positionAttribute.setXYZ(start, 0, 0, 0); + count++; + for (i = from; i < to; i += step) { + stride = start + count; + positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range); + positionAttribute.setXYZ(stride + 1, Math.sin(Math.min(i + step, to)) * range, 0, Math.cos(Math.min(i + step, to)) * range); + positionAttribute.setXYZ(stride + 2, 0, 0, 0); + count += 3; + } + geometry.addGroup(start, count, materialIndex); + start += count; + count = 0; + } + generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0); + generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1); + generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0); + positionAttribute.needsUpdate = true; + if (coneInnerAngle === coneOuterAngle) this.material[0].visible = false; + } + dispose() { + this.geometry.dispose(); + this.material[0].dispose(); + this.material[1].dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js +var RectAreaLightHelper = class extends Line { + constructor(light, color) { + const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.computeBoundingSphere(); + const material = new LineBasicMaterial({ fog: false }); + super(geometry, material); + this.light = light; + this.color = color; + this.type = "RectAreaLightHelper"; + const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; + const geometry2 = new BufferGeometry(); + geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); + geometry2.computeBoundingSphere(); + this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false }))); + } + updateMatrixWorld() { + this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1); + if (this.color !== void 0) { + this.material.color.set(this.color); + this.children[0].material.color.set(this.color); + } else { + this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity); + const c2 = this.material.color; + const max2 = Math.max(c2.r, c2.g, c2.b); + if (max2 > 1) c2.multiplyScalar(1 / max2); + this.children[0].material.color.copy(this.material.color); + } + this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld); + this.children[0].matrixWorld.copy(this.matrixWorld); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/TextureHelper.js +var TextureHelper = class extends Mesh { + constructor(texture, width2 = 1, height2 = 1, depth = 1) { + const material = new ShaderMaterial({ + type: "TextureHelperMaterial", + side: DoubleSide, + transparent: true, + uniforms: { + map: { value: texture }, + alpha: { value: getAlpha(texture) } + }, + vertexShader: [ + "attribute vec3 uvw;", + "varying vec3 vUvw;", + "void main() {", + " vUvw = uvw;", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "precision highp float;", + "precision highp sampler2DArray;", + "precision highp sampler3D;", + "uniform {samplerType} map;", + "uniform float alpha;", + "varying vec3 vUvw;", + "vec4 textureHelper( in sampler2D map ) { return texture( map, vUvw.xy ); }", + "vec4 textureHelper( in sampler2DArray map ) { return texture( map, vUvw ); }", + "vec4 textureHelper( in sampler3D map ) { return texture( map, vUvw ); }", + "vec4 textureHelper( in samplerCube map ) { return texture( map, vUvw ); }", + "void main() {", + " gl_FragColor = linearToOutputTexel( vec4( textureHelper( map ).xyz, alpha ) );", + "}" + ].join("\n").replace("{samplerType}", getSamplerType(texture)) + }); + const geometry = texture.isCubeTexture ? createCubeGeometry(width2, height2, depth) : createSliceGeometry(texture, width2, height2, depth); + super(geometry, material); + this.texture = texture; + this.type = "TextureHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +function getSamplerType(texture) { + if (texture.isCubeTexture) { + return "samplerCube"; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return "sampler2DArray"; + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return "sampler3D"; + } else { + return "sampler2D"; + } +} +function getImageCount(texture) { + if (texture.isCubeTexture) { + return 6; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return texture.image.depth; + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return texture.image.depth; + } else { + return 1; + } +} +function getAlpha(texture) { + if (texture.isCubeTexture) { + return 1; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return Math.max(1 / texture.image.depth, 0.25); + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return Math.max(1 / texture.image.depth, 0.25); + } else { + return 1; + } +} +function createCubeGeometry(width2, height2, depth) { + const geometry = new BoxGeometry(width2, height2, depth); + const position2 = geometry.attributes.position; + const uv = geometry.attributes.uv; + const uvw = new BufferAttribute(new Float32Array(uv.count * 3), 3); + const _direction = new Vector3(); + for (let j = 0, jl = uv.count; j < jl; ++j) { + _direction.fromBufferAttribute(position2, j).normalize(); + const u = _direction.x; + const v = _direction.y; + const w = _direction.z; + uvw.setXYZ(j, u, v, w); + } + geometry.deleteAttribute("uv"); + geometry.setAttribute("uvw", uvw); + return geometry; +} +function createSliceGeometry(texture, width2, height2, depth) { + const sliceCount = getImageCount(texture); + const geometries = []; + for (let i = 0; i < sliceCount; ++i) { + const geometry = new PlaneGeometry(width2, height2); + if (sliceCount > 1) { + geometry.translate(0, 0, depth * (i / (sliceCount - 1) - 0.5)); + } + const uv = geometry.attributes.uv; + const uvw = new BufferAttribute(new Float32Array(uv.count * 3), 3); + for (let j = 0, jl = uv.count; j < jl; ++j) { + const u = uv.getX(j); + const v = texture.flipY ? uv.getY(j) : 1 - uv.getY(j); + const w = sliceCount === 1 ? 1 : texture.isDataArrayTexture || texture.isCompressedArrayTexture ? i : i / (sliceCount - 1); + uvw.setXYZ(j, u, v, w); + } + geometry.deleteAttribute("uv"); + geometry.setAttribute("uvw", uvw); + geometries.push(geometry); + } + return mergeGeometries(geometries); +} + +// node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js +var _v13 = new Vector3(); +var _v22 = new Vector3(); +var _normalMatrix = new Matrix3(); +var VertexNormalsHelper = class extends LineSegments { + constructor(object, size2 = 1, color = 16711680) { + const geometry = new BufferGeometry(); + const nNormals = object.geometry.attributes.normal.count; + const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3); + geometry.setAttribute("position", positions); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.size = size2; + this.type = "VertexNormalsHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update() { + this.object.updateMatrixWorld(true); + _normalMatrix.getNormalMatrix(this.object.matrixWorld); + const matrixWorld = this.object.matrixWorld; + const position2 = this.geometry.attributes.position; + const objGeometry = this.object.geometry; + if (objGeometry) { + const objPos = objGeometry.attributes.position; + const objNorm = objGeometry.attributes.normal; + let idx = 0; + for (let j = 0, jl = objPos.count; j < jl; j++) { + _v13.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); + _v22.fromBufferAttribute(objNorm, j); + _v22.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v13); + position2.setXYZ(idx, _v13.x, _v13.y, _v13.z); + idx = idx + 1; + position2.setXYZ(idx, _v22.x, _v22.y, _v22.z); + idx = idx + 1; + } + } + position2.needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js +var _v14 = new Vector3(); +var _v23 = new Vector3(); +var VertexTangentsHelper = class extends LineSegments { + constructor(object, size2 = 1, color = 65535) { + const geometry = new BufferGeometry(); + const nTangents = object.geometry.attributes.tangent.count; + const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3); + geometry.setAttribute("position", positions); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.size = size2; + this.type = "VertexTangentsHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update() { + this.object.updateMatrixWorld(true); + const matrixWorld = this.object.matrixWorld; + const position2 = this.geometry.attributes.position; + const objGeometry = this.object.geometry; + const objPos = objGeometry.attributes.position; + const objTan = objGeometry.attributes.tangent; + let idx = 0; + for (let j = 0, jl = objPos.count; j < jl; j++) { + _v14.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); + _v23.fromBufferAttribute(objTan, j); + _v23.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v14); + position2.setXYZ(idx, _v14.x, _v14.y, _v14.z); + idx = idx + 1; + position2.setXYZ(idx, _v23.x, _v23.y, _v23.z); + idx = idx + 1; + } + position2.needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/ViewHelper.js +var ViewHelper = class extends Object3D { + constructor(camera, domElement) { + super(); + this.isViewHelper = true; + this.animating = false; + this.center = new Vector3(); + const color1 = new Color("#ff4466"); + const color2 = new Color("#88ff44"); + const color3 = new Color("#4488ff"); + const color4 = new Color("#000000"); + const options = {}; + const interactiveObjects = []; + const raycaster = new Raycaster(); + const mouse = new Vector2(); + const dummy = new Object3D(); + const orthoCamera = new OrthographicCamera(-2, 2, 2, -2, 0, 4); + orthoCamera.position.set(0, 0, 2); + const geometry = new CylinderGeometry(0.04, 0.04, 0.8, 5).rotateZ(-Math.PI / 2).translate(0.4, 0, 0); + const xAxis2 = new Mesh(geometry, getAxisMaterial(color1)); + const yAxis2 = new Mesh(geometry, getAxisMaterial(color2)); + const zAxis2 = new Mesh(geometry, getAxisMaterial(color3)); + yAxis2.rotation.z = Math.PI / 2; + zAxis2.rotation.y = -Math.PI / 2; + this.add(xAxis2); + this.add(zAxis2); + this.add(yAxis2); + const spriteMaterial1 = getSpriteMaterial(color1); + const spriteMaterial2 = getSpriteMaterial(color2); + const spriteMaterial3 = getSpriteMaterial(color3); + const spriteMaterial4 = getSpriteMaterial(color4); + const posXAxisHelper = new Sprite(spriteMaterial1); + const posYAxisHelper = new Sprite(spriteMaterial2); + const posZAxisHelper = new Sprite(spriteMaterial3); + const negXAxisHelper = new Sprite(spriteMaterial4); + const negYAxisHelper = new Sprite(spriteMaterial4); + const negZAxisHelper = new Sprite(spriteMaterial4); + posXAxisHelper.position.x = 1; + posYAxisHelper.position.y = 1; + posZAxisHelper.position.z = 1; + negXAxisHelper.position.x = -1; + negYAxisHelper.position.y = -1; + negZAxisHelper.position.z = -1; + negXAxisHelper.material.opacity = 0.2; + negYAxisHelper.material.opacity = 0.2; + negZAxisHelper.material.opacity = 0.2; + posXAxisHelper.userData.type = "posX"; + posYAxisHelper.userData.type = "posY"; + posZAxisHelper.userData.type = "posZ"; + negXAxisHelper.userData.type = "negX"; + negYAxisHelper.userData.type = "negY"; + negZAxisHelper.userData.type = "negZ"; + this.add(posXAxisHelper); + this.add(posYAxisHelper); + this.add(posZAxisHelper); + this.add(negXAxisHelper); + this.add(negYAxisHelper); + this.add(negZAxisHelper); + interactiveObjects.push(posXAxisHelper); + interactiveObjects.push(posYAxisHelper); + interactiveObjects.push(posZAxisHelper); + interactiveObjects.push(negXAxisHelper); + interactiveObjects.push(negYAxisHelper); + interactiveObjects.push(negZAxisHelper); + const point = new Vector3(); + const dim = 128; + const turnRate = 2 * Math.PI; + this.render = function(renderer2) { + this.quaternion.copy(camera.quaternion).invert(); + this.updateMatrixWorld(); + point.set(0, 0, 1); + point.applyQuaternion(camera.quaternion); + const x2 = domElement.offsetWidth - dim; + renderer2.clearDepth(); + renderer2.getViewport(viewport); + renderer2.setViewport(x2, 0, dim, dim); + renderer2.render(this, orthoCamera); + renderer2.setViewport(viewport.x, viewport.y, viewport.z, viewport.w); + }; + const targetPosition = new Vector3(); + const targetQuaternion = new Quaternion(); + const q1 = new Quaternion(); + const q2 = new Quaternion(); + const viewport = new Vector4(); + let radius = 0; + this.handleClick = function(event) { + if (this.animating === true) return false; + const rect = domElement.getBoundingClientRect(); + const offsetX = rect.left + (domElement.offsetWidth - dim); + const offsetY = rect.top + (domElement.offsetHeight - dim); + mouse.x = (event.clientX - offsetX) / (rect.right - offsetX) * 2 - 1; + mouse.y = -((event.clientY - offsetY) / (rect.bottom - offsetY)) * 2 + 1; + raycaster.setFromCamera(mouse, orthoCamera); + const intersects = raycaster.intersectObjects(interactiveObjects); + if (intersects.length > 0) { + const intersection = intersects[0]; + const object = intersection.object; + prepareAnimationData(object, this.center); + this.animating = true; + return true; + } else { + return false; + } + }; + this.setLabels = function(labelX, labelY, labelZ) { + options.labelX = labelX; + options.labelY = labelY; + options.labelZ = labelZ; + updateLabels(); + }; + this.setLabelStyle = function(font, color, radius2) { + options.font = font; + options.color = color; + options.radius = radius2; + updateLabels(); + }; + this.update = function(delta) { + const step = delta * turnRate; + q1.rotateTowards(q2, step); + camera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius).add(this.center); + camera.quaternion.rotateTowards(targetQuaternion, step); + if (q1.angleTo(q2) === 0) { + this.animating = false; + } + }; + this.dispose = function() { + geometry.dispose(); + xAxis2.material.dispose(); + yAxis2.material.dispose(); + zAxis2.material.dispose(); + posXAxisHelper.material.map.dispose(); + posYAxisHelper.material.map.dispose(); + posZAxisHelper.material.map.dispose(); + negXAxisHelper.material.map.dispose(); + negYAxisHelper.material.map.dispose(); + negZAxisHelper.material.map.dispose(); + posXAxisHelper.material.dispose(); + posYAxisHelper.material.dispose(); + posZAxisHelper.material.dispose(); + negXAxisHelper.material.dispose(); + negYAxisHelper.material.dispose(); + negZAxisHelper.material.dispose(); + }; + function prepareAnimationData(object, focusPoint) { + switch (object.userData.type) { + case "posX": + targetPosition.set(1, 0, 0); + targetQuaternion.setFromEuler(new Euler(0, Math.PI * 0.5, 0)); + break; + case "posY": + targetPosition.set(0, 1, 0); + targetQuaternion.setFromEuler(new Euler(-Math.PI * 0.5, 0, 0)); + break; + case "posZ": + targetPosition.set(0, 0, 1); + targetQuaternion.setFromEuler(new Euler()); + break; + case "negX": + targetPosition.set(-1, 0, 0); + targetQuaternion.setFromEuler(new Euler(0, -Math.PI * 0.5, 0)); + break; + case "negY": + targetPosition.set(0, -1, 0); + targetQuaternion.setFromEuler(new Euler(Math.PI * 0.5, 0, 0)); + break; + case "negZ": + targetPosition.set(0, 0, -1); + targetQuaternion.setFromEuler(new Euler(0, Math.PI, 0)); + break; + default: + console.error("ViewHelper: Invalid axis."); + } + radius = camera.position.distanceTo(focusPoint); + targetPosition.multiplyScalar(radius).add(focusPoint); + dummy.position.copy(focusPoint); + dummy.lookAt(camera.position); + q1.copy(dummy.quaternion); + dummy.lookAt(targetPosition); + q2.copy(dummy.quaternion); + } + function getAxisMaterial(color) { + return new MeshBasicMaterial({ color, toneMapped: false }); + } + function getSpriteMaterial(color, text2) { + const { font = "24px Arial", color: labelColor = "#000000", radius: radius2 = 14 } = options; + const canvas = document.createElement("canvas"); + canvas.width = 64; + canvas.height = 64; + const context = canvas.getContext("2d"); + context.beginPath(); + context.arc(32, 32, radius2, 0, 2 * Math.PI); + context.closePath(); + context.fillStyle = color.getStyle(); + context.fill(); + if (text2) { + context.font = font; + context.textAlign = "center"; + context.fillStyle = labelColor; + context.fillText(text2, 32, 41); + } + const texture = new CanvasTexture(canvas); + texture.colorSpace = SRGBColorSpace; + return new SpriteMaterial({ map: texture, toneMapped: false }); + } + function updateLabels() { + posXAxisHelper.material.map.dispose(); + posYAxisHelper.material.map.dispose(); + posZAxisHelper.material.map.dispose(); + posXAxisHelper.material.dispose(); + posYAxisHelper.material.dispose(); + posZAxisHelper.material.dispose(); + posXAxisHelper.material = getSpriteMaterial(color1, options.labelX); + posYAxisHelper.material = getSpriteMaterial(color2, options.labelY); + posZAxisHelper.material = getSpriteMaterial(color3, options.labelZ); + } + } +}; + +// node_modules/three/examples/jsm/interactive/HTMLMesh.js +var HTMLMesh = class extends Mesh { + constructor(dom) { + const texture = new HTMLTexture(dom); + const geometry = new PlaneGeometry(texture.image.width * 1e-3, texture.image.height * 1e-3); + const material = new MeshBasicMaterial({ map: texture, toneMapped: false, transparent: true }); + super(geometry, material); + function onEvent(event) { + material.map.dispatchDOMEvent(event); + } + this.addEventListener("mousedown", onEvent); + this.addEventListener("mousemove", onEvent); + this.addEventListener("mouseup", onEvent); + this.addEventListener("click", onEvent); + this.dispose = function() { + geometry.dispose(); + material.dispose(); + material.map.dispose(); + canvases.delete(dom); + this.removeEventListener("mousedown", onEvent); + this.removeEventListener("mousemove", onEvent); + this.removeEventListener("mouseup", onEvent); + this.removeEventListener("click", onEvent); + }; + } +}; +var HTMLTexture = class extends CanvasTexture { + constructor(dom) { + super(html2canvas(dom)); + this.dom = dom; + this.anisotropy = 16; + this.colorSpace = SRGBColorSpace; + this.minFilter = LinearFilter; + this.magFilter = LinearFilter; + const observer = new MutationObserver(() => { + if (!this.scheduleUpdate) { + this.scheduleUpdate = setTimeout(() => this.update(), 16); + } + }); + const config = { attributes: true, childList: true, subtree: true, characterData: true }; + observer.observe(dom, config); + this.observer = observer; + } + dispatchDOMEvent(event) { + if (event.data) { + htmlevent(this.dom, event.type, event.data.x, event.data.y); + } + } + update() { + this.image = html2canvas(this.dom); + this.needsUpdate = true; + this.scheduleUpdate = null; + } + dispose() { + if (this.observer) { + this.observer.disconnect(); + } + this.scheduleUpdate = clearTimeout(this.scheduleUpdate); + super.dispose(); + } +}; +var canvases = /* @__PURE__ */ new WeakMap(); +function html2canvas(element) { + const range = document.createRange(); + const color = new Color(); + function Clipper(context2) { + const clips = []; + let isClipping = false; + function doClip() { + if (isClipping) { + isClipping = false; + context2.restore(); + } + if (clips.length === 0) return; + let minX = -Infinity, minY = -Infinity; + let maxX = Infinity, maxY = Infinity; + for (let i = 0; i < clips.length; i++) { + const clip = clips[i]; + minX = Math.max(minX, clip.x); + minY = Math.max(minY, clip.y); + maxX = Math.min(maxX, clip.x + clip.width); + maxY = Math.min(maxY, clip.y + clip.height); + } + context2.save(); + context2.beginPath(); + context2.rect(minX, minY, maxX - minX, maxY - minY); + context2.clip(); + isClipping = true; + } + return { + add: function(clip) { + clips.push(clip); + doClip(); + }, + remove: function() { + clips.pop(); + doClip(); + } + }; + } + function drawText(style, x2, y2, string) { + if (string !== "") { + if (style.textTransform === "uppercase") { + string = string.toUpperCase(); + } + context.font = style.fontWeight + " " + style.fontSize + " " + style.fontFamily; + context.textBaseline = "top"; + context.fillStyle = style.color; + context.fillText(string, x2, y2 + parseFloat(style.fontSize) * 0.1); + } + } + function buildRectPath(x2, y2, w, h, r) { + if (w < 2 * r) r = w / 2; + if (h < 2 * r) r = h / 2; + context.beginPath(); + context.moveTo(x2 + r, y2); + context.arcTo(x2 + w, y2, x2 + w, y2 + h, r); + context.arcTo(x2 + w, y2 + h, x2, y2 + h, r); + context.arcTo(x2, y2 + h, x2, y2, r); + context.arcTo(x2, y2, x2 + w, y2, r); + context.closePath(); + } + function drawBorder(style, which, x2, y2, width2, height2) { + const borderWidth = style[which + "Width"]; + const borderStyle = style[which + "Style"]; + const borderColor = style[which + "Color"]; + if (borderWidth !== "0px" && borderStyle !== "none" && borderColor !== "transparent" && borderColor !== "rgba(0, 0, 0, 0)") { + context.strokeStyle = borderColor; + context.lineWidth = parseFloat(borderWidth); + context.beginPath(); + context.moveTo(x2, y2); + context.lineTo(x2 + width2, y2 + height2); + context.stroke(); + } + } + function drawElement(element2, style) { + if (element2.nodeType === Node.COMMENT_NODE || element2.nodeName === "SCRIPT" || element2.style && element2.style.display === "none") { + return; + } + let x2 = 0, y2 = 0, width2 = 0, height2 = 0; + if (element2.nodeType === Node.TEXT_NODE) { + range.selectNode(element2); + const rect = range.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + drawText(style, x2, y2, element2.nodeValue.trim()); + } else if (element2 instanceof HTMLCanvasElement) { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + context.save(); + const dpr = window.devicePixelRatio; + context.scale(1 / dpr, 1 / dpr); + context.drawImage(element2, x2, y2); + context.restore(); + } else if (element2 instanceof HTMLImageElement) { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + context.drawImage(element2, x2, y2, width2, height2); + } else { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + style = window.getComputedStyle(element2); + buildRectPath(x2, y2, width2, height2, parseFloat(style.borderRadius)); + const backgroundColor = style.backgroundColor; + if (backgroundColor !== "transparent" && backgroundColor !== "rgba(0, 0, 0, 0)") { + context.fillStyle = backgroundColor; + context.fill(); + } + const borders = ["borderTop", "borderLeft", "borderBottom", "borderRight"]; + let match = true; + let prevBorder = null; + for (const border of borders) { + if (prevBorder !== null) { + match = style[border + "Width"] === style[prevBorder + "Width"] && style[border + "Color"] === style[prevBorder + "Color"] && style[border + "Style"] === style[prevBorder + "Style"]; + } + if (match === false) break; + prevBorder = border; + } + if (match === true) { + const width3 = parseFloat(style.borderTopWidth); + if (style.borderTopWidth !== "0px" && style.borderTopStyle !== "none" && style.borderTopColor !== "transparent" && style.borderTopColor !== "rgba(0, 0, 0, 0)") { + context.strokeStyle = style.borderTopColor; + context.lineWidth = width3; + context.stroke(); + } + } else { + drawBorder(style, "borderTop", x2, y2, width2, 0); + drawBorder(style, "borderLeft", x2, y2, 0, height2); + drawBorder(style, "borderBottom", x2, y2 + height2, width2, 0); + drawBorder(style, "borderRight", x2 + width2, y2, 0, height2); + } + if (element2 instanceof HTMLInputElement) { + let accentColor = style.accentColor; + if (accentColor === void 0 || accentColor === "auto") accentColor = style.color; + color.set(accentColor); + const luminance = Math.sqrt(0.299 * color.r ** 2 + 0.587 * color.g ** 2 + 0.114 * color.b ** 2); + const accentTextColor = luminance < 0.5 ? "white" : "#111111"; + if (element2.type === "radio") { + buildRectPath(x2, y2, width2, height2, height2); + context.fillStyle = "white"; + context.strokeStyle = accentColor; + context.lineWidth = 1; + context.fill(); + context.stroke(); + if (element2.checked) { + buildRectPath(x2 + 2, y2 + 2, width2 - 4, height2 - 4, height2); + context.fillStyle = accentColor; + context.strokeStyle = accentTextColor; + context.lineWidth = 2; + context.fill(); + context.stroke(); + } + } + if (element2.type === "checkbox") { + buildRectPath(x2, y2, width2, height2, 2); + context.fillStyle = element2.checked ? accentColor : "white"; + context.strokeStyle = element2.checked ? accentTextColor : accentColor; + context.lineWidth = 1; + context.stroke(); + context.fill(); + if (element2.checked) { + const currentTextAlign = context.textAlign; + context.textAlign = "center"; + const properties = { + color: accentTextColor, + fontFamily: style.fontFamily, + fontSize: height2 + "px", + fontWeight: "bold" + }; + drawText(properties, x2 + width2 / 2, y2, "✔"); + context.textAlign = currentTextAlign; + } + } + if (element2.type === "range") { + const [min, max2, value2] = ["min", "max", "value"].map((property2) => parseFloat(element2[property2])); + const position2 = (value2 - min) / (max2 - min) * (width2 - height2); + buildRectPath(x2, y2 + height2 / 4, width2, height2 / 2, height2 / 4); + context.fillStyle = accentTextColor; + context.strokeStyle = accentColor; + context.lineWidth = 1; + context.fill(); + context.stroke(); + buildRectPath(x2, y2 + height2 / 4, position2 + height2 / 2, height2 / 2, height2 / 4); + context.fillStyle = accentColor; + context.fill(); + buildRectPath(x2 + position2, y2, height2, height2, height2 / 2); + context.fillStyle = accentColor; + context.fill(); + } + if (element2.type === "color" || element2.type === "text" || element2.type === "number") { + clipper.add({ x: x2, y: y2, width: width2, height: height2 }); + drawText(style, x2 + parseInt(style.paddingLeft), y2 + parseInt(style.paddingTop), element2.value); + clipper.remove(); + } + } + } + const isClipping = style.overflow === "auto" || style.overflow === "hidden"; + if (isClipping) clipper.add({ x: x2, y: y2, width: width2, height: height2 }); + for (let i = 0; i < element2.childNodes.length; i++) { + drawElement(element2.childNodes[i], style); + } + if (isClipping) clipper.remove(); + } + const offset = element.getBoundingClientRect(); + let canvas = canvases.get(element); + if (canvas === void 0) { + canvas = document.createElement("canvas"); + canvas.width = offset.width; + canvas.height = offset.height; + canvases.set(element, canvas); + } + const context = canvas.getContext( + "2d" + /*, { alpha: false }*/ + ); + const clipper = new Clipper(context); + context.clearRect(0, 0, canvas.width, canvas.height); + drawElement(element); + return canvas; +} +function htmlevent(element, event, x2, y2) { + const mouseEventInit = { + clientX: x2 * element.offsetWidth + element.offsetLeft, + clientY: y2 * element.offsetHeight + element.offsetTop, + view: element.ownerDocument.defaultView + }; + window.dispatchEvent(new MouseEvent(event, mouseEventInit)); + const rect = element.getBoundingClientRect(); + x2 = x2 * rect.width + rect.left; + y2 = y2 * rect.height + rect.top; + function traverse(element2) { + if (element2.nodeType !== Node.TEXT_NODE && element2.nodeType !== Node.COMMENT_NODE) { + const rect2 = element2.getBoundingClientRect(); + if (x2 > rect2.left && x2 < rect2.right && y2 > rect2.top && y2 < rect2.bottom) { + element2.dispatchEvent(new MouseEvent(event, mouseEventInit)); + if (element2 instanceof HTMLInputElement && element2.type === "range" && (event === "mousedown" || event === "click")) { + const [min, max2] = ["min", "max"].map((property2) => parseFloat(element2[property2])); + const width2 = rect2.width; + const offsetX = x2 - rect2.x; + const proportion = offsetX / width2; + element2.value = min + (max2 - min) * proportion; + element2.dispatchEvent(new InputEvent("input", { bubbles: true })); + } + } + for (let i = 0; i < element2.childNodes.length; i++) { + traverse(element2.childNodes[i]); + } + } + } + traverse(element); +} + +// node_modules/three/examples/jsm/interactive/InteractiveGroup.js +var _pointer2 = new Vector2(); +var _event = { type: "", data: _pointer2 }; +var _raycaster4 = new Raycaster(); +var InteractiveGroup = class extends Group { + listenToPointerEvents(renderer2, camera) { + const scope = this; + const raycaster = new Raycaster(); + const element = renderer2.domElement; + function onPointerEvent(event) { + event.stopPropagation(); + const rect = renderer2.domElement.getBoundingClientRect(); + _pointer2.x = (event.clientX - rect.left) / rect.width * 2 - 1; + _pointer2.y = -(event.clientY - rect.top) / rect.height * 2 + 1; + raycaster.setFromCamera(_pointer2, camera); + const intersects = raycaster.intersectObjects(scope.children, false); + if (intersects.length > 0) { + const intersection = intersects[0]; + const object = intersection.object; + const uv = intersection.uv; + _event.type = event.type; + _event.data.set(uv.x, 1 - uv.y); + object.dispatchEvent(_event); + } + } + element.addEventListener("pointerdown", onPointerEvent); + element.addEventListener("pointerup", onPointerEvent); + element.addEventListener("pointermove", onPointerEvent); + element.addEventListener("mousedown", onPointerEvent); + element.addEventListener("mouseup", onPointerEvent); + element.addEventListener("mousemove", onPointerEvent); + element.addEventListener("click", onPointerEvent); + } + listenToXRControllerEvents(controller) { + const scope = this; + const events = { + "move": "mousemove", + "select": "click", + "selectstart": "mousedown", + "selectend": "mouseup" + }; + function onXRControllerEvent(event) { + const controller2 = event.target; + _raycaster4.setFromXRController(controller2); + const intersections = _raycaster4.intersectObjects(scope.children, false); + if (intersections.length > 0) { + const intersection = intersections[0]; + const object = intersection.object; + const uv = intersection.uv; + _event.type = events[event.type]; + _event.data.set(uv.x, 1 - uv.y); + object.dispatchEvent(_event); + } + } + controller.addEventListener("move", onXRControllerEvent); + controller.addEventListener("select", onXRControllerEvent); + controller.addEventListener("selectstart", onXRControllerEvent); + controller.addEventListener("selectend", onXRControllerEvent); + } +}; + +// node_modules/three/examples/jsm/interactive/SelectionBox.js +var _frustum = new Frustum(); +var _center3 = new Vector3(); +var _tmpPoint = new Vector3(); +var _vecNear = new Vector3(); +var _vecTopLeft = new Vector3(); +var _vecTopRight = new Vector3(); +var _vecDownRight = new Vector3(); +var _vecDownLeft = new Vector3(); +var _vecFarTopLeft = new Vector3(); +var _vecFarTopRight = new Vector3(); +var _vecFarDownRight = new Vector3(); +var _vecFarDownLeft = new Vector3(); +var _vectemp1 = new Vector3(); +var _vectemp2 = new Vector3(); +var _vectemp3 = new Vector3(); +var _matrix2 = new Matrix4(); +var _quaternion2 = new Quaternion(); +var _scale2 = new Vector3(); +var SelectionBox = class { + constructor(camera, scene, deep = Number.MAX_VALUE) { + this.camera = camera; + this.scene = scene; + this.startPoint = new Vector3(); + this.endPoint = new Vector3(); + this.collection = []; + this.instances = {}; + this.deep = deep; + } + select(startPoint, endPoint) { + this.startPoint = startPoint || this.startPoint; + this.endPoint = endPoint || this.endPoint; + this.collection = []; + this.updateFrustum(this.startPoint, this.endPoint); + this.searchChildInFrustum(_frustum, this.scene); + return this.collection; + } + updateFrustum(startPoint, endPoint) { + startPoint = startPoint || this.startPoint; + endPoint = endPoint || this.endPoint; + if (startPoint.x === endPoint.x) { + endPoint.x += Number.EPSILON; + } + if (startPoint.y === endPoint.y) { + endPoint.y += Number.EPSILON; + } + this.camera.updateProjectionMatrix(); + this.camera.updateMatrixWorld(); + if (this.camera.isPerspectiveCamera) { + _tmpPoint.copy(startPoint); + _tmpPoint.x = Math.min(startPoint.x, endPoint.x); + _tmpPoint.y = Math.max(startPoint.y, endPoint.y); + endPoint.x = Math.max(startPoint.x, endPoint.x); + endPoint.y = Math.min(startPoint.y, endPoint.y); + _vecNear.setFromMatrixPosition(this.camera.matrixWorld); + _vecTopLeft.copy(_tmpPoint); + _vecTopRight.set(endPoint.x, _tmpPoint.y, 0); + _vecDownRight.copy(endPoint); + _vecDownLeft.set(_tmpPoint.x, endPoint.y, 0); + _vecTopLeft.unproject(this.camera); + _vecTopRight.unproject(this.camera); + _vecDownRight.unproject(this.camera); + _vecDownLeft.unproject(this.camera); + _vectemp1.copy(_vecTopLeft).sub(_vecNear); + _vectemp2.copy(_vecTopRight).sub(_vecNear); + _vectemp3.copy(_vecDownRight).sub(_vecNear); + _vectemp1.normalize(); + _vectemp2.normalize(); + _vectemp3.normalize(); + _vectemp1.multiplyScalar(this.deep); + _vectemp2.multiplyScalar(this.deep); + _vectemp3.multiplyScalar(this.deep); + _vectemp1.add(_vecNear); + _vectemp2.add(_vecNear); + _vectemp3.add(_vecNear); + const planes = _frustum.planes; + planes[0].setFromCoplanarPoints(_vecNear, _vecTopLeft, _vecTopRight); + planes[1].setFromCoplanarPoints(_vecNear, _vecTopRight, _vecDownRight); + planes[2].setFromCoplanarPoints(_vecDownRight, _vecDownLeft, _vecNear); + planes[3].setFromCoplanarPoints(_vecDownLeft, _vecTopLeft, _vecNear); + planes[4].setFromCoplanarPoints(_vecTopRight, _vecDownRight, _vecDownLeft); + planes[5].setFromCoplanarPoints(_vectemp3, _vectemp2, _vectemp1); + planes[5].normal.multiplyScalar(-1); + } else if (this.camera.isOrthographicCamera) { + const left = Math.min(startPoint.x, endPoint.x); + const top = Math.max(startPoint.y, endPoint.y); + const right = Math.max(startPoint.x, endPoint.x); + const down = Math.min(startPoint.y, endPoint.y); + _vecTopLeft.set(left, top, -1); + _vecTopRight.set(right, top, -1); + _vecDownRight.set(right, down, -1); + _vecDownLeft.set(left, down, -1); + _vecFarTopLeft.set(left, top, 1); + _vecFarTopRight.set(right, top, 1); + _vecFarDownRight.set(right, down, 1); + _vecFarDownLeft.set(left, down, 1); + _vecTopLeft.unproject(this.camera); + _vecTopRight.unproject(this.camera); + _vecDownRight.unproject(this.camera); + _vecDownLeft.unproject(this.camera); + _vecFarTopLeft.unproject(this.camera); + _vecFarTopRight.unproject(this.camera); + _vecFarDownRight.unproject(this.camera); + _vecFarDownLeft.unproject(this.camera); + const planes = _frustum.planes; + planes[0].setFromCoplanarPoints(_vecTopLeft, _vecFarTopLeft, _vecFarTopRight); + planes[1].setFromCoplanarPoints(_vecTopRight, _vecFarTopRight, _vecFarDownRight); + planes[2].setFromCoplanarPoints(_vecFarDownRight, _vecFarDownLeft, _vecDownLeft); + planes[3].setFromCoplanarPoints(_vecFarDownLeft, _vecFarTopLeft, _vecTopLeft); + planes[4].setFromCoplanarPoints(_vecTopRight, _vecDownRight, _vecDownLeft); + planes[5].setFromCoplanarPoints(_vecFarDownRight, _vecFarTopRight, _vecFarTopLeft); + planes[5].normal.multiplyScalar(-1); + } else { + console.error("THREE.SelectionBox: Unsupported camera type."); + } + } + searchChildInFrustum(frustum, object) { + if (object.isMesh || object.isLine || object.isPoints) { + if (object.isInstancedMesh) { + this.instances[object.uuid] = []; + for (let instanceId = 0; instanceId < object.count; instanceId++) { + object.getMatrixAt(instanceId, _matrix2); + _matrix2.decompose(_center3, _quaternion2, _scale2); + _center3.applyMatrix4(object.matrixWorld); + if (frustum.containsPoint(_center3)) { + this.instances[object.uuid].push(instanceId); + } + } + } else { + if (object.geometry.boundingSphere === null) object.geometry.computeBoundingSphere(); + _center3.copy(object.geometry.boundingSphere.center); + _center3.applyMatrix4(object.matrixWorld); + if (frustum.containsPoint(_center3)) { + this.collection.push(object); + } + } + } + if (object.children.length > 0) { + for (let x2 = 0; x2 < object.children.length; x2++) { + this.searchChildInFrustum(frustum, object.children[x2]); + } + } + } +}; + +// node_modules/three/examples/jsm/interactive/SelectionHelper.js +var SelectionHelper = class { + constructor(renderer2, cssClassName) { + this.element = document.createElement("div"); + this.element.classList.add(cssClassName); + this.element.style.pointerEvents = "none"; + this.renderer = renderer2; + this.startPoint = new Vector2(); + this.pointTopLeft = new Vector2(); + this.pointBottomRight = new Vector2(); + this.isDown = false; + this.enabled = true; + this.onPointerDown = (function(event) { + if (this.enabled === false) return; + this.isDown = true; + this.onSelectStart(event); + }).bind(this); + this.onPointerMove = (function(event) { + if (this.enabled === false) return; + if (this.isDown) { + this.onSelectMove(event); + } + }).bind(this); + this.onPointerUp = (function() { + if (this.enabled === false) return; + this.isDown = false; + this.onSelectOver(); + }).bind(this); + this.renderer.domElement.addEventListener("pointerdown", this.onPointerDown); + this.renderer.domElement.addEventListener("pointermove", this.onPointerMove); + this.renderer.domElement.addEventListener("pointerup", this.onPointerUp); + } + dispose() { + this.renderer.domElement.removeEventListener("pointerdown", this.onPointerDown); + this.renderer.domElement.removeEventListener("pointermove", this.onPointerMove); + this.renderer.domElement.removeEventListener("pointerup", this.onPointerUp); + } + onSelectStart(event) { + this.element.style.display = "none"; + this.renderer.domElement.parentElement.appendChild(this.element); + this.element.style.left = event.clientX + "px"; + this.element.style.top = event.clientY + "px"; + this.element.style.width = "0px"; + this.element.style.height = "0px"; + this.startPoint.x = event.clientX; + this.startPoint.y = event.clientY; + } + onSelectMove(event) { + this.element.style.display = "block"; + this.pointBottomRight.x = Math.max(this.startPoint.x, event.clientX); + this.pointBottomRight.y = Math.max(this.startPoint.y, event.clientY); + this.pointTopLeft.x = Math.min(this.startPoint.x, event.clientX); + this.pointTopLeft.y = Math.min(this.startPoint.y, event.clientY); + this.element.style.left = this.pointTopLeft.x + "px"; + this.element.style.top = this.pointTopLeft.y + "px"; + this.element.style.width = this.pointBottomRight.x - this.pointTopLeft.x + "px"; + this.element.style.height = this.pointBottomRight.y - this.pointTopLeft.y + "px"; + } + onSelectOver() { + this.element.parentElement.removeChild(this.element); + } +}; + +// node_modules/three/examples/jsm/lights/LightProbeGenerator.js +var LightProbeGenerator = class { + // https://www.ppsloan.org/publications/StupidSH36.pdf + static fromCubeTexture(cubeTexture) { + let totalWeight = 0; + const coord = new Vector3(); + const dir = new Vector3(); + const color = new Color(); + const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + const sh = new SphericalHarmonics3(); + const shCoefficients = sh.coefficients; + for (let faceIndex = 0; faceIndex < 6; faceIndex++) { + const image = cubeTexture.image[faceIndex]; + const width2 = image.width; + const height2 = image.height; + const canvas = document.createElement("canvas"); + canvas.width = width2; + canvas.height = height2; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, width2, height2); + const imageData = context.getImageData(0, 0, width2, height2); + const data2 = imageData.data; + const imageWidth = imageData.width; + const pixelSize = 2 / imageWidth; + for (let i = 0, il = data2.length; i < il; i += 4) { + color.setRGB(data2[i] / 255, data2[i + 1] / 255, data2[i + 2] / 255); + convertColorToLinear(color, cubeTexture.colorSpace); + const pixelIndex = i / 4; + const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize; + const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize; + switch (faceIndex) { + case 0: + coord.set(-1, row, -col); + break; + case 1: + coord.set(1, row, col); + break; + case 2: + coord.set(-col, 1, -row); + break; + case 3: + coord.set(-col, -1, row); + break; + case 4: + coord.set(-col, row, 1); + break; + case 5: + coord.set(col, row, -1); + break; + } + const lengthSq = coord.lengthSq(); + const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); + totalWeight += weight; + dir.copy(coord).normalize(); + SphericalHarmonics3.getBasisAt(dir, shBasis); + for (let j = 0; j < 9; j++) { + shCoefficients[j].x += shBasis[j] * color.r * weight; + shCoefficients[j].y += shBasis[j] * color.g * weight; + shCoefficients[j].z += shBasis[j] * color.b * weight; + } + } + } + const norm = 4 * Math.PI / totalWeight; + for (let j = 0; j < 9; j++) { + shCoefficients[j].x *= norm; + shCoefficients[j].y *= norm; + shCoefficients[j].z *= norm; + } + return new LightProbe(sh); + } + static fromCubeRenderTarget(renderer2, cubeRenderTarget) { + let totalWeight = 0; + const coord = new Vector3(); + const dir = new Vector3(); + const color = new Color(); + const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + const sh = new SphericalHarmonics3(); + const shCoefficients = sh.coefficients; + const dataType = cubeRenderTarget.texture.type; + for (let faceIndex = 0; faceIndex < 6; faceIndex++) { + const imageWidth = cubeRenderTarget.width; + let data2; + if (dataType === HalfFloatType) { + data2 = new Uint16Array(imageWidth * imageWidth * 4); + } else { + data2 = new Uint8Array(imageWidth * imageWidth * 4); + } + renderer2.readRenderTargetPixels(cubeRenderTarget, 0, 0, imageWidth, imageWidth, data2, faceIndex); + const pixelSize = 2 / imageWidth; + for (let i = 0, il = data2.length; i < il; i += 4) { + let r, g2, b3; + if (dataType === HalfFloatType) { + r = DataUtils.fromHalfFloat(data2[i]); + g2 = DataUtils.fromHalfFloat(data2[i + 1]); + b3 = DataUtils.fromHalfFloat(data2[i + 2]); + } else { + r = data2[i] / 255; + g2 = data2[i + 1] / 255; + b3 = data2[i + 2] / 255; + } + color.setRGB(r, g2, b3); + convertColorToLinear(color, cubeRenderTarget.texture.colorSpace); + const pixelIndex = i / 4; + const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize; + const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize; + switch (faceIndex) { + case 0: + coord.set(1, row, -col); + break; + case 1: + coord.set(-1, row, col); + break; + case 2: + coord.set(col, 1, -row); + break; + case 3: + coord.set(col, -1, row); + break; + case 4: + coord.set(col, row, 1); + break; + case 5: + coord.set(-col, row, -1); + break; + } + const lengthSq = coord.lengthSq(); + const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); + totalWeight += weight; + dir.copy(coord).normalize(); + SphericalHarmonics3.getBasisAt(dir, shBasis); + for (let j = 0; j < 9; j++) { + shCoefficients[j].x += shBasis[j] * color.r * weight; + shCoefficients[j].y += shBasis[j] * color.g * weight; + shCoefficients[j].z += shBasis[j] * color.b * weight; + } + } + } + const norm = 4 * Math.PI / totalWeight; + for (let j = 0; j < 9; j++) { + shCoefficients[j].x *= norm; + shCoefficients[j].y *= norm; + shCoefficients[j].z *= norm; + } + return new LightProbe(sh); + } +}; +function convertColorToLinear(color, colorSpace) { + switch (colorSpace) { + case SRGBColorSpace: + color.convertSRGBToLinear(); + break; + case LinearSRGBColorSpace: + case NoColorSpace: + break; + default: + console.warn("WARNING: LightProbeGenerator convertColorToLinear() encountered an unsupported color space."); + break; + } + return color; +} + +// node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js +var RectAreaLightTexturesLib = class { + static init() { + const LTC_MAT_1 = [1, 0, 0, 2e-5, 1, 0, 0, 503905e-9, 1, 0, 0, 201562e-8, 1, 0, 0, 453516e-8, 1, 0, 0, 806253e-8, 1, 0, 0, 0.0125978, 1, 0, 0, 0.018141, 1, 0, 0, 0.0246924, 1, 0, 0, 0.0322525, 1, 0, 0, 0.0408213, 1, 0, 0, 0.0503999, 1, 0, 0, 0.0609894, 1, 0, 0, 0.0725906, 1, 0, 0, 0.0852058, 1, 0, 0, 0.0988363, 1, 0, 0, 0.113484, 1, 0, 0, 0.129153, 1, 0, 0, 0.145839, 1, 0, 0, 0.163548, 1, 0, 0, 0.182266, 1, 0, 0, 0.201942, 1, 0, 0, 0.222314, 1, 0, 0, 0.241906, 1, 0, 0, 0.262314, 1, 0, 0, 0.285754, 1, 0, 0, 0.310159, 1, 0, 0, 0.335426, 1, 0, 0, 0.361341, 1, 0, 0, 0.387445, 1, 0, 0, 0.412784, 1, 0, 0, 0.438197, 1, 0, 0, 0.466966, 1, 0, 0, 0.49559, 1, 0, 0, 0.523448, 1, 0, 0, 0.549938, 1, 0, 0, 0.57979, 1, 0, 0, 0.608746, 1, 0, 0, 0.636185, 1, 0, 0, 0.664748, 1, 0, 0, 0.69313, 1, 0, 0, 0.71966, 1, 0, 0, 0.747662, 1, 0, 0, 0.774023, 1, 0, 0, 0.799775, 1, 0, 0, 0.825274, 1, 0, 0, 0.849156, 1, 0, 0, 0.873248, 1, 0, 0, 0.89532, 1, 0, 0, 0.917565, 1, 0, 0, 0.937863, 1, 0, 0, 0.958139, 1, 0, 0, 0.976563, 1, 0, 0, 0.994658, 1, 0, 0, 1.0112, 1, 0, 0, 1.02712, 1, 0, 0, 1.04189, 1, 0, 0, 1.05568, 1, 0, 0, 1.06877, 1, 0, 0, 1.08058, 1, 0, 0, 1.09194, 1, 0, 0, 1.10191, 1, 0, 0, 1.11161, 1, 0, 0, 1.1199, 1, 0, 0, 1.12813, 0.999547, -448815e-12, 0.0224417, 199902e-10, 0.999495, -113079e-10, 0.0224406, 503651e-9, 0.999496, -452317e-10, 0.0224406, 201461e-8, 0.999496, -101772e-9, 0.0224406, 453287e-8, 0.999495, -180928e-9, 0.0224406, 805845e-8, 0.999497, -282702e-9, 0.0224406, 0.0125914, 0.999496, -407096e-9, 0.0224406, 0.0181319, 0.999498, -554114e-9, 0.0224406, 0.02468, 0.999499, -723768e-9, 0.0224406, 0.0322363, 0.999495, -916058e-9, 0.0224405, 0.0408009, 0.999499, -113101e-8, 0.0224408, 0.050375, 0.999494, -136863e-8, 0.0224405, 0.0609586, 0.999489, -162896e-8, 0.0224401, 0.0725537, 0.999489, -191201e-8, 0.0224414, 0.0851619, 0.999498, -221787e-8, 0.0224413, 0.0987867, 0.999492, -254642e-8, 0.0224409, 0.113426, 0.999507, -289779e-8, 0.0224417, 0.129088, 0.999494, -32716e-7, 0.0224386, 0.145767, 0.999546, -36673e-7, 0.0224424, 0.163472, 0.999543, -408166e-8, 0.0224387, 0.182182, 0.999499, -450056e-8, 0.0224338, 0.201843, 0.999503, -483661e-8, 0.0224203, 0.222198, 0.999546, -452928e-8, 0.022315, 0.241714, 0.999508, -587403e-8, 0.0224329, 0.262184, 0.999509, -638806e-8, 0.0224271, 0.285609, 0.999501, -691028e-8, 0.0224166, 0.309998, 0.999539, -741979e-8, 0.0223989, 0.335262, 0.999454, -786282e-8, 0.0223675, 0.361154, 0.999529, -811928e-8, 0.0222828, 0.387224, 0.999503, -799941e-8, 0.0221063, 0.41252, 0.999561, -952753e-8, 0.0223057, 0.438006, 0.999557, -99134e-7, 0.0222065, 0.466735, 0.999541, -0.0100935, 0.0220402, 0.495332, 0.999562, -996821e-8, 0.0218067, 0.523197, 0.999556, -0.0105031, 0.0217096, 0.550223, 0.999561, -0.0114191, 0.0217215, 0.579498, 0.999588, -0.0111818, 0.0213357, 0.608416, 0.999633, -0.0107725, 0.0208689, 0.635965, 0.999527, -0.0121671, 0.0210149, 0.664476, 0.999508, -0.0116005, 0.020431, 0.692786, 0.999568, -0.0115604, 0.0199791, 0.719709, 0.999671, -0.0121117, 0.0197415, 0.74737, 0.999688, -0.0110769, 0.0188846, 0.773692, 0.99962, -0.0122368, 0.0188452, 0.799534, 0.999823, -0.0110325, 0.0178001, 0.825046, 0.999599, -0.0114923, 0.0174221, 0.849075, 0.999619, -0.0105923, 0.0164345, 0.872999, 0.999613, -0.0105988, 0.0158227, 0.895371, 0.99964, -979861e-8, 0.0148131, 0.917364, 0.99977, -967238e-8, 0.0140721, 0.938002, 0.999726, -869175e-8, 0.0129543, 0.957917, 0.99973, -866872e-8, 0.0122329, 0.976557, 0.999773, -731956e-8, 0.0108958, 0.994459, 0.999811, -756027e-8, 0.0102715, 1.01118, 0.999862, -583732e-8, 878781e-8, 1.02701, 0.999835, -631438e-8, 827529e-8, 1.04186, 0.999871, -450785e-8, 674583e-8, 1.05569, 0.999867, -486079e-8, 621041e-8, 1.06861, 0.999939, -322072e-8, 478301e-8, 1.08064, 0.999918, -318199e-8, 406395e-8, 1.09181, 1.00003, -193348e-8, 280682e-8, 1.10207, 0.999928, -153729e-8, 198741e-8, 1.11152, 0.999933, -623666e-9, 917714e-9, 1.12009, 1, -102387e-11, 907581e-12, 1.12813, 0.997866, -896716e-12, 0.0448334, 199584e-10, 0.997987, -225945e-10, 0.0448389, 502891e-9, 0.997987, -903781e-10, 0.0448388, 201156e-8, 0.997985, -203351e-9, 0.0448388, 452602e-8, 0.997986, -361514e-9, 0.0448388, 804629e-8, 0.997987, -56487e-8, 0.0448389, 0.0125724, 0.997988, -813423e-9, 0.0448389, 0.0181045, 0.997984, -110718e-8, 0.0448387, 0.0246427, 0.997985, -144616e-8, 0.0448388, 0.0321875, 0.997987, -183038e-8, 0.044839, 0.0407392, 0.997983, -225987e-8, 0.0448387, 0.0502986, 0.997991, -273467e-8, 0.0448389, 0.0608667, 0.997984, -325481e-8, 0.0448384, 0.0724444, 0.998002, -382043e-8, 0.044839, 0.0850348, 0.997997, -443145e-8, 0.0448396, 0.0986372, 0.998007, -508796e-8, 0.0448397, 0.113255, 0.998008, -578985e-8, 0.04484, 0.128891, 0.998003, -653683e-8, 0.0448384, 0.145548, 0.997983, -732713e-8, 0.0448358, 0.163221, 0.997985, -815454e-8, 0.0448358, 0.181899, 0.998005, -898985e-8, 0.0448286, 0.201533, 0.998026, -964404e-8, 0.0447934, 0.221821, 0.998055, -922677e-8, 0.044611, 0.241282, 0.99804, -0.0117361, 0.0448245, 0.261791, 0.998048, -0.0127628, 0.0448159, 0.285181, 0.998088, -0.0138055, 0.0447996, 0.30954, 0.998058, -0.0148206, 0.0447669, 0.334751, 0.998099, -0.0156998, 0.044697, 0.36061, 0.998116, -0.0161976, 0.0445122, 0.386603, 0.998195, -0.015945, 0.0441711, 0.411844, 0.998168, -0.0183947, 0.0444255, 0.43773, 0.998184, -0.0197913, 0.0443809, 0.466009, 0.998251, -0.0201426, 0.0440689, 0.494574, 0.998305, -0.0198847, 0.0435632, 0.522405, 0.998273, -0.0210577, 0.043414, 0.549967, 0.998254, -0.0227901, 0.0433943, 0.578655, 0.998349, -0.0223108, 0.0426529, 0.60758, 0.99843, -0.0223088, 0.042, 0.635524, 0.998373, -0.0241141, 0.0418987, 0.663621, 0.998425, -0.0231446, 0.0408118, 0.691906, 0.998504, -0.0233684, 0.0400565, 0.719339, 0.998443, -0.0241652, 0.0394634, 0.74643, 0.99848, -0.0228715, 0.0380002, 0.773086, 0.998569, -0.023519, 0.0372322, 0.798988, 0.998619, -0.0223108, 0.0356468, 0.824249, 0.998594, -0.0223105, 0.034523, 0.848808, 0.998622, -0.0213426, 0.0328887, 0.87227, 0.998669, -0.0207912, 0.0314374, 0.895157, 0.998705, -0.0198416, 0.0296925, 0.916769, 0.998786, -0.0189168, 0.0279634, 0.937773, 0.998888, -0.0178811, 0.0261597, 0.957431, 0.99906, -0.0166845, 0.0242159, 0.976495, 0.999038, -0.0155464, 0.0222638, 0.994169, 0.999237, -0.0141349, 0.0201967, 1.01112, 0.999378, -0.0129324, 0.0181744, 1.02692, 0.999433, -0.0113192, 0.0159898, 1.04174, 0.999439, -0.0101244, 0.0140385, 1.05559, 0.999614, -837456e-8, 0.0117826, 1.06852, 0.999722, -721769e-8, 983745e-8, 1.08069, 0.999817, -554067e-8, 769002e-8, 1.09176, 0.99983, -426961e-8, 5782e-6, 1.10211, 0.999964, -273904e-8, 374503e-8, 1.11152, 1.00001, -136739e-8, 187176e-8, 1.12031, 0.999946, 393227e-10, -28919e-9, 1.12804, 0.995847, -13435e-10, 0.0671785, 19916e-9, 0.995464, -338387e-10, 0.0671527, 501622e-9, 0.99547, -135355e-9, 0.0671531, 200649e-8, 0.995471, -30455e-8, 0.0671532, 451461e-8, 0.99547, -541423e-9, 0.0671531, 8026e-6, 0.995471, -84598e-8, 0.0671531, 0.0125407, 0.99547, -121823e-8, 0.0671531, 0.0180589, 0.99547, -165817e-8, 0.0671531, 0.0245806, 0.995463, -216583e-8, 0.0671526, 0.0321062, 0.995468, -274127e-8, 0.0671527, 0.0406366, 0.995474, -338447e-8, 0.0671534, 0.0501717, 0.995473, -409554e-8, 0.0671533, 0.0607131, 0.995478, -487451e-8, 0.0671531, 0.0722618, 0.995476, -572148e-8, 0.0671532, 0.0848191, 0.995477, -663658e-8, 0.0671539, 0.0983882, 0.995498, -761986e-8, 0.0671541, 0.112972, 0.995509, -867094e-8, 0.0671542, 0.128568, 0.995509, -978951e-8, 0.0671531, 0.145183, 0.995503, -0.0109725, 0.0671491, 0.162808, 0.995501, -0.012211, 0.0671465, 0.181441, 0.99553, -0.0134565, 0.0671371, 0.201015, 0.99555, -0.014391, 0.0670831, 0.221206, 0.99558, -0.014351, 0.0668883, 0.240813, 0.995577, -0.0173997, 0.0671055, 0.261257, 0.995602, -0.0191111, 0.0671178, 0.284467, 0.995623, -0.0206705, 0.0670946, 0.308765, 0.995658, -0.022184, 0.0670472, 0.333905, 0.995705, -0.0234832, 0.0669417, 0.359677, 0.995719, -0.0241933, 0.0666714, 0.385554, 0.995786, -0.0243539, 0.066266, 0.410951, 0.995887, -0.0271866, 0.0664367, 0.437163, 0.995944, -0.0296012, 0.0664931, 0.464842, 0.996004, -0.0301045, 0.0660105, 0.49332, 0.996128, -0.0298311, 0.0652694, 0.521131, 0.996253, -0.0316426, 0.0650739, 0.549167, 0.996244, -0.0339043, 0.0649433, 0.57737, 0.996309, -0.033329, 0.0638926, 0.606073, 0.996417, -0.0338935, 0.0630849, 0.634527, 0.996372, -0.0353104, 0.0625083, 0.66256, 0.996542, -0.0348942, 0.0611986, 0.690516, 0.996568, -0.0351614, 0.060069, 0.718317, 0.996711, -0.0354317, 0.0588522, 0.74528, 0.996671, -0.0349513, 0.0571902, 0.772061, 0.996865, -0.0345622, 0.0555321, 0.798089, 0.996802, -0.0342566, 0.0537816, 0.823178, 0.996992, -0.0330862, 0.0516095, 0.847949, 0.996944, -0.0324666, 0.0495537, 0.871431, 0.997146, -0.0309544, 0.0470302, 0.894357, 0.997189, -0.0299372, 0.0446043, 0.916142, 0.997471, -0.0281389, 0.0418812, 0.937193, 0.997515, -0.0268702, 0.0391823, 0.957, 0.997812, -0.0247166, 0.0361338, 0.975936, 0.998027, -0.0233525, 0.0333945, 0.99391, 0.998233, -0.0209839, 0.0301917, 1.01075, 0.998481, -0.0194309, 0.027271, 1.02669, 0.998859, -0.0169728, 0.0240162, 1.04173, 0.99894, -0.0152322, 0.0210517, 1.05551, 0.999132, -0.0127497, 0.0178632, 1.06856, 0.999369, -0.0108282, 0.014787, 1.08054, 0.999549, -845886e-8, 0.0116185, 1.09185, 0.999805, -63937e-7, 867209e-8, 1.10207, 0.99985, -414582e-8, 566823e-8, 1.1117, 0.999912, -207443e-8, 277562e-8, 1.12022, 1.00001, 870226e-10, -53766e-9, 1.12832, 0.991943, -178672e-11, 0.0893382, 198384e-10, 0.991952, -450183e-10, 0.089339, 499849e-9, 0.991956, -180074e-9, 0.0893394, 19994e-7, 0.991955, -405167e-9, 0.0893393, 449867e-8, 0.991953, -720298e-9, 0.0893391, 799764e-8, 0.991955, -112548e-8, 0.0893393, 0.0124964, 0.991957, -16207e-7, 0.0893395, 0.0179951, 0.991958, -220601e-8, 0.0893396, 0.0244939, 0.991947, -288137e-8, 0.0893385, 0.0319929, 0.991962, -364693e-8, 0.0893399, 0.0404933, 0.991965, -450264e-8, 0.0893399, 0.049995, 0.99198, -544862e-8, 0.0893411, 0.0604995, 0.99197, -648491e-8, 0.0893397, 0.0720074, 0.991976, -761164e-8, 0.089341, 0.0845207, 0.99198, -882891e-8, 0.0893405, 0.0980413, 0.991982, -0.0101367, 0.0893396, 0.112571, 0.992008, -0.011535, 0.0893415, 0.128115, 0.992026, -0.0130228, 0.0893414, 0.144672, 0.992064, -0.0145966, 0.0893418, 0.162241, 0.992041, -0.0162421, 0.0893359, 0.180801, 0.992086, -0.0178888, 0.0893214, 0.200302, 0.992157, -0.0190368, 0.0892401, 0.220332, 0.992181, -0.0195584, 0.0890525, 0.240144, 0.992175, -0.0227257, 0.0892153, 0.260728, 0.99221, -0.0254195, 0.089304, 0.283473, 0.99222, -0.0274883, 0.0892703, 0.307673, 0.992317, -0.0294905, 0.0892027, 0.332729, 0.992374, -0.0311861, 0.0890577, 0.358387, 0.992505, -0.0320656, 0.0886994, 0.384102, 0.992568, -0.0329715, 0.0883198, 0.409767, 0.992675, -0.036006, 0.0883602, 0.436145, 0.992746, -0.0392897, 0.0884591, 0.463217, 0.992873, -0.0399337, 0.0878287, 0.491557, 0.992934, -0.040231, 0.0870108, 0.519516, 0.993091, -0.0422013, 0.0865857, 0.547741, 0.993259, -0.0443503, 0.0861937, 0.575792, 0.993455, -0.0446368, 0.0851187, 0.604233, 0.993497, -0.0454299, 0.0840576, 0.632925, 0.993694, -0.0463296, 0.0829671, 0.660985, 0.993718, -0.0470619, 0.0817185, 0.688714, 0.993973, -0.0468838, 0.0800294, 0.716743, 0.994207, -0.046705, 0.0781286, 0.74377, 0.994168, -0.0469698, 0.0763337, 0.77042, 0.9945, -0.0456816, 0.0738184, 0.796659, 0.994356, -0.0455518, 0.0715545, 0.821868, 0.994747, -0.0439488, 0.0686085, 0.846572, 0.994937, -0.0430056, 0.065869, 0.870435, 0.995142, -0.0413414, 0.0626446, 0.893272, 0.995451, -0.0396521, 0.05929, 0.915376, 0.995445, -0.0378453, 0.0558503, 0.936196, 0.995967, -0.0355219, 0.0520949, 0.956376, 0.996094, -0.0335146, 0.048377, 0.975327, 0.996622, -0.030682, 0.0442575, 0.993471, 0.996938, -0.0285504, 0.0404693, 1.01052, 0.997383, -0.0253399, 0.0360903, 1.02637, 0.997714, -0.0231651, 0.0322176, 1.04139, 0.998249, -0.0198138, 0.0278433, 1.05542, 0.998596, -0.0174337, 0.0238759, 1.06846, 0.998946, -0.0141349, 0.0195944, 1.08056, 0.99928, -0.0115603, 0.0156279, 1.09181, 0.999507, -839065e-8, 0.0114607, 1.10213, 0.999697, -5666e-6, 763325e-8, 1.11169, 0.999869, -269902e-8, 364946e-8, 1.12042, 1.00001, 623836e-10, -319288e-10, 1.12832, 0.987221, -222675e-11, 0.111332, 197456e-10, 0.98739, -561116e-10, 0.111351, 497563e-9, 0.987448, -224453e-9, 0.111357, 199031e-8, 0.987441, -505019e-9, 0.111357, 44782e-7, 0.987442, -897816e-9, 0.111357, 796129e-8, 0.987442, -140284e-8, 0.111357, 0.0124396, 0.987444, -202012e-8, 0.111357, 0.0179132, 0.987442, -274964e-8, 0.111357, 0.0243824, 0.987446, -359147e-8, 0.111357, 0.0318474, 0.987435, -454562e-8, 0.111356, 0.0403086, 0.987461, -561225e-8, 0.111358, 0.0497678, 0.987458, -679125e-8, 0.111358, 0.0602239, 0.987443, -80828e-7, 0.111356, 0.0716792, 0.987476, -94872e-7, 0.111358, 0.0841364, 0.98749, -0.0110044, 0.111361, 0.097597, 0.987508, -0.0126344, 0.111362, 0.112062, 0.987494, -0.0143767, 0.111357, 0.127533, 0.987526, -0.0162307, 0.111359, 0.144015, 0.987558, -0.0181912, 0.111361, 0.161502, 0.987602, -0.0202393, 0.111355, 0.179979, 0.987692, -0.022273, 0.111346, 0.199386, 0.987702, -0.0235306, 0.111215, 0.219183, 0.987789, -0.0247628, 0.111061, 0.239202, 0.987776, -0.0280668, 0.111171, 0.259957, 0.987856, -0.0316751, 0.111327, 0.282198, 0.987912, -0.0342468, 0.111282, 0.306294, 0.988, -0.0367205, 0.111198, 0.331219, 0.988055, -0.0387766, 0.110994, 0.356708, 0.988241, -0.0397722, 0.110547, 0.382234, 0.988399, -0.0416076, 0.110198, 0.408227, 0.988539, -0.0448192, 0.110137, 0.434662, 0.988661, -0.0483793, 0.110143, 0.461442, 0.988967, -0.0495895, 0.109453, 0.489318, 0.989073, -0.0506797, 0.108628, 0.517516, 0.989274, -0.0526953, 0.108003, 0.545844, 0.989528, -0.054578, 0.107255, 0.573823, 0.989709, -0.0561503, 0.106294, 0.601944, 0.989991, -0.056866, 0.104896, 0.630855, 0.990392, -0.0572914, 0.103336, 0.658925, 0.990374, -0.0586224, 0.10189, 0.686661, 0.990747, -0.0584764, 0.099783, 0.714548, 0.991041, -0.0582662, 0.0974309, 0.74186, 0.991236, -0.0584118, 0.0951678, 0.768422, 0.991585, -0.0573055, 0.0921581, 0.794817, 0.991984, -0.0564241, 0.0891167, 0.820336, 0.9921, -0.0553608, 0.085805, 0.84493, 0.992749, -0.0533816, 0.0820354, 0.868961, 0.99288, -0.0518661, 0.0782181, 0.891931, 0.993511, -0.0492492, 0.0738935, 0.914186, 0.993617, -0.0471956, 0.0696402, 0.93532, 0.99411, -0.044216, 0.0649659, 0.95543, 0.994595, -0.0416654, 0.0603177, 0.974685, 0.994976, -0.0384314, 0.0553493, 0.992807, 0.995579, -0.0353491, 0.0503942, 1.00996, 0.996069, -0.0319787, 0.0452123, 1.02606, 0.996718, -0.028472, 0.0400112, 1.04114, 0.997173, -0.0250789, 0.0349456, 1.05517, 0.997818, -0.0213326, 0.029653, 1.0683, 0.998318, -0.0178509, 0.024549, 1.0805, 0.998853, -0.0141118, 0.0194197, 1.09177, 0.999218, -0.0105914, 0.0143869, 1.1022, 0.999594, -693474e-8, 943517e-8, 1.11175, 0.99975, -340478e-8, 464051e-8, 1.12056, 1.00001, 109172e-9, -112821e-9, 1.12853, 0.983383, -266524e-11, 0.133358, 196534e-10, 0.981942, -671009e-10, 0.133162, 494804e-9, 0.981946, -268405e-9, 0.133163, 197923e-8, 0.981944, -603912e-9, 0.133163, 445326e-8, 0.981941, -107362e-8, 0.133162, 791693e-8, 0.981946, -167755e-8, 0.133163, 0.0123703, 0.981944, -241569e-8, 0.133162, 0.0178135, 0.981945, -328807e-8, 0.133163, 0.0242466, 0.981945, -429472e-8, 0.133162, 0.03167, 0.981955, -543573e-8, 0.133164, 0.0400846, 0.981951, -671105e-8, 0.133163, 0.0494901, 0.981968, -812092e-8, 0.133165, 0.0598886, 0.981979, -966541e-8, 0.133166, 0.0712811, 0.981996, -0.0113446, 0.133168, 0.083669, 0.982014, -0.0131585, 0.133169, 0.0970533, 0.982011, -0.0151073, 0.133167, 0.111438, 0.982062, -0.0171906, 0.133172, 0.126826, 0.9821, -0.0194067, 0.133175, 0.143215, 0.982149, -0.0217502, 0.133176, 0.160609, 0.982163, -0.0241945, 0.133173, 0.178981, 0.982247, -0.0265907, 0.133148, 0.198249, 0.982291, -0.027916, 0.132974, 0.217795, 0.982396, -0.0299663, 0.132868, 0.238042, 0.982456, -0.0334544, 0.132934, 0.258901, 0.982499, -0.0378636, 0.133137, 0.280639, 0.982617, -0.0409274, 0.133085, 0.304604, 0.98274, -0.0438523, 0.132985, 0.329376, 0.982944, -0.0462288, 0.132728, 0.354697, 0.98308, -0.0475995, 0.132228, 0.380102, 0.983391, -0.0501901, 0.131924, 0.406256, 0.983514, -0.0535899, 0.131737, 0.432735, 0.98373, -0.0571858, 0.131567, 0.459359, 0.984056, -0.0592353, 0.130932, 0.486637, 0.984234, -0.0610488, 0.130092, 0.51509, 0.984748, -0.0630758, 0.12923, 0.543461, 0.985073, -0.0647398, 0.128174, 0.571376, 0.985195, -0.0671941, 0.127133, 0.599414, 0.985734, -0.0681345, 0.125576, 0.628134, 0.986241, -0.0686089, 0.123639, 0.656399, 0.986356, -0.0698511, 0.121834, 0.684258, 0.986894, -0.0700931, 0.119454, 0.711818, 0.987382, -0.0698321, 0.116718, 0.739511, 0.988109, -0.0693975, 0.113699, 0.766267, 0.988363, -0.0689584, 0.110454, 0.792456, 0.989112, -0.0672353, 0.106602, 0.81813, 0.989241, -0.0662034, 0.10267, 0.842889, 0.990333, -0.0638938, 0.0981381, 0.867204, 0.990591, -0.0618534, 0.0935388, 0.89038, 0.991106, -0.0593117, 0.088553, 0.912576, 0.991919, -0.0562676, 0.0832187, 0.934118, 0.992111, -0.0534085, 0.0778302, 0.954254, 0.992997, -0.0495459, 0.0720453, 0.973722, 0.993317, -0.0463707, 0.0663458, 0.991949, 0.994133, -0.0421245, 0.0601883, 1.00936, 0.994705, -0.0384977, 0.0542501, 1.02559, 0.995495, -0.0340956, 0.0479862, 1.04083, 0.996206, -0.030105, 0.041887, 1.05497, 0.996971, -0.0256095, 0.0355355, 1.06824, 0.997796, -0.0213932, 0.0293655, 1.08056, 0.998272, -0.0169612, 0.0232926, 1.09182, 0.998857, -0.0126756, 0.0172786, 1.10219, 0.99939, -832486e-8, 0.0113156, 1.11192, 0.999752, -410826e-8, 557892e-8, 1.12075, 1, 150957e-9, -119101e-9, 1.12885, 0.975169, -309397e-11, 0.154669, 195073e-10, 0.975439, -779608e-10, 0.154712, 491534e-9, 0.975464, -311847e-9, 0.154716, 196617e-8, 0.975464, -701656e-9, 0.154716, 442387e-8, 0.975462, -12474e-7, 0.154715, 78647e-7, 0.975461, -194906e-8, 0.154715, 0.0122886, 0.975464, -280667e-8, 0.154715, 0.0176959, 0.975468, -382025e-8, 0.154716, 0.0240867, 0.975471, -498985e-8, 0.154716, 0.0314612, 0.975472, -631541e-8, 0.154717, 0.0398199, 0.975486, -779719e-8, 0.154718, 0.0491639, 0.975489, -943505e-8, 0.154718, 0.0594932, 0.975509, -0.0112295, 0.154721, 0.0708113, 0.97554, -0.0131802, 0.154724, 0.0831176, 0.975557, -0.0152876, 0.154726, 0.096415, 0.975585, -0.0175512, 0.154728, 0.110705, 0.975605, -0.0199713, 0.154729, 0.125992, 0.975645, -0.0225447, 0.154729, 0.142272, 0.975711, -0.0252649, 0.154735, 0.159549, 0.975788, -0.0280986, 0.154736, 0.177805, 0.975872, -0.0308232, 0.154704, 0.196911, 0.975968, -0.0324841, 0.154525, 0.216324, 0.976063, -0.0351281, 0.154432, 0.236628, 0.976157, -0.0388618, 0.15446, 0.257539, 0.976204, -0.0437704, 0.154665, 0.278975, 0.976358, -0.047514, 0.154652, 0.302606, 0.976571, -0.0508638, 0.154535, 0.327204, 0.976725, -0.0534995, 0.154221, 0.352276, 0.977013, -0.0555547, 0.153737, 0.377696, 0.977294, -0.0586728, 0.153403, 0.403855, 0.977602, -0.0622715, 0.15312, 0.430333, 0.977932, -0.0658166, 0.152755, 0.456855, 0.978241, -0.0689877, 0.152233, 0.483668, 0.978602, -0.0712805, 0.15132, 0.512097, 0.979234, -0.0732775, 0.150235, 0.540455, 0.97977, -0.075163, 0.148978, 0.568486, 0.979995, -0.0778026, 0.147755, 0.596524, 0.98078, -0.0791854, 0.146019, 0.624825, 0.981628, -0.0799666, 0.143906, 0.653403, 0.982067, -0.0808532, 0.141561, 0.681445, 0.98271, -0.0816024, 0.139025, 0.708918, 0.983734, -0.0812511, 0.135764, 0.736594, 0.98431, -0.0806201, 0.132152, 0.763576, 0.985071, -0.0801605, 0.12846, 0.789797, 0.98618, -0.0784208, 0.124084, 0.815804, 0.986886, -0.0766643, 0.1193, 0.840869, 0.987485, -0.0747744, 0.114236, 0.864952, 0.988431, -0.0716701, 0.108654, 0.888431, 0.988886, -0.0691609, 0.102994, 0.910963, 0.990024, -0.0654048, 0.0967278, 0.932629, 0.990401, -0.0619765, 0.090384, 0.95313, 0.991093, -0.0579296, 0.0837885, 0.972587, 0.992018, -0.0536576, 0.0770171, 0.991184, 0.992536, -0.0493719, 0.0701486, 1.00863, 0.993421, -0.0444813, 0.062953, 1.02494, 0.993928, -0.040008, 0.0560455, 1.04017, 0.994994, -0.0347982, 0.04856, 1.05463, 0.995866, -0.0301017, 0.0416152, 1.06807, 0.996916, -0.0248225, 0.0342597, 1.08039, 0.997766, -0.0199229, 0.0271668, 1.09177, 0.998479, -0.0147422, 0.0201387, 1.10235, 0.99921, -980173e-8, 0.0131944, 1.11206, 0.999652, -47426e-7, 640712e-8, 1.12104, 0.999998, 891673e-10, -10379e-8, 1.12906, 0.967868, -351885e-11, 0.175947, 193569e-10, 0.968001, -886733e-10, 0.175972, 487782e-9, 0.96801, -354697e-9, 0.175973, 195115e-8, 0.968012, -798063e-9, 0.175974, 439006e-8, 0.968011, -141879e-8, 0.175973, 780461e-8, 0.968011, -221686e-8, 0.175973, 0.0121948, 0.968016, -319231e-8, 0.175974, 0.0175607, 0.968019, -434515e-8, 0.175974, 0.0239027, 0.968018, -567538e-8, 0.175974, 0.0312208, 0.968033, -718308e-8, 0.175977, 0.0395158, 0.968049, -886836e-8, 0.175979, 0.0487885, 0.968047, -0.0107312, 0.175978, 0.0590394, 0.968072, -0.0127719, 0.175981, 0.0702705, 0.968108, -0.0149905, 0.175986, 0.0824836, 0.968112, -0.0173866, 0.175985, 0.0956783, 0.968173, -0.0199611, 0.175993, 0.109862, 0.96827, -0.0227128, 0.176008, 0.125033, 0.968292, -0.025639, 0.17601, 0.141193, 0.968339, -0.0287299, 0.176007, 0.158336, 0.968389, -0.0319399, 0.176001, 0.176441, 0.968501, -0.034941, 0.175962, 0.195359, 0.968646, -0.0370812, 0.175793, 0.214686, 0.968789, -0.0402329, 0.175708, 0.234973, 0.96886, -0.0442601, 0.1757, 0.255871, 0.969013, -0.049398, 0.175876, 0.277238, 0.969242, -0.0539932, 0.17594, 0.300326, 0.969419, -0.0577299, 0.175781, 0.324702, 0.969763, -0.0605643, 0.175432, 0.349527, 0.970093, -0.0634488, 0.174992, 0.374976, 0.970361, -0.0670589, 0.174611, 0.401097, 0.970825, -0.0708246, 0.174226, 0.427496, 0.971214, -0.0742871, 0.173684, 0.453858, 0.971622, -0.0782608, 0.173186, 0.480637, 0.972175, -0.0813151, 0.172288, 0.508655, 0.972944, -0.0832678, 0.170979, 0.536973, 0.973595, -0.0855964, 0.169573, 0.565138, 0.974345, -0.0882163, 0.168152, 0.593222, 0.975233, -0.0901671, 0.166314, 0.621201, 0.976239, -0.0912111, 0.163931, 0.649919, 0.977289, -0.0916959, 0.161106, 0.678011, 0.978076, -0.0927061, 0.158272, 0.705717, 0.979533, -0.0925562, 0.15475, 0.733228, 0.980335, -0.0918159, 0.150638, 0.760454, 0.981808, -0.0908508, 0.146201, 0.786918, 0.983061, -0.0896172, 0.141386, 0.812953, 0.984148, -0.0871588, 0.135837, 0.838281, 0.985047, -0.0850624, 0.130135, 0.862594, 0.986219, -0.0818541, 0.123882, 0.88633, 0.987043, -0.0784523, 0.117126, 0.908952, 0.988107, -0.0749601, 0.110341, 0.930744, 0.988955, -0.0703548, 0.102885, 0.951728, 0.989426, -0.0662798, 0.0954167, 0.971166, 0.990421, -0.0610834, 0.0876331, 0.989984, 0.991032, -0.0562936, 0.0797785, 1.00765, 0.992041, -0.0508154, 0.0718166, 1.02434, 0.992794, -0.0454045, 0.0637125, 1.03976, 0.993691, -0.0398194, 0.0555338, 1.05418, 0.994778, -0.0341482, 0.0473388, 1.06772, 0.995915, -0.028428, 0.0391016, 1.08028, 0.997109, -0.022642, 0.0309953, 1.09185, 0.998095, -0.0168738, 0.0230288, 1.10247, 0.998985, -0.0111274, 0.0150722, 1.11229, 0.999581, -543881e-8, 740605e-8, 1.12131, 1.00003, 162239e-9, -105549e-9, 1.12946, 0.959505, -393734e-11, 0.196876, 191893e-10, 0.959599, -992157e-10, 0.196895, 483544e-9, 0.959641, -396868e-9, 0.196903, 19342e-7, 0.959599, -892948e-9, 0.196895, 435193e-8, 0.959603, -158747e-8, 0.196896, 77368e-7, 0.959604, -248042e-8, 0.196896, 0.0120888, 0.959605, -357184e-8, 0.196896, 0.0174082, 0.959605, -486169e-8, 0.196896, 0.0236949, 0.959613, -635008e-8, 0.196897, 0.0309497, 0.959619, -803696e-8, 0.196898, 0.0391725, 0.959636, -992255e-8, 0.196901, 0.0483649, 0.959634, -0.0120067, 0.1969, 0.0585266, 0.959675, -0.0142898, 0.196906, 0.0696609, 0.959712, -0.0167717, 0.196911, 0.0817678, 0.959752, -0.0194524, 0.196918, 0.0948494, 0.959807, -0.0223321, 0.196925, 0.10891, 0.959828, -0.0254091, 0.196924, 0.123947, 0.959906, -0.0286815, 0.196934, 0.139968, 0.960005, -0.0321371, 0.196944, 0.156968, 0.960071, -0.0357114, 0.196936, 0.17491, 0.960237, -0.0389064, 0.196882, 0.193597, 0.960367, -0.041623, 0.196731, 0.21285, 0.960562, -0.0452655, 0.196654, 0.233075, 0.960735, -0.0496207, 0.196643, 0.253941, 0.960913, -0.0549379, 0.196774, 0.275278, 0.961121, -0.0603414, 0.196893, 0.297733, 0.96139, -0.0644244, 0.196717, 0.321877, 0.961818, -0.067556, 0.196314, 0.346476, 0.962175, -0.0712709, 0.195917, 0.371907, 0.96255, -0.0752848, 0.1955, 0.397916, 0.963164, -0.0792073, 0.195026, 0.424229, 0.963782, -0.0828225, 0.194424, 0.450637, 0.964306, -0.0873119, 0.193831, 0.477288, 0.964923, -0.0911051, 0.192973, 0.504716, 0.966048, -0.093251, 0.19151, 0.533053, 0.967024, -0.0958983, 0.190013, 0.561366, 0.968038, -0.09835, 0.188253, 0.589464, 0.969152, -0.100754, 0.186257, 0.617433, 0.970557, -0.102239, 0.183775, 0.645801, 0.972104, -0.102767, 0.180645, 0.674278, 0.973203, -0.103492, 0.177242, 0.702004, 0.975123, -0.103793, 0.17345, 0.729529, 0.97641, -0.102839, 0.168886, 0.756712, 0.978313, -0.101687, 0.163892, 0.783801, 0.980036, -0.100314, 0.158439, 0.809671, 0.981339, -0.097836, 0.152211, 0.835402, 0.982794, -0.0950006, 0.145679, 0.860081, 0.984123, -0.0920994, 0.138949, 0.883757, 0.984918, -0.0878641, 0.131283, 0.90685, 0.985999, -0.083939, 0.123464, 0.928786, 0.987151, -0.0791234, 0.115324, 0.94983, 0.987827, -0.0739332, 0.106854, 0.96962, 0.988806, -0.0688088, 0.0982691, 0.98861, 0.989588, -0.0628962, 0.0893456, 1.00667, 0.990438, -0.0573146, 0.0805392, 1.02344, 0.991506, -0.0509433, 0.0713725, 1.03933, 0.992492, -0.0448724, 0.0623732, 1.05378, 0.993663, -0.0383497, 0.0530838, 1.06747, 0.994956, -0.0319593, 0.0439512, 1.08007, 0.99634, -0.025401, 0.0347803, 1.09182, 0.99761, -0.0189687, 0.0257954, 1.1025, 0.99863, -0.0124441, 0.0169893, 1.11247, 0.99947, -614003e-8, 829498e-8, 1.12151, 1.00008, 216624e-9, -146107e-9, 1.12993, 0.950129, -434955e-11, 0.217413, 190081e-10, 0.950264, -10957e-8, 0.217444, 47884e-8, 0.9503, -438299e-9, 0.217451, 191543e-8, 0.950246, -986124e-9, 0.21744, 430951e-8, 0.950246, -175311e-8, 0.21744, 766137e-8, 0.950245, -273923e-8, 0.21744, 0.011971, 0.950253, -394453e-8, 0.217441, 0.0172385, 0.950258, -536897e-8, 0.217442, 0.0234641, 0.950267, -701262e-8, 0.217444, 0.030648, 0.950277, -887551e-8, 0.217446, 0.038791, 0.950284, -0.0109576, 0.217446, 0.0478931, 0.950312, -0.0132591, 0.217451, 0.0579568, 0.950334, -0.01578, 0.217454, 0.0689821, 0.950378, -0.0185204, 0.217462, 0.0809714, 0.950417, -0.0214803, 0.217467, 0.0939265, 0.950488, -0.0246594, 0.217479, 0.10785, 0.950534, -0.0280565, 0.217483, 0.122743, 0.950633, -0.0316685, 0.217498, 0.138611, 0.950698, -0.0354787, 0.217499, 0.155442, 0.950844, -0.0394003, 0.217507, 0.173208, 0.950999, -0.0426812, 0.217419, 0.191605, 0.951221, -0.0461302, 0.217317, 0.21084, 0.951412, -0.0502131, 0.217238, 0.230945, 0.951623, -0.0549183, 0.21722, 0.251745, 0.951867, -0.0604493, 0.217306, 0.273001, 0.952069, -0.0665189, 0.217466, 0.294874, 0.952459, -0.0709179, 0.217266, 0.318732, 0.952996, -0.0746112, 0.216891, 0.34318, 0.953425, -0.0789252, 0.216503, 0.36849, 0.953885, -0.0833293, 0.216042, 0.394373, 0.954617, -0.087371, 0.215469, 0.420505, 0.955429, -0.0914054, 0.214802, 0.446907, 0.956068, -0.0961671, 0.214146, 0.473522, 0.957094, -0.10048, 0.213286, 0.50052, 0.958372, -0.103248, 0.211796, 0.528715, 0.959654, -0.106033, 0.21016, 0.557065, 0.961305, -0.108384, 0.208149, 0.585286, 0.962785, -0.111122, 0.206024, 0.613334, 0.964848, -0.112981, 0.203442, 0.641334, 0.966498, -0.113717, 0.19996, 0.669955, 0.968678, -0.114121, 0.196105, 0.698094, 0.970489, -0.114524, 0.191906, 0.725643, 0.972903, -0.113792, 0.186963, 0.752856, 0.974701, -0.112406, 0.181343, 0.780013, 0.976718, -0.110685, 0.175185, 0.806268, 0.978905, -0.108468, 0.168535, 0.832073, 0.980267, -0.105061, 0.161106, 0.857149, 0.981967, -0.101675, 0.153387, 0.881145, 0.983063, -0.0974492, 0.145199, 0.904255, 0.984432, -0.0925815, 0.136527, 0.926686, 0.985734, -0.0877983, 0.127584, 0.947901, 0.986228, -0.081884, 0.118125, 0.968111, 0.98719, -0.0761208, 0.108594, 0.98719, 0.988228, -0.0698196, 0.0989996, 1.00559, 0.989046, -0.0632739, 0.0890074, 1.02246, 0.990242, -0.056522, 0.0790832, 1.03841, 0.991252, -0.0495272, 0.0689182, 1.05347, 0.992542, -0.0425373, 0.0588592, 1.06724, 0.994096, -0.0353198, 0.0486833, 1.08009, 0.995593, -0.028235, 0.0385977, 1.09177, 0.99711, -0.0209511, 0.0286457, 1.10274, 0.998263, -0.0139289, 0.0188497, 1.11262, 0.999254, -67359e-7, 9208e-6, 1.12191, 0.999967, 141846e-9, -657764e-10, 1.13024, 0.935608, -474692e-11, 0.236466, 187817e-10, 0.93996, -11971e-8, 0.237568, 473646e-9, 0.939959, -478845e-9, 0.237567, 18946e-7, 0.939954, -10774e-7, 0.237566, 426284e-8, 0.939956, -191538e-8, 0.237566, 757842e-8, 0.939954, -299277e-8, 0.237566, 0.0118413, 0.93996, -430961e-8, 0.237567, 0.0170518, 0.939969, -586589e-8, 0.237569, 0.02321, 0.939982, -766166e-8, 0.237572, 0.0303164, 0.939987, -969686e-8, 0.237572, 0.0383711, 0.939997, -0.0119715, 0.237574, 0.0473751, 0.940031, -0.0144858, 0.237581, 0.0573298, 0.940073, -0.0172399, 0.237589, 0.0682366, 0.94012, -0.0202335, 0.237598, 0.080097, 0.940162, -0.0234663, 0.237604, 0.0929116, 0.940237, -0.0269387, 0.237615, 0.106686, 0.940328, -0.0306489, 0.237632, 0.121421, 0.940419, -0.0345917, 0.237645, 0.137115, 0.940522, -0.0387481, 0.237654, 0.153766, 0.940702, -0.0429906, 0.237661, 0.17133, 0.940871, -0.0465089, 0.237561, 0.189502, 0.941103, -0.050531, 0.23748, 0.208616, 0.941369, -0.0550657, 0.237423, 0.228595, 0.941641, -0.0601337, 0.237399, 0.249287, 0.941903, -0.0658804, 0.237443, 0.270467, 0.942224, -0.0722674, 0.237597, 0.292024, 0.942633, -0.0771788, 0.237419, 0.315272, 0.943172, -0.0815623, 0.237068, 0.339579, 0.943691, -0.0863973, 0.236682, 0.364717, 0.944382, -0.0911536, 0.236213, 0.390435, 0.945392, -0.0952967, 0.235562, 0.416425, 0.946185, -0.0998948, 0.234832, 0.442772, 0.947212, -0.104796, 0.234114, 0.469347, 0.948778, -0.10928, 0.233222, 0.496162, 0.950149, -0.113081, 0.231845, 0.523978, 0.951989, -0.115893, 0.230005, 0.552295, 0.953921, -0.11846, 0.227862, 0.580569, 0.955624, -0.12115, 0.225439, 0.608698, 0.958234, -0.123373, 0.222635, 0.636696, 0.960593, -0.124519, 0.219093, 0.665208, 0.963201, -0.124736, 0.214749, 0.693557, 0.965642, -0.125012, 0.210059, 0.721334, 0.968765, -0.124661, 0.204935, 0.748613, 0.971753, -0.122996, 0.198661, 0.776224, 0.973751, -0.120998, 0.191823, 0.802461, 0.976709, -0.118583, 0.184359, 0.828399, 0.977956, -0.115102, 0.176437, 0.853693, 0.979672, -0.111077, 0.167681, 0.877962, 0.981816, -0.10688, 0.158872, 0.901564, 0.98238, -0.101469, 0.149398, 0.924057, 0.983964, -0.0960013, 0.139436, 0.945751, 0.984933, -0.0899626, 0.12943, 0.966272, 0.985694, -0.0832973, 0.11894, 0.985741, 0.986822, -0.0767082, 0.108349, 1.00407, 0.987725, -0.0693614, 0.0976026, 1.02154, 0.98877, -0.06211, 0.086652, 1.03757, 0.990129, -0.0544143, 0.0756182, 1.05296, 0.991337, -0.046744, 0.0645753, 1.06683, 0.992978, -0.0387931, 0.0534683, 1.0798, 0.994676, -0.030973, 0.0424137, 1.09181, 0.99645, -0.0230311, 0.0314035, 1.10286, 0.997967, -0.0152065, 0.0206869, 1.11291, 0.99922, -744837e-8, 0.010155, 1.12237, 1.00002, 240209e-9, -752767e-10, 1.13089, 0.922948, -515351e-11, 0.255626, 186069e-10, 0.928785, -129623e-9, 0.257244, 468009e-9, 0.928761, -51849e-8, 0.257237, 187202e-8, 0.928751, -11666e-7, 0.257235, 421204e-8, 0.928751, -207395e-8, 0.257234, 74881e-7, 0.928754, -324055e-8, 0.257235, 0.0117002, 0.92876, -466639e-8, 0.257236, 0.0168486, 0.928763, -635149e-8, 0.257237, 0.0229334, 0.928774, -829584e-8, 0.257239, 0.029955, 0.928791, -0.0104995, 0.257243, 0.0379139, 0.928804, -0.0129623, 0.257245, 0.0468108, 0.928847, -0.0156846, 0.257255, 0.0566473, 0.92889, -0.0186661, 0.257263, 0.0674246, 0.928924, -0.0219067, 0.257268, 0.0791433, 0.928989, -0.0254066, 0.257282, 0.0918076, 0.92909, -0.0291651, 0.257301, 0.105419, 0.92918, -0.0331801, 0.257316, 0.119978, 0.92929, -0.0374469, 0.257332, 0.135491, 0.929453, -0.041939, 0.257357, 0.151948, 0.929586, -0.0464612, 0.257347, 0.169275, 0.929858, -0.0503426, 0.257269, 0.187257, 0.930125, -0.0548409, 0.257199, 0.206204, 0.930403, -0.0598063, 0.257149, 0.22601, 0.930726, -0.0652437, 0.257122, 0.246561, 0.931098, -0.0712376, 0.257153, 0.267618, 0.931396, -0.0777506, 0.257237, 0.288993, 0.931947, -0.0832374, 0.257124, 0.311527, 0.932579, -0.0883955, 0.25683, 0.335697, 0.933194, -0.0937037, 0.256444, 0.360634, 0.934013, -0.0987292, 0.255939, 0.386126, 0.935307, -0.103215, 0.255282, 0.412018, 0.936374, -0.108234, 0.254538, 0.438292, 0.93776, -0.113234, 0.253728, 0.464805, 0.939599, -0.118013, 0.25275, 0.491464, 0.941036, -0.122661, 0.251404, 0.518751, 0.94337, -0.125477, 0.249435, 0.547133, 0.945318, -0.128374, 0.247113, 0.575456, 0.947995, -0.130996, 0.244441, 0.60372, 0.950818, -0.133438, 0.241352, 0.63174, 0.954378, -0.135004, 0.237849, 0.659971, 0.957151, -0.135313, 0.233188, 0.688478, 0.960743, -0.13521, 0.228001, 0.716767, 0.964352, -0.135007, 0.222249, 0.744349, 0.967273, -0.133523, 0.21542, 0.771786, 0.969767, -0.131155, 0.208039, 0.798639, 0.973195, -0.128492, 0.200076, 0.824774, 0.975557, -0.125094, 0.191451, 0.850222, 0.977692, -0.120578, 0.18184, 0.874761, 0.98026, -0.115882, 0.172102, 0.898497, 0.981394, -0.110372, 0.161859, 0.921636, 0.982386, -0.10415, 0.15108, 0.943467, 0.983783, -0.0978128, 0.140407, 0.964045, 0.98422, -0.0906171, 0.129058, 0.98398, 0.985447, -0.0832921, 0.117614, 1.00276, 0.986682, -0.0754412, 0.10585, 1.02047, 0.987326, -0.0673885, 0.0940943, 1.03678, 0.988707, -0.0592565, 0.0822093, 1.05218, 0.990185, -0.050717, 0.070192, 1.06652, 0.991866, -0.0423486, 0.0582081, 1.07965, 0.993897, -0.0336118, 0.0460985, 1.09188, 0.995841, -0.0252178, 0.0342737, 1.10307, 0.997605, -0.0164893, 0.0224829, 1.11324, 0.999037, -817112e-8, 0.0110647, 1.12262, 1.00003, 291686e-9, -168673e-9, 1.13139, 0.915304, -552675e-11, 0.275999, 183285e-10, 0.91668, -139285e-9, 0.276414, 461914e-9, 0.916664, -55713e-8, 0.276409, 184763e-8, 0.916653, -125354e-8, 0.276406, 415715e-8, 0.916651, -222851e-8, 0.276405, 739053e-8, 0.916655, -348205e-8, 0.276406, 0.0115478, 0.916653, -501414e-8, 0.276405, 0.0166291, 0.916667, -682478e-8, 0.276409, 0.0226346, 0.91668, -891398e-8, 0.276412, 0.0295648, 0.91669, -0.0112817, 0.276413, 0.0374199, 0.916727, -0.013928, 0.276422, 0.0462016, 0.916759, -0.0168528, 0.276429, 0.0559101, 0.916793, -0.0200558, 0.276436, 0.0665466, 0.916849, -0.0235373, 0.276448, 0.0781139, 0.916964, -0.0272973, 0.276474, 0.0906156, 0.917047, -0.0313344, 0.276491, 0.104051, 0.917152, -0.0356465, 0.276511, 0.118424, 0.917286, -0.0402271, 0.276533, 0.133736, 0.917469, -0.0450408, 0.276564, 0.149978, 0.917686, -0.0497872, 0.276563, 0.167057, 0.917953, -0.0540937, 0.276493, 0.184846, 0.918228, -0.0590709, 0.276437, 0.203614, 0.918572, -0.0644277, 0.276398, 0.223212, 0.918918, -0.0702326, 0.276362, 0.243584, 0.919356, -0.076484, 0.276383, 0.264465, 0.919842, -0.0830808, 0.276434, 0.285701, 0.920451, -0.0892972, 0.276407, 0.307559, 0.921113, -0.095016, 0.276128, 0.331501, 0.921881, -0.100771, 0.275754, 0.356207, 0.923027, -0.106029, 0.275254, 0.381477, 0.924364, -0.111029, 0.274595, 0.40722, 0.925818, -0.116345, 0.273841, 0.433385, 0.92746, -0.121424, 0.272913, 0.459848, 0.929167, -0.12657, 0.271837, 0.486493, 0.931426, -0.131581, 0.270575, 0.513432, 0.934001, -0.135038, 0.268512, 0.541502, 0.936296, -0.138039, 0.266135, 0.569658, 0.939985, -0.140687, 0.263271, 0.598375, 0.943516, -0.143247, 0.260058, 0.626563, 0.94782, -0.145135, 0.256138, 0.654711, 0.951023, -0.145733, 0.251154, 0.683285, 0.955338, -0.145554, 0.245562, 0.711831, 0.959629, -0.145008, 0.239265, 0.739573, 0.963123, -0.144003, 0.232064, 0.767027, 0.966742, -0.141289, 0.224036, 0.794359, 0.969991, -0.138247, 0.215305, 0.820361, 0.973403, -0.134786, 0.206051, 0.846548, 0.975317, -0.129966, 0.195914, 0.871541, 0.977647, -0.12471, 0.185184, 0.895313, 0.980137, -0.119086, 0.174161, 0.918398, 0.981031, -0.112297, 0.162792, 0.940679, 0.982037, -0.105372, 0.150952, 0.961991, 0.983164, -0.097821, 0.138921, 0.981913, 0.983757, -0.0897245, 0.126611, 1.00109, 0.985036, -0.0815974, 0.114228, 1.01902, 0.986289, -0.0727725, 0.101389, 1.03604, 0.987329, -0.0639323, 0.0886476, 1.05149, 0.989193, -0.0548109, 0.0756837, 1.06619, 0.990716, -0.045687, 0.0627581, 1.07948, 0.992769, -0.0364315, 0.0498337, 1.09172, 0.99524, -0.0271761, 0.0370305, 1.1033, 0.997154, -0.0179609, 0.0243959, 1.11353, 0.998845, -878063e-8, 0.0119567, 1.12319, 1.00002, 259038e-9, -108146e-9, 1.13177, 0.903945, -591681e-11, 0.295126, 181226e-10, 0.903668, -148672e-9, 0.295037, 455367e-9, 0.903677, -594683e-9, 0.29504, 182145e-8, 0.903673, -133805e-8, 0.295039, 409831e-8, 0.903666, -237872e-8, 0.295036, 728584e-8, 0.903668, -371676e-8, 0.295037, 0.0113842, 0.903679, -535212e-8, 0.29504, 0.0163936, 0.903684, -728479e-8, 0.295041, 0.0223141, 0.903698, -951473e-8, 0.295044, 0.0291462, 0.903718, -0.0120419, 0.295049, 0.0368904, 0.903754, -0.0148664, 0.295058, 0.0455477, 0.903801, -0.017988, 0.29507, 0.0551194, 0.903851, -0.0214064, 0.295082, 0.0656058, 0.903921, -0.0251219, 0.295097, 0.0770109, 0.904002, -0.0291337, 0.295116, 0.0893354, 0.904111, -0.033441, 0.29514, 0.102583, 0.904246, -0.0380415, 0.295169, 0.116755, 0.904408, -0.0429258, 0.295202, 0.131853, 0.904637, -0.0480468, 0.295245, 0.147869, 0.904821, -0.0529208, 0.295214, 0.164658, 0.905163, -0.0577748, 0.295185, 0.182274, 0.905469, -0.0631763, 0.295143, 0.200828, 0.905851, -0.068917, 0.295112, 0.2202, 0.906322, -0.0750861, 0.295104, 0.240372, 0.906761, -0.0815855, 0.295086, 0.261082, 0.90735, -0.0882138, 0.295095, 0.282123, 0.908087, -0.095082, 0.295139, 0.303563, 0.908826, -0.101488, 0.29492, 0.327028, 0.909832, -0.107577, 0.294577, 0.351464, 0.911393, -0.113033, 0.294115, 0.376497, 0.912804, -0.118629, 0.293446, 0.402115, 0.914081, -0.124232, 0.292581, 0.428111, 0.91637, -0.129399, 0.29166, 0.454442, 0.91814, -0.134892, 0.290422, 0.481024, 0.921179, -0.140069, 0.289194, 0.507924, 0.924544, -0.144431, 0.287421, 0.535557, 0.927995, -0.147498, 0.284867, 0.563984, 0.931556, -0.150197, 0.281722, 0.5923, 0.935777, -0.152711, 0.278207, 0.620832, 0.940869, -0.154836, 0.274148, 0.649069, 0.945994, -0.155912, 0.269057, 0.677746, 0.949634, -0.155641, 0.262799, 0.706293, 0.955032, -0.154809, 0.256097, 0.734278, 0.95917, -0.153678, 0.248618, 0.761751, 0.962931, -0.151253, 0.239794, 0.789032, 0.966045, -0.147625, 0.230281, 0.815422, 0.96971, -0.143964, 0.220382, 0.841787, 0.972747, -0.139464, 0.209846, 0.867446, 0.975545, -0.133459, 0.198189, 0.892004, 0.978381, -0.127424, 0.186362, 0.915458, 0.979935, -0.120506, 0.173964, 0.937948, 0.980948, -0.11282, 0.161429, 0.959732, 0.982234, -0.104941, 0.148557, 0.980118, 0.982767, -0.0962905, 0.135508, 0.999463, 0.983544, -0.0873625, 0.122338, 1.01756, 0.984965, -0.0783447, 0.108669, 1.03492, 0.986233, -0.0684798, 0.0949911, 1.05087, 0.987796, -0.0590867, 0.0811386, 1.0656, 0.989885, -0.0489145, 0.0673099, 1.0794, 0.991821, -0.0391, 0.0535665, 1.09174, 0.99448, -0.029087, 0.0397529, 1.10341, 0.996769, -0.019114, 0.0261463, 1.11383, 0.998641, -947007e-8, 0.0128731, 1.1237, 0.999978, 446316e-9, -169093e-9, 1.13253, 0.888362, -627064e-11, 0.312578, 178215e-10, 0.889988, -157791e-9, 0.313148, 448451e-9, 0.889825, -631076e-9, 0.313092, 179356e-8, 0.88984, -141994e-8, 0.313097, 403554e-8, 0.889828, -25243e-7, 0.313092, 717429e-8, 0.889831, -394421e-8, 0.313093, 0.0112099, 0.889831, -567962e-8, 0.313093, 0.0161425, 0.889844, -773051e-8, 0.313096, 0.0219724, 0.889858, -0.0100968, 0.3131, 0.0286999, 0.889882, -0.0127786, 0.313106, 0.0363256, 0.889918, -0.0157757, 0.313116, 0.0448509, 0.889967, -0.0190878, 0.313129, 0.0542758, 0.89003, -0.022715, 0.313145, 0.0646032, 0.890108, -0.0266566, 0.313165, 0.0758339, 0.890218, -0.0309131, 0.313193, 0.0879729, 0.890351, -0.0354819, 0.313226, 0.101019, 0.89051, -0.0403613, 0.313263, 0.114979, 0.890672, -0.0455385, 0.313294, 0.129848, 0.890882, -0.0509444, 0.313333, 0.145616, 0.891189, -0.0559657, 0.313324, 0.162122, 0.891457, -0.0613123, 0.313281, 0.179524, 0.891856, -0.0671488, 0.313281, 0.197855, 0.892312, -0.0732732, 0.313268, 0.216991, 0.892819, -0.0797865, 0.313263, 0.236924, 0.893369, -0.0865269, 0.313247, 0.257433, 0.894045, -0.0931592, 0.313205, 0.278215, 0.894884, -0.100532, 0.313276, 0.299467, 0.895832, -0.107716, 0.313205, 0.322276, 0.897043, -0.114099, 0.312873, 0.34642, 0.898515, -0.119941, 0.312331, 0.371187, 0.900191, -0.126044, 0.311731, 0.396656, 0.90188, -0.131808, 0.310859, 0.422488, 0.904359, -0.137289, 0.309857, 0.448744, 0.906923, -0.142991, 0.308714, 0.475239, 0.910634, -0.148253, 0.307465, 0.501983, 0.914502, -0.153332, 0.305774, 0.529254, 0.919046, -0.156646, 0.303156, 0.557709, 0.923194, -0.159612, 0.299928, 0.586267, 0.928858, -0.162027, 0.296245, 0.614925, 0.934464, -0.164203, 0.291832, 0.643187, 0.939824, -0.165602, 0.286565, 0.671601, 0.944582, -0.165383, 0.280073, 0.700213, 0.949257, -0.164439, 0.272891, 0.728432, 0.954389, -0.162953, 0.264771, 0.756082, 0.958595, -0.161007, 0.255927, 0.78369, 0.962138, -0.157243, 0.245769, 0.810769, 0.966979, -0.152872, 0.235127, 0.836999, 0.969566, -0.148209, 0.22347, 0.862684, 0.972372, -0.142211, 0.211147, 0.887847, 0.975916, -0.135458, 0.198606, 0.911843, 0.978026, -0.128398, 0.185498, 0.934795, 0.979686, -0.120313, 0.17171, 0.956787, 0.980748, -0.11166, 0.158159, 0.978046, 0.981622, -0.103035, 0.144399, 0.997693, 0.982356, -0.0930328, 0.13001, 1.01642, 0.983308, -0.0834627, 0.115778, 1.03366, 0.985037, -0.0732249, 0.101327, 1.05014, 0.986493, -0.0628145, 0.086554, 1.06507, 0.988484, -0.0526556, 0.0720413, 1.07907, 0.991051, -0.0415744, 0.0571151, 1.09189, 0.993523, -0.0314275, 0.0426643, 1.10369, 0.99628, -0.0203603, 0.0279325, 1.11423, 0.998344, -0.0102446, 0.0138182, 1.12421, 0.999997, 42612e-8, -193628e-9, 1.1333, 0.871555, -660007e-11, 0.329176, 174749e-10, 0.875255, -166579e-9, 0.330571, 441051e-9, 0.875644, -666394e-9, 0.330718, 176441e-8, 0.875159, -149903e-8, 0.330536, 396899e-8, 0.87516, -266493e-8, 0.330536, 7056e-6, 0.875158, -416393e-8, 0.330535, 0.0110251, 0.87516, -599598e-8, 0.330535, 0.0158764, 0.875163, -816108e-8, 0.330536, 0.0216101, 0.875174, -0.0106591, 0.330538, 0.0282266, 0.875199, -0.0134899, 0.330545, 0.0357266, 0.875257, -0.0166538, 0.330563, 0.0441117, 0.875304, -0.0201501, 0.330575, 0.0533821, 0.875373, -0.0239785, 0.330595, 0.0635395, 0.875464, -0.0281389, 0.330619, 0.0745872, 0.875565, -0.0326301, 0.330645, 0.0865255, 0.875691, -0.0374516, 0.330676, 0.0993599, 0.875897, -0.0425993, 0.330733, 0.113093, 0.876091, -0.0480576, 0.330776, 0.127722, 0.876353, -0.0537216, 0.330826, 0.143227, 0.876649, -0.0589807, 0.330809, 0.159462, 0.877034, -0.0647865, 0.330819, 0.176642, 0.877443, -0.0709789, 0.330817, 0.194702, 0.877956, -0.0774782, 0.330832, 0.213577, 0.878499, -0.0843175, 0.330822, 0.233246, 0.879144, -0.0912714, 0.330804, 0.253512, 0.879982, -0.0980824, 0.330766, 0.274137, 0.88097, -0.105823, 0.330864, 0.295209, 0.882051, -0.113671, 0.330896, 0.317226, 0.883397, -0.120303, 0.330545, 0.341068, 0.884987, -0.12667, 0.330068, 0.365613, 0.886789, -0.133118, 0.329418, 0.390807, 0.889311, -0.139024, 0.328683, 0.416494, 0.891995, -0.144971, 0.327729, 0.442618, 0.895106, -0.150747, 0.326521, 0.469131, 0.899527, -0.156283, 0.325229, 0.495921, 0.90504, -0.161707, 0.32378, 0.523162, 0.909875, -0.165661, 0.32122, 0.55092, 0.91561, -0.168755, 0.317942, 0.579928, 0.921225, -0.171193, 0.313983, 0.608539, 0.927308, -0.17319, 0.309636, 0.636854, 0.933077, -0.174819, 0.304262, 0.66523, 0.938766, -0.175002, 0.297563, 0.693609, 0.943667, -0.173946, 0.289613, 0.722157, 0.949033, -0.172221, 0.281227, 0.750021, 0.953765, -0.169869, 0.271545, 0.777466, 0.95804, -0.166578, 0.261034, 0.804853, 0.962302, -0.161761, 0.249434, 0.831569, 0.966544, -0.156636, 0.237484, 0.857779, 0.969372, -0.150784, 0.224395, 0.883051, 0.972486, -0.143672, 0.210786, 0.907864, 0.975853, -0.135772, 0.196556, 0.931223, 0.977975, -0.127942, 0.182307, 0.954061, 0.979122, -0.118347, 0.167607, 0.97531, 0.980719, -0.109112, 0.152739, 0.995666, 0.981223, -0.0991789, 0.137932, 1.01475, 0.98216, -0.0883553, 0.122692, 1.03253, 0.983379, -0.0780825, 0.107493, 1.04917, 0.985434, -0.0665646, 0.0917791, 1.06464, 0.987332, -0.0557714, 0.0764949, 1.07896, 0.990004, -0.0442805, 0.060721, 1.09199, 0.992975, -0.0331676, 0.0452284, 1.10393, 0.995811, -0.0219547, 0.0297934, 1.11476, 0.9982, -0.0107613, 0.0146415, 1.12484, 1.00002, 248678e-9, -14555e-8, 1.13413, 0.859519, -693595e-11, 0.347264, 171673e-10, 0.859843, -17503e-8, 0.347394, 433219e-9, 0.859656, -700076e-9, 0.347319, 173277e-8, 0.859671, -157517e-8, 0.347325, 389875e-8, 0.859669, -280028e-8, 0.347324, 693112e-8, 0.85967, -43754e-7, 0.347324, 0.01083, 0.859665, -630049e-8, 0.347321, 0.0155954, 0.859685, -85755e-7, 0.347328, 0.0212278, 0.859694, -0.0112003, 0.347329, 0.0277273, 0.859718, -0.0141747, 0.347336, 0.0350946, 0.85976, -0.0174988, 0.347348, 0.0433314, 0.85982, -0.0211722, 0.347366, 0.0524384, 0.859892, -0.0251941, 0.347387, 0.0624168, 0.860006, -0.0295649, 0.347422, 0.0732708, 0.860122, -0.0342825, 0.347453, 0.0849999, 0.860282, -0.0393462, 0.347499, 0.0976102, 0.860482, -0.0447513, 0.347554, 0.111104, 0.860719, -0.0504775, 0.347614, 0.125479, 0.860998, -0.0563577, 0.347666, 0.140703, 0.861322, -0.0619473, 0.347662, 0.156681, 0.861724, -0.0681277, 0.347684, 0.173597, 0.862198, -0.0746567, 0.347709, 0.191371, 0.862733, -0.0815234, 0.347727, 0.209976, 0.863371, -0.0886643, 0.347744, 0.229351, 0.86414, -0.0957908, 0.347734, 0.24934, 0.865138, -0.102912, 0.34772, 0.269797, 0.866182, -0.110924, 0.3478, 0.290654, 0.867436, -0.119223, 0.347911, 0.312074, 0.869087, -0.126197, 0.347649, 0.335438, 0.870859, -0.133145, 0.347222, 0.359732, 0.872997, -0.139869, 0.346645, 0.38467, 0.875939, -0.146089, 0.345935, 0.41019, 0.879012, -0.152334, 0.345012, 0.436218, 0.883353, -0.15821, 0.343924, 0.462641, 0.888362, -0.164097, 0.342636, 0.489449, 0.895026, -0.169528, 0.341351, 0.516629, 0.900753, -0.174408, 0.339115, 0.544109, 0.906814, -0.17751, 0.335809, 0.572857, 0.912855, -0.180101, 0.331597, 0.601554, 0.919438, -0.182116, 0.32698, 0.630198, 0.925962, -0.183494, 0.321449, 0.658404, 0.931734, -0.184159, 0.314595, 0.686625, 0.93762, -0.18304, 0.306462, 0.71531, 0.943858, -0.181323, 0.297514, 0.744272, 0.948662, -0.178683, 0.287447, 0.771462, 0.953299, -0.175379, 0.276166, 0.798593, 0.957346, -0.170395, 0.263758, 0.8256, 0.962565, -0.165042, 0.251019, 0.852575, 0.966075, -0.158655, 0.237011, 0.878316, 0.969048, -0.151707, 0.222518, 0.90329, 0.972423, -0.143271, 0.207848, 0.927745, 0.975833, -0.134824, 0.192463, 0.950859, 0.977629, -0.125444, 0.1768, 0.972947, 0.978995, -0.114949, 0.161033, 0.993263, 0.980533, -0.104936, 0.145523, 1.01337, 0.980745, -0.0935577, 0.129799, 1.03128, 0.981814, -0.0822956, 0.113486, 1.04825, 0.983943, -0.0710082, 0.0972925, 1.06405, 0.986141, -0.0587931, 0.0808138, 1.0785, 0.988878, -0.0472755, 0.0644915, 1.09204, 0.992132, -0.0349128, 0.0478128, 1.10413, 0.9953, -0.0232407, 0.031621, 1.11527, 0.998117, -0.0112713, 0.0154935, 1.12551, 1.00003, 339743e-9, -195763e-9, 1.13504, 0.845441, -729126e-11, 0.364305, 169208e-10, 0.843588, -183164e-9, 0.363506, 425067e-9, 0.843412, -73253e-8, 0.36343, 169999e-8, 0.843401, -164818e-8, 0.363426, 382495e-8, 0.843399, -293008e-8, 0.363425, 679993e-8, 0.843401, -457822e-8, 0.363425, 0.010625, 0.843394, -659249e-8, 0.363421, 0.0153002, 0.843398, -897282e-8, 0.363421, 0.0208258, 0.843415, -0.0117191, 0.363426, 0.0272024, 0.843438, -0.0148312, 0.363432, 0.0344305, 0.843483, -0.018309, 0.363447, 0.0425116, 0.84356, -0.0221521, 0.363472, 0.0514471, 0.843646, -0.0263597, 0.363499, 0.061238, 0.843743, -0.0309315, 0.363527, 0.0718873, 0.84388, -0.0358658, 0.363569, 0.0833969, 0.844079, -0.0411624, 0.363631, 0.0957742, 0.844279, -0.0468128, 0.363688, 0.109015, 0.844549, -0.0527923, 0.363761, 0.123124, 0.844858, -0.0588204, 0.363817, 0.138044, 0.84522, -0.0647573, 0.36383, 0.153755, 0.845669, -0.0713181, 0.363879, 0.170394, 0.846155, -0.0781697, 0.363908, 0.187861, 0.846789, -0.0853913, 0.363969, 0.206176, 0.847502, -0.0928086, 0.363999, 0.225244, 0.8484, -0.10005, 0.363997, 0.244926, 0.849461, -0.107615, 0.364008, 0.265188, 0.850562, -0.115814, 0.364055, 0.28587, 0.851962, -0.124334, 0.364179, 0.306926, 0.854326, -0.131995, 0.364233, 0.329605, 0.856295, -0.139338, 0.363856, 0.35359, 0.858857, -0.146346, 0.363347, 0.37831, 0.862428, -0.152994, 0.362807, 0.403722, 0.866203, -0.159463, 0.361963, 0.429537, 0.871629, -0.165623, 0.36112, 0.456, 0.877365, -0.171649, 0.359917, 0.482773, 0.883744, -0.177151, 0.35848, 0.509705, 0.890693, -0.182381, 0.356523, 0.537215, 0.897278, -0.186076, 0.3533, 0.565493, 0.903958, -0.188602, 0.349095, 0.594293, 0.910908, -0.190755, 0.344215, 0.623165, 0.918117, -0.192063, 0.338606, 0.651573, 0.924644, -0.192758, 0.331544, 0.679869, 0.931054, -0.192238, 0.323163, 0.708668, 0.937303, -0.190035, 0.313529, 0.737201, 0.943387, -0.187162, 0.303152, 0.764977, 0.948494, -0.183876, 0.29146, 0.792683, 0.952546, -0.178901, 0.277917, 0.819228, 0.958077, -0.173173, 0.264753, 0.846559, 0.962462, -0.16645, 0.25002, 0.872962, 0.966569, -0.159452, 0.234873, 0.898729, 0.969108, -0.15074, 0.218752, 0.923126, 0.973072, -0.141523, 0.202673, 0.947278, 0.975452, -0.132075, 0.186326, 0.969938, 0.977784, -0.121257, 0.169396, 0.991325, 0.97899, -0.110182, 0.153044, 1.01123, 0.979777, -0.0989634, 0.136485, 1.0299, 0.980865, -0.0865894, 0.119343, 1.04727, 0.982432, -0.0746115, 0.102452, 1.06341, 0.984935, -0.0621822, 0.0852423, 1.07834, 0.987776, -0.0495694, 0.0678546, 1.092, 0.99103, -0.0372386, 0.0506917, 1.1043, 0.99474, -0.0244353, 0.0333316, 1.11576, 0.997768, -0.0121448, 0.0164348, 1.12617, 1.00003, 31774e-8, -169504e-9, 1.13598, 0.825551, -756799e-11, 0.378425, 165099e-10, 0.82664, -190922e-9, 0.378923, 416504e-9, 0.826323, -763495e-9, 0.378779, 16656e-7, 0.826359, -171789e-8, 0.378795, 374768e-8, 0.82636, -305402e-8, 0.378795, 666259e-8, 0.826368, -477185e-8, 0.378798, 0.0104104, 0.826364, -687131e-8, 0.378795, 0.0149912, 0.826368, -935232e-8, 0.378795, 0.0204054, 0.826376, -0.0122146, 0.378797, 0.0266532, 0.826399, -0.0154581, 0.378803, 0.0337355, 0.82646, -0.0190825, 0.378824, 0.0416537, 0.826525, -0.0230873, 0.378846, 0.0504091, 0.826614, -0.0274719, 0.378876, 0.0600032, 0.82674, -0.0322355, 0.378917, 0.0704393, 0.826888, -0.0373766, 0.378964, 0.0817195, 0.827078, -0.0428936, 0.379024, 0.0938492, 0.827318, -0.0487778, 0.379099, 0.106828, 0.82764, -0.0549935, 0.379199, 0.120659, 0.827926, -0.0611058, 0.379227, 0.13526, 0.828325, -0.0675054, 0.379275, 0.150713, 0.828801, -0.0743455, 0.379332, 0.167034, 0.8294, -0.0815523, 0.379415, 0.184209, 0.830094, -0.0890779, 0.379495, 0.202203, 0.8309, -0.096736, 0.379555, 0.220945, 0.831943, -0.104135, 0.379577, 0.240306, 0.833037, -0.112106, 0.379604, 0.260317, 0.834278, -0.120554, 0.379668, 0.2808, 0.836192, -0.129128, 0.3799, 0.301654, 0.838671, -0.137541, 0.380109, 0.323502, 0.840939, -0.14523, 0.379809, 0.347176, 0.844575, -0.15248, 0.379593, 0.371706, 0.848379, -0.159607, 0.37909, 0.39688, 0.853616, -0.166267, 0.378617, 0.422702, 0.858921, -0.172698, 0.377746, 0.448919, 0.865324, -0.178823, 0.376749, 0.475661, 0.872207, -0.184542, 0.375363, 0.502599, 0.880018, -0.189836, 0.373657, 0.529914, 0.88694, -0.194294, 0.370673, 0.557683, 0.894779, -0.197022, 0.36662, 0.586848, 0.902242, -0.199108, 0.36138, 0.615831, 0.909914, -0.200398, 0.355434, 0.644478, 0.917088, -0.20094, 0.348173, 0.672905, 0.923888, -0.200671, 0.339482, 0.701327, 0.930495, -0.198773, 0.32956, 0.730101, 0.937247, -0.195394, 0.318363, 0.758383, 0.943108, -0.191956, 0.306323, 0.786539, 0.948296, -0.187227, 0.292576, 0.813637, 0.953472, -0.181165, 0.278234, 0.840793, 0.958485, -0.174119, 0.263054, 0.867712, 0.962714, -0.166564, 0.246756, 0.893635, 0.966185, -0.158181, 0.229945, 0.919028, 0.970146, -0.148275, 0.212633, 0.943413, 0.973491, -0.138157, 0.195229, 0.966627, 0.975741, -0.127574, 0.178048, 0.988817, 0.977238, -0.11554, 0.160312, 1.00924, 0.978411, -0.10364, 0.142857, 1.02845, 0.979811, -0.0913122, 0.125317, 1.04648, 0.98116, -0.0782558, 0.107627, 1.06284, 0.983543, -0.0655957, 0.0895862, 1.07798, 0.986789, -0.0520411, 0.0713756, 1.092, 0.990292, -0.0389727, 0.053228, 1.10484, 0.994187, -0.025808, 0.0351945, 1.11642, 0.997499, -0.0126071, 0.0173198, 1.12703, 0.999999, 275604e-9, -148602e-9, 1.13674, 0.81075, -78735e-10, 0.394456, 161829e-10, 0.808692, -198293e-9, 0.393453, 407564e-9, 0.80846, -792877e-9, 0.39334, 162965e-8, 0.808595, -178416e-8, 0.393407, 366711e-8, 0.808597, -317182e-8, 0.393408, 651934e-8, 0.808598, -495589e-8, 0.393408, 0.0101866, 0.808591, -713627e-8, 0.393403, 0.0146689, 0.808592, -971285e-8, 0.393402, 0.0199667, 0.80861, -0.0126855, 0.393407, 0.0260803, 0.808633, -0.0160538, 0.393413, 0.0330107, 0.80868, -0.0198175, 0.393429, 0.0407589, 0.808748, -0.0239758, 0.393453, 0.0493264, 0.808854, -0.0285286, 0.39349, 0.0587161, 0.808992, -0.0334748, 0.39354, 0.0689304, 0.809141, -0.0388116, 0.393588, 0.0799707, 0.809352, -0.0445375, 0.39366, 0.0918432, 0.809608, -0.0506427, 0.393742, 0.104549, 0.809915, -0.0570708, 0.393834, 0.118085, 0.810253, -0.0633526, 0.393885, 0.132377, 0.810687, -0.0700966, 0.393953, 0.147537, 0.811233, -0.0772274, 0.394047, 0.163543, 0.811865, -0.0847629, 0.394148, 0.180394, 0.812648, -0.0925663, 0.394265, 0.198051, 0.813583, -0.100416, 0.394363, 0.216443, 0.814683, -0.108119, 0.394402, 0.235502, 0.815948, -0.11644, 0.394489, 0.255242, 0.817278, -0.125036, 0.394542, 0.275441, 0.819605, -0.133655, 0.39486, 0.296094, 0.822256, -0.142682, 0.395248, 0.317309, 0.825349, -0.150756, 0.395241, 0.340516, 0.829605, -0.158392, 0.395285, 0.364819, 0.83391, -0.165801, 0.394922, 0.389736, 0.839808, -0.172677, 0.394691, 0.415409, 0.845708, -0.179448, 0.394006, 0.441546, 0.853025, -0.185746, 0.393279, 0.46832, 0.859666, -0.191684, 0.391655, 0.495302, 0.86789, -0.197146, 0.390068, 0.52262, 0.875845, -0.201904, 0.38727, 0.550336, 0.882634, -0.205023, 0.382688, 0.578825, 0.891076, -0.207098, 0.377543, 0.608103, 0.900589, -0.208474, 0.371752, 0.63723, 0.90791, -0.209068, 0.364016, 0.665769, 0.915971, -0.208655, 0.355593, 0.694428, 0.923455, -0.20729, 0.345439, 0.723224, 0.931514, -0.203821, 0.334099, 0.751925, 0.937885, -0.19986, 0.321069, 0.780249, 0.943136, -0.194993, 0.306571, 0.8077, 0.948818, -0.189132, 0.291556, 0.83497, 0.954433, -0.181617, 0.275745, 0.86188, 0.959078, -0.173595, 0.258695, 0.888562, 0.962705, -0.164855, 0.240825, 0.914008, 0.966753, -0.155129, 0.22268, 0.939145, 0.970704, -0.144241, 0.204542, 0.963393, 0.973367, -0.133188, 0.185927, 0.985983, 0.975984, -0.121146, 0.167743, 1.00704, 0.976994, -0.108366, 0.149218, 1.02715, 0.978485, -0.0956746, 0.13131, 1.0455, 0.980074, -0.0820733, 0.112513, 1.06221, 0.98225, -0.0684061, 0.0938323, 1.07782, 0.98553, -0.0549503, 0.0749508, 1.09199, 0.989529, -0.0407857, 0.055848, 1.10508, 0.993536, -0.0271978, 0.0368581, 1.11684, 0.997247, -0.0132716, 0.0181845, 1.12789, 1, 431817e-9, -198809e-9, 1.13792, 0.785886, -812608e-11, 0.405036, 157669e-10, 0.790388, -205278e-9, 0.407355, 398297e-9, 0.790145, -820824e-9, 0.407231, 159263e-8, 0.790135, -184681e-8, 0.407226, 358336e-8, 0.790119, -328316e-8, 0.407218, 637039e-8, 0.790126, -512988e-8, 0.40722, 99539e-7, 0.79013, -738684e-8, 0.407221, 0.0143339, 0.790135, -0.0100538, 0.407221, 0.0195107, 0.790134, -0.0131306, 0.407217, 0.0254848, 0.79016, -0.0166169, 0.407224, 0.0322572, 0.790197, -0.020512, 0.407236, 0.0398284, 0.790273, -0.0248157, 0.407263, 0.0482014, 0.790381, -0.029527, 0.407304, 0.0573777, 0.790521, -0.0346446, 0.407355, 0.0673602, 0.790704, -0.0401665, 0.40742, 0.0781522, 0.790925, -0.0460896, 0.407499, 0.0897582, 0.791195, -0.0524017, 0.407589, 0.10218, 0.791522, -0.0590121, 0.407691, 0.11541, 0.791878, -0.0654876, 0.407748, 0.12939, 0.792361, -0.0725207, 0.407849, 0.144237, 0.792942, -0.0799844, 0.407963, 0.159924, 0.79362, -0.0877896, 0.408087, 0.176425, 0.794529, -0.0958451, 0.408259, 0.193733, 0.795521, -0.103827, 0.408362, 0.211756, 0.796778, -0.111937, 0.408482, 0.230524, 0.798027, -0.120521, 0.408547, 0.249967, 0.799813, -0.129242, 0.408721, 0.269926, 0.802387, -0.138048, 0.409148, 0.290338, 0.805279, -0.147301, 0.409641, 0.311193, 0.809251, -0.155895, 0.410154, 0.333611, 0.813733, -0.163942, 0.410297, 0.357615, 0.819081, -0.171666, 0.410373, 0.382339, 0.825427, -0.178905, 0.410348, 0.407828, 0.83172, -0.185812, 0.409486, 0.434034, 0.83877, -0.192318, 0.408776, 0.460493, 0.845817, -0.198249, 0.407176, 0.487346, 0.854664, -0.204034, 0.405719, 0.514832, 0.863495, -0.208908, 0.403282, 0.542401, 0.871883, -0.212765, 0.399293, 0.570683, 0.88065, -0.214911, 0.393803, 0.599947, 0.89004, -0.216214, 0.387536, 0.62932, 0.898476, -0.216745, 0.379846, 0.658319, 0.906738, -0.216387, 0.370625, 0.687138, 0.914844, -0.215053, 0.360139, 0.71601, 0.923877, -0.212007, 0.348849, 0.745124, 0.931925, -0.207481, 0.335639, 0.773366, 0.938054, -0.202418, 0.320798, 0.801636, 0.943895, -0.196507, 0.304772, 0.829055, 0.949468, -0.189009, 0.288033, 0.856097, 0.955152, -0.180539, 0.270532, 0.88301, 0.959403, -0.171437, 0.251639, 0.909296, 0.963309, -0.161661, 0.232563, 0.934868, 0.967399, -0.150425, 0.213231, 0.959662, 0.972009, -0.138659, 0.194247, 0.98302, 0.97433, -0.126595, 0.174718, 1.00517, 0.975823, -0.113205, 0.155518, 1.02566, 0.976371, -0.0996096, 0.136709, 1.04418, 0.978705, -0.0860754, 0.117571, 1.06146, 0.981477, -0.0714438, 0.0980046, 1.07777, 0.984263, -0.0572304, 0.0782181, 1.09214, 0.988423, -0.0428875, 0.0584052, 1.10553, 0.993, -0.0282442, 0.038522, 1.11758, 0.99704, -0.0140183, 0.0190148, 1.12864, 0.999913, 369494e-9, -145203e-9, 1.13901, 0.777662, -84153e-10, 0.423844, 154403e-10, 0.770458, -211714e-9, 0.419915, 38845e-8, 0.770716, -846888e-9, 0.420055, 155386e-8, 0.770982, -190567e-8, 0.420202, 349653e-8, 0.770981, -338782e-8, 0.420201, 621606e-8, 0.77098, -529338e-8, 0.4202, 971274e-8, 0.770983, -762223e-8, 0.4202, 0.0139867, 0.770985, -0.0103741, 0.420198, 0.0190381, 0.770996, -0.0135489, 0.4202, 0.0248677, 0.771029, -0.0171461, 0.420212, 0.0314764, 0.771052, -0.0211647, 0.420215, 0.0388648, 0.771131, -0.0256048, 0.420245, 0.047036, 0.771235, -0.0304647, 0.420284, 0.0559911, 0.771383, -0.0357436, 0.420341, 0.0657346, 0.771591, -0.0414392, 0.420423, 0.0762694, 0.771819, -0.0475462, 0.420506, 0.0875984, 0.772123, -0.0540506, 0.420617, 0.099727, 0.772464, -0.060797, 0.42072, 0.112637, 0.772855, -0.0675393, 0.420799, 0.126313, 0.773317, -0.0748323, 0.420893, 0.140824, 0.773981, -0.0825681, 0.421058, 0.15617, 0.774746, -0.0906307, 0.421226, 0.172322, 0.77566, -0.0988982, 0.421397, 0.189253, 0.776837, -0.106994, 0.421569, 0.206912, 0.778097, -0.115528, 0.421704, 0.225359, 0.779588, -0.124317, 0.421849, 0.24447, 0.781574, -0.133139, 0.422097, 0.264156, 0.784451, -0.142179, 0.422615, 0.284318, 0.787682, -0.15165, 0.423269, 0.304902, 0.792433, -0.160771, 0.424396, 0.3265, 0.797359, -0.169166, 0.424772, 0.35014, 0.803986, -0.177149, 0.425475, 0.374768, 0.809504, -0.184745, 0.424996, 0.399928, 0.815885, -0.19173, 0.424247, 0.425796, 0.823513, -0.198525, 0.423515, 0.452287, 0.832549, -0.204709, 0.422787, 0.479321, 0.841653, -0.210447, 0.421187, 0.506718, 0.850401, -0.215501, 0.418519, 0.53432, 0.859854, -0.219752, 0.414715, 0.56242, 0.869364, -0.222305, 0.409462, 0.591558, 0.878837, -0.223744, 0.402926, 0.621074, 0.888636, -0.224065, 0.395043, 0.650538, 0.898132, -0.223742, 0.38564, 0.679538, 0.907181, -0.222308, 0.375378, 0.708674, 0.915621, -0.219837, 0.363212, 0.737714, 0.9239, -0.215233, 0.349313, 0.767014, 0.931644, -0.209592, 0.334162, 0.795133, 0.938887, -0.203644, 0.317943, 0.823228, 0.945282, -0.196349, 0.300581, 0.850822, 0.950758, -0.18742, 0.282195, 0.877594, 0.956146, -0.177879, 0.262481, 0.904564, 0.960355, -0.167643, 0.242487, 0.930741, 0.965256, -0.156671, 0.222668, 0.955868, 0.968029, -0.144123, 0.201907, 0.979869, 0.97251, -0.131305, 0.18202, 1.00291, 0.974925, -0.118335, 0.161909, 1.02392, 0.975402, -0.103714, 0.142129, 1.0433, 0.976987, -0.089415, 0.122447, 1.06089, 0.979677, -0.0748858, 0.102248, 1.07713, 0.983184, -0.0596086, 0.0814851, 1.09218, 0.987466, -0.0447671, 0.0609484, 1.10585, 0.992348, -0.0295217, 0.0401835, 1.11829, 0.996674, -0.0143917, 0.0198163, 1.12966, 1.00003, 321364e-9, -149983e-9, 1.1402, 0.757901, -869074e-11, 0.436176, 151011e-10, 0.751195, -217848e-9, 0.432317, 378533e-9, 0.751178, -871373e-9, 0.432307, 15141e-7, 0.751195, -196061e-8, 0.432317, 34068e-7, 0.751198, -348552e-8, 0.432318, 605659e-8, 0.751195, -544599e-8, 0.432315, 946353e-8, 0.751207, -784203e-8, 0.43232, 0.013628, 0.751213, -0.0106732, 0.43232, 0.0185499, 0.751221, -0.0139393, 0.432319, 0.0242302, 0.751244, -0.0176398, 0.432325, 0.0306694, 0.7513, -0.0217743, 0.432348, 0.0378698, 0.751358, -0.0263412, 0.432367, 0.0458321, 0.751458, -0.0313396, 0.432404, 0.0545587, 0.751608, -0.0367682, 0.432464, 0.0640543, 0.7518, -0.0426246, 0.43254, 0.0743222, 0.752065, -0.0489031, 0.432645, 0.0853668, 0.752376, -0.0555828, 0.432762, 0.0971911, 0.752715, -0.0623861, 0.432859, 0.109768, 0.753137, -0.069415, 0.432958, 0.123126, 0.753676, -0.0770039, 0.433099, 0.137308, 0.754345, -0.084971, 0.433272, 0.15229, 0.755235, -0.0932681, 0.433504, 0.168075, 0.756186, -0.10171, 0.433693, 0.184625, 0.757363, -0.110019, 0.433857, 0.201897, 0.75884, -0.11887, 0.434102, 0.220014, 0.760467, -0.127881, 0.434306, 0.238778, 0.762969, -0.136766, 0.434751, 0.258172, 0.765823, -0.14612, 0.43529, 0.278062, 0.769676, -0.15566, 0.436236, 0.298437, 0.774909, -0.165177, 0.437754, 0.319532, 0.77994, -0.17402, 0.438343, 0.342505, 0.785757, -0.182201, 0.438609, 0.366693, 0.792487, -0.190104, 0.438762, 0.391668, 0.80038, -0.197438, 0.438795, 0.417494, 0.808494, -0.204365, 0.438226, 0.443933, 0.817695, -0.210714, 0.437283, 0.470929, 0.828111, -0.216651, 0.436087, 0.498569, 0.837901, -0.221804, 0.433717, 0.526165, 0.847813, -0.226318, 0.430133, 0.554155, 0.858314, -0.229297, 0.425213, 0.582822, 0.868891, -0.230999, 0.418576, 0.612847, 0.878941, -0.231155, 0.410405, 0.642445, 0.888809, -0.230935, 0.400544, 0.672024, 0.898089, -0.229343, 0.389613, 0.701366, 0.908081, -0.226886, 0.377197, 0.730763, 0.916819, -0.222676, 0.363397, 0.759642, 0.924968, -0.216835, 0.347437, 0.788775, 0.932906, -0.210245, 0.32995, 0.817135, 0.940025, -0.202992, 0.312262, 0.844912, 0.946101, -0.19436, 0.293313, 0.872164, 0.952835, -0.184125, 0.273638, 0.899443, 0.957347, -0.173657, 0.252385, 0.926389, 0.961434, -0.162204, 0.231038, 0.951947, 0.965522, -0.14979, 0.209834, 0.976751, 0.969412, -0.136307, 0.188821, 1.00022, 0.973902, -0.122527, 0.168013, 1.02229, 0.974045, -0.108213, 0.147634, 1.04199, 0.975775, -0.0927397, 0.12705, 1.06019, 0.978383, -0.0778212, 0.106309, 1.07711, 0.98211, -0.0621216, 0.0849279, 1.09245, 0.986517, -0.0463847, 0.0633519, 1.10651, 0.991696, -0.0309353, 0.0419698, 1.11903, 0.996349, -0.0150914, 0.0206272, 1.13073, 1.00003, 442449e-9, -231396e-9, 1.14146, 0.727498, -885074e-11, 0.441528, 145832e-10, 0.730897, -223525e-9, 0.443589, 368298e-9, 0.730796, -893996e-9, 0.443528, 147303e-8, 0.730805, -201149e-8, 0.443533, 331433e-8, 0.730814, -357596e-8, 0.443538, 589222e-8, 0.730815, -558734e-8, 0.443538, 920678e-8, 0.730822, -804544e-8, 0.44354, 0.0132582, 0.730836, -0.0109501, 0.443545, 0.0180468, 0.730848, -0.0143008, 0.443546, 0.0235732, 0.730871, -0.0180969, 0.443552, 0.0298382, 0.730915, -0.022338, 0.443567, 0.0368438, 0.730982, -0.0270225, 0.443591, 0.044591, 0.731076, -0.0321491, 0.443627, 0.0530831, 0.731245, -0.0377166, 0.443699, 0.0623243, 0.73144, -0.0437216, 0.443777, 0.0723181, 0.7317, -0.0501576, 0.443881, 0.0830691, 0.732034, -0.0569942, 0.444014, 0.0945809, 0.732388, -0.0638756, 0.444113, 0.106825, 0.732853, -0.071203, 0.444247, 0.119859, 0.733473, -0.0790076, 0.444442, 0.13369, 0.734195, -0.0871937, 0.444645, 0.148304, 0.735069, -0.095696, 0.444877, 0.163702, 0.736169, -0.10426, 0.445133, 0.179861, 0.73747, -0.112853, 0.44537, 0.196778, 0.738991, -0.12199, 0.445651, 0.214496, 0.740865, -0.131153, 0.445958, 0.232913, 0.743637, -0.140245, 0.446548, 0.251977, 0.746797, -0.149722, 0.447246, 0.271551, 0.751517, -0.159341, 0.448656, 0.291774, 0.756156, -0.169106, 0.449866, 0.312455, 0.761519, -0.178436, 0.450919, 0.334552, 0.768295, -0.186904, 0.451776, 0.358491, 0.776613, -0.195117, 0.452832, 0.383446, 0.783966, -0.202695, 0.45249, 0.408945, 0.793542, -0.20985, 0.452587, 0.435364, 0.803192, -0.216403, 0.451852, 0.462336, 0.813892, -0.22251, 0.450708, 0.48987, 0.824968, -0.227676, 0.4486, 0.517697, 0.835859, -0.232443, 0.445156, 0.545975, 0.846825, -0.235775, 0.440351, 0.574483, 0.858085, -0.237897, 0.433641, 0.604246, 0.868825, -0.238074, 0.425354, 0.634101, 0.879638, -0.237661, 0.415383, 0.664201, 0.889966, -0.236186, 0.404136, 0.693918, 0.899479, -0.233599, 0.390917, 0.723481, 0.908769, -0.229737, 0.376352, 0.75258, 0.917966, -0.223836, 0.360372, 0.781764, 0.926304, -0.217067, 0.342551, 0.811139, 0.934626, -0.209309, 0.324238, 0.839585, 0.941841, -0.20071, 0.304484, 0.867044, 0.94789, -0.190602, 0.283607, 0.894579, 0.954196, -0.179253, 0.262205, 0.921743, 0.958383, -0.167646, 0.239847, 0.948026, 0.963119, -0.155073, 0.218078, 0.973296, 0.966941, -0.141426, 0.195899, 0.998135, 0.970836, -0.126849, 0.174121, 1.02021, 0.973301, -0.112296, 0.153052, 1.04085, 0.97448, -0.0964965, 0.131733, 1.05946, 0.977045, -0.080489, 0.10997, 1.07693, 0.980751, -0.064844, 0.0881657, 1.09254, 0.985475, -0.0481938, 0.0657987, 1.10697, 0.991089, -0.0319185, 0.0435215, 1.12004, 0.996122, -0.0158088, 0.0214779, 1.13173, 1.00001, 372455e-9, -200295e-9, 1.14291, 0.708622, -907597e-11, 0.45304, 141962e-10, 0.711162, -228911e-9, 0.454662, 358052e-9, 0.709812, -914446e-9, 0.453797, 143034e-8, 0.709865, -205819e-8, 0.453834, 321935e-8, 0.709864, -365894e-8, 0.453833, 572331e-8, 0.709855, -571692e-8, 0.453826, 894278e-8, 0.709862, -823201e-8, 0.453828, 0.012878, 0.709875, -0.011204, 0.453832, 0.0175295, 0.709896, -0.0146323, 0.453839, 0.0228978, 0.709925, -0.0185163, 0.453847, 0.0289839, 0.709974, -0.0228551, 0.453866, 0.0357894, 0.710045, -0.0276473, 0.453892, 0.0433161, 0.710133, -0.032891, 0.453924, 0.0515665, 0.710292, -0.0385851, 0.453992, 0.0605458, 0.710485, -0.0447254, 0.45407, 0.0702574, 0.710769, -0.0513051, 0.454192, 0.0807077, 0.711106, -0.0582733, 0.454329, 0.091896, 0.711516, -0.0652866, 0.45446, 0.103814, 0.712071, -0.0728426, 0.454653, 0.116508, 0.712676, -0.0808307, 0.45484, 0.129968, 0.713476, -0.0892216, 0.455096, 0.144206, 0.714377, -0.0979047, 0.455346, 0.159212, 0.715579, -0.106531, 0.455647, 0.174973, 0.716977, -0.115492, 0.455961, 0.191504, 0.71862, -0.124821, 0.456315, 0.208835, 0.72084, -0.134079, 0.4568, 0.226869, 0.723786, -0.143427, 0.457521, 0.245582, 0.727464, -0.153061, 0.458475, 0.264957, 0.732771, -0.162768, 0.460239, 0.284948, 0.736515, -0.172627, 0.460899, 0.30522, 0.743519, -0.182487, 0.463225, 0.326717, 0.750041, -0.191295, 0.464027, 0.350113, 0.758589, -0.199746, 0.465227, 0.374782, 0.767703, -0.207584, 0.465877, 0.400226, 0.777484, -0.214973, 0.465996, 0.426442, 0.788792, -0.221796, 0.466019, 0.453688, 0.800194, -0.228038, 0.465083, 0.481246, 0.811234, -0.233346, 0.462506, 0.509086, 0.822859, -0.238073, 0.459257, 0.537338, 0.835082, -0.241764, 0.454863, 0.566108, 0.846332, -0.244241, 0.448163, 0.595126, 0.858355, -0.244736, 0.439709, 0.625574, 0.87034, -0.244278, 0.429837, 0.65617, 0.881027, -0.24255, 0.418002, 0.686029, 0.891007, -0.239912, 0.404325, 0.716039, 0.900874, -0.236133, 0.389222, 0.745518, 0.911072, -0.230672, 0.373269, 0.775026, 0.920359, -0.22356, 0.355083, 0.804521, 0.928604, -0.215591, 0.335533, 0.834045, 0.937175, -0.206503, 0.315278, 0.861612, 0.942825, -0.196684, 0.293653, 0.889131, 0.949805, -0.185116, 0.271503, 0.916853, 0.955535, -0.172703, 0.248821, 0.943541, 0.959843, -0.159978, 0.225591, 0.970132, 0.964393, -0.146375, 0.202719, 0.994709, 0.968008, -0.131269, 0.179928, 1.0186, 0.971013, -0.11569, 0.158007, 1.03928, 0.973334, -0.1003, 0.13624, 1.05887, 0.975775, -0.0833352, 0.1138, 1.07652, 0.979579, -0.0668981, 0.0913141, 1.09297, 0.984323, -0.0500902, 0.0683051, 1.10734, 0.990351, -0.0332377, 0.0451771, 1.12084, 0.995823, -0.0161491, 0.0221705, 1.13296, 1.0001, 234083e-9, -108712e-9, 1.14441, 0.683895, -924677e-11, 0.46015, 137429e-10, 0.68833, -233383e-9, 0.463134, 346865e-9, 0.688368, -933547e-9, 0.463159, 138748e-8, 0.688367, -210049e-8, 0.463159, 312187e-8, 0.688369, -373415e-8, 0.463159, 555004e-8, 0.688377, -583449e-8, 0.463163, 867216e-8, 0.688386, -840128e-8, 0.463166, 0.0124884, 0.688398, -0.0114343, 0.463169, 0.0169993, 0.688418, -0.0149329, 0.463175, 0.0222054, 0.688453, -0.0188964, 0.463188, 0.028108, 0.688515, -0.0233239, 0.463214, 0.0347085, 0.68857, -0.0282136, 0.463231, 0.0420091, 0.688679, -0.033564, 0.463276, 0.0500132, 0.688854, -0.0393733, 0.463356, 0.0587255, 0.689038, -0.0456354, 0.46343, 0.0681476, 0.689321, -0.0523433, 0.463553, 0.0782897, 0.689662, -0.059412, 0.463693, 0.0891501, 0.690188, -0.0665736, 0.4639, 0.100735, 0.690755, -0.0743106, 0.464107, 0.113074, 0.691405, -0.0824722, 0.464329, 0.126161, 0.692198, -0.0910484, 0.464585, 0.140007, 0.693196, -0.0998778, 0.464893, 0.154612, 0.69454, -0.108651, 0.465285, 0.169984, 0.695921, -0.117855, 0.465596, 0.186106, 0.697749, -0.12734, 0.466056, 0.203034, 0.700375, -0.136714, 0.466771, 0.220703, 0.703395, -0.146386, 0.467579, 0.239062, 0.707904, -0.156096, 0.469067, 0.258188, 0.711673, -0.165904, 0.469851, 0.277759, 0.717489, -0.175812, 0.471815, 0.297935, 0.724051, -0.185931, 0.47389, 0.318916, 0.731965, -0.195238, 0.47587, 0.341591, 0.741151, -0.204021, 0.477523, 0.366062, 0.751416, -0.212113, 0.478881, 0.391396, 0.761848, -0.21979, 0.479226, 0.417599, 0.771886, -0.2267, 0.478495, 0.444401, 0.783998, -0.232991, 0.477622, 0.472084, 0.796523, -0.238645, 0.475833, 0.500193, 0.808851, -0.243396, 0.472568, 0.52865, 0.821191, -0.247226, 0.467857, 0.557362, 0.834261, -0.250102, 0.461871, 0.586768, 0.846762, -0.251056, 0.453543, 0.617085, 0.859867, -0.250604, 0.443494, 0.647659, 0.871948, -0.248783, 0.431711, 0.678119, 0.882967, -0.245855, 0.417911, 0.708399, 0.892826, -0.242168, 0.401993, 0.738256, 0.90332, -0.237062, 0.385371, 0.767999, 0.913633, -0.22997, 0.366837, 0.798191, 0.922774, -0.221687, 0.346372, 0.827756, 0.931371, -0.212345, 0.325682, 0.856425, 0.938929, -0.20206, 0.303665, 0.884299, 0.944821, -0.190981, 0.280786, 0.912023, 0.951792, -0.178065, 0.2573, 0.939669, 0.957712, -0.164634, 0.233448, 0.96655, 0.961912, -0.150863, 0.209504, 0.992366, 0.966382, -0.13577, 0.18597, 1.01633, 0.969588, -0.119593, 0.162905, 1.03843, 0.971777, -0.103203, 0.14053, 1.05841, 0.97433, -0.0865888, 0.117909, 1.07632, 0.978686, -0.0690829, 0.0944101, 1.09326, 0.983281, -0.0516568, 0.0705671, 1.10796, 0.989562, -0.034558, 0.0468592, 1.12182, 0.995465, -0.0167808, 0.0229846, 1.1342, 0.999991, 373016e-9, -235606e-9, 1.1459, 0.662251, -939016e-11, 0.468575, 132714e-10, 0.666634, -237624e-9, 0.471675, 335842e-9, 0.666411, -950385e-9, 0.471516, 134321e-8, 0.666399, -213833e-8, 0.471509, 302221e-8, 0.666386, -38014e-7, 0.471499, 537283e-8, 0.666405, -593958e-8, 0.471511, 839533e-8, 0.666406, -855253e-8, 0.471508, 0.0120898, 0.666428, -0.0116401, 0.471519, 0.0164569, 0.666444, -0.0152015, 0.471522, 0.0214971, 0.66649, -0.0192362, 0.471543, 0.027212, 0.666537, -0.0237428, 0.471558, 0.033603, 0.666617, -0.0287198, 0.471591, 0.0406728, 0.666718, -0.0341647, 0.471631, 0.0484238, 0.666889, -0.0400759, 0.47171, 0.0568621, 0.667104, -0.0464479, 0.471805, 0.0659915, 0.667374, -0.0532677, 0.471923, 0.0758178, 0.667772, -0.0603805, 0.472098, 0.0863425, 0.668371, -0.0677392, 0.472363, 0.0975917, 0.668971, -0.0756028, 0.472596, 0.109567, 0.669696, -0.0839293, 0.472869, 0.122272, 0.670481, -0.0926683, 0.473126, 0.135718, 0.6715, -0.1016, 0.473442, 0.149914, 0.672911, -0.110566, 0.47389, 0.164882, 0.674512, -0.119984, 0.474354, 0.180602, 0.67651, -0.129574, 0.474922, 0.19711, 0.679292, -0.139106, 0.475764, 0.214371, 0.682798, -0.148993, 0.476886, 0.232405, 0.686955, -0.158737, 0.478179, 0.251153, 0.691406, -0.168754, 0.479432, 0.270436, 0.697438, -0.178703, 0.481481, 0.290374, 0.704761, -0.188955, 0.484143, 0.311044, 0.713599, -0.198814, 0.487007, 0.333003, 0.723194, -0.207869, 0.488962, 0.357144, 0.732601, -0.216189, 0.489815, 0.382169, 0.744193, -0.22398, 0.490888, 0.408227, 0.754907, -0.231156, 0.490355, 0.434928, 0.767403, -0.23747, 0.489548, 0.462599, 0.78107, -0.243503, 0.488274, 0.490908, 0.793893, -0.248114, 0.484843, 0.519421, 0.807296, -0.25222, 0.4803, 0.548561, 0.820529, -0.255265, 0.474097, 0.577772, 0.833716, -0.256741, 0.466041, 0.607782, 0.848403, -0.25637, 0.456547, 0.638807, 0.860755, -0.254804, 0.443946, 0.670058, 0.874012, -0.251834, 0.430852, 0.700749, 0.885619, -0.247867, 0.414903, 0.731446, 0.896069, -0.242634, 0.397276, 0.761191, 0.906266, -0.236093, 0.378535, 0.791053, 0.916759, -0.227543, 0.358038, 0.821298, 0.92523, -0.21783, 0.335705, 0.850747, 0.93436, -0.207534, 0.313797, 0.879258, 0.941631, -0.195983, 0.289671, 0.907734, 0.947564, -0.183567, 0.265319, 0.935206, 0.953681, -0.169345, 0.240815, 0.962739, 0.960008, -0.154909, 0.216119, 0.989227, 0.964145, -0.140161, 0.192096, 1.01465, 0.968171, -0.123411, 0.167855, 1.03737, 0.969859, -0.106525, 0.144817, 1.05767, 0.972666, -0.0891023, 0.12149, 1.0761, 0.977055, -0.0718094, 0.0975306, 1.09336, 0.982527, -0.0534213, 0.0730217, 1.10878, 0.989001, -0.0355579, 0.0483366, 1.12285, 0.99512, -0.0176383, 0.023938, 1.13548, 1.00007, 368831e-9, -211581e-9, 1.14744, 0.651047, -960845e-11, 0.484101, 12922e-9, 0.644145, -241347e-9, 0.478968, 324578e-9, 0.64396, -965142e-9, 0.478831, 129798e-8, 0.64396, -217154e-8, 0.47883, 292046e-8, 0.643968, -386049e-8, 0.478835, 519202e-8, 0.643974, -603186e-8, 0.478838, 81128e-7, 0.643977, -86854e-7, 0.478836, 0.011683, 0.643982, -0.0118207, 0.478834, 0.0159031, 0.644024, -0.0154374, 0.478856, 0.0207743, 0.644059, -0.0195343, 0.478868, 0.0262975, 0.644122, -0.0241103, 0.478896, 0.0324747, 0.644207, -0.0291638, 0.478933, 0.039309, 0.64432, -0.0346919, 0.478981, 0.0468029, 0.644481, -0.0406919, 0.479053, 0.0549614, 0.644722, -0.047159, 0.479169, 0.0637909, 0.645013, -0.0540748, 0.479302, 0.0732974, 0.645503, -0.0612001, 0.479541, 0.0834898, 0.646117, -0.0687303, 0.479829, 0.0943873, 0.646707, -0.0767846, 0.480061, 0.105991, 0.647431, -0.0852465, 0.480343, 0.11831, 0.64831, -0.0940719, 0.48066, 0.131348, 0.649486, -0.103056, 0.481083, 0.14514, 0.650864, -0.112261, 0.481528, 0.159676, 0.652604, -0.121852, 0.482102, 0.174979, 0.654825, -0.131505, 0.482813, 0.191079, 0.657876, -0.141189, 0.483876, 0.207927, 0.661339, -0.151239, 0.48499, 0.225586, 0.665463, -0.161091, 0.486279, 0.243947, 0.670542, -0.171235, 0.487968, 0.262957, 0.677361, -0.181347, 0.49053, 0.282781, 0.685672, -0.191679, 0.493862, 0.303311, 0.694551, -0.201781, 0.49699, 0.324607, 0.703753, -0.211164, 0.498884, 0.347916, 0.713703, -0.219675, 0.500086, 0.372628, 0.725911, -0.227836, 0.501554, 0.398694, 0.73862, -0.23533, 0.502193, 0.425529, 0.752118, -0.241786, 0.501811, 0.453209, 0.76579, -0.247865, 0.500185, 0.481381, 0.779568, -0.252696, 0.497159, 0.51011, 0.793991, -0.256802, 0.492765, 0.539322, 0.808182, -0.259942, 0.486827, 0.569078, 0.821698, -0.261703, 0.478386, 0.598818, 0.836009, -0.262006, 0.468772, 0.629762, 0.849824, -0.260333, 0.456352, 0.661366, 0.863888, -0.257398, 0.442533, 0.69295, 0.876585, -0.253264, 0.426573, 0.723608, 0.888665, -0.248026, 0.408964, 0.754378, 0.899537, -0.241487, 0.389677, 0.784761, 0.9094, -0.233463, 0.368516, 0.814688, 0.920166, -0.223397, 0.346624, 0.845009, 0.928899, -0.21255, 0.322717, 0.874431, 0.937156, -0.200869, 0.298698, 0.902922, 0.943861, -0.188387, 0.273491, 0.931356, 0.949557, -0.174341, 0.247866, 0.958854, 0.955862, -0.158994, 0.222496, 0.986098, 0.961721, -0.143664, 0.197522, 1.01229, 0.965976, -0.127412, 0.17302, 1.03571, 0.968652, -0.109798, 0.148954, 1.05699, 0.971084, -0.0916787, 0.125044, 1.07587, 0.975584, -0.0739634, 0.100577, 1.09372, 0.98122, -0.055322, 0.0753666, 1.10948, 0.988253, -0.0366825, 0.0498899, 1.12394, 0.99482, -0.0180389, 0.024611, 1.13694, 1.00001, 229839e-9, -188283e-9, 1.14919, 0.613867, -964198e-11, 0.479449, 123452e-10, 0.621485, -244534e-9, 0.485399, 313091e-9, 0.621429, -978202e-9, 0.485353, 125245e-8, 0.62112, -220004e-8, 0.485114, 281687e-8, 0.621119, -39111e-7, 0.485112, 500783e-8, 0.621122, -611091e-8, 0.485112, 782498e-8, 0.621133, -879922e-8, 0.485117, 0.0112687, 0.621152, -0.0119756, 0.485125, 0.0153394, 0.621183, -0.0156396, 0.485139, 0.0200382, 0.621227, -0.0197898, 0.485158, 0.0253663, 0.621298, -0.0244253, 0.485192, 0.0313261, 0.621388, -0.0295441, 0.485233, 0.0379204, 0.621507, -0.0351432, 0.485286, 0.0451523, 0.621693, -0.0412198, 0.485378, 0.0530277, 0.621933, -0.0477673, 0.485495, 0.0615522, 0.622232, -0.0547574, 0.485635, 0.0707316, 0.622809, -0.0619417, 0.485943, 0.0805883, 0.623407, -0.069625, 0.486232, 0.0911267, 0.62406, -0.077796, 0.486516, 0.102354, 0.624835, -0.0863731, 0.486838, 0.114279, 0.625758, -0.095251, 0.487188, 0.126902, 0.627043, -0.104299, 0.487695, 0.140285, 0.628438, -0.113724, 0.488163, 0.154397, 0.630325, -0.123417, 0.488858, 0.169267, 0.632801, -0.133137, 0.489754, 0.184941, 0.635784, -0.143052, 0.490815, 0.20136, 0.639406, -0.153132, 0.492048, 0.218643, 0.643872, -0.163143, 0.49363, 0.236615, 0.6499, -0.17333, 0.496009, 0.255449, 0.657201, -0.183622, 0.498994, 0.275006, 0.666221, -0.194019, 0.502888, 0.295354, 0.674419, -0.204192, 0.505459, 0.316244, 0.683729, -0.21406, 0.507771, 0.33849, 0.695584, -0.222854, 0.510245, 0.363166, 0.708583, -0.231315, 0.512293, 0.389071, 0.721233, -0.238911, 0.512747, 0.415737, 0.735134, -0.245657, 0.512482, 0.443331, 0.750179, -0.251879, 0.511526, 0.471891, 0.765073, -0.256911, 0.508935, 0.500892, 0.779794, -0.261144, 0.504341, 0.530294, 0.794801, -0.264316, 0.498515, 0.560144, 0.810339, -0.266276, 0.491015, 0.590213, 0.824818, -0.266981, 0.481126, 0.620865, 0.839375, -0.265778, 0.468685, 0.652687, 0.853043, -0.262748, 0.453925, 0.684759, 0.867335, -0.258474, 0.437912, 0.716209, 0.88037, -0.253187, 0.419648, 0.747508, 0.891711, -0.246476, 0.39982, 0.77797, 0.902896, -0.238735, 0.37879, 0.808586, 0.913601, -0.22885, 0.355891, 0.838843, 0.923019, -0.217656, 0.331773, 0.869014, 0.933432, -0.205539, 0.307356, 0.898512, 0.939691, -0.192595, 0.281321, 0.9269, 0.946938, -0.178945, 0.255441, 0.955297, 0.952372, -0.163587, 0.229013, 0.983231, 0.95909, -0.147214, 0.203179, 1.00971, 0.963675, -0.13064, 0.17792, 1.03438, 0.968247, -0.113121, 0.152898, 1.05625, 0.97001, -0.0945824, 0.128712, 1.07598, 0.974458, -0.0755648, 0.103349, 1.094, 0.980168, -0.0571998, 0.0776731, 1.1104, 0.987295, -0.0377994, 0.0514445, 1.12491, 0.994432, -0.0186417, 0.025429, 1.13851, 0.999975, 542714e-9, -282356e-9, 1.15108, 0.592656, -980249e-11, 0.486018, 119532e-10, 0.598467, -247275e-9, 0.490781, 301531e-9, 0.597934, -988317e-9, 0.490343, 120517e-8, 0.597903, -222366e-8, 0.490319, 27116e-7, 0.597913, -395315e-8, 0.490327, 482077e-8, 0.597919, -617653e-8, 0.490329, 753264e-8, 0.597936, -889375e-8, 0.490339, 0.0108478, 0.597956, -0.0121043, 0.490347, 0.0147668, 0.597992, -0.0158073, 0.490365, 0.0192905, 0.598032, -0.0200017, 0.490382, 0.0244204, 0.598109, -0.0246865, 0.49042, 0.0301593, 0.598215, -0.0298594, 0.490474, 0.03651, 0.59833, -0.0355167, 0.490524, 0.0434757, 0.598525, -0.0416559, 0.490624, 0.0510629, 0.598778, -0.0482692, 0.490753, 0.0592781, 0.599135, -0.0553114, 0.49094, 0.0681304, 0.599802, -0.062542, 0.491328, 0.0776467, 0.600361, -0.0703638, 0.491598, 0.0878184, 0.60101, -0.0786256, 0.491882, 0.0986573, 0.601811, -0.0872962, 0.492232, 0.11018, 0.602861, -0.0962284, 0.492684, 0.1224, 0.604167, -0.10538, 0.493213, 0.135354, 0.605693, -0.114896, 0.493799, 0.149034, 0.607682, -0.124654, 0.494576, 0.163469, 0.610672, -0.13456, 0.4959, 0.178747, 0.613313, -0.144581, 0.496713, 0.194723, 0.617603, -0.154703, 0.498499, 0.211617, 0.622174, -0.16489, 0.500188, 0.229183, 0.628855, -0.175164, 0.503072, 0.247786, 0.636963, -0.185565, 0.506798, 0.267116, 0.644866, -0.195911, 0.509719, 0.28702, 0.653741, -0.206104, 0.512776, 0.307763, 0.664942, -0.216447, 0.516812, 0.329631, 0.67633, -0.22552, 0.519181, 0.353515, 0.690012, -0.234316, 0.521681, 0.379226, 0.704243, -0.242032, 0.523129, 0.405901, 0.719396, -0.249172, 0.523768, 0.433585, 0.734471, -0.255543, 0.522541, 0.462085, 0.750539, -0.260697, 0.520217, 0.491233, 0.766365, -0.26501, 0.516293, 0.521094, 0.781677, -0.268409, 0.509708, 0.551014, 0.797132, -0.270399, 0.501944, 0.581463, 0.812655, -0.271247, 0.492025, 0.612402, 0.828592, -0.270708, 0.480424, 0.643798, 0.844044, -0.268085, 0.465955, 0.67682, 0.857305, -0.263459, 0.448425, 0.708496, 0.87114, -0.258151, 0.430243, 0.74046, 0.884936, -0.251171, 0.410578, 0.771583, 0.895772, -0.243305, 0.38862, 0.802234, 0.906961, -0.234037, 0.365214, 0.833179, 0.917775, -0.222714, 0.34116, 0.86353, 0.927883, -0.210175, 0.31572, 0.893557, 0.936617, -0.196925, 0.289159, 0.922976, 0.943384, -0.182788, 0.261996, 0.951606, 0.949713, -0.167965, 0.235324, 0.979958, 0.955818, -0.151109, 0.208408, 1.00765, 0.961344, -0.133834, 0.182591, 1.03329, 0.965469, -0.115987, 0.156958, 1.0557, 0.968693, -0.09746, 0.132239, 1.07583, 0.973165, -0.0778514, 0.106195, 1.09451, 0.979387, -0.0585067, 0.0797669, 1.11137, 0.98671, -0.0390409, 0.0530263, 1.12643, 0.994093, -0.019408, 0.0263163, 1.14016, 1.00002, 540029e-9, -194487e-9, 1.15299, 0.574483, -989066e-11, 0.494533, 114896e-10, 0.574478, -249127e-9, 0.494528, 289403e-9, 0.574607, -996811e-9, 0.494637, 115797e-8, 0.574396, -224241e-8, 0.494458, 260498e-8, 0.574377, -398632e-8, 0.49444, 463102e-8, 0.574386, -622836e-8, 0.494445, 723623e-8, 0.574401, -89683e-7, 0.494453, 0.010421, 0.574419, -0.0122056, 0.49446, 0.0141859, 0.574459, -0.0159396, 0.494481, 0.0185322, 0.574525, -0.0201692, 0.49452, 0.0234617, 0.574587, -0.0248924, 0.494547, 0.0289762, 0.574697, -0.0301074, 0.494604, 0.0350797, 0.574853, -0.0358114, 0.494688, 0.0417767, 0.575027, -0.041999, 0.494772, 0.0490718, 0.575294, -0.0486618, 0.494915, 0.0569728, 0.575733, -0.0557148, 0.495173, 0.0654955, 0.576356, -0.0630489, 0.495537, 0.0746612, 0.576944, -0.0709285, 0.495836, 0.0844615, 0.57765, -0.0792723, 0.496177, 0.0949142, 0.578491, -0.0880167, 0.496563, 0.10603, 0.579639, -0.0969462, 0.497096, 0.117841, 0.580989, -0.10622, 0.497684, 0.130367, 0.582587, -0.115861, 0.498337, 0.143609, 0.584951, -0.125605, 0.499414, 0.157625, 0.587602, -0.135608, 0.500518, 0.172413, 0.59076, -0.145742, 0.501767, 0.187999, 0.594992, -0.155934, 0.503542, 0.20445, 0.600656, -0.166303, 0.506135, 0.221764, 0.607816, -0.176681, 0.509542, 0.24002, 0.61522, -0.187071, 0.51263, 0.258992, 0.623702, -0.197465, 0.516021, 0.278773, 0.634192, -0.207816, 0.520422, 0.299377, 0.644936, -0.218183, 0.524073, 0.320802, 0.657888, -0.2278, 0.528049, 0.34384, 0.670666, -0.236747, 0.52986, 0.36916, 0.685626, -0.24484, 0.531892, 0.395867, 0.701304, -0.252071, 0.532727, 0.423488, 0.717727, -0.258714, 0.532146, 0.452201, 0.733914, -0.264211, 0.529883, 0.481579, 0.750529, -0.26859, 0.5259, 0.511558, 0.76747, -0.272046, 0.51999, 0.542042, 0.785189, -0.274225, 0.513083, 0.572799, 0.800954, -0.275189, 0.502936, 0.603816, 0.816962, -0.274946, 0.490921, 0.635461, 0.83336, -0.272695, 0.47684, 0.6676, 0.848143, -0.268223, 0.459405, 0.70051, 0.861818, -0.262768, 0.440319, 0.732902, 0.876828, -0.255872, 0.420123, 0.765084, 0.889312, -0.247703, 0.398379, 0.796391, 0.900412, -0.238381, 0.374496, 0.827333, 0.912251, -0.227783, 0.349874, 0.858385, 0.921792, -0.214832, 0.323181, 0.888652, 0.931273, -0.200949, 0.296624, 0.917763, 0.940295, -0.186537, 0.269211, 0.947878, 0.946812, -0.171538, 0.241447, 0.977016, 0.953588, -0.155254, 0.213829, 1.00501, 0.958841, -0.137156, 0.186807, 1.03179, 0.963746, -0.118699, 0.160706, 1.05502, 0.966468, -0.0998358, 0.135504, 1.07568, 0.971178, -0.0805186, 0.109131, 1.09479, 0.97831, -0.0599348, 0.0818293, 1.1123, 0.985886, -0.0399661, 0.0545872, 1.12771, 0.994021, -0.0198682, 0.0269405, 1.14186, 1.00009, 271022e-9, -12989e-8, 1.15514, 0.538716, -990918e-11, 0.486732, 109675e-10, 0.550656, -250642e-9, 0.497518, 277412e-9, 0.55057, -100265e-8, 0.497441, 110974e-8, 0.550903, -225672e-8, 0.497733, 249779e-8, 0.550568, -401046e-8, 0.497438, 443906e-8, 0.550574, -626613e-8, 0.49744, 693637e-8, 0.550591, -90226e-7, 0.497449, 998921e-8, 0.550623, -0.0122795, 0.497469, 0.0135984, 0.550667, -0.0160361, 0.497495, 0.0177654, 0.550724, -0.0202908, 0.497526, 0.0224915, 0.550792, -0.0250421, 0.497557, 0.0277795, 0.550918, -0.0302878, 0.49763, 0.0336334, 0.551058, -0.0360241, 0.497701, 0.0400573, 0.551276, -0.0422473, 0.497824, 0.0470585, 0.551551, -0.0489441, 0.497977, 0.0546433, 0.552074, -0.0559596, 0.498312, 0.0628367, 0.552681, -0.0633978, 0.498679, 0.071646, 0.553324, -0.0713176, 0.499031, 0.0810746, 0.554011, -0.0797268, 0.499365, 0.091129, 0.55488, -0.0885238, 0.499779, 0.101837, 0.556171, -0.0974417, 0.500444, 0.113239, 0.557498, -0.106841, 0.501025, 0.125316, 0.559299, -0.116533, 0.501864, 0.138128, 0.561647, -0.126298, 0.502967, 0.151695, 0.564347, -0.136388, 0.504129, 0.16604, 0.567863, -0.146576, 0.505713, 0.181207, 0.572569, -0.156832, 0.507953, 0.197259, 0.578919, -0.167323, 0.511186, 0.214258, 0.585387, -0.177712, 0.514042, 0.232038, 0.593134, -0.188184, 0.517484, 0.250733, 0.603295, -0.198717, 0.522345, 0.270454, 0.613854, -0.209177, 0.526751, 0.290807, 0.626092, -0.219644, 0.531595, 0.312202, 0.637868, -0.229494, 0.534721, 0.334435, 0.652458, -0.238718, 0.538304, 0.359184, 0.666985, -0.247061, 0.539875, 0.385637, 0.683301, -0.254652, 0.541042, 0.41328, 0.69998, -0.261376, 0.540735, 0.441903, 0.717824, -0.267085, 0.539139, 0.471609, 0.734617, -0.271465, 0.534958, 0.501446, 0.753663, -0.27528, 0.53032, 0.532571, 0.770512, -0.277617, 0.522134, 0.563641, 0.787356, -0.278525, 0.51206, 0.595067, 0.806252, -0.278512, 0.50119, 0.627226, 0.822061, -0.277023, 0.486791, 0.659402, 0.838959, -0.273175, 0.470467, 0.692874, 0.85379, -0.267238, 0.450688, 0.725702, 0.868268, -0.260327, 0.429741, 0.75832, 0.881994, -0.251946, 0.407223, 0.790189, 0.893885, -0.242432, 0.383214, 0.821625, 0.905118, -0.231904, 0.357297, 0.853011, 0.916045, -0.219545, 0.330733, 0.883773, 0.927614, -0.205378, 0.303916, 0.914435, 0.936005, -0.190388, 0.275941, 0.944502, 0.944533, -0.1749, 0.247493, 0.974439, 0.950758, -0.158588, 0.218996, 1.00286, 0.957078, -0.141027, 0.191559, 1.0304, 0.962448, -0.121507, 0.164457, 1.05466, 0.964993, -0.102068, 0.138636, 1.0761, 0.970017, -0.0822598, 0.111861, 1.09541, 0.97661, -0.062033, 0.0843438, 1.11317, 0.985073, -0.0409832, 0.0558496, 1.12911, 0.993515, -0.020146, 0.0275331, 1.1438, 1.00006, 27329e-8, -107883e-9, 1.15736, 0.525324, -999341e-11, 0.498153, 105385e-10, 0.526513, -251605e-9, 0.499277, 265329e-9, 0.526517, -100641e-8, 0.499282, 10613e-7, 0.526588, -226466e-8, 0.499337, 238823e-8, 0.526539, -40255e-7, 0.499302, 424535e-8, 0.526547, -628954e-8, 0.499306, 663364e-8, 0.526561, -905628e-8, 0.499313, 955337e-8, 0.526593, -0.0123253, 0.499334, 0.0130054, 0.526642, -0.0160957, 0.499365, 0.0169911, 0.5267, -0.0203661, 0.499396, 0.0215122, 0.526792, -0.0251347, 0.499451, 0.0265718, 0.526904, -0.0303985, 0.499511, 0.0321732, 0.527079, -0.0361554, 0.499617, 0.0383231, 0.527285, -0.0423982, 0.499731, 0.045026, 0.527602, -0.0491121, 0.499924, 0.0522936, 0.528166, -0.0561127, 0.500306, 0.0601528, 0.52879, -0.0635988, 0.5007, 0.0686059, 0.529421, -0.071581, 0.501048, 0.0776518, 0.530144, -0.0799854, 0.501421, 0.0873148, 0.531062, -0.0888032, 0.501884, 0.0976084, 0.532374, -0.0977643, 0.50259, 0.108588, 0.533828, -0.107197, 0.50329, 0.120234, 0.53581, -0.116887, 0.504312, 0.132602, 0.538063, -0.126755, 0.505365, 0.145721, 0.5409, -0.136819, 0.506668, 0.159617, 0.544882, -0.147117, 0.508731, 0.174369, 0.550238, -0.157446, 0.511601, 0.190028, 0.556038, -0.167988, 0.514431, 0.206587, 0.563031, -0.178364, 0.517808, 0.224046, 0.571543, -0.189007, 0.521937, 0.242503, 0.582255, -0.199546, 0.527415, 0.261977, 0.59272, -0.210084, 0.531682, 0.282162, 0.605648, -0.220448, 0.537123, 0.303426, 0.61785, -0.230593, 0.540664, 0.325323, 0.632223, -0.240238, 0.544467, 0.348993, 0.648819, -0.24887, 0.547594, 0.375462, 0.665825, -0.256657, 0.54912, 0.403024, 0.683389, -0.263711, 0.549294, 0.431773, 0.701495, -0.269666, 0.547649, 0.461494, 0.719197, -0.274169, 0.543786, 0.491623, 0.737906, -0.278124, 0.538644, 0.522994, 0.756652, -0.280632, 0.531057, 0.554775, 0.775279, -0.281741, 0.521972, 0.586441, 0.792688, -0.281652, 0.509613, 0.618596, 0.811894, -0.280345, 0.496497, 0.651462, 0.827938, -0.277128, 0.47968, 0.684023, 0.844837, -0.271646, 0.460688, 0.718024, 0.859239, -0.264397, 0.438872, 0.751207, 0.874088, -0.256144, 0.41577, 0.784232, 0.887693, -0.246311, 0.391369, 0.816191, 0.899402, -0.235497, 0.365872, 0.847828, 0.910973, -0.223631, 0.338618, 0.87934, 0.92204, -0.209874, 0.310803, 0.910325, 0.930987, -0.194265, 0.281802, 0.940695, 0.94, -0.178125, 0.252836, 0.970958, 0.948018, -0.161479, 0.224239, 1.00078, 0.955141, -0.144038, 0.195857, 1.0288, 0.960513, -0.124915, 0.168487, 1.05371, 0.963964, -0.104284, 0.141495, 1.07596, 0.968713, -0.0838732, 0.114437, 1.09628, 0.975524, -0.0635579, 0.0863105, 1.11448, 0.98431, -0.042291, 0.0574774, 1.13069, 0.992916, -0.0209131, 0.0284343, 1.14568, 0.999926, 743097e-9, -379265e-9, 1.15955, 0.501042, -998428e-11, 0.498726, 100306e-10, 0.502992, -252112e-9, 0.500665, 253283e-9, 0.502417, -100791e-8, 0.500092, 101259e-8, 0.502965, -226919e-8, 0.500621, 227978e-8, 0.502318, -403109e-8, 0.499994, 405011e-8, 0.502333, -629832e-8, 0.500005, 632868e-8, 0.502362, -906907e-8, 0.500027, 911446e-8, 0.502369, -0.0123423, 0.500023, 0.0124078, 0.50243, -0.0161178, 0.500066, 0.016211, 0.502493, -0.0203937, 0.500103, 0.0205256, 0.502592, -0.0251684, 0.500166, 0.0253548, 0.502707, -0.0304389, 0.50023, 0.0307029, 0.502881, -0.0362015, 0.500335, 0.0365753, 0.503124, -0.0424507, 0.500488, 0.0429798, 0.503443, -0.0491582, 0.500686, 0.0499268, 0.504083, -0.0561476, 0.501155, 0.0574541, 0.504668, -0.0636846, 0.501524, 0.0655408, 0.505319, -0.0716834, 0.501904, 0.0742072, 0.50609, -0.0800925, 0.502321, 0.0834699, 0.507122, -0.0888425, 0.502896, 0.0933603, 0.508414, -0.097855, 0.503603, 0.10391, 0.509955, -0.107304, 0.504416, 0.115113, 0.512061, -0.116921, 0.505565, 0.127054, 0.514419, -0.12689, 0.506732, 0.139709, 0.517529, -0.136934, 0.508338, 0.153173, 0.522085, -0.147327, 0.510987, 0.167528, 0.526986, -0.157612, 0.513527, 0.182708, 0.533122, -0.168213, 0.516717, 0.198881, 0.540807, -0.178688, 0.520832, 0.215986, 0.550687, -0.189511, 0.52632, 0.234335, 0.560567, -0.199998, 0.531009, 0.253375, 0.571698, -0.210652, 0.535839, 0.273499, 0.584364, -0.220917, 0.541091, 0.294355, 0.599066, -0.23137, 0.546875, 0.316525, 0.614148, -0.241206, 0.551306, 0.339671, 0.631157, -0.250379, 0.555187, 0.36531, 0.647919, -0.258397, 0.556595, 0.392767, 0.666112, -0.265528, 0.556949, 0.421397, 0.686158, -0.271827, 0.556617, 0.451433, 0.704838, -0.27674, 0.552975, 0.482131, 0.723957, -0.280733, 0.547814, 0.513458, 0.74262, -0.283359, 0.53997, 0.545446, 0.762009, -0.284541, 0.530422, 0.57775, 0.781314, -0.284507, 0.518546, 0.610434, 0.799116, -0.283309, 0.504178, 0.643178, 0.817604, -0.280378, 0.48843, 0.676248, 0.83459, -0.275619, 0.469457, 0.709698, 0.850974, -0.26856, 0.447698, 0.744245, 0.866747, -0.260094, 0.424791, 0.777695, 0.881412, -0.249929, 0.399913, 0.810392, 0.8936, -0.239137, 0.37308, 0.842872, 0.905943, -0.226818, 0.345705, 0.874677, 0.916408, -0.213699, 0.31706, 0.906257, 0.927215, -0.198428, 0.288444, 0.936881, 0.935625, -0.181643, 0.258329, 0.96795, 0.944076, -0.164386, 0.228488, 0.998216, 0.951229, -0.146339, 0.199763, 1.02689, 0.958793, -0.127709, 0.172153, 1.0535, 0.963219, -0.107244, 0.144989, 1.07646, 0.967562, -0.0857764, 0.11685, 1.09675, 0.974866, -0.0645377, 0.0880571, 1.11576, 0.983353, -0.0431732, 0.0587352, 1.13227, 0.992503, -0.0218356, 0.0294181, 1.1478, 1.00003, 605203e-9, -231013e-9, 1.16207, 0.482935, -101177e-10, 0.504695, 968142e-11, 0.477554, -251521e-9, 0.499071, 240676e-9, 0.477904, -100683e-8, 0.499436, 96342e-8, 0.478368, -226636e-8, 0.499899, 21687e-7, 0.477977, -402719e-8, 0.499513, 385384e-8, 0.477993, -629226e-8, 0.499525, 60221e-7, 0.478011, -906011e-8, 0.499536, 867289e-8, 0.478051, -0.0123305, 0.499566, 0.0118074, 0.478089, -0.016102, 0.499587, 0.0154269, 0.478171, -0.0203736, 0.499645, 0.0195341, 0.478254, -0.025143, 0.499692, 0.0241318, 0.47839, -0.0304071, 0.499779, 0.0292247, 0.478588, -0.0361631, 0.499911, 0.0348196, 0.478812, -0.0424023, 0.500046, 0.0409231, 0.479208, -0.0490724, 0.500326, 0.047552, 0.479841, -0.0560722, 0.500805, 0.0547377, 0.480392, -0.0636125, 0.501152, 0.0624607, 0.481068, -0.0716134, 0.501561, 0.0707473, 0.481898, -0.0800062, 0.502054, 0.0796118, 0.483022, -0.0886568, 0.502728, 0.0890974, 0.484332, -0.0977553, 0.503479, 0.0992099, 0.486126, -0.107173, 0.504546, 0.10999, 0.488066, -0.11677, 0.50557, 0.121476, 0.490521, -0.126725, 0.506849, 0.133672, 0.494232, -0.136793, 0.50911, 0.146731, 0.498302, -0.147116, 0.511345, 0.160577, 0.503565, -0.157446, 0.514344, 0.175335, 0.510902, -0.168121, 0.518824, 0.191207, 0.519263, -0.178799, 0.523666, 0.208058, 0.528204, -0.189407, 0.528296, 0.225875, 0.538854, -0.200145, 0.533724, 0.244782, 0.551278, -0.210701, 0.539833, 0.264753, 0.565222, -0.221303, 0.546131, 0.285745, 0.579403, -0.231688, 0.551496, 0.307592, 0.595469, -0.241718, 0.556809, 0.330582, 0.610929, -0.250992, 0.559641, 0.354995, 0.629433, -0.259602, 0.562379, 0.382471, 0.648504, -0.267038, 0.563676, 0.411126, 0.66756, -0.273388, 0.562092, 0.440924, 0.689143, -0.278788, 0.560807, 0.472118, 0.709056, -0.282783, 0.555701, 0.503774, 0.729855, -0.285836, 0.548698, 0.536364, 0.748954, -0.287078, 0.538544, 0.56895, 0.768373, -0.287133, 0.526711, 0.601991, 0.78827, -0.285839, 0.512511, 0.635403, 0.807465, -0.283238, 0.496323, 0.668797, 0.825194, -0.27906, 0.477638, 0.702584, 0.842203, -0.272286, 0.456253, 0.736393, 0.857749, -0.263854, 0.432412, 0.77096, 0.874799, -0.253943, 0.407806, 0.80489, 0.887497, -0.24237, 0.38033, 0.83771, 0.89966, -0.230278, 0.352446, 0.870376, 0.911753, -0.21646, 0.323268, 0.902256, 0.923011, -0.202071, 0.294314, 0.933306, 0.932375, -0.185519, 0.264104, 0.965177, 0.940537, -0.167604, 0.234035, 0.996303, 0.948904, -0.149068, 0.20412, 1.0261, 0.955263, -0.129539, 0.175431, 1.05304, 0.960303, -0.109932, 0.148116, 1.07617, 0.965512, -0.0880572, 0.119693, 1.09742, 0.973466, -0.0660548, 0.0901619, 1.11721, 0.98284, -0.0439228, 0.0599875, 1.13436, 0.992216, -0.0219588, 0.0298975, 1.15006, 0.999946, 119402e-9, -208547e-10, 1.16471, 0.447827, -100414e-10, 0.491543, 914833e-11, 0.454778, -251257e-9, 0.499172, 22891e-8, 0.453519, -100342e-8, 0.497787, 914184e-9, 0.45357, -225776e-8, 0.497847, 205701e-8, 0.453578, -401371e-8, 0.497855, 365705e-8, 0.45357, -627107e-8, 0.497841, 571453e-8, 0.453598, -902968e-8, 0.497864, 823019e-8, 0.453627, -0.0122888, 0.497882, 0.0112049, 0.453684, -0.0160475, 0.497923, 0.0146405, 0.453764, -0.0203044, 0.49798, 0.0185394, 0.453866, -0.0250576, 0.498049, 0.0229054, 0.453996, -0.0303028, 0.49813, 0.0277424, 0.454196, -0.0360379, 0.498267, 0.0330587, 0.454457, -0.0422521, 0.498445, 0.0388613, 0.454926, -0.0488393, 0.498812, 0.0451767, 0.455525, -0.0558653, 0.499272, 0.0520153, 0.456074, -0.0633772, 0.499625, 0.0593754, 0.456752, -0.0713606, 0.500049, 0.0672751, 0.457648, -0.07971, 0.500615, 0.0757447, 0.458849, -0.0883032, 0.501399, 0.0848231, 0.46029, -0.0974095, 0.502293, 0.0945135, 0.462, -0.106729, 0.503301, 0.104848, 0.464121, -0.116354, 0.504533, 0.115884, 0.466889, -0.126214, 0.506172, 0.127652, 0.470744, -0.136324, 0.508667, 0.14024, 0.47488, -0.146595, 0.510995, 0.153673, 0.480845, -0.157027, 0.514832, 0.168053, 0.488262, -0.167658, 0.519506, 0.183508, 0.496547, -0.178343, 0.524347, 0.199948, 0.506254, -0.188916, 0.52983, 0.217503, 0.517961, -0.199975, 0.536357, 0.236272, 0.531484, -0.210624, 0.543641, 0.256096, 0.545496, -0.221227, 0.550048, 0.277085, 0.559497, -0.231568, 0.555076, 0.298615, 0.575752, -0.241698, 0.560541, 0.321547, 0.591999, -0.251172, 0.564156, 0.345602, 0.610654, -0.260178, 0.567607, 0.371851, 0.630484, -0.268094, 0.56923, 0.40076, 0.651807, -0.274661, 0.569779, 0.430801, 0.67239, -0.280331, 0.566791, 0.461939, 0.693024, -0.284501, 0.562007, 0.493854, 0.715473, -0.287852, 0.555791, 0.526992, 0.736323, -0.28929, 0.546345, 0.560102, 0.755771, -0.289405, 0.534, 0.593543, 0.775424, -0.2881, 0.519114, 0.627256, 0.795447, -0.285562, 0.502543, 0.661464, 0.815319, -0.281416, 0.484773, 0.695206, 0.831769, -0.275523, 0.463445, 0.729044, 0.849464, -0.267516, 0.440269, 0.764069, 0.866775, -0.257584, 0.415049, 0.799089, 0.881252, -0.245817, 0.388049, 0.831948, 0.894209, -0.233127, 0.35889, 0.865526, 0.906922, -0.219579, 0.329915, 0.89818, 0.919686, -0.204491, 0.300441, 0.930013, 0.929044, -0.188962, 0.269445, 0.962061, 0.938393, -0.171079, 0.238402, 0.994214, 0.94661, -0.15199, 0.208204, 1.02533, 0.953095, -0.131953, 0.178653, 1.0529, 0.958644, -0.111233, 0.150684, 1.0771, 0.963925, -0.0903098, 0.122359, 1.09855, 0.971995, -0.0680505, 0.0923342, 1.11874, 0.981658, -0.0448512, 0.0614195, 1.13635, 0.991649, -0.0221931, 0.0303582, 1.15238, 0.999985, 393403e-9, -111086e-9, 1.16772, 0.396806, -971563e-11, 0.457671, 842355e-11, 0.429186, -249421e-9, 0.495017, 21625e-8, 0.429324, -998052e-9, 0.495173, 865322e-9, 0.429175, -224487e-8, 0.494999, 194637e-8, 0.429129, -399041e-8, 0.494952, 346004e-8, 0.429153, -623476e-8, 0.494974, 540684e-8, 0.429168, -89773e-7, 0.494983, 778714e-8, 0.429207, -0.0122175, 0.495012, 0.0106022, 0.429257, -0.0159542, 0.495047, 0.0138535, 0.429338, -0.0201864, 0.495106, 0.0175443, 0.429431, -0.0249104, 0.495165, 0.0216774, 0.429587, -0.0301252, 0.495279, 0.0262594, 0.429796, -0.0358249, 0.495432, 0.0312968, 0.430065, -0.0419972, 0.495621, 0.0367985, 0.430588, -0.0485144, 0.496061, 0.042798, 0.43113, -0.0555028, 0.496472, 0.0492914, 0.431743, -0.0629852, 0.496904, 0.0562907, 0.432448, -0.0709256, 0.497369, 0.0638056, 0.433414, -0.0791942, 0.498032, 0.071885, 0.434638, -0.0877346, 0.498854, 0.0805517, 0.43611, -0.0968056, 0.499812, 0.0898047, 0.437859, -0.106002, 0.500891, 0.0997142, 0.440017, -0.115648, 0.502198, 0.110289, 0.443236, -0.125427, 0.504389, 0.121644, 0.44697, -0.135492, 0.506809, 0.133769, 0.451689, -0.145746, 0.509858, 0.146787, 0.45811, -0.156219, 0.514247, 0.160793, 0.465305, -0.166834, 0.518816, 0.175791, 0.474085, -0.177546, 0.524331, 0.191906, 0.484808, -0.188262, 0.53104, 0.209199, 0.49732, -0.199346, 0.538511, 0.227825, 0.509693, -0.209951, 0.544554, 0.247269, 0.524367, -0.220533, 0.551616, 0.267978, 0.539228, -0.231082, 0.557368, 0.289672, 0.55644, -0.241342, 0.563782, 0.31268, 0.574204, -0.250964, 0.568851, 0.33651, 0.593388, -0.260306, 0.57312, 0.362219, 0.613358, -0.268667, 0.574916, 0.390322, 0.634512, -0.275591, 0.575053, 0.420478, 0.65563, -0.281328, 0.572404, 0.451614, 0.678265, -0.285948, 0.568893, 0.484112, 0.70011, -0.289408, 0.561878, 0.517348, 0.723005, -0.291328, 0.55359, 0.551355, 0.743744, -0.291418, 0.541099, 0.585109, 0.763949, -0.290252, 0.526489, 0.619487, 0.784186, -0.287648, 0.509496, 0.65404, 0.804304, -0.283782, 0.491484, 0.688649, 0.823629, -0.278067, 0.470517, 0.723133, 0.84094, -0.270588, 0.44705, 0.757163, 0.857852, -0.261188, 0.421252, 0.792816, 0.874934, -0.249313, 0.394191, 0.827248, 0.888709, -0.236492, 0.365359, 0.861074, 0.902589, -0.222185, 0.336016, 0.894417, 0.914201, -0.207314, 0.30527, 0.926825, 0.925978, -0.191146, 0.274532, 0.9595, 0.93512, -0.174135, 0.243393, 0.991583, 0.943656, -0.155231, 0.212414, 1.02356, 0.951719, -0.134403, 0.182005, 1.05239, 0.957164, -0.113023, 0.153043, 1.07754, 0.962656, -0.0914493, 0.124186, 1.09984, 0.970695, -0.0694179, 0.0941654, 1.12, 0.980749, -0.0466199, 0.0629671, 1.13849, 0.991205, -0.0227032, 0.0311146, 1.15494, 0.999884, 632388e-9, -254483e-9, 1.1706, 0.379821, -957289e-11, 0.460637, 789337e-11, 0.405188, -247483e-9, 0.491396, 204064e-9, 0.404796, -989434e-9, 0.490914, 815853e-9, 0.40483, -222607e-8, 0.490949, 183559e-8, 0.40473, -395723e-8, 0.49084, 326332e-8, 0.404731, -618287e-8, 0.490836, 509945e-8, 0.404768, -890258e-8, 0.490871, 734463e-8, 0.404791, -0.0121156, 0.490883, 999992e-8, 0.404857, -0.0158214, 0.490938, 0.0130676, 0.404943, -0.0200178, 0.491004, 0.0165503, 0.405059, -0.0247027, 0.491093, 0.0204521, 0.405213, -0.0298729, 0.491205, 0.0247788, 0.405399, -0.0355226, 0.491333, 0.0295373, 0.405731, -0.0416352, 0.491604, 0.034741, 0.406303, -0.0480807, 0.492116, 0.0404255, 0.406814, -0.0550458, 0.492506, 0.0465732, 0.407404, -0.0624652, 0.492926, 0.0532058, 0.408149, -0.0702958, 0.493442, 0.0603442, 0.409128, -0.0784623, 0.494136, 0.0680297, 0.410408, -0.087007, 0.495054, 0.0762786, 0.411813, -0.0959639, 0.495962, 0.0851046, 0.413735, -0.105075, 0.497257, 0.0945878, 0.416137, -0.114646, 0.498882, 0.104725, 0.41934, -0.124394, 0.501132, 0.11563, 0.423326, -0.134328, 0.503883, 0.127325, 0.428419, -0.14458, 0.50747, 0.139911, 0.43484, -0.154979, 0.511964, 0.153481, 0.442641, -0.165628, 0.517328, 0.168114, 0.452511, -0.176365, 0.524258, 0.183995, 0.463473, -0.187298, 0.531248, 0.200953, 0.475564, -0.198244, 0.538367, 0.219176, 0.488664, -0.208938, 0.545175, 0.238514, 0.504073, -0.219599, 0.553227, 0.259129, 0.520832, -0.230378, 0.560653, 0.280997, 0.538455, -0.240703, 0.567523, 0.303821, 0.55709, -0.250548, 0.573287, 0.327948, 0.576646, -0.259964, 0.577795, 0.353362, 0.596705, -0.268721, 0.580077, 0.380336, 0.618053, -0.276054, 0.58018, 0.4101, 0.640303, -0.282176, 0.578747, 0.44161, 0.662365, -0.286931, 0.574294, 0.474106, 0.684542, -0.290521, 0.567035, 0.507549, 0.707984, -0.292672, 0.558687, 0.541853, 0.730913, -0.293189, 0.547606, 0.576581, 0.752948, -0.292199, 0.533471, 0.61172, 0.773452, -0.289508, 0.516395, 0.646339, 0.794715, -0.285716, 0.497873, 0.682131, 0.814251, -0.280051, 0.476845, 0.716396, 0.833057, -0.272873, 0.453449, 0.751503, 0.84959, -0.263982, 0.427857, 0.786085, 0.867022, -0.252745, 0.400335, 0.821355, 0.882277, -0.239655, 0.371304, 0.85646, 0.895375, -0.225386, 0.340397, 0.890828, 0.909347, -0.209587, 0.310005, 0.923532, 0.921885, -0.193433, 0.2796, 0.956419, 0.932127, -0.176135, 0.247276, 0.989445, 0.941869, -0.157872, 0.216186, 1.02221, 0.949735, -0.137577, 0.185602, 1.05195, 0.956617, -0.115285, 0.155767, 1.07822, 0.961974, -0.0928418, 0.126103, 1.10149, 0.96972, -0.0700592, 0.0956758, 1.12207, 0.98012, -0.0474671, 0.0643269, 1.1408, 0.990825, -0.0238113, 0.0320863, 1.1577, 0.999876, 381574e-9, -812203e-10, 1.17403, 0.367636, -961342e-11, 0.469176, 753287e-11, 0.380377, -244772e-9, 0.485434, 191797e-9, 0.380416, -978857e-9, 0.485475, 767015e-9, 0.380376, -220165e-8, 0.485435, 172522e-8, 0.380419, -391408e-8, 0.485487, 306734e-8, 0.380438, -611549e-8, 0.485505, 479332e-8, 0.380462, -880558e-8, 0.485525, 690391e-8, 0.380496, -0.0119837, 0.485551, 940039e-8, 0.38056, -0.0156487, 0.485605, 0.0122848, 0.38064, -0.0197988, 0.485666, 0.0155601, 0.380767, -0.0244324, 0.48577, 0.0192313, 0.380909, -0.0295444, 0.485871, 0.0233032, 0.381142, -0.0351321, 0.48606, 0.0277861, 0.381472, -0.0411535, 0.486336, 0.0326939, 0.382015, -0.0475408, 0.486833, 0.0380565, 0.382523, -0.0544395, 0.487231, 0.0438615, 0.383129, -0.061784, 0.487683, 0.0501332, 0.383952, -0.0695085, 0.488313, 0.0568996, 0.38498, -0.0775819, 0.489077, 0.0641952, 0.386331, -0.0860443, 0.490113, 0.0720324, 0.387788, -0.0948406, 0.491099, 0.0804379, 0.389808, -0.103899, 0.492566, 0.0894899, 0.39252, -0.113313, 0.494601, 0.0992098, 0.395493, -0.123007, 0.496619, 0.109641, 0.399826, -0.132859, 0.499912, 0.120919, 0.405341, -0.143077, 0.504061, 0.133107, 0.411932, -0.153465, 0.508905, 0.146263, 0.420591, -0.164108, 0.515482, 0.160544, 0.43101, -0.174893, 0.523191, 0.176123, 0.441881, -0.185839, 0.53026, 0.192757, 0.453919, -0.196633, 0.537295, 0.210535, 0.468715, -0.207611, 0.546156, 0.229886, 0.485182, -0.218517, 0.555173, 0.250543, 0.501926, -0.229249, 0.562728, 0.27221, 0.51785, -0.239481, 0.567494, 0.294892, 0.536947, -0.249395, 0.573889, 0.318987, 0.557115, -0.259, 0.578831, 0.344348, 0.577966, -0.268075, 0.582055, 0.371223, 0.599489, -0.276115, 0.583307, 0.399834, 0.62479, -0.282523, 0.583902, 0.431415, 0.647504, -0.287663, 0.57953, 0.464301, 0.670601, -0.291538, 0.573103, 0.498123, 0.693539, -0.293842, 0.563731, 0.532662, 0.717385, -0.294681, 0.553169, 0.567925, 0.741533, -0.293717, 0.539908, 0.603502, 0.762142, -0.291156, 0.521902, 0.639074, 0.783014, -0.28719, 0.502815, 0.674439, 0.805158, -0.281773, 0.482598, 0.710497, 0.823646, -0.274682, 0.458949, 0.7456, 0.841879, -0.266184, 0.433129, 0.781085, 0.859515, -0.255682, 0.406064, 0.816, 0.875335, -0.242849, 0.376509, 0.851074, 0.890147, -0.228329, 0.345502, 0.886473, 0.903144, -0.212491, 0.31428, 0.920751, 0.916618, -0.195695, 0.282994, 0.954606, 0.927953, -0.178267, 0.251091, 0.988402, 0.937414, -0.159549, 0.219107, 1.02141, 0.946823, -0.140022, 0.18896, 1.05167, 0.954651, -0.118154, 0.158667, 1.07819, 0.959955, -0.0946636, 0.128808, 1.1025, 0.96858, -0.0711792, 0.0973787, 1.12391, 0.97938, -0.0475046, 0.0650965, 1.14322, 0.990498, -0.024059, 0.0326267, 1.16077, 0.999844, -512408e-10, 112444e-9, 1.17727, 0.316912, -934977e-11, 0.425996, 695559e-11, 0.356423, -241372e-9, 0.479108, 179562e-9, 0.356272, -965292e-9, 0.478897, 71811e-8, 0.356262, -217182e-8, 0.478894, 161574e-8, 0.356265, -386092e-8, 0.478895, 287261e-8, 0.356278, -60324e-7, 0.478905, 448907e-8, 0.356293, -868565e-8, 0.478914, 646572e-8, 0.356346, -0.0118207, 0.478965, 880438e-8, 0.356395, -0.0154355, 0.479001, 0.0115066, 0.356484, -0.019529, 0.479075, 0.0145762, 0.356609, -0.0240991, 0.47918, 0.018018, 0.356766, -0.0291413, 0.479305, 0.0218379, 0.357009, -0.0346498, 0.479512, 0.0260454, 0.357424, -0.0405462, 0.479909, 0.0306657, 0.357899, -0.0468825, 0.480337, 0.0357054, 0.358424, -0.0536887, 0.480771, 0.0411728, 0.359041, -0.0609416, 0.481242, 0.0470841, 0.359903, -0.0685239, 0.481943, 0.0534831, 0.360932, -0.0764883, 0.482741, 0.0603795, 0.362196, -0.0848364, 0.483688, 0.0678028, 0.363847, -0.0935002, 0.484947, 0.0758086, 0.365972, -0.102471, 0.486588, 0.0844173, 0.368741, -0.111751, 0.488787, 0.0937199, 0.372146, -0.121334, 0.491405, 0.103732, 0.377114, -0.131147, 0.495604, 0.114608, 0.38226, -0.141213, 0.499436, 0.126345, 0.389609, -0.151632, 0.505334, 0.139116, 0.397925, -0.162073, 0.51168, 0.152995, 0.407824, -0.172819, 0.518876, 0.168071, 0.420014, -0.183929, 0.527639, 0.184495, 0.434266, -0.195032, 0.537588, 0.20232, 0.447352, -0.205792, 0.544379, 0.221189, 0.463726, -0.216704, 0.553422, 0.241616, 0.481406, -0.227531, 0.562074, 0.263298, 0.498707, -0.238017, 0.568227, 0.286116, 0.518039, -0.247936, 0.574473, 0.3101, 0.538277, -0.257437, 0.579191, 0.335401, 0.561166, -0.266829, 0.584807, 0.362246, 0.583189, -0.275329, 0.586476, 0.390609, 0.606024, -0.28234, 0.585578, 0.420998, 0.632419, -0.287924, 0.584496, 0.454357, 0.656128, -0.291972, 0.577766, 0.488233, 0.679953, -0.29456, 0.56875, 0.523248, 0.704654, -0.295816, 0.558388, 0.559168, 0.729016, -0.295157, 0.544826, 0.595326, 0.752062, -0.292779, 0.528273, 0.631864, 0.773138, -0.288681, 0.508482, 0.667793, 0.794869, -0.283358, 0.487341, 0.704035, 0.815101, -0.27608, 0.46354, 0.739925, 0.834212, -0.26767, 0.438672, 0.775539, 0.852368, -0.257397, 0.411239, 0.810895, 0.870207, -0.245689, 0.3829, 0.846472, 0.884063, -0.231452, 0.351496, 0.881788, 0.898284, -0.215561, 0.31895, 0.917438, 0.912964, -0.198208, 0.287367, 0.952422, 0.924666, -0.180426, 0.254487, 0.987551, 0.934429, -0.161525, 0.222226, 1.02142, 0.943485, -0.141197, 0.191143, 1.05218, 0.9521, -0.120085, 0.161112, 1.07937, 0.957876, -0.0975881, 0.130982, 1.10403, 0.966943, -0.0726842, 0.0990553, 1.12616, 0.978313, -0.0483705, 0.0662818, 1.14619, 0.990048, -0.0239072, 0.0329243, 1.16413, 0.999984, 461885e-9, -772859e-10, 1.18099, 0.321287, -935049e-11, 0.455413, 659662e-11, 0.332595, -237513e-9, 0.471437, 167562e-9, 0.332729, -949964e-9, 0.471618, 670192e-9, 0.332305, -213618e-8, 0.471028, 150712e-8, 0.332326, -379765e-8, 0.471055, 267959e-8, 0.332344, -593353e-8, 0.471072, 418751e-8, 0.332356, -854349e-8, 0.471077, 603172e-8, 0.332403, -0.0116268, 0.471121, 821362e-8, 0.332461, -0.0151824, 0.47117, 0.0107357, 0.332552, -0.0192088, 0.471251, 0.0136014, 0.332657, -0.0237024, 0.47133, 0.0168152, 0.332835, -0.0286615, 0.471487, 0.0203853, 0.333083, -0.0340765, 0.471708, 0.0243212, 0.333547, -0.0398563, 0.47219, 0.0286518, 0.333989, -0.0460916, 0.472587, 0.0333763, 0.334532, -0.0527897, 0.473054, 0.0385084, 0.335167, -0.0599284, 0.473568, 0.0440638, 0.33608, -0.0673514, 0.474362, 0.0500962, 0.337146, -0.0752237, 0.475231, 0.0566022, 0.338462, -0.083418, 0.476282, 0.0636272, 0.34014, -0.0919382, 0.477615, 0.0712153, 0.342341, -0.100741, 0.479404, 0.079417, 0.345088, -0.109905, 0.481618, 0.0882631, 0.349049, -0.119369, 0.485081, 0.0978851, 0.353939, -0.129033, 0.489317, 0.108336, 0.359893, -0.139038, 0.494309, 0.119698, 0.366945, -0.149411, 0.499983, 0.132024, 0.375814, -0.159843, 0.507185, 0.145558, 0.387112, -0.170664, 0.516392, 0.160433, 0.40023, -0.181897, 0.526519, 0.176648, 0.412555, -0.192785, 0.53423, 0.193922, 0.427023, -0.203663, 0.542741, 0.212662, 0.443685, -0.214695, 0.552066, 0.232944, 0.461499, -0.225561, 0.560762, 0.254495, 0.480975, -0.236257, 0.569421, 0.277531, 0.501, -0.24639, 0.576101, 0.301724, 0.521691, -0.256101, 0.581493, 0.327112, 0.543478, -0.265289, 0.585221, 0.353917, 0.566094, -0.273938, 0.587614, 0.381941, 0.589578, -0.281679, 0.587991, 0.41172, 0.614583, -0.287655, 0.585928, 0.444148, 0.641813, -0.292228, 0.582092, 0.478617, 0.666189, -0.295172, 0.57398, 0.51397, 0.690475, -0.29648, 0.561676, 0.550118, 0.715543, -0.296203, 0.548758, 0.586933, 0.740405, -0.293999, 0.532792, 0.62384, 0.762183, -0.28998, 0.512735, 0.660723, 0.786069, -0.28478, 0.492402, 0.69807, 0.806812, -0.277568, 0.469058, 0.734422, 0.826987, -0.268951, 0.443017, 0.770946, 0.844588, -0.259049, 0.415501, 0.80699, 0.863725, -0.2471, 0.387328, 0.842107, 0.879137, -0.234157, 0.356108, 0.878078, 0.894634, -0.218719, 0.324315, 0.914058, 0.909162, -0.201293, 0.291813, 0.949922, 0.92072, -0.18267, 0.258474, 0.985337, 0.93158, -0.163212, 0.225593, 1.0205, 0.941238, -0.142771, 0.193986, 1.05273, 0.949293, -0.120956, 0.163392, 1.08075, 0.956226, -0.0985743, 0.132934, 1.10559, 0.96546, -0.075118, 0.101255, 1.12823, 0.977403, -0.0497921, 0.0675441, 1.149, 0.989648, -0.0241574, 0.0334681, 1.16765, 1.00001, 5762e-7, -184807e-9, 1.18519, 0.303474, -916603e-11, 0.4542, 61243e-10, 0.308894, -232869e-9, 0.462306, 155592e-9, 0.309426, -931661e-9, 0.463093, 622499e-9, 0.308643, -20949e-7, 0.461933, 139979e-8, 0.308651, -37242e-7, 0.461941, 248874e-8, 0.308662, -581873e-8, 0.46195, 388933e-8, 0.308687, -837818e-8, 0.461974, 560247e-8, 0.308728, -0.0114016, 0.462011, 762948e-8, 0.308789, -0.0148884, 0.462067, 997326e-8, 0.308882, -0.0188369, 0.462151, 0.0126375, 0.309007, -0.0232436, 0.462263, 0.0156271, 0.30918, -0.0281054, 0.462417, 0.0189498, 0.309442, -0.0334065, 0.462667, 0.0226167, 0.309901, -0.0390589, 0.463162, 0.0266614, 0.310331, -0.0452042, 0.463555, 0.0310715, 0.310858, -0.0517735, 0.464019, 0.0358698, 0.311576, -0.0587359, 0.464669, 0.0410848, 0.312436, -0.0660383, 0.465406, 0.0467453, 0.313526, -0.0737266, 0.466339, 0.0528718, 0.314903, -0.0817574, 0.467504, 0.0595039, 0.316814, -0.090167, 0.469226, 0.0666888, 0.318965, -0.0987555, 0.470981, 0.0744658, 0.322077, -0.107792, 0.473814, 0.082912, 0.325947, -0.117098, 0.477241, 0.0920846, 0.331008, -0.126602, 0.48184, 0.102137, 0.337893, -0.136619, 0.488334, 0.113135, 0.345106, -0.146838, 0.494415, 0.12511, 0.355111, -0.157357, 0.503275, 0.138356, 0.365095, -0.167955, 0.510966, 0.152686, 0.378344, -0.179157, 0.521508, 0.16856, 0.391599, -0.190143, 0.530455, 0.18561, 0.407786, -0.20123, 0.541275, 0.204308, 0.425294, -0.212456, 0.551784, 0.224623, 0.444021, -0.223568, 0.561493, 0.246172, 0.463418, -0.234154, 0.569886, 0.268979, 0.484077, -0.244546, 0.577116, 0.293411, 0.505513, -0.254301, 0.582914, 0.318936, 0.527672, -0.263564, 0.587208, 0.345856, 0.550565, -0.272332, 0.589277, 0.374054, 0.573656, -0.280011, 0.588426, 0.403276, 0.59827, -0.286924, 0.587504, 0.43474, 0.624731, -0.291994, 0.583401, 0.468767, 0.652396, -0.295159, 0.576997, 0.504411, 0.67732, -0.296954, 0.565863, 0.54114, 0.703147, -0.296877, 0.552316, 0.57816, 0.728715, -0.295147, 0.536773, 0.616124, 0.752448, -0.291275, 0.51771, 0.653885, 0.775169, -0.285905, 0.496087, 0.691537, 0.799307, -0.279064, 0.474232, 0.729251, 0.819482, -0.270294, 0.447676, 0.766267, 0.837659, -0.260032, 0.419656, 0.802616, 0.856903, -0.248497, 0.391328, 0.838583, 0.873325, -0.235252, 0.360285, 0.874711, 0.889788, -0.221126, 0.329215, 0.91077, 0.904486, -0.204304, 0.296392, 0.94653, 0.917711, -0.185562, 0.262159, 0.983828, 0.928969, -0.165635, 0.229142, 1.01955, 0.939707, -0.14442, 0.19673, 1.05317, 0.948167, -0.122147, 0.165095, 1.0823, 0.955222, -0.099098, 0.13451, 1.10791, 0.964401, -0.0755332, 0.102476, 1.1312, 0.976605, -0.0513817, 0.0689667, 1.15218, 0.989085, -0.0258499, 0.034506, 1.17129, 0.999908, 617773e-9, -271268e-9, 1.18961, 0.285803, -905752e-11, 0.452348, 572272e-11, 0.284689, -22732e-8, 0.450581, 143626e-9, 0.285263, -910214e-9, 0.451482, 575099e-9, 0.285302, -204784e-8, 0.451553, 129395e-8, 0.285318, -364057e-8, 0.451574, 23006e-7, 0.28533, -568813e-8, 0.451585, 359547e-8, 0.285361, -819001e-8, 0.451618, 517934e-8, 0.285397, -0.0111458, 0.45165, 7054e-6, 0.285447, -0.0145536, 0.451688, 922167e-8, 0.285527, -0.0184127, 0.451758, 0.0116869, 0.285688, -0.0227207, 0.451929, 0.0144555, 0.28584, -0.0274712, 0.452055, 0.0175341, 0.286136, -0.0326278, 0.452369, 0.0209406, 0.286574, -0.0381792, 0.452853, 0.0246965, 0.287012, -0.0441879, 0.453272, 0.0287996, 0.287542, -0.0506096, 0.453752, 0.033268, 0.288299, -0.0573634, 0.454488, 0.0381504, 0.289186, -0.0645458, 0.455294, 0.0434447, 0.290302, -0.0720405, 0.456301, 0.0491973, 0.291776, -0.0799046, 0.457648, 0.0554453, 0.29372, -0.088117, 0.459483, 0.0622311, 0.296052, -0.0965328, 0.461571, 0.0695992, 0.299563, -0.105409, 0.465085, 0.077658, 0.30335, -0.114553, 0.468506, 0.0864176, 0.309167, -0.123917, 0.474423, 0.0961078, 0.31529, -0.13381, 0.47995, 0.106643, 0.324163, -0.144021, 0.488592, 0.118322, 0.333272, -0.154382, 0.496461, 0.131133, 0.344224, -0.165015, 0.50562, 0.145208, 0.357733, -0.176168, 0.516719, 0.16073, 0.373046, -0.187468, 0.528513, 0.177807, 0.38788, -0.198488, 0.537713, 0.196072, 0.405133, -0.209545, 0.547999, 0.21605, 0.423845, -0.220724, 0.55759, 0.237484, 0.443777, -0.231518, 0.566246, 0.26039, 0.464824, -0.242035, 0.574326, 0.284835, 0.486635, -0.251898, 0.58037, 0.310518, 0.51012, -0.261304, 0.58568, 0.337678, 0.535301, -0.270384, 0.590197, 0.366242, 0.559193, -0.27841, 0.590569, 0.395873, 0.583544, -0.285325, 0.588161, 0.426857, 0.608834, -0.291113, 0.584249, 0.459477, 0.635753, -0.294882, 0.57763, 0.494734, 0.664367, -0.297088, 0.569479, 0.532023, 0.689688, -0.297364, 0.555064, 0.569629, 0.715732, -0.295949, 0.539522, 0.608124, 0.741307, -0.292259, 0.521613, 0.646231, 0.764949, -0.287063, 0.49969, 0.684938, 0.788599, -0.28012, 0.476747, 0.723548, 0.81048, -0.27153, 0.45116, 0.761135, 0.831372, -0.261289, 0.424101, 0.798916, 0.850092, -0.249559, 0.39443, 0.835952, 0.867777, -0.236348, 0.363849, 0.871606, 0.884632, -0.221569, 0.332477, 0.907843, 0.90047, -0.20618, 0.300667, 0.944187, 0.914524, -0.188771, 0.266552, 0.981371, 0.926892, -0.168362, 0.232349, 1.01841, 0.937951, -0.146761, 0.199359, 1.05308, 0.947236, -0.123813, 0.1675, 1.0839, 0.954367, -0.099984, 0.136166, 1.11047, 0.963907, -0.0759278, 0.103808, 1.13414, 0.976218, -0.0511367, 0.0697061, 1.15575, 0.988772, -0.0267415, 0.0352529, 1.17531, 0.999888, -520778e-9, 289926e-9, 1.19389, 0.263546, -883274e-11, 0.441896, 526783e-11, 0.262352, -221849e-9, 0.439889, 132311e-9, 0.262325, -886683e-9, 0.439848, 528824e-9, 0.26228, -199476e-8, 0.439765, 118975e-8, 0.262372, -354671e-8, 0.439922, 211568e-8, 0.26239, -554141e-8, 0.439941, 330652e-8, 0.262412, -797888e-8, 0.439961, 476346e-8, 0.262453, -0.0108584, 0.440002, 648818e-8, 0.262528, -0.0141788, 0.440085, 84835e-7, 0.262615, -0.017938, 0.440166, 0.0107533, 0.262744, -0.0221346, 0.440291, 0.0133044, 0.262939, -0.026762, 0.440493, 0.0161445, 0.263277, -0.0317573, 0.440889, 0.0192974, 0.26368, -0.0371832, 0.441338, 0.0227699, 0.264106, -0.0430371, 0.441753, 0.0265698, 0.264624, -0.0493035, 0.442227, 0.0307178, 0.265378, -0.0558669, 0.442985, 0.0352616, 0.266253, -0.0628718, 0.443795, 0.0401968, 0.267478, -0.0701569, 0.445008, 0.04559, 0.269062, -0.077845, 0.446599, 0.0514539, 0.270926, -0.0857941, 0.448349, 0.0578382, 0.273693, -0.0940773, 0.451221, 0.0648363, 0.276746, -0.102704, 0.454097, 0.0724389, 0.281693, -0.111735, 0.459517, 0.0808744, 0.287335, -0.121004, 0.46531, 0.0901551, 0.29448, -0.130734, 0.472605, 0.100371, 0.30257, -0.140777, 0.480251, 0.111644, 0.312465, -0.15111, 0.489444, 0.124111, 0.324856, -0.16189, 0.500919, 0.137979, 0.33774, -0.172946, 0.511317, 0.153163, 0.35255, -0.184152, 0.522684, 0.169817, 0.367786, -0.19522, 0.53248, 0.187886, 0.385474, -0.20632, 0.543326, 0.207634, 0.404976, -0.217744, 0.554109, 0.229165, 0.425203, -0.228691, 0.563395, 0.252068, 0.446704, -0.239299, 0.571565, 0.276471, 0.468951, -0.249348, 0.577935, 0.302323, 0.493487, -0.258933, 0.584309, 0.329882, 0.517861, -0.268009, 0.58773, 0.358525, 0.543309, -0.276238, 0.589612, 0.388585, 0.569704, -0.28356, 0.589294, 0.419787, 0.594871, -0.289497, 0.585137, 0.452114, 0.622555, -0.294452, 0.580356, 0.486466, 0.651167, -0.296918, 0.57185, 0.523079, 0.677332, -0.297647, 0.558428, 0.5611, 0.703718, -0.296321, 0.542232, 0.599592, 0.730262, -0.293339, 0.524541, 0.639138, 0.754304, -0.288036, 0.502691, 0.677978, 0.778051, -0.281018, 0.479212, 0.716537, 0.801557, -0.272414, 0.454071, 0.75586, 0.822559, -0.262419, 0.425952, 0.794477, 0.843051, -0.250702, 0.397313, 0.832664, 0.86232, -0.237264, 0.366534, 0.869876, 0.879044, -0.222716, 0.334816, 0.906973, 0.896362, -0.206827, 0.303143, 0.943558, 0.910342, -0.189659, 0.269699, 0.979759, 0.924119, -0.171108, 0.236411, 1.01718, 0.935374, -0.149579, 0.202224, 1.05289, 0.944295, -0.126295, 0.16989, 1.08496, 0.952227, -0.101511, 0.138089, 1.11256, 0.962041, -0.0766392, 0.105053, 1.1375, 0.97528, -0.0511967, 0.070329, 1.15983, 0.988476, -0.025463, 0.0351268, 1.17987, 0.999962, 286808e-10, 145564e-10, 1.19901, 0.227089, -841413e-11, 0.404216, 472707e-11, 0.239725, -215083e-9, 0.426708, 120833e-9, 0.239904, -860718e-9, 0.427028, 483555e-9, 0.239911, -193661e-8, 0.427039, 108806e-8, 0.239914, -344276e-8, 0.42704, 193457e-8, 0.239933, -537907e-8, 0.427064, 302363e-8, 0.239944, -774482e-8, 0.427065, 435604e-8, 0.239993, -0.01054, 0.427122, 593398e-8, 0.240052, -0.0137626, 0.427179, 775987e-8, 0.240148, -0.0174115, 0.427279, 983854e-8, 0.240278, -0.021484, 0.42741, 0.0121763, 0.240472, -0.0259729, 0.427618, 0.0147827, 0.240839, -0.0308131, 0.428086, 0.0176837, 0.241201, -0.0360893, 0.428482, 0.0208775, 0.241626, -0.0417723, 0.428907, 0.0243821, 0.242207, -0.0478337, 0.42952, 0.0282228, 0.24298, -0.0542199, 0.430332, 0.0324333, 0.243881, -0.0610015, 0.431222, 0.0370252, 0.245123, -0.0680874, 0.432512, 0.0420535, 0.24667, -0.0755482, 0.434088, 0.0475414, 0.248779, -0.0832873, 0.436323, 0.0535542, 0.251665, -0.0913546, 0.439509, 0.0601716, 0.255305, -0.0998489, 0.443478, 0.0674282, 0.260049, -0.108576, 0.448713, 0.0754673, 0.266192, -0.117754, 0.455524, 0.084339, 0.273158, -0.127294, 0.4627, 0.0941683, 0.282131, -0.137311, 0.472068, 0.10515, 0.293332, -0.147736, 0.483565, 0.117402, 0.304667, -0.158357, 0.493702, 0.130824, 0.317785, -0.169274, 0.504708, 0.145724, 0.333245, -0.180595, 0.517107, 0.16215, 0.349843, -0.191892, 0.528849, 0.180149, 0.367944, -0.203168, 0.540301, 0.199746, 0.387579, -0.214443, 0.551514, 0.221047, 0.408247, -0.225624, 0.560906, 0.243981, 0.43014, -0.236422, 0.56959, 0.268513, 0.452669, -0.24654, 0.576098, 0.294409, 0.476196, -0.256157, 0.580925, 0.322002, 0.501157, -0.265289, 0.584839, 0.351052, 0.527632, -0.273671, 0.587614, 0.3812, 0.555754, -0.281254, 0.589119, 0.412994, 0.581682, -0.287448, 0.585204, 0.445498, 0.608196, -0.292614, 0.579006, 0.479505, 0.635661, -0.296068, 0.571297, 0.514643, 0.664999, -0.297395, 0.560855, 0.552213, 0.691039, -0.296645, 0.544525, 0.591365, 0.7179, -0.293785, 0.526535, 0.630883, 0.744059, -0.289089, 0.50545, 0.670932, 0.76863, -0.282239, 0.482514, 0.710904, 0.793273, -0.273688, 0.457246, 0.750259, 0.814731, -0.26328, 0.428872, 0.78948, 0.835603, -0.251526, 0.399384, 0.828597, 0.85489, -0.238339, 0.368811, 0.866892, 0.872828, -0.223607, 0.336617, 0.90563, 0.889462, -0.207538, 0.303997, 0.943538, 0.904929, -0.190297, 0.270812, 0.980591, 0.919101, -0.172034, 0.237453, 1.01935, 0.930536, -0.152058, 0.204431, 1.05498, 0.941223, -0.129515, 0.172495, 1.08717, 0.94982, -0.104263, 0.140175, 1.11551, 0.960592, -0.0781944, 0.106465, 1.14098, 0.974629, -0.051688, 0.0711592, 1.16418, 0.98811, -0.0253929, 0.0354432, 1.18465, 1.00004, 804378e-9, -330876e-9, 1.20462, 0.214668, -821282e-11, 0.406619, 433582e-11, 0.218053, -208144e-9, 0.413025, 109887e-9, 0.217987, -832212e-9, 0.412901, 439362e-9, 0.217971, -187246e-8, 0.412876, 988623e-9, 0.217968, -332855e-8, 0.41286, 175772e-8, 0.217985, -520055e-8, 0.412882, 274729e-8, 0.218014, -748814e-8, 0.412916, 395842e-8, 0.218054, -0.0101901, 0.412957, 539274e-8, 0.218106, -0.0133057, 0.413005, 705348e-8, 0.218217, -0.0168342, 0.413139, 894581e-8, 0.218338, -0.0207707, 0.413258, 0.0110754, 0.21855, -0.0251001, 0.413509, 0.0134551, 0.218913, -0.0297861, 0.413992, 0.0161081, 0.219265, -0.0348956, 0.414383, 0.0190307, 0.219696, -0.0403909, 0.414839, 0.0222458, 0.220329, -0.0462003, 0.415567, 0.025792, 0.220989, -0.0524208, 0.41621, 0.0296637, 0.222027, -0.058948, 0.417385, 0.0339323, 0.223301, -0.0658208, 0.418779, 0.0386055, 0.224988, -0.0730347, 0.420665, 0.0437355, 0.227211, -0.0805274, 0.423198, 0.0493844, 0.230131, -0.088395, 0.426566, 0.0556135, 0.233908, -0.0966208, 0.43091, 0.0624829, 0.239092, -0.105223, 0.437148, 0.0701636, 0.245315, -0.11424, 0.444302, 0.0786949, 0.253166, -0.12368, 0.453262, 0.0882382, 0.262374, -0.133569, 0.463211, 0.0988682, 0.273145, -0.143836, 0.474271, 0.110727, 0.285512, -0.154577, 0.4863, 0.123945, 0.299512, -0.165501, 0.498817, 0.138581, 0.314287, -0.176698, 0.510341, 0.154676, 0.331083, -0.188066, 0.522583, 0.172459, 0.349615, -0.199597, 0.534879, 0.191979, 0.369318, -0.210843, 0.546083, 0.21309, 0.390377, -0.222068, 0.5562, 0.235998, 0.412411, -0.233059, 0.564704, 0.260518, 0.435715, -0.24357, 0.572314, 0.286795, 0.461196, -0.253356, 0.579395, 0.314559, 0.485587, -0.262362, 0.581985, 0.343581, 0.511908, -0.270895, 0.584347, 0.374367, 0.539798, -0.278452, 0.58505, 0.406015, 0.567974, -0.284877, 0.583344, 0.439168, 0.594303, -0.290124, 0.577348, 0.473005, 0.622951, -0.294183, 0.570751, 0.508534, 0.652404, -0.296389, 0.561541, 0.544764, 0.679291, -0.296605, 0.546426, 0.582927, 0.706437, -0.294095, 0.528599, 0.622681, 0.734485, -0.28978, 0.508676, 0.663567, 0.758841, -0.283363, 0.484768, 0.704092, 0.78537, -0.275015, 0.460434, 0.745101, 0.807315, -0.264689, 0.432166, 0.784712, 0.8271, -0.252597, 0.401807, 0.824241, 0.849191, -0.239154, 0.371458, 0.863803, 0.867046, -0.224451, 0.338873, 0.903063, 0.8852, -0.208342, 0.306175, 0.942763, 0.901771, -0.190684, 0.272759, 0.981559, 0.915958, -0.172105, 0.239306, 1.02048, 0.928046, -0.152214, 0.206071, 1.05765, 0.939961, -0.130247, 0.17367, 1.08999, 0.948711, -0.10672, 0.142201, 1.11829, 0.959305, -0.0808688, 0.108454, 1.14467, 0.973009, -0.0539145, 0.0728109, 1.16839, 0.987631, -0.0262947, 0.0360625, 1.19004, 0.999978, 132758e-8, -559424e-9, 1.21058, 0.193925, -793421e-11, 0.391974, 392537e-11, 0.196746, -200315e-9, 0.397675, 991033e-10, 0.19667, -801099e-9, 0.397521, 396342e-9, 0.196633, -180246e-8, 0.397445, 891829e-9, 0.196654, -320443e-8, 0.397482, 158582e-8, 0.196659, -500647e-8, 0.39748, 247867e-8, 0.196683, -72086e-7, 0.397506, 357167e-8, 0.196728, -981001e-8, 0.397562, 486675e-8, 0.196792, -0.0128096, 0.397633, 636707e-8, 0.19689, -0.0162055, 0.397746, 807752e-8, 0.197017, -0.0199943, 0.397884, 0.0100052, 0.19729, -0.024139, 0.39827, 0.0121691, 0.197583, -0.0286671, 0.398639, 0.0145755, 0.197927, -0.0335858, 0.399034, 0.0172355, 0.198383, -0.0388806, 0.399554, 0.0201718, 0.199002, -0.0444736, 0.400289, 0.0234194, 0.199739, -0.0504583, 0.401111, 0.026984, 0.200784, -0.056729, 0.402349, 0.0309217, 0.202075, -0.0633643, 0.403841, 0.0352496, 0.203898, -0.0703247, 0.406076, 0.0400313, 0.206199, -0.0775565, 0.408841, 0.0453282, 0.209252, -0.085184, 0.41259, 0.0511794, 0.213638, -0.0931994, 0.418288, 0.0577459, 0.21881, -0.101617, 0.424681, 0.0650508, 0.225642, -0.11052, 0.433429, 0.0732759, 0.233717, -0.119772, 0.442897, 0.0824683, 0.242823, -0.129505, 0.452888, 0.0927484, 0.254772, -0.139906, 0.466407, 0.104417, 0.266603, -0.150402, 0.477413, 0.117211, 0.28073, -0.161395, 0.490519, 0.131598, 0.295399, -0.172465, 0.50201, 0.147407, 0.312705, -0.183982, 0.515311, 0.165031, 0.331335, -0.195532, 0.52786, 0.184336, 0.351037, -0.206971, 0.5392, 0.205361, 0.372175, -0.218117, 0.54941, 0.228043, 0.394548, -0.229327, 0.558642, 0.25267, 0.419598, -0.240052, 0.567861, 0.279071, 0.443922, -0.249937, 0.573332, 0.306882, 0.471495, -0.259407, 0.58013, 0.33661, 0.496769, -0.267749, 0.580564, 0.367328, 0.524951, -0.275524, 0.581696, 0.399753, 0.55318, -0.282148, 0.579885, 0.433134, 0.581577, -0.287533, 0.575471, 0.467534, 0.609231, -0.291612, 0.567445, 0.502943, 0.637478, -0.293911, 0.557657, 0.53871, 0.667795, -0.295096, 0.546535, 0.576568, 0.694272, -0.294073, 0.529561, 0.614929, 0.722937, -0.290386, 0.510561, 0.655909, 0.749682, -0.284481, 0.487846, 0.697663, 0.774754, -0.276188, 0.462487, 0.738515, 0.799301, -0.266215, 0.43481, 0.779802, 0.820762, -0.254116, 0.404879, 0.820045, 0.843231, -0.240393, 0.374559, 0.860294, 0.861857, -0.225503, 0.341582, 0.900965, 0.880815, -0.209382, 0.308778, 0.941727, 0.89766, -0.19155, 0.275232, 0.980916, 0.912926, -0.172346, 0.240938, 1.02162, 0.926391, -0.151799, 0.207223, 1.0597, 0.938429, -0.129968, 0.17484, 1.09291, 0.947834, -0.10651, 0.142984, 1.12248, 0.958432, -0.0824098, 0.109902, 1.149, 0.972402, -0.0565242, 0.0744454, 1.1733, 0.987191, -0.028427, 0.0373794, 1.19538, 0.999975, 385685e-10, -4203e-8, 1.21676, 0.178114, -766075e-11, 0.385418, 354027e-11, 0.176074, -191966e-9, 0.381002, 887135e-10, 0.17601, -767549e-9, 0.380861, 354715e-9, 0.17598, -172696e-8, 0.380798, 798168e-9, 0.175994, -307012e-8, 0.380824, 141928e-8, 0.176017, -479684e-8, 0.380858, 221859e-8, 0.176019, -690648e-8, 0.380839, 319714e-8, 0.176072, -939888e-8, 0.380913, 43572e-7, 0.176131, -0.0122726, 0.380979, 5702e-6, 0.176239, -0.0155264, 0.38112, 723689e-8, 0.176371, -0.0191551, 0.381272, 896907e-8, 0.176638, -0.023117, 0.381669, 0.0109194, 0.176912, -0.0274633, 0.382015, 0.0130903, 0.177279, -0.032173, 0.382476, 0.0154949, 0.17774, -0.0372219, 0.383041, 0.0181669, 0.178344, -0.0426132, 0.38378, 0.0211209, 0.179153, -0.0483309, 0.384773, 0.0243899, 0.180197, -0.0543447, 0.386076, 0.0280062, 0.181581, -0.0607122, 0.387809, 0.032004, 0.18344, -0.0673855, 0.390205, 0.036453, 0.186139, -0.0743989, 0.393944, 0.0414162, 0.189432, -0.0817731, 0.39832, 0.0469394, 0.193795, -0.0895464, 0.404188, 0.0531442, 0.199641, -0.0978264, 0.4121, 0.0601374, 0.206679, -0.106499, 0.421425, 0.0680078, 0.214865, -0.115654, 0.431504, 0.076919, 0.224406, -0.125268, 0.442526, 0.0868835, 0.235876, -0.135475, 0.455465, 0.0981875, 0.248335, -0.146023, 0.4681, 0.110759, 0.262868, -0.157016, 0.482069, 0.124885, 0.278962, -0.168245, 0.496182, 0.140645, 0.295082, -0.17958, 0.507401, 0.157838, 0.313738, -0.191227, 0.520252, 0.17695, 0.333573, -0.202718, 0.531708, 0.197817, 0.356433, -0.214424, 0.544509, 0.220785, 0.378853, -0.225492, 0.55373, 0.245306, 0.402717, -0.236236, 0.561348, 0.271593, 0.428375, -0.246568, 0.568538, 0.299776, 0.454724, -0.255941, 0.573462, 0.329433, 0.482291, -0.264511, 0.576356, 0.360598, 0.509706, -0.272129, 0.576446, 0.393204, 0.538805, -0.278979, 0.575298, 0.427227, 0.568919, -0.284528, 0.572154, 0.462157, 0.596804, -0.288801, 0.564691, 0.497997, 0.625987, -0.291334, 0.555134, 0.534467, 0.656414, -0.292722, 0.545051, 0.571736, 0.683916, -0.292185, 0.528813, 0.610158, 0.711809, -0.290043, 0.51106, 0.649061, 0.739547, -0.285246, 0.490103, 0.690081, 0.766914, -0.277647, 0.465523, 0.732554, 0.791375, -0.267603, 0.437718, 0.773982, 0.814772, -0.256109, 0.40882, 0.81609, 0.836691, -0.242281, 0.377823, 0.856849, 0.856984, -0.227155, 0.34496, 0.898363, 0.876332, -0.210395, 0.311335, 0.939471, 0.894988, -0.192612, 0.277703, 0.980799, 0.911113, -0.173236, 0.243019, 1.02215, 0.924092, -0.152258, 0.209037, 1.06139, 0.936828, -0.129575, 0.175909, 1.09635, 0.946869, -0.10594, 0.143852, 1.12707, 0.958284, -0.081318, 0.110289, 1.15419, 0.972325, -0.0556133, 0.0747232, 1.17909, 0.986878, -0.0297899, 0.0383149, 1.20163, 0.999936, -197169e-8, 912402e-9, 1.22338, 0.151174, -720365e-11, 0.351531, 309789e-11, 0.155594, -18279e-8, 0.361806, 78608e-9, 0.156099, -731569e-9, 0.362982, 314615e-9, 0.156053, -164578e-8, 0.362869, 707845e-9, 0.156093, -29261e-7, 0.362961, 125884e-8, 0.156099, -457155e-8, 0.362959, 196783e-8, 0.15612, -658224e-8, 0.362982, 283622e-8, 0.156168, -895774e-8, 0.363048, 386625e-8, 0.156221, -0.0116962, 0.363101, 506109e-8, 0.156324, -0.0147973, 0.363241, 642675e-8, 0.156476, -0.0182503, 0.363448, 797175e-8, 0.156731, -0.0220266, 0.36384, 971484e-8, 0.156994, -0.026176, 0.364179, 0.0116575, 0.157341, -0.0306701, 0.36462, 0.0138207, 0.157867, -0.0354591, 0.365364, 0.0162356, 0.15846, -0.0406141, 0.366111, 0.0189092, 0.159308, -0.0460519, 0.367248, 0.021885, 0.160426, -0.0518096, 0.368767, 0.0252004, 0.161877, -0.0578906, 0.370745, 0.0288825, 0.163995, -0.0642812, 0.373831, 0.0330139, 0.16655, -0.0710067, 0.377366, 0.0376283, 0.170237, -0.0781522, 0.382799, 0.0428493, 0.175096, -0.0857172, 0.389915, 0.0487324, 0.181069, -0.0938025, 0.398487, 0.0554214, 0.188487, -0.102363, 0.408799, 0.0630189, 0.197029, -0.111343, 0.419991, 0.071634, 0.206684, -0.120812, 0.431455, 0.0812797, 0.218698, -0.131033, 0.445746, 0.0923651, 0.230726, -0.141373, 0.457471, 0.104545, 0.245516, -0.152387, 0.472388, 0.118449, 0.261551, -0.163628, 0.486671, 0.133923, 0.277437, -0.174814, 0.49762, 0.150849, 0.296662, -0.186713, 0.51162, 0.169924, 0.31795, -0.198513, 0.525435, 0.190848, 0.339422, -0.210119, 0.536267, 0.213504, 0.362143, -0.221354, 0.545982, 0.237947, 0.387198, -0.23224, 0.555364, 0.264427, 0.412349, -0.24257, 0.561489, 0.292519, 0.439274, -0.252284, 0.566903, 0.322561, 0.466779, -0.261023, 0.569614, 0.353952, 0.496011, -0.26899, 0.571589, 0.387278, 0.524964, -0.275498, 0.570325, 0.421356, 0.556518, -0.281449, 0.568792, 0.457314, 0.584363, -0.285526, 0.560268, 0.493199, 0.614214, -0.28844, 0.55205, 0.530276, 0.645684, -0.289777, 0.541906, 0.56855, 0.673446, -0.289722, 0.526464, 0.606927, 0.701924, -0.287792, 0.509872, 0.645945, 0.73037, -0.284315, 0.490649, 0.685564, 0.757405, -0.278804, 0.467964, 0.726511, 0.784025, -0.269543, 0.441468, 0.768601, 0.808255, -0.258117, 0.41216, 0.811321, 0.830739, -0.244728, 0.380606, 0.853496, 0.851914, -0.229428, 0.348111, 0.895374, 0.872586, -0.212508, 0.314732, 0.937674, 0.891581, -0.194025, 0.280338, 0.979869, 0.907641, -0.174711, 0.245203, 1.02253, 0.922233, -0.153509, 0.21077, 1.06371, 0.935878, -0.130418, 0.177399, 1.09972, 0.946338, -0.105558, 0.144507, 1.13124, 0.957265, -0.080059, 0.110508, 1.15973, 0.971668, -0.0539766, 0.0742311, 1.18515, 0.9866, -0.0277101, 0.0375224, 1.20858, 1.00021, -515531e-9, 135226e-9, 1.23135, 0.137468, -686011e-11, 0.345041, 273315e-11, 0.13703, -173378e-9, 0.343936, 690761e-10, 0.136986, -693048e-9, 0.34383, 276126e-9, 0.136964, -155931e-8, 0.343761, 621337e-9, 0.137003, -277211e-8, 0.343863, 110494e-8, 0.137012, -433103e-8, 0.343868, 172744e-8, 0.137043, -623606e-8, 0.343916, 249022e-8, 0.13709, -84868e-7, 0.343986, 339559e-8, 0.137145, -0.0110814, 0.344045, 444687e-8, 0.137242, -0.0140187, 0.344177, 565007e-8, 0.137431, -0.0172713, 0.344491, 701868e-8, 0.137644, -0.0208605, 0.344805, 856042e-8, 0.13791, -0.024792, 0.345172, 0.0102863, 0.138295, -0.0290461, 0.345734, 0.0122185, 0.138764, -0.0335957, 0.346371, 0.0143771, 0.139415, -0.038467, 0.347298, 0.0167894, 0.140272, -0.0436176, 0.348527, 0.0194895, 0.141457, -0.0491016, 0.350276, 0.0225043, 0.14303, -0.0548764, 0.352646, 0.0258962, 0.145289, -0.0610096, 0.356206, 0.0297168, 0.148502, -0.0674777, 0.361488, 0.0340562, 0.152188, -0.074345, 0.367103, 0.0389534, 0.157359, -0.0817442, 0.375247, 0.0445541, 0.16379, -0.0896334, 0.385064, 0.0509535, 0.171376, -0.098005, 0.396082, 0.0582611, 0.179901, -0.106817, 0.407418, 0.06654, 0.189892, -0.116239, 0.420031, 0.075994, 0.201838, -0.12627, 0.434321, 0.0867239, 0.214311, -0.136701, 0.447631, 0.0987517, 0.228902, -0.147616, 0.462046, 0.112353, 0.245107, -0.158871, 0.476942, 0.127605, 0.262292, -0.170261, 0.490285, 0.144469, 0.281215, -0.182017, 0.503783, 0.163282, 0.301058, -0.193729, 0.515505, 0.183873, 0.322752, -0.205512, 0.52682, 0.206466, 0.347547, -0.217214, 0.539473, 0.231194, 0.370969, -0.227966, 0.546625, 0.257288, 0.397533, -0.238555, 0.55472, 0.285789, 0.42398, -0.248278, 0.559468, 0.315746, 0.452928, -0.257422, 0.564095, 0.347724, 0.482121, -0.265306, 0.565426, 0.380922, 0.510438, -0.272043, 0.563205, 0.415639, 0.541188, -0.277614, 0.561087, 0.451702, 0.571667, -0.281927, 0.554922, 0.48845, 0.602432, -0.285015, 0.546838, 0.526442, 0.634126, -0.286512, 0.537415, 0.564896, 0.662816, -0.286388, 0.522906, 0.604037, 0.692411, -0.284734, 0.507003, 0.643795, 0.720946, -0.281297, 0.488398, 0.68298, 0.748293, -0.276262, 0.466353, 0.723466, 0.776931, -0.269978, 0.443573, 0.764565, 0.801065, -0.260305, 0.415279, 0.805838, 0.825843, -0.247426, 0.384773, 0.849985, 0.84807, -0.232437, 0.352555, 0.893174, 0.869122, -0.215806, 0.318642, 0.936564, 0.888963, -0.197307, 0.28381, 0.980253, 0.905547, -0.177203, 0.247888, 1.02463, 0.918554, -0.155542, 0.212904, 1.06714, 0.931395, -0.131948, 0.1787, 1.10451, 0.941749, -0.106723, 0.145902, 1.13694, 0.954551, -0.0804939, 0.111193, 1.1666, 0.970279, -0.0534239, 0.0744697, 1.19249, 0.986117, -0.0257452, 0.0368788, 1.21665, 0.999938, 190634e-8, -10291e-7, 1.23981, 0.118493, -647439e-11, 0.32272, 23772e-10, 0.118765, -163023e-9, 0.323456, 598573e-10, 0.118772, -65212e-8, 0.323477, 239447e-9, 0.118843, -146741e-8, 0.323657, 538881e-9, 0.118804, -260846e-8, 0.323553, 95826e-8, 0.118826, -407576e-8, 0.323595, 149845e-8, 0.118846, -586826e-8, 0.323617, 216047e-8, 0.118886, -798578e-8, 0.32367, 294679e-8, 0.118947, -0.0104273, 0.323753, 386124e-8, 0.119055, -0.0131909, 0.323922, 490999e-8, 0.119241, -0.0162444, 0.324251, 610804e-8, 0.11944, -0.0196339, 0.324544, 745805e-8, 0.119739, -0.0233378, 0.325026, 897805e-8, 0.12011, -0.0273179, 0.325586, 0.0106895, 0.120571, -0.0316143, 0.326231, 0.0126073, 0.12124, -0.0361939, 0.327264, 0.0147654, 0.122162, -0.0410511, 0.328733, 0.0172001, 0.123378, -0.0462233, 0.330659, 0.0199375, 0.125183, -0.0517109, 0.333754, 0.0230498, 0.127832, -0.0575652, 0.338507, 0.026597, 0.130909, -0.0637441, 0.343666, 0.0306345, 0.135221, -0.0704302, 0.351063, 0.035273, 0.14082, -0.0776364, 0.360604, 0.0406137, 0.146781, -0.0852293, 0.369638, 0.0466788, 0.155121, -0.0935351, 0.3827, 0.0537628, 0.16398, -0.102234, 0.39522, 0.0617985, 0.173926, -0.111465, 0.40793, 0.07097, 0.185137, -0.121296, 0.42105, 0.0813426, 0.19826, -0.13169, 0.435735, 0.0931596, 0.212938, -0.142614, 0.450932, 0.106547, 0.229046, -0.153884, 0.465726, 0.121575, 0.246246, -0.165382, 0.479461, 0.138286, 0.264637, -0.176806, 0.492106, 0.15666, 0.284959, -0.188793, 0.504774, 0.17728, 0.308157, -0.200763, 0.518805, 0.19988, 0.330951, -0.21239, 0.528231, 0.224293, 0.3549, -0.223521, 0.536376, 0.250541, 0.381502, -0.234169, 0.544846, 0.278902, 0.409529, -0.244077, 0.551717, 0.309227, 0.437523, -0.253363, 0.55517, 0.341426, 0.467624, -0.261659, 0.557772, 0.37518, 0.497268, -0.268498, 0.556442, 0.41007, 0.528294, -0.274018, 0.553915, 0.446445, 0.559053, -0.278169, 0.549153, 0.483779, 0.589329, -0.281229, 0.539878, 0.522249, 0.622503, -0.282902, 0.53162, 0.561754, 0.652382, -0.282815, 0.518119, 0.601544, 0.681847, -0.281247, 0.502187, 0.641574, 0.712285, -0.277986, 0.484824, 0.682633, 0.740094, -0.273017, 0.463483, 0.723426, 0.768478, -0.266692, 0.441299, 0.763747, 0.794556, -0.258358, 0.415238, 0.805565, 0.819408, -0.248807, 0.386912, 0.847254, 0.843411, -0.236214, 0.356165, 0.891091, 0.862397, -0.219794, 0.320562, 0.936174, 0.883113, -0.201768, 0.285322, 0.982562, 0.90023, -0.181672, 0.249713, 1.02862, 0.915192, -0.159279, 0.214546, 1.07163, 0.928458, -0.134725, 0.180285, 1.10995, 0.94069, -0.10913, 0.147119, 1.14354, 0.953409, -0.0821315, 0.112492, 1.17372, 0.969537, -0.0542677, 0.0752014, 1.20043, 0.985612, -0.0259096, 0.0370361, 1.22528, 0.999835, 298198e-8, -151801e-8, 1.24959, 0.10097, -602574e-11, 0.300277, 202619e-11, 0.101577, -152164e-9, 0.302077, 511662e-10, 0.101572, -608889e-9, 0.302066, 204751e-9, 0.101566, -136997e-8, 0.302047, 460753e-9, 0.101592, -243557e-8, 0.302114, 819497e-9, 0.101608, -38053e-7, 0.30214, 128154e-8, 0.101627, -547906e-8, 0.30216, 18483e-7, 0.101669, -745647e-8, 0.302224, 252223e-8, 0.101732, -973615e-8, 0.302318, 330716e-8, 0.101844, -0.0123097, 0.302513, 421061e-8, 0.102025, -0.0151681, 0.30285, 524481e-8, 0.102224, -0.0183334, 0.303166, 64154e-7, 0.102515, -0.0217819, 0.303654, 774063e-8, 0.102886, -0.0255067, 0.304243, 92398e-7, 0.103395, -0.029514, 0.305089, 0.0109339, 0.104109, -0.0337912, 0.306301, 0.0128561, 0.105074, -0.0383565, 0.30798, 0.0150338, 0.10654, -0.0432132, 0.310726, 0.0175228, 0.108478, -0.0484244, 0.314351, 0.0203648, 0.111015, -0.0539339, 0.319032, 0.0236325, 0.114682, -0.0598885, 0.32605, 0.0274188, 0.11911, -0.0663375, 0.334109, 0.0317905, 0.124736, -0.0733011, 0.344013, 0.0368502, 0.131479, -0.0807744, 0.355358, 0.0427104, 0.139283, -0.0888204, 0.367614, 0.0494788, 0.148054, -0.0973394, 0.380072, 0.0572367, 0.159037, -0.10665, 0.395678, 0.0662704, 0.169794, -0.116221, 0.40795, 0.0763192, 0.18314, -0.126632, 0.423546, 0.087956, 0.197515, -0.137383, 0.438213, 0.101042, 0.213514, -0.148641, 0.453248, 0.115827, 0.23065, -0.160117, 0.46688, 0.132283, 0.249148, -0.171807, 0.479962, 0.150644, 0.270219, -0.183695, 0.494618, 0.171073, 0.292338, -0.195574, 0.506937, 0.193378, 0.314999, -0.207205, 0.516463, 0.217585, 0.340991, -0.218955, 0.528123, 0.24428, 0.367982, -0.229917, 0.537025, 0.272784, 0.39432, -0.239737, 0.541627, 0.302742, 0.423364, -0.249048, 0.546466, 0.335112, 0.453751, -0.257329, 0.549466, 0.369032, 0.48416, -0.264623, 0.549503, 0.404577, 0.515262, -0.270411, 0.547008, 0.441337, 0.547036, -0.274581, 0.542249, 0.479162, 0.576614, -0.277266, 0.533015, 0.517904, 0.611143, -0.279144, 0.525512, 0.558508, 0.640989, -0.279001, 0.51154, 0.598995, 0.671182, -0.277324, 0.495641, 0.639935, 0.700848, -0.273908, 0.477526, 0.681017, 0.729862, -0.269063, 0.457955, 0.722764, 0.758273, -0.262282, 0.434846, 0.764349, 0.784121, -0.254281, 0.409203, 0.806206, 0.809798, -0.24505, 0.382694, 0.848617, 0.834953, -0.233861, 0.354034, 0.892445, 0.856817, -0.221308, 0.321764, 0.936263, 0.877609, -0.205996, 0.288118, 0.982401, 0.897489, -0.186702, 0.253277, 1.02975, 0.913792, -0.164618, 0.217963, 1.07488, 0.92785, -0.140023, 0.183221, 1.11487, 0.940378, -0.11328, 0.149385, 1.14947, 0.95273, -0.0853958, 0.114152, 1.1807, 0.969059, -0.0568698, 0.0769845, 1.20912, 0.985574, -0.0276502, 0.0381186, 1.23498, 0.999943, 239052e-8, -126861e-8, 1.25987, 0.0852715, -560067e-11, 0.279021, 171162e-11, 0.0854143, -140871e-9, 0.279483, 430516e-10, 0.0854191, -563385e-9, 0.2795, 172184e-9, 0.0854188, -126753e-8, 0.279493, 387464e-9, 0.0854229, -225337e-8, 0.279501, 68918e-8, 0.0854443, -352086e-8, 0.279549, 107803e-8, 0.0854697, -506962e-8, 0.279591, 155536e-8, 0.0855093, -689873e-8, 0.279652, 212354e-8, 0.0855724, -900821e-8, 0.279752, 278703e-8, 0.0856991, -0.0113799, 0.280011, 35551e-7, 0.085855, -0.0140314, 0.280297, 443449e-8, 0.0860682, -0.016963, 0.280682, 543636e-8, 0.086344, -0.0201438, 0.281159, 65788e-7, 0.0867426, -0.0235999, 0.281886, 787977e-8, 0.087239, -0.0273069, 0.282745, 93606e-7, 0.0879815, -0.031269, 0.284139, 0.011056, 0.0891258, -0.035531, 0.28647, 0.0130065, 0.0906909, -0.0400947, 0.289708, 0.0152495, 0.0927624, -0.0449638, 0.293904, 0.0178454, 0.0958376, -0.0502427, 0.300471, 0.0208915, 0.0995827, -0.0559514, 0.30806, 0.0244247, 0.104526, -0.0622152, 0.317874, 0.0285721, 0.110532, -0.0690046, 0.329332, 0.0334227, 0.117385, -0.0763068, 0.341217, 0.0390466, 0.12522, -0.084184, 0.353968, 0.0455786, 0.134037, -0.0925248, 0.366797, 0.0530773, 0.144014, -0.101487, 0.380209, 0.0617424, 0.156013, -0.111273, 0.395956, 0.071777, 0.168872, -0.121431, 0.41053, 0.0830905, 0.183089, -0.132105, 0.425073, 0.0959341, 0.198763, -0.143286, 0.439833, 0.110448, 0.216159, -0.154841, 0.454507, 0.126769, 0.234859, -0.166588, 0.468368, 0.14495, 0.255879, -0.178626, 0.482846, 0.165233, 0.27677, -0.190218, 0.493489, 0.187217, 0.301184, -0.202227, 0.506549, 0.211659, 0.325852, -0.213764, 0.5158, 0.237922, 0.352824, -0.22487, 0.525442, 0.26632, 0.380882, -0.235246, 0.532487, 0.296691, 0.410137, -0.244847, 0.537703, 0.329179, 0.439787, -0.253122, 0.540361, 0.363135, 0.472291, -0.260517, 0.542734, 0.399222, 0.501856, -0.266519, 0.538826, 0.436352, 0.534816, -0.270905, 0.535152, 0.474505, 0.565069, -0.273826, 0.525979, 0.513988, 0.597154, -0.275333, 0.516394, 0.554852, 0.630473, -0.275314, 0.506206, 0.596592, 0.660574, -0.273323, 0.489769, 0.638117, 0.692015, -0.270008, 0.472578, 0.680457, 0.720647, -0.265001, 0.452134, 0.723008, 0.750528, -0.258311, 0.430344, 0.765954, 0.777568, -0.250046, 0.405624, 0.809012, 0.80387, -0.240114, 0.378339, 0.852425, 0.828439, -0.228737, 0.349877, 0.895346, 0.851472, -0.216632, 0.318968, 0.940695, 0.873906, -0.202782, 0.287489, 0.987235, 0.89467, -0.187059, 0.254394, 1.03348, 0.912281, -0.168818, 0.221294, 1.07812, 0.927358, -0.146494, 0.18675, 1.11928, 0.940385, -0.120009, 0.152322, 1.15609, 0.952672, -0.0917183, 0.117514, 1.18875, 0.968496, -0.0620321, 0.0797405, 1.21821, 0.985236, -0.0314945, 0.0402383, 1.24523, 0.99998, -575153e-9, 110644e-9, 1.27133, 0.0702429, -512222e-11, 0.255273, 140947e-11, 0.0702981, -128826e-9, 0.255469, 354488e-10, 0.0703691, -515562e-9, 0.255727, 141874e-9, 0.0703805, -116e-5, 0.255754, 31929e-8, 0.0703961, -206224e-8, 0.255813, 567999e-9, 0.0704102, -322223e-8, 0.255839, 88871e-8, 0.0704298, -463928e-8, 0.255863, 128272e-8, 0.0704759, -631375e-8, 0.255953, 175283e-8, 0.0705434, -824317e-8, 0.256079, 230342e-8, 0.0706693, -0.010412, 0.25636, 29443e-7, 0.0708189, -0.0128439, 0.256647, 368031e-8, 0.0710364, -0.0155177, 0.257084, 452614e-8, 0.0713223, -0.0184374, 0.257637, 549706e-8, 0.0717182, -0.0216002, 0.258416, 661246e-8, 0.072321, -0.0249966, 0.259699, 790147e-8, 0.0731446, -0.0286566, 0.261475, 93884e-7, 0.0743352, -0.0325888, 0.264132, 0.0111186, 0.0760676, -0.036843, 0.26815, 0.013145, 0.078454, -0.0414292, 0.273636, 0.0155251, 0.0818618, -0.0464634, 0.281653, 0.0183525, 0.0857382, -0.0519478, 0.289992, 0.0216642, 0.0908131, -0.0579836, 0.30066, 0.0255956, 0.0967512, -0.0645124, 0.312204, 0.0301954, 0.103717, -0.0716505, 0.325001, 0.0356017, 0.111596, -0.0793232, 0.338129, 0.041896, 0.120933, -0.087645, 0.352853, 0.0492447, 0.130787, -0.096492, 0.366192, 0.0576749, 0.142311, -0.105973, 0.380864, 0.0673969, 0.155344, -0.116182, 0.396575, 0.0785899, 0.169535, -0.126815, 0.411443, 0.0912377, 0.185173, -0.138015, 0.426256, 0.105607, 0.201755, -0.149325, 0.439607, 0.121551, 0.221334, -0.161207, 0.455467, 0.139608, 0.241461, -0.173162, 0.469096, 0.159591, 0.26294, -0.18504, 0.481014, 0.18156, 0.286776, -0.196881, 0.493291, 0.205781, 0.311596, -0.208311, 0.503556, 0.231819, 0.338667, -0.219671, 0.513268, 0.260274, 0.366021, -0.230451, 0.519414, 0.290862, 0.395875, -0.240131, 0.526766, 0.323196, 0.425564, -0.248566, 0.52905, 0.357071, 0.457094, -0.256195, 0.530796, 0.393262, 0.488286, -0.262331, 0.528703, 0.430797, 0.522291, -0.267141, 0.52727, 0.470231, 0.554172, -0.270411, 0.519848, 0.510477, 0.586427, -0.271986, 0.510307, 0.551594, 0.619638, -0.27192, 0.499158, 0.593849, 0.650656, -0.269817, 0.483852, 0.636314, 0.68284, -0.266267, 0.467515, 0.679679, 0.714356, -0.26113, 0.44931, 0.723884, 0.742717, -0.254067, 0.425789, 0.767245, 0.770894, -0.245652, 0.401144, 0.811819, 0.797358, -0.235554, 0.374224, 0.856315, 0.823377, -0.223896, 0.346167, 0.901077, 0.847456, -0.210865, 0.316056, 0.946502, 0.870697, -0.196574, 0.284503, 0.993711, 0.891068, -0.180814, 0.251628, 1.04134, 0.909267, -0.163314, 0.219065, 1.08609, 0.925653, -0.143304, 0.186446, 1.12702, 0.940017, -0.121322, 0.153416, 1.16371, 0.952398, -0.0973872, 0.120334, 1.19712, 0.967568, -0.0698785, 0.08352, 1.22791, 0.984772, -0.0390031, 0.0439209, 1.25672, 1.00026, -70087e-7, 315668e-8, 1.28428, 0.0556653, -459654e-11, 0.227325, 112556e-11, 0.0565238, -116382e-9, 0.230826, 284985e-10, 0.0565717, -465666e-9, 0.231026, 114036e-9, 0.0565859, -104773e-8, 0.231079, 256656e-9, 0.0565761, -186255e-8, 0.231025, 45663e-8, 0.0565913, -291002e-8, 0.231058, 714664e-9, 0.0566108, -418998e-8, 0.231085, 103224e-8, 0.0566532, -570206e-8, 0.231169, 141202e-8, 0.0567473, -743666e-8, 0.231417, 186018e-8, 0.0568567, -940298e-8, 0.231661, 238264e-8, 0.0569859, -0.0115991, 0.231895, 298699e-8, 0.0572221, -0.0140096, 0.232456, 368957e-8, 0.057519, -0.0166508, 0.233096, 450303e-8, 0.0579534, -0.01951, 0.234094, 544945e-8, 0.0585922, -0.0225991, 0.235629, 655564e-8, 0.0595647, -0.0259416, 0.238106, 785724e-8, 0.0609109, -0.0295661, 0.241557, 939127e-8, 0.0628751, -0.0335126, 0.246652, 0.0112198, 0.0656908, -0.0378604, 0.254091, 0.0134168, 0.0691347, -0.0426543, 0.262666, 0.0160374, 0.0732165, -0.0478967, 0.272029, 0.0191514, 0.0782863, -0.0536716, 0.283007, 0.0228597, 0.0843973, -0.0600683, 0.295732, 0.0272829, 0.0913598, -0.0670095, 0.308779, 0.032484, 0.0994407, -0.0745516, 0.322886, 0.0385886, 0.108189, -0.082712, 0.336408, 0.0457133, 0.118574, -0.0914927, 0.351692, 0.0539832, 0.129989, -0.100854, 0.366502, 0.0635162, 0.142722, -0.110837, 0.381675, 0.0744386, 0.156654, -0.121353, 0.3963, 0.0868483, 0.172151, -0.132414, 0.411477, 0.100963, 0.188712, -0.143809, 0.42508, 0.116795, 0.208093, -0.155765, 0.441328, 0.134715, 0.227936, -0.167608, 0.454328, 0.154396, 0.249495, -0.179579, 0.467235, 0.176179, 0.27362, -0.191488, 0.480248, 0.200193, 0.296371, -0.202618, 0.487886, 0.225775, 0.324234, -0.214133, 0.499632, 0.25441, 0.353049, -0.225212, 0.509532, 0.285077, 0.381785, -0.234875, 0.514265, 0.317047, 0.414038, -0.244205, 0.521282, 0.351874, 0.445251, -0.252145, 0.522931, 0.388279, 0.476819, -0.258433, 0.520947, 0.425825, 0.509209, -0.263411, 0.517669, 0.465104, 0.542759, -0.266732, 0.512841, 0.505741, 0.574822, -0.268263, 0.503317, 0.547611, 0.609324, -0.268489, 0.493035, 0.590953, 0.641772, -0.266941, 0.478816, 0.63488, 0.674049, -0.263297, 0.462863, 0.679072, 0.705071, -0.257618, 0.442931, 0.723487, 0.734709, -0.250625, 0.421299, 0.768708, 0.763704, -0.24179, 0.397085, 0.814375, 0.791818, -0.231115, 0.370577, 0.859907, 0.817439, -0.21922, 0.34232, 0.906715, 0.843202, -0.205658, 0.312627, 0.953943, 0.866639, -0.190563, 0.280933, 1.00185, 0.888129, -0.173978, 0.248393, 1.05105, 0.907239, -0.155485, 0.216007, 1.09704, 0.923893, -0.134782, 0.183233, 1.13857, 0.938882, -0.11249, 0.150376, 1.17539, 0.952464, -0.0890706, 0.117177, 1.20924, 0.968529, -0.0646523, 0.0813095, 1.24055, 0.984763, -0.038606, 0.0439378, 1.27018, 1.00053, -0.01238, 598668e-8, 1.29873, 0.0437928, -409594e-11, 0.204012, 879224e-12, 0.0440166, -103395e-9, 0.205049, 221946e-10, 0.0440529, -413633e-9, 0.205225, 887981e-10, 0.0440493, -930594e-9, 0.2052, 199858e-9, 0.0439884, -165352e-8, 0.204901, 355495e-9, 0.0440716, -25849e-7, 0.205255, 556983e-9, 0.0440968, -372222e-8, 0.205311, 805326e-9, 0.0441359, -506478e-8, 0.205391, 110333e-8, 0.0442231, -660384e-8, 0.205638, 145768e-8, 0.0443254, -835246e-8, 0.205877, 187275e-8, 0.0444832, -0.0102992, 0.20627, 235938e-8, 0.0447001, -0.0124449, 0.206796, 29299e-7, 0.0450168, -0.0147935, 0.207593, 36005e-7, 0.0454816, -0.017336, 0.208819, 439246e-8, 0.0462446, -0.0201156, 0.211036, 533864e-8, 0.0473694, -0.0231568, 0.214388, 646984e-8, 0.0490191, -0.0264941, 0.219357, 783856e-8, 0.0512776, -0.030184, 0.226061, 950182e-8, 0.0541279, -0.0342661, 0.234094, 0.0115156, 0.0578989, -0.0388539, 0.244297, 0.0139687, 0.0620835, -0.0438735, 0.254457, 0.0169015, 0.0673497, -0.04951, 0.266706, 0.0204554, 0.0731759, -0.0556263, 0.278753, 0.0246606, 0.0803937, -0.0624585, 0.29309, 0.0297126, 0.0879287, -0.0697556, 0.305856, 0.0355868, 0.0970669, -0.0778795, 0.321059, 0.0425768, 0.106508, -0.0863541, 0.333873, 0.05056, 0.11776, -0.0955935, 0.349008, 0.0598972, 0.130081, -0.105438, 0.363776, 0.0706314, 0.144454, -0.115899, 0.380112, 0.0828822, 0.1596, -0.126827, 0.394843, 0.0967611, 0.176097, -0.138161, 0.409033, 0.112381, 0.194726, -0.149904, 0.424257, 0.129952, 0.213944, -0.161675, 0.436945, 0.149333, 0.235516, -0.173659, 0.450176, 0.170892, 0.260564, -0.185963, 0.466305, 0.194984, 0.285183, -0.197582, 0.477328, 0.220805, 0.311095, -0.208697, 0.486566, 0.248694, 0.338924, -0.219519, 0.494811, 0.279015, 0.369757, -0.229766, 0.504065, 0.311725, 0.3996, -0.238879, 0.507909, 0.345844, 0.430484, -0.246802, 0.509805, 0.381749, 0.46413, -0.253924, 0.511436, 0.420251, 0.497077, -0.259319, 0.508787, 0.459957, 0.530434, -0.263297, 0.50394, 0.501356, 0.565725, -0.265619, 0.49804, 0.544252, 0.599254, -0.265842, 0.487346, 0.587856, 0.631251, -0.263978, 0.472975, 0.631969, 0.663972, -0.26043, 0.457135, 0.677471, 0.697724, -0.255358, 0.439844, 0.723744, 0.727725, -0.248308, 0.417872, 0.770653, 0.756417, -0.239181, 0.39273, 0.817357, 0.785419, -0.22814, 0.367839, 0.864221, 0.81266, -0.215681, 0.339449, 0.912701, 0.839391, -0.201623, 0.309279, 0.962419, 0.86366, -0.185624, 0.278029, 1.0122, 0.885028, -0.16797, 0.245294, 1.06186, 0.904639, -0.148336, 0.212689, 1.10934, 0.922048, -0.12637, 0.179616, 1.15063, 0.936952, -0.102928, 0.146749, 1.18885, 0.951895, -0.0785268, 0.112733, 1.22352, 0.967198, -0.0530153, 0.0760056, 1.25681, 0.984405, -0.02649, 0.0383183, 1.28762, 1.00021, 70019e-8, -20039e-8, 1.31656, 0.0325964, -355447e-11, 0.176706, 655682e-12, 0.0329333, -899174e-10, 0.178527, 165869e-10, 0.0329181, -359637e-9, 0.178453, 663498e-10, 0.0329085, -808991e-9, 0.178383, 149332e-9, 0.0329181, -143826e-8, 0.178394, 265873e-9, 0.0329425, -224678e-8, 0.178517, 416597e-9, 0.0329511, -323575e-8, 0.17849, 603299e-9, 0.033011, -439875e-8, 0.178695, 829422e-9, 0.0330733, -574059e-8, 0.178843, 109908e-8, 0.0331857, -725896e-8, 0.179176, 141933e-8, 0.0333445, -895289e-8, 0.179618, 17999e-7, 0.0335674, -0.0108219, 0.180238, 225316e-8, 0.033939, -0.0128687, 0.181417, 279765e-8, 0.0345239, -0.015114, 0.183395, 34564e-7, 0.0354458, -0.017596, 0.186616, 425864e-8, 0.0368313, -0.0203524, 0.191547, 524936e-8, 0.0386115, -0.0234105, 0.197508, 647033e-8, 0.0410303, -0.0268509, 0.205395, 798121e-8, 0.0442245, -0.0307481, 0.215365, 98557e-7, 0.0478659, -0.0350863, 0.225595, 0.0121417, 0.0522416, -0.0399506, 0.236946, 0.0149385, 0.0574513, -0.045357, 0.249442, 0.0183189, 0.0631208, -0.0512863, 0.261222, 0.0223644, 0.0701124, -0.0579273, 0.275418, 0.0272418, 0.0777331, -0.0650652, 0.288989, 0.0329458, 0.0862709, -0.0728813, 0.302546, 0.0396819, 0.096103, -0.081363, 0.317164, 0.04757, 0.106976, -0.0904463, 0.331733, 0.0567012, 0.119175, -0.100105, 0.34661, 0.067202, 0.132919, -0.110375, 0.362249, 0.0792588, 0.147727, -0.121115, 0.376978, 0.0928672, 0.163618, -0.132299, 0.390681, 0.108228, 0.182234, -0.143887, 0.406571, 0.125502, 0.201809, -0.155827, 0.42042, 0.144836, 0.225041, -0.168357, 0.438411, 0.166706, 0.247621, -0.18004, 0.450368, 0.189909, 0.27097, -0.191536, 0.460083, 0.215251, 0.296658, -0.203024, 0.469765, 0.243164, 0.325892, -0.214056, 0.481837, 0.273388, 0.35406, -0.224104, 0.487474, 0.305344, 0.384372, -0.233489, 0.492773, 0.339741, 0.41749, -0.241874, 0.498451, 0.376287, 0.45013, -0.248834, 0.499632, 0.414195, 0.481285, -0.254658, 0.495233, 0.454077, 0.519183, -0.259367, 0.496401, 0.496352, 0.551544, -0.261818, 0.487686, 0.538798, 0.587349, -0.262964, 0.479453, 0.583626, 0.621679, -0.262128, 0.467709, 0.629451, 0.654991, -0.258998, 0.452123, 0.67566, 0.686873, -0.254119, 0.433495, 0.723248, 0.719801, -0.246946, 0.413657, 0.771156, 0.750355, -0.237709, 0.390366, 0.81989, 0.780033, -0.226549, 0.364947, 0.868601, 0.809254, -0.214186, 0.337256, 0.920034, 0.836576, -0.199639, 0.307395, 0.971706, 0.861774, -0.183169, 0.275431, 1.02479, 0.885707, -0.165111, 0.243431, 1.07837, 0.904742, -0.144363, 0.210921, 1.12783, 0.915604, -0.121305, 0.17647, 1.17254, 0.930959, -0.0962119, 0.143106, 1.21012, 0.948404, -0.069969, 0.108112, 1.24474, 0.967012, -0.0427586, 0.0708478, 1.27718, 0.984183, -0.0147043, 0.032335, 1.3083, 0.999577, 0.0142165, -726867e-8, 1.3382, 0.0229227, -299799e-11, 0.148623, 462391e-12, 0.0232194, -758796e-10, 0.15054, 117033e-10, 0.0232315, -303636e-9, 0.15063, 468397e-10, 0.0232354, -683189e-9, 0.150624, 105472e-9, 0.0232092, -12136e-7, 0.150445, 187744e-9, 0.0232523, -189765e-8, 0.150679, 294847e-9, 0.0232828, -273247e-8, 0.150789, 428013e-9, 0.0233371, -371287e-8, 0.150995, 591134e-9, 0.0234015, -484794e-8, 0.15118, 787642e-9, 0.023514, -612877e-8, 0.151562, 102547e-8, 0.023679, -756125e-8, 0.152116, 131351e-8, 0.0239559, -914651e-8, 0.153162, 166594e-8, 0.0244334, -0.010904, 0.155133, 210182e-8, 0.025139, -0.0128615, 0.158035, 264406e-8, 0.0262598, -0.0150628, 0.162751, 332923e-8, 0.0277875, -0.0175532, 0.168944, 419773e-8, 0.0298472, -0.0203981, 0.176835, 530034e-8, 0.0325444, -0.023655, 0.186686, 669777e-8, 0.0355581, -0.0272982, 0.196248, 842661e-8, 0.0392841, -0.0314457, 0.207352, 0.0105854, 0.0436815, -0.0361157, 0.219279, 0.0132458, 0.0485272, -0.0412932, 0.230728, 0.0164736, 0.0541574, -0.0470337, 0.242994, 0.0203715, 0.0609479, -0.0535002, 0.257042, 0.0250953, 0.0685228, -0.0605409, 0.27102, 0.0306856, 0.0768042, -0.0680553, 0.28406, 0.037193, 0.0864844, -0.0765011, 0.299186, 0.0449795, 0.0969415, -0.0852674, 0.3132, 0.0538316, 0.108478, -0.0947333, 0.327138, 0.0641149, 0.121705, -0.10481, 0.342345, 0.0759185, 0.136743, -0.115474, 0.358472, 0.0894116, 0.152986, -0.126536, 0.374067, 0.104562, 0.170397, -0.138061, 0.388267, 0.121632, 0.191392, -0.150203, 0.406467, 0.140996, 0.211566, -0.161751, 0.418641, 0.161696, 0.233567, -0.173407, 0.430418, 0.184557, 0.257769, -0.185397, 0.44277, 0.210092, 0.28531, -0.197048, 0.457191, 0.237827, 0.311726, -0.20784, 0.464712, 0.267253, 0.340537, -0.218345, 0.472539, 0.299332, 0.372921, -0.228306, 0.482331, 0.333988, 0.402924, -0.236665, 0.484378, 0.369722, 0.434475, -0.244097, 0.484717, 0.407836, 0.469736, -0.250547, 0.487093, 0.448465, 0.505045, -0.25511, 0.485575, 0.490263, 0.540262, -0.258444, 0.481225, 0.534495, 0.576347, -0.259903, 0.473481, 0.579451, 0.608656, -0.259572, 0.4603, 0.625604, 0.646679, -0.257908, 0.450341, 0.674511, 0.679902, -0.253663, 0.431561, 0.723269, 0.714159, -0.247419, 0.412684, 0.773263, 0.745345, -0.239122, 0.389388, 0.824182, 0.778248, -0.228837, 0.365361, 0.876634, 0.807208, -0.216197, 0.337667, 0.92945, 0.835019, -0.201772, 0.307197, 0.985261, 0.860261, -0.185291, 0.274205, 1.04299, 0.877601, -0.165809, 0.240178, 1.09816, 0.898211, -0.143897, 0.207571, 1.14694, 0.915789, -0.119513, 0.174904, 1.19008, 0.931831, -0.0932919, 0.141423, 1.2297, 0.949244, -0.0656528, 0.105603, 1.26553, 0.967527, -0.0370262, 0.0679551, 1.29986, 0.984139, -730117e-8, 0.0283133, 1.33252, 0.999713, 0.0234648, -0.0121785, 1.36397, 0.0152135, -245447e-11, 0.122795, 304092e-12, 0.0151652, -615778e-10, 0.122399, 76292e-10, 0.0151181, -245948e-9, 0.122023, 304802e-10, 0.0151203, -553394e-9, 0.12203, 686634e-10, 0.015125, -983841e-9, 0.122037, 122463e-9, 0.0151427, -153774e-8, 0.12214, 192706e-9, 0.0151708, -22103e-7, 0.122237, 281219e-9, 0.0152115, -300741e-8, 0.12238, 390804e-9, 0.0152877, -392494e-8, 0.1227, 526317e-9, 0.015412, -496597e-8, 0.123244, 69443e-8, 0.0156201, -613314e-8, 0.124228, 90547e-8, 0.0159658, -744113e-8, 0.125945, 11732e-7, 0.0165674, -892546e-8, 0.129098, 151888e-8, 0.017487, -0.010627, 0.133865, 197007e-8, 0.018839, -0.0126043, 0.140682, 25637e-7, 0.020554, -0.0148814, 0.148534, 333637e-8, 0.0226727, -0.0175123, 0.157381, 433738e-8, 0.0251879, -0.0205266, 0.166685, 561664e-8, 0.0283635, -0.0240319, 0.177796, 725563e-8, 0.0318694, -0.0279432, 0.188251, 928811e-8, 0.0361044, -0.0324313, 0.200038, 0.011835, 0.0406656, -0.0373527, 0.210685, 0.0149146, 0.0463846, -0.0430132, 0.224182, 0.0187254, 0.0525696, -0.0491013, 0.23634, 0.0232283, 0.0598083, -0.0559175, 0.250013, 0.0286521, 0.0679437, -0.0633657, 0.263981, 0.0350634, 0.0771181, -0.0714602, 0.278072, 0.0425882, 0.0881273, -0.0803502, 0.29511, 0.0514487, 0.0996628, -0.0896903, 0.309976, 0.0615766, 0.112702, -0.099644, 0.325611, 0.0732139, 0.126488, -0.109829, 0.339321, 0.0862324, 0.142625, -0.120859, 0.35574, 0.101275, 0.15953, -0.131956, 0.369845, 0.117892, 0.176991, -0.143145, 0.38146, 0.136205, 0.199715, -0.155292, 0.40052, 0.157252, 0.220787, -0.167066, 0.412055, 0.179966, 0.243697, -0.178396, 0.423133, 0.204418, 0.272106, -0.190433, 0.439524, 0.232141, 0.297637, -0.201265, 0.447041, 0.261109, 0.325273, -0.211834, 0.454488, 0.292627, 0.357219, -0.221889, 0.465004, 0.326669, 0.387362, -0.230729, 0.468527, 0.362426, 0.423131, -0.23924, 0.475836, 0.401533, 0.45543, -0.246067, 0.475017, 0.441902, 0.493393, -0.251557, 0.478017, 0.484239, 0.526253, -0.255571, 0.4709, 0.528586, 0.560554, -0.257752, 0.463167, 0.574346, 0.599306, -0.258076, 0.456452, 0.621655, 0.634541, -0.256471, 0.443725, 0.670492, 0.668907, -0.253283, 0.428719, 0.721943, 0.705619, -0.247562, 0.411348, 0.772477, 0.739034, -0.240626, 0.388939, 0.8264, 0.771408, -0.231493, 0.36425, 0.881702, 0.803312, -0.220125, 0.337321, 0.9385, 0.828457, -0.206645, 0.305364, 0.997437, 0.854819, -0.190664, 0.273715, 1.05693, 0.878666, -0.171429, 0.242218, 1.11251, 0.898404, -0.149235, 0.209556, 1.16398, 0.917416, -0.12435, 0.176863, 1.21014, 0.933133, -0.0972703, 0.142775, 1.25178, 0.95066, -0.0683607, 0.106735, 1.29028, 0.968589, -0.0378724, 0.0681609, 1.32703, 0.984776, -605712e-8, 0.0273966, 1.36158, 0.99994, 0.0263276, -0.0138124, 1.3943, 867437e-8, -186005e-11, 0.0928979, 173682e-12, 864003e-8, -466389e-10, 0.0925237, 435505e-11, 864593e-8, -186594e-9, 0.0925806, 174322e-10, 864095e-8, -419639e-9, 0.0924903, 392862e-10, 863851e-8, -746272e-9, 0.0924589, 702598e-10, 868531e-8, -116456e-8, 0.0929, 111188e-9, 869667e-8, -167711e-8, 0.0928529, 163867e-9, 874332e-8, -228051e-8, 0.0930914, 23104e-8, 882709e-8, -297864e-8, 0.0935679, 31741e-8, 898874e-8, -377557e-8, 0.0946165, 430186e-9, 929346e-8, -469247e-8, 0.0967406, 580383e-9, 978271e-8, -575491e-8, 0.100084, 783529e-9, 0.0105746, -701514e-8, 0.105447, 106304e-8, 0.0116949, -851797e-8, 0.112494, 144685e-8, 0.0130419, -0.0102757, 0.119876, 196439e-8, 0.0148375, -0.012381, 0.129034, 266433e-8, 0.0168725, -0.01482, 0.137812, 358364e-8, 0.0193689, -0.0176563, 0.147696, 478132e-8, 0.0222691, -0.0209211, 0.157795, 631721e-8, 0.0256891, -0.0246655, 0.168431, 826346e-8, 0.0294686, -0.0288597, 0.178587, 0.0106714, 0.0340412, -0.0336441, 0.190251, 0.0136629, 0.0393918, -0.039033, 0.202999, 0.0173272, 0.0453947, -0.0450087, 0.215655, 0.0217448, 0.0521936, -0.0515461, 0.228686, 0.0269941, 0.0600279, -0.058817, 0.242838, 0.033272, 0.0692398, -0.0667228, 0.258145, 0.0406457, 0.0793832, -0.0752401, 0.273565, 0.0492239, 0.0902297, -0.0841851, 0.287735, 0.0590105, 0.102014, -0.0936479, 0.301161, 0.0702021, 0.116054, -0.103967, 0.317438, 0.0832001, 0.13191, -0.114622, 0.334166, 0.0977951, 0.148239, -0.125452, 0.348192, 0.113985, 0.165809, -0.136453, 0.361094, 0.131928, 0.184616, -0.147648, 0.373534, 0.151811, 0.207491, -0.159607, 0.39101, 0.174476, 0.230106, -0.171119, 0.402504, 0.198798, 0.257036, -0.182906, 0.418032, 0.225796, 0.281172, -0.193605, 0.425468, 0.254027, 0.312034, -0.204771, 0.440379, 0.285713, 0.340402, -0.214988, 0.445406, 0.319196, 0.370231, -0.224711, 0.44968, 0.35537, 0.407105, -0.233516, 0.460747, 0.393838, 0.439037, -0.240801, 0.460624, 0.433747, 0.47781, -0.24762, 0.465957, 0.477234, 0.510655, -0.251823, 0.460054, 0.52044, 0.550584, -0.255552, 0.459172, 0.567853, 0.585872, -0.257036, 0.450311, 0.615943, 0.620466, -0.257535, 0.437763, 0.667693, 0.660496, -0.255248, 0.426639, 0.718988, 0.695578, -0.251141, 0.409185, 0.772503, 0.732176, -0.244718, 0.39015, 0.827023, 0.760782, -0.236782, 0.362594, 0.885651, 0.79422, -0.225923, 0.33711, 0.943756, 0.824521, -0.213855, 0.308272, 1.00874, 0.854964, -0.197723, 0.278529, 1.06764, 0.878065, -0.179209, 0.246208, 1.12836, 0.899834, -0.157569, 0.21329, 1.18318, 0.918815, -0.133206, 0.181038, 1.23161, 0.934934, -0.106545, 0.146993, 1.27644, 0.952115, -0.0780574, 0.111175, 1.31842, 0.96906, -0.0478279, 0.0728553, 1.35839, 0.985178, -0.0160014, 0.032579, 1.39697, 1.00039, 0.0173126, -95256e-7, 1.43312, 384146e-8, -124311e-11, 0.0613583, 778271e-13, 390023e-8, -314043e-10, 0.0622919, 196626e-11, 389971e-8, -125622e-9, 0.0622632, 787379e-11, 389491e-8, -282352e-9, 0.0620659, 1778e-8, 391618e-8, -502512e-9, 0.0624687, 320918e-10, 392662e-8, -784458e-9, 0.0625113, 515573e-10, 396053e-8, -112907e-8, 0.0628175, 778668e-10, 401911e-8, -153821e-8, 0.0633286, 113811e-9, 414994e-8, -20208e-7, 0.0646443, 16445e-8, 441223e-8, -260007e-8, 0.0673886, 237734e-9, 484427e-8, -33097e-7, 0.0716528, 345929e-9, 549109e-8, -418966e-8, 0.0774998, 505987e-9, 636293e-8, -527331e-8, 0.0844758, 739208e-9, 746566e-8, -660428e-8, 0.0921325, 107347e-8, 876625e-8, -818826e-8, 0.0997067, 153691e-8, 0.0103125, -0.0100811, 0.107433, 217153e-8, 0.0123309, -0.0123643, 0.117088, 303427e-8, 0.0146274, -0.0150007, 0.126438, 416018e-8, 0.0172295, -0.0180531, 0.135672, 561513e-8, 0.0204248, -0.0215962, 0.146244, 7478e-6, 0.0241597, -0.0256234, 0.157481, 981046e-8, 0.0284693, -0.0302209, 0.169125, 0.0127148, 0.033445, -0.0353333, 0.181659, 0.0162453, 0.0391251, -0.0410845, 0.1944, 0.0205417, 0.0454721, -0.0473451, 0.207082, 0.0256333, 0.0530983, -0.0542858, 0.221656, 0.0317036, 0.0615356, -0.0618384, 0.236036, 0.0388319, 0.0703363, -0.0697631, 0.248398, 0.046974, 0.0810391, -0.0784757, 0.263611, 0.0565246, 0.0920144, -0.0873488, 0.275857, 0.0671724, 0.105584, -0.0973652, 0.292555, 0.0798105, 0.119506, -0.107271, 0.306333, 0.0935945, 0.134434, -0.117608, 0.318888, 0.109106, 0.153399, -0.128938, 0.337552, 0.127074, 0.171258, -0.139944, 0.349955, 0.14643, 0.191059, -0.151288, 0.361545, 0.168, 0.215069, -0.163018, 0.378421, 0.192082, 0.237838, -0.174226, 0.38879, 0.217838, 0.266965, -0.186063, 0.405857, 0.246931, 0.292827, -0.196909, 0.414146, 0.277505, 0.324352, -0.207473, 0.426955, 0.310711, 0.354427, -0.217713, 0.433429, 0.346794, 0.389854, -0.227183, 0.443966, 0.385237, 0.420749, -0.235131, 0.44471, 0.424955, 0.459597, -0.242786, 0.451729, 0.468446, 0.495316, -0.248767, 0.45072, 0.513422, 0.534903, -0.253351, 0.450924, 0.560618, 0.572369, -0.256277, 0.445266, 0.609677, 0.612383, -0.2576, 0.438798, 0.660995, 0.644037, -0.256931, 0.421693, 0.713807, 0.686749, -0.254036, 0.4109, 0.767616, 0.719814, -0.249785, 0.390151, 0.82533, 0.754719, -0.244283, 0.367847, 0.888311, 0.792022, -0.235076, 0.345013, 0.948177, 0.822404, -0.225061, 0.316193, 1.01661, 0.853084, -0.211113, 0.287013, 1.08075, 0.879871, -0.19449, 0.255424, 1.14501, 0.901655, -0.174023, 0.222879, 1.20203, 0.919957, -0.1509, 0.18989, 1.25698, 0.938412, -0.124923, 0.15606, 1.30588, 0.953471, -0.0968139, 0.120512, 1.3529, 0.970451, -0.066734, 0.0828515, 1.3986, 0.985522, -0.034734, 0.0424458, 1.44148, 1.00099, -102222e-8, 678929e-9, 1.48398, 965494e-9, -627338e-12, 0.0306409, 197672e-13, 99168e-8, -158573e-10, 0.0314638, 499803e-12, 991068e-9, -634012e-10, 0.031363, 200682e-11, 974567e-9, -14144e-8, 0.03036, 457312e-11, 998079e-9, -252812e-9, 0.031496, 860131e-11, 102243e-8, -396506e-9, 0.0319955, 148288e-10, 107877e-8, -577593e-9, 0.0331376, 249141e-10, 121622e-8, -816816e-9, 0.0359396, 423011e-10, 14455e-7, -113761e-8, 0.0399652, 724613e-10, 178791e-8, -156959e-8, 0.0450556, 123929e-9, 225668e-8, -214064e-8, 0.0508025, 208531e-9, 285627e-8, -287655e-8, 0.0568443, 341969e-9, 35991e-7, -380271e-8, 0.0630892, 544158e-9, 455524e-8, -496264e-8, 0.0702204, 842423e-9, 569143e-8, -63793e-7, 0.0773426, 126704e-8, 716928e-8, -813531e-8, 0.0860839, 186642e-8, 885307e-8, -0.0101946, 0.0944079, 267014e-8, 0.0109316, -0.0126386, 0.103951, 374033e-8, 0.0133704, -0.0154876, 0.113786, 51304e-7, 0.0161525, -0.0187317, 0.123477, 688858e-8, 0.0194267, -0.0224652, 0.133986, 910557e-8, 0.0230967, -0.0265976, 0.143979, 0.0118074, 0.0273627, -0.0312848, 0.154645, 0.0151266, 0.0323898, -0.0365949, 0.166765, 0.0191791, 0.0379225, -0.0422914, 0.177932, 0.0239236, 0.0447501, -0.0487469, 0.19167, 0.0296568, 0.0519391, -0.0556398, 0.203224, 0.0362924, 0.0599464, -0.0631646, 0.215652, 0.0440585, 0.0702427, -0.0714308, 0.232089, 0.0531619, 0.0806902, -0.0800605, 0.245258, 0.0634564, 0.0923194, -0.0892815, 0.258609, 0.0752481, 0.106938, -0.09931, 0.276654, 0.0888914, 0.121238, -0.109575, 0.289847, 0.104055, 0.138817, -0.120461, 0.307566, 0.121266, 0.15595, -0.131209, 0.320117, 0.139944, 0.178418, -0.143049, 0.339677, 0.161591, 0.197875, -0.154074, 0.349886, 0.184303, 0.224368, -0.166307, 0.369352, 0.210669, 0.252213, -0.178051, 0.386242, 0.238895, 0.277321, -0.189335, 0.395294, 0.269182, 0.310332, -0.200683, 0.412148, 0.302508, 0.338809, -0.210856, 0.418266, 0.337264, 0.372678, -0.220655, 0.428723, 0.374881, 0.405632, -0.230053, 0.433887, 0.415656, 0.442293, -0.237993, 0.439911, 0.457982, 0.477256, -0.244897, 0.440175, 0.502831, 0.515592, -0.250657, 0.441079, 0.550277, 0.550969, -0.255459, 0.435219, 0.601102, 0.592883, -0.257696, 0.432882, 0.651785, 0.629092, -0.259894, 0.421054, 0.708961, 0.672033, -0.258592, 0.41177, 0.763806, 0.709147, -0.256525, 0.395267, 0.824249, 0.745367, -0.254677, 0.375013, 0.8951, 0.784715, -0.247892, 0.353906, 0.959317, 0.818107, -0.240162, 0.327801, 1.03153, 0.847895, -0.229741, 0.298821, 1.10601, 0.879603, -0.213084, 0.269115, 1.164, 0.902605, -0.195242, 0.236606, 1.22854, 0.922788, -0.174505, 0.203442, 1.29017, 0.944831, -0.150169, 0.169594, 1.34157, 0.959656, -0.124099, 0.135909, 1.3956, 0.972399, -0.0960626, 0.0990563, 1.45128, 0.986549, -0.0657097, 0.0602348, 1.50312, 1.00013, -0.0333558, 0.0186694, 1.55364, 619747e-11, -1e-7, 778326e-8, 796756e-16, 237499e-13, -999999e-13, 282592e-10, 114596e-15, 100292e-11, -166369e-11, 250354e-9, 677492e-14, 350752e-11, -637769e-11, 357289e-9, 631655e-13, 826445e-11, -174689e-10, 516179e-9, 31851e-11, 242481e-10, -450868e-10, 10223e-7, 130577e-11, 455631e-10, -89044e-9, 144302e-8, 374587e-11, 971222e-10, -178311e-9, 241912e-8, 102584e-10, 171403e-9, -313976e-9, 354938e-8, 236481e-10, 292747e-9, -520026e-9, 513765e-8, 496014e-10, 789827e-9, -118187e-8, 0.0238621, 139056e-9, 114093e-8, -171827e-8, 0.0286691, 244093e-9, 176119e-8, -249667e-8, 0.0368565, 420623e-9, 22233e-7, -333742e-8, 0.0400469, 65673e-8, 343382e-8, -481976e-8, 0.0535751, 109323e-8, 427602e-8, -600755e-8, 0.057099, 155268e-8, 461435e-8, -737637e-8, 0.0551084, 215031e-8, 695698e-8, -971401e-8, 0.0715767, 316529e-8, 867619e-8, -0.0120943, 0.0793314, 436995e-8, 0.0106694, -0.0148202, 0.0869391, 58959e-7, 0.0140351, -0.0183501, 0.101572, 798757e-8, 0.0168939, -0.022006, 0.11018, 0.0104233, 0.020197, -0.0261568, 0.119041, 0.0134167, 0.0254702, -0.0312778, 0.135404, 0.0173009, 0.0298384, -0.0362469, 0.1437, 0.0215428, 0.035159, -0.042237, 0.15512, 0.0268882, 0.0427685, -0.0488711, 0.17128, 0.033235, 0.0494848, -0.0557997, 0.181813, 0.0404443, 0.0592394, -0.0635578, 0.198745, 0.0490043, 0.0681463, -0.071838, 0.210497, 0.0588239, 0.0804753, -0.0809297, 0.228864, 0.0702835, 0.0942205, -0.0906488, 0.247008, 0.0834012, 0.106777, -0.100216, 0.258812, 0.0975952, 0.124471, -0.110827, 0.278617, 0.114162, 0.138389, -0.121193, 0.287049, 0.131983, 0.159543, -0.13253, 0.307151, 0.152541, 0.176432, -0.143611, 0.31564, 0.174673, 0.201723, -0.15548, 0.33538, 0.199842, 0.229721, -0.167166, 0.355256, 0.227097, 0.250206, -0.178238, 0.360047, 0.256014, 0.282118, -0.189905, 0.378761, 0.28855, 0.312821, -0.201033, 0.39181, 0.323348, 0.341482, -0.211584, 0.397716, 0.360564, 0.377368, -0.221314, 0.410141, 0.400004, 0.418229, -0.230474, 0.423485, 0.442371, 0.444881, -0.239443, 0.418874, 0.488796, 0.488899, -0.245987, 0.427545, 0.535012, 0.520317, -0.253948, 0.422147, 0.589678, 0.568566, -0.256616, 0.42719, 0.637683, 0.599607, -0.26376, 0.415114, 0.703363, 0.64222, -0.268687, 0.408715, 0.771363, 0.685698, -0.2694, 0.399722, 0.83574, 0.732327, -0.266642, 0.388651, 0.897764, 0.769873, -0.267712, 0.369198, 0.983312, 0.806733, -0.263479, 0.346802, 1.06222, 0.843466, -0.254575, 0.321368, 1.13477, 0.873008, -0.242749, 0.29211, 1.20712, 0.908438, -0.22725, 0.262143, 1.27465, 0.936321, -0.207621, 0.228876, 1.33203, 0.950353, -0.187932, 0.19484, 1.40439, 0.96442, -0.165154, 0.163178, 1.4732, 0.979856, -0.139302, 0.127531, 1.53574, 0.982561, -0.11134, 0.0903457, 1.59982, 0.996389, -0.0808124, 0.0489007, 1.6577]; + const LTC_MAT_2 = [1, 0, 0, 0, 1, 791421e-36, 0, 0, 1, 104392e-29, 0, 0, 1, 349405e-26, 0, 0, 1, 109923e-23, 0, 0, 1, 947414e-22, 0, 0, 1, 359627e-20, 0, 0, 1, 772053e-19, 0, 0, 1, 108799e-17, 0, 0, 1, 110655e-16, 0, 0, 1, 865818e-16, 0, 0, 0.999998, 545037e-15, 0, 0, 0.999994, 285095e-14, 0, 0, 0.999989, 126931e-13, 0, 0, 0.999973, 489938e-13, 0, 0, 0.999947, 166347e-12, 0, 0, 0.999894, 502694e-12, 0, 0, 0.999798, 136532e-11, 0, 0, 0.999617, 335898e-11, 0, 0, 0.999234, 752126e-11, 0, 0, 0.998258, 152586e-10, 0, 0, 0.99504, 266207e-10, 0, 0, 0.980816, 236802e-10, 0, 0, 0.967553, 207684e-11, 0, 0, 0.966877, 403733e-11, 0, 0, 0.965752, 741174e-11, 0, 0, 0.96382, 127746e-10, 0, 0, 0.960306, 202792e-10, 0, 0, 0.953619, 280232e-10, 0, 0, 0.941103, 278816e-10, 0, 0, 0.926619, 160221e-10, 0, 0, 0.920983, 235164e-10, 0, 0, 0.912293, 311924e-10, 0, 0.0158731, 0.899277, 348118e-10, 0, 0.0476191, 0.880884, 26041e-9, 0, 0.0793651, 0.870399, 338726e-10, 0, 0.111111, 0.856138, 392906e-10, 0, 0.142857, 0.837436, 372874e-10, 0, 0.174603, 0.820973, 392558e-10, 0, 0.206349, 0.803583, 434658e-10, 0, 0.238095, 0.782168, 40256e-9, 0, 0.269841, 0.764107, 448159e-10, 0, 0.301587, 0.743092, 457627e-10, 0, 0.333333, 0.721626, 455314e-10, 0, 0.365079, 0.700375, 477335e-10, 0, 0.396825, 0.677334, 461072e-10, 0, 0.428571, 0.655702, 484393e-10, 0, 0.460317, 0.632059, 464583e-10, 0, 0.492064, 0.610125, 483923e-10, 0, 0.52381, 0.58653, 464342e-10, 0, 0.555556, 0.564508, 477033e-10, 0, 0.587302, 0.541405, 459263e-10, 0, 0.619048, 0.519556, 46412e-9, 0, 0.650794, 0.497292, 448913e-10, 0, 0.68254, 0.475898, 445789e-10, 0, 0.714286, 0.454722, 433496e-10, 0, 0.746032, 0.434042, 423054e-10, 0, 0.777778, 0.414126, 413737e-10, 0, 0.809524, 0.394387, 397265e-10, 0, 0.84127, 0.375841, 390709e-10, 0, 0.873016, 0.357219, 369938e-10, 0, 0.904762, 0.340084, 365618e-10, 0, 0.936508, 0.322714, 342533e-10, 0, 0.968254, 0.306974, 339596e-10, 0, 1, 1, 101524e-23, 0, 0, 1, 10292e-22, 0, 0, 1, 130908e-23, 0, 0, 1, 473331e-23, 0, 0, 1, 625319e-22, 0, 0, 1, 107932e-20, 0, 0, 1, 163779e-19, 0, 0, 1, 203198e-18, 0, 0, 1, 204717e-17, 0, 0, 0.999999, 168995e-16, 0, 0, 0.999998, 115855e-15, 0, 0, 0.999996, 66947e-14, 0, 0, 0.999991, 330863e-14, 0, 0, 0.999983, 141737e-13, 0, 0, 0.999968, 532626e-13, 0, 0, 0.99994, 177431e-12, 0, 0, 0.999891, 528835e-12, 0, 0, 0.999797, 142169e-11, 0, 0, 0.999617, 347057e-11, 0, 0, 0.999227, 77231e-10, 0, 0, 0.998239, 155753e-10, 0, 0, 0.994937, 268495e-10, 0, 0, 0.980225, 213742e-10, 0, 0, 0.967549, 21631e-10, 0, 0, 0.966865, 417989e-11, 0, 0, 0.965739, 763341e-11, 0, 0, 0.963794, 130892e-10, 0, 0, 0.960244, 206456e-10, 0, 0, 0.953495, 282016e-10, 0, 148105e-9, 0.940876, 271581e-10, 0, 2454e-6, 0.926569, 164159e-10, 0, 867491e-8, 0.920905, 239521e-10, 0, 0.01956, 0.912169, 315127e-10, 0, 0.035433, 0.899095, 346626e-10, 0, 0.056294, 0.882209, 290223e-10, 0, 0.0818191, 0.870272, 342992e-10, 0, 0.111259, 0.855977, 394164e-10, 0, 0.142857, 0.837431, 372343e-10, 0, 0.174603, 0.820826, 396691e-10, 0, 0.206349, 0.803408, 435395e-10, 0, 0.238095, 0.782838, 419579e-10, 0, 0.269841, 0.763941, 450953e-10, 0, 0.301587, 0.742904, 455847e-10, 0, 0.333333, 0.721463, 458833e-10, 0, 0.365079, 0.700197, 477159e-10, 0, 0.396825, 0.677501, 470641e-10, 0, 0.428571, 0.655527, 484732e-10, 0, 0.460317, 0.6324, 476834e-10, 0, 0.492064, 0.609964, 484213e-10, 0, 0.52381, 0.586839, 475541e-10, 0, 0.555556, 0.564353, 476951e-10, 0, 0.587302, 0.541589, 467611e-10, 0, 0.619048, 0.519413, 463493e-10, 0, 0.650794, 0.497337, 453994e-10, 0, 0.68254, 0.475797, 445308e-10, 0, 0.714286, 0.454659, 435787e-10, 0, 0.746032, 0.434065, 424839e-10, 0, 0.777778, 0.414018, 41436e-9, 0, 0.809524, 0.39455, 401902e-10, 0, 0.84127, 0.375742, 390813e-10, 0, 0.873016, 0.357501, 377116e-10, 0, 0.904762, 0.339996, 36535e-9, 0, 0.936508, 0.323069, 351265e-10, 0, 0.968254, 0.306897, 339112e-10, 0, 1, 1, 10396e-19, 0, 0, 1, 104326e-20, 0, 0, 1, 110153e-20, 0, 0, 1, 144668e-20, 0, 0, 1, 34528e-19, 0, 0, 1, 175958e-19, 0, 0, 1, 12627e-17, 0, 0, 1, 936074e-18, 0, 0, 1, 645742e-17, 0, 0, 0.999998, 401228e-16, 0, 0, 0.999997, 222338e-15, 0, 0, 0.999995, 10967e-13, 0, 0, 0.999991, 482132e-14, 0, 0, 0.999981, 189434e-13, 0, 0, 0.999967, 667716e-13, 0, 0, 0.999938, 212066e-12, 0, 0, 0.999886, 60977e-11, 0, 0, 0.999792, 159504e-11, 0, 0, 0.999608, 381191e-11, 0, 0, 0.999209, 833727e-11, 0, 0, 0.998179, 165288e-10, 0, 0, 0.994605, 274387e-10, 0, 0, 0.979468, 167316e-10, 0, 0, 0.967529, 242877e-11, 0, 0, 0.966836, 461696e-11, 0, 0, 0.96569, 830977e-11, 0, 0, 0.963706, 140427e-10, 0, 244659e-11, 0.960063, 217353e-10, 0, 760774e-9, 0.953113, 286606e-10, 0, 367261e-8, 0.940192, 247691e-10, 0, 940263e-8, 0.927731, 195814e-10, 0, 0.018333, 0.920669, 252531e-10, 0, 0.0306825, 0.911799, 324277e-10, 0, 0.0465556, 0.89857, 340982e-10, 0, 0.0659521, 0.883283, 319622e-10, 0, 0.0887677, 0.86989, 35548e-9, 0, 0.114784, 0.855483, 397143e-10, 0, 0.143618, 0.837987, 391665e-10, 0, 0.174606, 0.820546, 411306e-10, 0, 0.206349, 0.802878, 436753e-10, 0, 0.238095, 0.783402, 444e-7, 0, 0.269841, 0.763439, 458726e-10, 0, 0.301587, 0.742925, 467097e-10, 0, 0.333333, 0.721633, 478887e-10, 0, 0.365079, 0.69985, 481251e-10, 0, 0.396825, 0.67783, 491811e-10, 0, 0.428571, 0.655126, 488199e-10, 0, 0.460318, 0.632697, 496025e-10, 0, 0.492064, 0.609613, 48829e-9, 0, 0.52381, 0.587098, 492754e-10, 0, 0.555556, 0.564119, 482625e-10, 0, 0.587302, 0.541813, 482807e-10, 0, 0.619048, 0.519342, 471552e-10, 0, 0.650794, 0.497514, 466765e-10, 0, 0.68254, 0.475879, 455582e-10, 0, 0.714286, 0.454789, 446007e-10, 0, 0.746032, 0.434217, 435382e-10, 0, 0.777778, 0.414086, 421753e-10, 0, 0.809524, 0.394744, 412093e-10, 0, 0.84127, 0.375782, 396634e-10, 0, 0.873016, 0.357707, 386419e-10, 0, 0.904762, 0.340038, 370345e-10, 0, 0.936508, 0.323284, 359725e-10, 0, 0.968254, 0.306954, 3436e-8, 0, 1, 1, 599567e-19, 0, 0, 1, 600497e-19, 0, 0, 1, 614839e-19, 0, 0, 1, 686641e-19, 0, 0, 1, 972658e-19, 0, 0, 1, 221271e-18, 0, 0, 1, 833195e-18, 0, 0, 1, 403601e-17, 0, 0, 0.999999, 206001e-16, 0, 0, 0.999998, 101739e-15, 0, 0, 0.999997, 470132e-15, 0, 0, 0.999993, 200436e-14, 0, 0, 0.999988, 783682e-14, 0, 0, 0.999979, 280338e-13, 0, 0, 0.999962, 917033e-13, 0, 0, 0.999933, 274514e-12, 0, 0, 0.999881, 753201e-12, 0, 0, 0.999783, 189826e-11, 0, 0, 0.999594, 440279e-11, 0, 0, 0.999178, 93898e-10, 0, 0, 0.998073, 181265e-10, 0, 0, 0.993993, 280487e-10, 0, 0, 0.979982, 149422e-10, 0, 0, 0.968145, 378481e-11, 0, 0, 0.966786, 53771e-10, 0, 0, 0.965611, 947508e-11, 0, 388934e-10, 0.963557, 156616e-10, 0, 9693e-7, 0.959752, 235144e-10, 0, 370329e-8, 0.952461, 291568e-10, 0, 868428e-8, 0.940193, 240102e-10, 0, 0.0161889, 0.929042, 231235e-10, 0, 0.0263948, 0.920266, 273968e-10, 0, 0.0394088, 0.911178, 337915e-10, 0, 0.0552818, 0.897873, 333629e-10, 0, 0.0740138, 0.884053, 351405e-10, 0, 0.0955539, 0.869455, 378034e-10, 0, 0.119795, 0.854655, 399378e-10, 0, 0.14656, 0.838347, 419108e-10, 0, 0.175573, 0.820693, 440831e-10, 0, 0.206388, 0.802277, 445599e-10, 0, 0.238095, 0.783634, 472691e-10, 0, 0.269841, 0.763159, 476984e-10, 0, 0.301587, 0.742914, 491487e-10, 0, 0.333333, 0.721662, 502312e-10, 0, 0.365079, 0.699668, 502817e-10, 0, 0.396825, 0.677839, 51406e-9, 0, 0.428571, 0.655091, 511095e-10, 0, 0.460317, 0.632665, 516067e-10, 0, 0.492064, 0.609734, 512255e-10, 0, 0.52381, 0.587043, 510263e-10, 0, 0.555556, 0.564298, 50565e-9, 0, 0.587302, 0.541769, 497951e-10, 0, 0.619048, 0.519529, 492698e-10, 0, 0.650794, 0.497574, 482066e-10, 0, 0.68254, 0.476028, 473689e-10, 0, 0.714286, 0.454961, 461941e-10, 0, 0.746032, 0.434341, 450618e-10, 0, 0.777778, 0.414364, 438355e-10, 0, 0.809524, 0.394832, 424196e-10, 0, 0.84127, 0.376109, 412563e-10, 0, 0.873016, 0.35779, 396226e-10, 0, 0.904762, 0.340379, 384886e-10, 0, 0.936508, 0.323385, 368214e-10, 0, 0.968254, 0.307295, 356636e-10, 0, 1, 1, 106465e-17, 0, 0, 1, 106555e-17, 0, 0, 1, 107966e-17, 0, 0, 1, 114601e-17, 0, 0, 1, 137123e-17, 0, 0, 1, 21243e-16, 0, 0, 0.999999, 489653e-17, 0, 0, 0.999999, 160283e-16, 0, 0, 0.999998, 62269e-15, 0, 0, 0.999997, 251859e-15, 0, 0, 0.999996, 996192e-15, 0, 0, 0.999992, 374531e-14, 0, 0, 0.999986, 132022e-13, 0, 0, 0.999975, 433315e-13, 0, 0, 0.999959, 131956e-12, 0, 0, 0.999927, 372249e-12, 0, 0, 0.999871, 972461e-12, 0, 0, 0.999771, 235343e-11, 0, 0, 0.999572, 52768e-10, 0, 0, 0.999133, 109237e-10, 0, 0, 0.997912, 203675e-10, 0, 0, 0.993008, 279396e-10, 0, 0, 0.980645, 139604e-10, 0, 0, 0.970057, 646596e-11, 0, 0, 0.966717, 65089e-10, 0, 474145e-10, 0.965497, 111863e-10, 0, 89544e-8, 0.96334, 179857e-10, 0, 32647e-7, 0.959294, 259045e-10, 0, 75144e-7, 0.951519, 292327e-10, 0, 0.0138734, 0.940517, 249769e-10, 0, 0.0224952, 0.93014, 26803e-9, 0, 0.0334828, 0.91972, 303656e-10, 0, 0.0468973, 0.910294, 353323e-10, 0, 0.0627703, 0.897701, 351002e-10, 0, 0.0811019, 0.884522, 388104e-10, 0, 0.10186, 0.869489, 412932e-10, 0, 0.124985, 0.853983, 415781e-10, 0, 0.150372, 0.838425, 454066e-10, 0, 0.177868, 0.820656, 471624e-10, 0, 0.207245, 0.801875, 475243e-10, 0, 0.238143, 0.783521, 505621e-10, 0, 0.269841, 0.763131, 50721e-9, 0, 0.301587, 0.74261, 523293e-10, 0, 0.333333, 0.72148, 528699e-10, 0, 0.365079, 0.699696, 538677e-10, 0, 0.396825, 0.677592, 539255e-10, 0, 0.428571, 0.65525, 546367e-10, 0, 0.460317, 0.632452, 541348e-10, 0, 0.492064, 0.609903, 544976e-10, 0, 0.52381, 0.586928, 536201e-10, 0, 0.555556, 0.564464, 535185e-10, 0, 0.587302, 0.541801, 524949e-10, 0, 0.619048, 0.519681, 51812e-9, 0, 0.650794, 0.497685, 507687e-10, 0, 0.68254, 0.47622, 496243e-10, 0, 0.714286, 0.455135, 485714e-10, 0, 0.746032, 0.4346, 471847e-10, 0, 0.777778, 0.414564, 459294e-10, 0, 0.809524, 0.395165, 444705e-10, 0, 0.84127, 0.376333, 430772e-10, 0, 0.873016, 0.358197, 416229e-10, 0, 0.904762, 0.34064, 401019e-10, 0, 0.936508, 0.323816, 386623e-10, 0, 0.968254, 0.307581, 370933e-10, 0, 1, 1, 991541e-17, 0, 0, 1, 992077e-17, 0, 0, 1, 100041e-16, 0, 0, 1, 10385e-15, 0, 0, 1, 115777e-16, 0, 0, 1, 150215e-16, 0, 0, 0.999999, 254738e-16, 0, 0, 0.999999, 598822e-16, 0, 0, 0.999998, 179597e-15, 0, 0, 0.999997, 602367e-15, 0, 0, 0.999994, 206835e-14, 0, 0, 0.99999, 694952e-14, 0, 0, 0.999984, 223363e-13, 0, 0, 0.999972, 678578e-13, 0, 0, 0.999952, 193571e-12, 0, 0, 0.999919, 516594e-12, 0, 0, 0.99986, 128739e-11, 0, 0, 0.999753, 299298e-11, 0, 0, 0.999546, 648258e-11, 0, 0, 0.999074, 129985e-10, 0, 0, 0.997671, 232176e-10, 0, 0, 0.991504, 256701e-10, 0, 0, 0.981148, 131141e-10, 0, 0, 0.971965, 869048e-11, 0, 280182e-10, 0.966624, 808301e-11, 0, 695475e-9, 0.965344, 135235e-10, 0, 265522e-8, 0.963048, 210592e-10, 0, 622975e-8, 0.958673, 287473e-10, 0, 0.0116234, 0.950262, 281379e-10, 0, 0.018976, 0.940836, 271089e-10, 0, 0.0283844, 0.930996, 30926e-9, 0, 0.0399151, 0.919848, 348359e-10, 0, 0.0536063, 0.909136, 366092e-10, 0, 0.0694793, 0.897554, 384162e-10, 0, 0.0875342, 0.884691, 430971e-10, 0, 0.107749, 0.869414, 447803e-10, 0, 0.130087, 0.853462, 452858e-10, 0, 0.154481, 0.838187, 495769e-10, 0, 0.180833, 0.820381, 502709e-10, 0, 0.209005, 0.801844, 522713e-10, 0, 0.238791, 0.783061, 541505e-10, 0, 0.269869, 0.763205, 553712e-10, 0, 0.301587, 0.742362, 564909e-10, 0, 0.333333, 0.721393, 572646e-10, 0, 0.365079, 0.699676, 581012e-10, 0, 0.396825, 0.677395, 58096e-9, 0, 0.428571, 0.655208, 585766e-10, 0, 0.460317, 0.632451, 583602e-10, 0, 0.492064, 0.609839, 580234e-10, 0, 0.52381, 0.587093, 577161e-10, 0, 0.555556, 0.564467, 568447e-10, 0, 0.587302, 0.542043, 563166e-10, 0, 0.619048, 0.519826, 55156e-9, 0, 0.650794, 0.497952, 541682e-10, 0, 0.68254, 0.476477, 528971e-10, 0, 0.714286, 0.455412, 514952e-10, 0, 0.746032, 0.434926, 502222e-10, 0, 0.777778, 0.4149, 485779e-10, 0, 0.809524, 0.395552, 472242e-10, 0, 0.84127, 0.376712, 454891e-10, 0, 0.873016, 0.358622, 440924e-10, 0, 0.904762, 0.341048, 422984e-10, 0, 0.936508, 0.324262, 408582e-10, 0, 0.968254, 0.308013, 390839e-10, 0, 1, 1, 613913e-16, 0, 0, 1, 614145e-16, 0, 0, 1, 617708e-16, 0, 0, 1, 633717e-16, 0, 0, 1, 681648e-16, 0, 0, 1, 808291e-16, 0, 0, 1, 114608e-15, 0, 0, 0.999998, 210507e-15, 0, 0, 0.999997, 499595e-15, 0, 0, 0.999995, 139897e-14, 0, 0, 0.999994, 419818e-14, 0, 0, 0.999988, 127042e-13, 0, 0, 0.999979, 375153e-13, 0, 0, 0.999965, 106206e-12, 0, 0, 0.999945, 285381e-12, 0, 0, 0.999908, 723611e-12, 0, 0, 0.999846, 17255e-10, 0, 0, 0.999733, 386104e-11, 0, 0, 0.999511, 808493e-11, 0, 0, 0.998993, 156884e-10, 0, 0, 0.997326, 265538e-10, 0, 0, 0.989706, 206466e-10, 0, 0, 0.981713, 130756e-10, 0, 70005e-10, 0.973636, 106473e-10, 0, 464797e-9, 0.966509, 10194e-9, 0, 201743e-8, 0.965149, 165881e-10, 0, 497549e-8, 0.962669, 249147e-10, 0, 953262e-8, 0.95786, 317449e-10, 0, 0.0158211, 0.949334, 281045e-10, 0, 0.0239343, 0.941041, 303263e-10, 0, 0.0339372, 0.931575, 356754e-10, 0, 0.0458738, 0.920102, 397075e-10, 0, 0.059772, 0.908002, 384886e-10, 0, 0.075645, 0.897269, 43027e-9, 0, 0.0934929, 0.884559, 479925e-10, 0, 0.113302, 0.869161, 48246e-9, 0, 0.135045, 0.853342, 509505e-10, 0, 0.158678, 0.837633, 542846e-10, 0, 0.184136, 0.820252, 554139e-10, 0, 0.211325, 0.801872, 581412e-10, 0, 0.240113, 0.782418, 585535e-10, 0, 0.270306, 0.7631, 610923e-10, 0, 0.301594, 0.742183, 613678e-10, 0, 0.333333, 0.721098, 627275e-10, 0, 0.365079, 0.699512, 629413e-10, 0, 0.396825, 0.677372, 636351e-10, 0, 0.428571, 0.655059, 633555e-10, 0, 0.460317, 0.632567, 636513e-10, 0, 0.492064, 0.609784, 628965e-10, 0, 0.52381, 0.587237, 625546e-10, 0, 0.555556, 0.564525, 615825e-10, 0, 0.587302, 0.542181, 605048e-10, 0, 0.619048, 0.520017, 596329e-10, 0, 0.650794, 0.498204, 581516e-10, 0, 0.68254, 0.476742, 569186e-10, 0, 0.714286, 0.455803, 553833e-10, 0, 0.746032, 0.435251, 537807e-10, 0, 0.777778, 0.415374, 522025e-10, 0, 0.809524, 0.395921, 503421e-10, 0, 0.84127, 0.377253, 488211e-10, 0, 0.873016, 0.359021, 468234e-10, 0, 0.904762, 0.341637, 453269e-10, 0, 0.936508, 0.3247, 433014e-10, 0, 0.968254, 0.308625, 418007e-10, 0, 1, 1, 286798e-15, 0, 0, 1, 286877e-15, 0, 0, 1, 288094e-15, 0, 0, 1, 293506e-15, 0, 0, 1, 309262e-15, 0, 0, 0.999999, 348593e-15, 0, 0, 0.999999, 444582e-15, 0, 0, 0.999998, 688591e-15, 0, 0, 0.999996, 134391e-14, 0, 0, 0.999993, 317438e-14, 0, 0, 0.999989, 835609e-14, 0, 0, 0.999983, 228677e-13, 0, 0, 0.999974, 623361e-13, 0, 0, 0.999959, 165225e-12, 0, 0, 0.999936, 419983e-12, 0, 0, 0.999896, 101546e-11, 0, 0, 0.99983, 232376e-11, 0, 0, 0.999709, 50156e-10, 0, 0, 0.999469, 10167e-9, 0, 0, 0.998886, 190775e-10, 0, 0, 0.996819, 300511e-10, 0, 0, 0.988837, 185092e-10, 0, 168222e-12, 0.982178, 134622e-10, 0, 259622e-9, 0.975017, 125961e-10, 0, 142595e-8, 0.967101, 13507e-9, 0, 382273e-8, 0.964905, 205003e-10, 0, 764164e-8, 0.96218, 29546e-9, 0, 0.0130121, 0.956821, 343738e-10, 0, 0.0200253, 0.948829, 305063e-10, 0, 0.0287452, 0.941092, 346487e-10, 0, 0.039218, 0.931883, 412061e-10, 0, 0.0514748, 0.920211, 444651e-10, 0, 0.0655351, 0.907307, 431252e-10, 0, 0.0814082, 0.89684, 490382e-10, 0, 0.0990939, 0.884119, 53334e-9, 0, 0.118583, 0.869148, 54114e-9, 0, 0.139856, 0.853377, 578536e-10, 0, 0.162882, 0.836753, 592285e-10, 0, 0.187615, 0.820063, 622787e-10, 0, 0.213991, 0.801694, 645492e-10, 0, 0.241918, 0.782116, 65353e-9, 0, 0.271267, 0.762673, 674344e-10, 0, 0.301847, 0.742133, 682788e-10, 0, 0.333333, 0.720779, 691959e-10, 0, 0.365079, 0.699386, 696817e-10, 0, 0.396826, 0.67732, 699583e-10, 0, 0.428572, 0.654888, 698447e-10, 0, 0.460318, 0.632499, 694063e-10, 0, 0.492064, 0.609825, 691612e-10, 0, 0.52381, 0.587287, 681576e-10, 0, 0.555556, 0.564743, 674138e-10, 0, 0.587302, 0.542409, 661617e-10, 0, 0.619048, 0.520282, 647785e-10, 0, 0.650794, 0.498506, 633836e-10, 0, 0.68254, 0.477102, 615905e-10, 0, 0.714286, 0.456167, 601013e-10, 0, 0.746032, 0.435728, 581457e-10, 0, 0.777778, 0.415809, 564215e-10, 0, 0.809524, 0.396517, 544997e-10, 0, 0.84127, 0.377737, 525061e-10, 0, 0.873016, 0.359698, 506831e-10, 0, 0.904762, 0.342164, 48568e-9, 0, 0.936508, 0.325417, 467826e-10, 0, 0.968254, 0.309186, 446736e-10, 0, 1, 1, 109018e-14, 0, 0, 1, 10904e-13, 0, 0, 1, 109393e-14, 0, 0, 1, 11095e-13, 0, 0, 1, 1154e-12, 0, 0, 1, 126089e-14, 0, 0, 0.999999, 15059e-13, 0, 0, 0.999997, 207899e-14, 0, 0, 0.999994, 348164e-14, 0, 0, 0.999993, 705728e-14, 0, 0, 0.999987, 163692e-13, 0, 0, 0.999981, 406033e-13, 0, 0, 0.999969, 10245e-11, 0, 0, 0.999953, 255023e-12, 0, 0, 0.999925, 61511e-11, 0, 0, 0.999881, 142218e-11, 0, 0, 0.99981, 313086e-11, 0, 0, 0.99968, 653119e-11, 0, 0, 0.999418, 12832e-9, 0, 0, 0.998748, 232497e-10, 0, 0, 0.996066, 329522e-10, 0, 0, 0.988379, 179613e-10, 0, 108799e-9, 0.982567, 143715e-10, 0, 921302e-9, 0.976097, 148096e-10, 0, 280738e-8, 0.968475, 178905e-10, 0, 596622e-8, 0.964606, 253921e-10, 0, 0.0105284, 0.961564, 348623e-10, 0, 0.0165848, 0.955517, 357612e-10, 0, 0.0242, 0.948381, 343493e-10, 0, 0.03342, 0.941095, 405849e-10, 0, 0.0442777, 0.931923, 475394e-10, 0, 0.0567958, 0.91996, 484328e-10, 0, 0.0709879, 0.907419, 502146e-10, 0, 0.086861, 0.89618, 561654e-10, 0, 0.104415, 0.88337, 587612e-10, 0, 0.123643, 0.869046, 618057e-10, 0, 0.144531, 0.853278, 657392e-10, 0, 0.167057, 0.836091, 66303e-9, 0, 0.191188, 0.819644, 704445e-10, 0, 0.216878, 0.801246, 714071e-10, 0, 0.244062, 0.782031, 740093e-10, 0, 0.272649, 0.762066, 74685e-9, 0, 0.302509, 0.741964, 766647e-10, 0, 0.333442, 0.720554, 766328e-10, 0, 0.365079, 0.699098, 777857e-10, 0, 0.396826, 0.677189, 774633e-10, 0, 0.428572, 0.65484, 776235e-10, 0, 0.460318, 0.632496, 770316e-10, 0, 0.492064, 0.609908, 762669e-10, 0, 0.52381, 0.587312, 753972e-10, 0, 0.555556, 0.564938, 739994e-10, 0, 0.587302, 0.542577, 728382e-10, 0, 0.619048, 0.52062, 71112e-9, 0, 0.650794, 0.498819, 694004e-10, 0, 0.68254, 0.477555, 675575e-10, 0, 0.714286, 0.456568, 653449e-10, 0, 0.746032, 0.436278, 636068e-10, 0, 0.777778, 0.41637, 613466e-10, 0, 0.809524, 0.397144, 594177e-10, 0, 0.84127, 0.378412, 570987e-10, 0, 0.873016, 0.360376, 550419e-10, 0, 0.904762, 0.342906, 527422e-10, 0, 0.936508, 0.326136, 506544e-10, 0, 0.968254, 0.30997, 484307e-10, 0, 1, 1, 354014e-14, 0, 0, 1, 354073e-14, 0, 0, 1, 354972e-14, 0, 0, 1, 358929e-14, 0, 0, 1, 370093e-14, 0, 0, 0.999999, 396194e-14, 0, 0, 0.999998, 453352e-14, 0, 0, 0.999997, 578828e-14, 0, 0, 0.999994, 863812e-14, 0, 0, 0.999991, 153622e-13, 0, 0, 0.999985, 316356e-13, 0, 0, 0.999977, 712781e-13, 0, 0, 0.999964, 166725e-12, 0, 0, 0.999945, 390501e-12, 0, 0, 0.999912, 895622e-12, 0, 0, 0.999866, 198428e-11, 0, 0, 0.999786, 421038e-11, 0, 0, 0.999647, 850239e-11, 0, 0, 0.999356, 162059e-10, 0, 0, 0.998563, 282652e-10, 0, 0, 0.994928, 336309e-10, 0, 244244e-10, 0.987999, 178458e-10, 0, 523891e-9, 0.982893, 159162e-10, 0, 194729e-8, 0.977044, 178056e-10, 0, 451099e-8, 0.969972, 230624e-10, 0, 835132e-8, 0.964237, 313922e-10, 0, 0.013561, 0.960791, 406145e-10, 0, 0.0202056, 0.954292, 372796e-10, 0, 0.0283321, 0.948052, 403199e-10, 0, 0.0379739, 0.940938, 479537e-10, 0, 0.0491551, 0.931689, 545292e-10, 0, 0.0618918, 0.91987, 54038e-9, 0, 0.0761941, 0.907665, 589909e-10, 0, 0.0920672, 0.895281, 642651e-10, 0, 0.109511, 0.882621, 659707e-10, 0, 0.12852, 0.86873, 709973e-10, 0, 0.149085, 0.853008, 742221e-10, 0, 0.171189, 0.835944, 761754e-10, 0, 0.194809, 0.818949, 797052e-10, 0, 0.21991, 0.800951, 812434e-10, 0, 0.246447, 0.781847, 838075e-10, 0, 0.274352, 0.761649, 84501e-9, 0, 0.303535, 0.74152, 860258e-10, 0, 0.333857, 0.720495, 866233e-10, 0, 0.365104, 0.698742, 868326e-10, 0, 0.396826, 0.677096, 87133e-9, 0, 0.428572, 0.654782, 863497e-10, 0, 0.460318, 0.632335, 860206e-10, 0, 0.492064, 0.610031, 849337e-10, 0, 0.52381, 0.587457, 838279e-10, 0, 0.555556, 0.56513, 82309e-9, 0, 0.587302, 0.542877, 803542e-10, 0, 0.619048, 0.5209, 786928e-10, 0, 0.650794, 0.499291, 765171e-10, 0, 0.68254, 0.477971, 744753e-10, 0, 0.714286, 0.457221, 72209e-9, 0, 0.746032, 0.436803, 697448e-10, 0, 0.777778, 0.417083, 675333e-10, 0, 0.809524, 0.397749, 648058e-10, 0, 0.84127, 0.379177, 625759e-10, 0, 0.873016, 0.361061, 598584e-10, 0, 0.904762, 0.343713, 575797e-10, 0, 0.936508, 0.326894, 549999e-10, 0, 0.968254, 0.310816, 527482e-10, 0, 1, 1, 10153e-12, 0, 0, 1, 101544e-13, 0, 0, 1, 101751e-13, 0, 0, 1, 102662e-13, 0, 0, 1, 10521e-12, 0, 0, 0.999999, 111049e-13, 0, 0, 0.999999, 123408e-13, 0, 0, 0.999996, 14924e-12, 0, 0, 0.999992, 204471e-13, 0, 0, 0.999989, 326539e-13, 0, 0, 0.99998, 603559e-13, 0, 0, 0.999971, 123936e-12, 0, 0, 0.999955, 269058e-12, 0, 0, 0.999933, 593604e-12, 0, 0, 0.999901, 129633e-11, 0, 0, 0.999847, 275621e-11, 0, 0, 0.999761, 564494e-11, 0, 0, 0.999607, 110485e-10, 0, 0, 0.999282, 204388e-10, 0, 0, 0.99831, 341084e-10, 0, 22038e-11, 0.993288, 294949e-10, 0, 242388e-9, 0.987855, 192736e-10, 0, 12503e-7, 0.983167, 182383e-10, 0, 32745e-7, 0.977908, 218633e-10, 0, 646321e-8, 0.971194, 290662e-10, 0, 0.0109133, 0.963867, 386401e-10, 0, 0.0166927, 0.95982, 462827e-10, 0, 0.0238494, 0.953497, 420705e-10, 0, 0.0324178, 0.947621, 477743e-10, 0, 0.0424225, 0.940611, 568258e-10, 0, 0.0538808, 0.931174, 618061e-10, 0, 0.0668047, 0.919919, 627098e-10, 0, 0.0812014, 0.907856, 694714e-10, 0, 0.0970745, 0.894509, 735008e-10, 0, 0.114424, 0.881954, 763369e-10, 0, 0.133246, 0.868309, 821896e-10, 0, 0.153534, 0.852511, 83769e-9, 0, 0.175275, 0.835821, 881615e-10, 0, 0.198453, 0.817981, 896368e-10, 0, 0.223042, 0.800504, 930906e-10, 0, 0.249009, 0.78141, 945056e-10, 0, 0.276304, 0.761427, 963605e-10, 0, 0.304862, 0.74094, 968088e-10, 0, 0.334584, 0.720233, 981481e-10, 0, 0.365322, 0.698592, 979122e-10, 0, 0.396826, 0.676763, 981057e-10, 0, 0.428571, 0.654808, 973956e-10, 0, 0.460318, 0.632326, 962619e-10, 0, 0.492064, 0.610049, 952996e-10, 0, 0.52381, 0.58763, 933334e-10, 0, 0.555556, 0.565261, 917573e-10, 0, 0.587302, 0.543244, 896636e-10, 0, 0.619048, 0.521273, 873304e-10, 0, 0.650794, 0.499818, 852648e-10, 0, 0.68254, 0.478536, 823961e-10, 0, 0.714286, 0.457826, 79939e-9, 0, 0.746032, 0.437549, 77126e-9, 0, 0.777778, 0.41776, 743043e-10, 0, 0.809524, 0.39863, 716426e-10, 0, 0.84127, 0.379954, 686456e-10, 0, 0.873016, 0.362025, 660514e-10, 0, 0.904762, 0.344581, 630755e-10, 0, 0.936508, 0.327909, 605439e-10, 0, 0.968254, 0.311736, 576345e-10, 0, 1, 1, 263344e-13, 0, 0, 1, 263373e-13, 0, 0, 1, 263815e-13, 0, 0, 1, 265753e-13, 0, 0, 1, 271132e-13, 0, 0, 0.999999, 283279e-13, 0, 0, 0.999997, 30833e-12, 0, 0, 0.999995, 358711e-13, 0, 0, 0.999992, 461266e-13, 0, 0, 0.999985, 67574e-12, 0, 0, 0.999977, 11358e-11, 0, 0, 0.999966, 213657e-12, 0, 0, 0.999948, 431151e-12, 0, 0, 0.999923, 896656e-12, 0, 0, 0.999884, 186603e-11, 0, 0, 0.999826, 381115e-11, 0, 0, 0.999732, 754184e-11, 0, 0, 0.999561, 143192e-10, 0, 0, 0.999191, 257061e-10, 0, 0, 0.997955, 405724e-10, 0, 744132e-10, 0.992228, 276537e-10, 0, 716477e-9, 0.987638, 208885e-10, 0, 22524e-7, 0.983395, 215226e-10, 0, 484816e-8, 0.978614, 270795e-10, 0, 860962e-8, 0.972389, 365282e-10, 0, 0.0136083, 0.964392, 474747e-10, 0, 0.0198941, 0.95861, 509141e-10, 0, 0.0275023, 0.952806, 48963e-9, 0, 0.0364584, 0.94712, 571119e-10, 0, 0.04678, 0.940104, 671704e-10, 0, 0.0584799, 0.930398, 687586e-10, 0, 0.0715665, 0.919866, 738161e-10, 0, 0.086045, 0.907853, 813235e-10, 0, 0.101918, 0.894078, 834582e-10, 0, 0.119186, 0.881177, 892093e-10, 0, 0.137845, 0.867575, 944548e-10, 0, 0.157891, 0.852107, 969607e-10, 0, 0.179316, 0.835502, 101456e-9, 0, 0.202106, 0.81756, 103256e-9, 0, 0.226243, 0.79984, 106954e-9, 0, 0.251704, 0.780998, 108066e-9, 0, 0.278451, 0.761132, 110111e-9, 0, 0.306436, 0.740429, 110459e-9, 0, 0.335586, 0.719836, 111219e-9, 0, 0.365796, 0.698467, 11145e-8, 0, 0.3969, 0.676446, 110393e-9, 0, 0.428571, 0.654635, 110035e-9, 0, 0.460318, 0.632411, 108548e-9, 0, 0.492064, 0.609986, 106963e-9, 0, 0.52381, 0.587872, 105238e-9, 0, 0.555556, 0.565528, 102665e-9, 0, 0.587302, 0.543563, 100543e-9, 0, 0.619048, 0.52176, 976182e-10, 0, 0.650794, 0.500188, 947099e-10, 0, 0.68254, 0.479204, 919929e-10, 0, 0.714286, 0.458413, 886139e-10, 0, 0.746032, 0.438314, 857839e-10, 0, 0.777778, 0.418573, 82411e-9, 0, 0.809524, 0.39947, 792211e-10, 0, 0.84127, 0.380892, 759546e-10, 0, 0.873016, 0.362953, 727571e-10, 0, 0.904762, 0.345601, 695738e-10, 0, 0.936508, 0.328895, 664907e-10, 0, 0.968254, 0.312808, 634277e-10, 0, 1, 1, 628647e-13, 0, 0, 1, 628705e-13, 0, 0, 1, 629587e-13, 0, 0, 1, 633441e-13, 0, 0, 0.999999, 644087e-13, 0, 0, 0.999998, 667856e-13, 0, 0, 0.999997, 715889e-13, 0, 0, 0.999995, 809577e-13, 0, 0, 0.999989, 992764e-13, 0, 0, 0.999983, 135834e-12, 0, 0, 0.999974, 210482e-12, 0, 0, 0.999959, 365215e-12, 0, 0, 0.999939, 686693e-12, 0, 0, 0.999911, 13472e-10, 0, 0, 0.999868, 26731e-10, 0, 0, 0.999804, 524756e-11, 0, 0, 0.9997, 100403e-10, 0, 0, 0.99951, 185019e-10, 0, 0, 0.999078, 322036e-10, 0, 620676e-11, 0.997428, 470002e-10, 0, 341552e-9, 0.99162, 287123e-10, 0, 143727e-8, 0.987479, 234706e-10, 0, 349201e-8, 0.983582, 260083e-10, 0, 66242e-7, 0.979186, 337927e-10, 0, 0.0109113, 0.97325, 454689e-10, 0, 0.0164064, 0.965221, 573759e-10, 0, 0.0231463, 0.957262, 544114e-10, 0, 0.0311571, 0.952211, 587006e-10, 0, 0.0404572, 0.946631, 692256e-10, 0, 0.0510592, 0.939391, 787819e-10, 0, 0.0629723, 0.929795, 792368e-10, 0, 0.0762025, 0.91965, 875075e-10, 0, 0.090753, 0.907737, 950903e-10, 0, 0.106626, 0.893899, 972963e-10, 0, 0.123822, 0.880239, 10459e-8, 0, 0.142337, 0.866562, 107689e-9, 0, 0.16217, 0.85164, 113081e-9, 0, 0.183314, 0.835021, 116636e-9, 0, 0.20576, 0.817311, 120074e-9, 0, 0.229496, 0.798845, 121921e-9, 0, 0.254502, 0.780479, 12475e-8, 0, 0.280753, 0.760694, 125255e-9, 0, 0.308212, 0.740142, 126719e-9, 0, 0.336825, 0.719248, 12636e-8, 0, 0.366517, 0.698209, 126712e-9, 0, 0.397167, 0.676398, 125769e-9, 0, 0.428578, 0.654378, 124432e-9, 0, 0.460318, 0.632484, 123272e-9, 0, 0.492064, 0.610113, 12085e-8, 0, 0.52381, 0.587931, 118411e-9, 0, 0.555556, 0.565872, 11569e-8, 0, 0.587302, 0.543814, 112521e-9, 0, 0.619048, 0.522265, 109737e-9, 0, 0.650794, 0.500835, 106228e-9, 0, 0.68254, 0.479818, 102591e-9, 0, 0.714286, 0.459258, 991288e-10, 0, 0.746032, 0.439061, 952325e-10, 0, 0.777778, 0.419552, 91895e-9, 0, 0.809524, 0.400399, 879051e-10, 0, 0.84127, 0.381976, 844775e-10, 0, 0.873016, 0.364009, 806316e-10, 0, 0.904762, 0.346761, 771848e-10, 0, 0.936508, 0.330049, 735429e-10, 0, 0.968254, 0.314018, 702103e-10, 0, 1, 1, 139968e-12, 0, 0, 1, 139979e-12, 0, 0, 1, 140145e-12, 0, 0, 1, 14087e-11, 0, 0, 0.999999, 142865e-12, 0, 0, 0.999998, 147279e-12, 0, 0, 0.999997, 156057e-12, 0, 0, 0.999992, 17276e-11, 0, 0, 0.999989, 204352e-12, 0, 0, 0.99998, 26494e-11, 0, 0, 0.999969, 383435e-12, 0, 0, 0.999953, 618641e-12, 0, 0, 0.999929, 108755e-11, 0, 0, 0.999898, 201497e-11, 0, 0, 0.999849, 381346e-11, 0, 0, 0.999778, 719815e-11, 0, 0, 0.999661, 133215e-10, 0, 0, 0.999451, 238313e-10, 0, 0, 0.998936, 401343e-10, 0, 113724e-9, 0.99662, 517346e-10, 0, 820171e-9, 0.991094, 304323e-10, 0, 238143e-8, 0.987487, 281757e-10, 0, 493527e-8, 0.983731, 320048e-10, 0, 856859e-8, 0.979647, 423905e-10, 0, 0.0133393, 0.973837, 562935e-10, 0, 0.0192863, 0.96584, 677442e-10, 0, 0.0264369, 0.956309, 623073e-10, 0, 0.03481, 0.951523, 704131e-10, 0, 0.0444184, 0.946003, 836594e-10, 0, 0.0552713, 0.938454, 911736e-10, 0, 0.0673749, 0.929279, 938264e-10, 0, 0.0807329, 0.919239, 103754e-9, 0, 0.0953479, 0.907293, 109928e-9, 0, 0.111221, 0.893936, 115257e-9, 0, 0.128352, 0.879674, 122265e-9, 0, 0.14674, 0.865668, 125733e-9, 0, 0.166382, 0.850998, 132305e-9, 0, 0.187276, 0.834498, 134844e-9, 0, 0.209413, 0.816903, 139276e-9, 0, 0.232786, 0.798235, 140984e-9, 0, 0.257382, 0.779724, 14378e-8, 0, 0.283181, 0.760251, 144623e-9, 0, 0.310156, 0.739808, 145228e-9, 0, 0.338269, 0.718762, 14539e-8, 0, 0.367461, 0.697815, 144432e-9, 0, 0.397646, 0.67631, 143893e-9, 0, 0.428685, 0.654278, 141846e-9, 0, 0.460318, 0.632347, 13935e-8, 0, 0.492064, 0.610296, 137138e-9, 0, 0.52381, 0.588039, 133806e-9, 0, 0.555556, 0.566218, 130755e-9, 0, 0.587302, 0.544346, 127128e-9, 0, 0.619048, 0.522701, 123002e-9, 0, 0.650794, 0.501542, 119443e-9, 0, 0.68254, 0.480508, 115055e-9, 0, 0.714286, 0.460092, 111032e-9, 0, 0.746032, 0.440021, 106635e-9, 0, 0.777778, 0.420446, 102162e-9, 0, 0.809524, 0.401512, 98184e-9, 0, 0.84127, 0.38299, 936497e-10, 0, 0.873016, 0.365232, 89813e-9, 0, 0.904762, 0.347865, 853073e-10, 0, 0.936508, 0.331342, 817068e-10, 0, 0.968254, 0.315202, 773818e-10, 0, 1, 1, 29368e-11, 0, 0, 1, 2937e-10, 0, 0, 1, 293998e-12, 0, 0, 1, 295298e-12, 0, 0, 0.999999, 298865e-12, 0, 0, 0.999998, 3067e-10, 0, 0, 0.999995, 322082e-12, 0, 0, 0.999992, 350767e-12, 0, 0, 0.999986, 403538e-12, 0, 0, 0.999976, 501372e-12, 0, 0, 0.999964, 68562e-11, 0, 0, 0.999945, 10374e-10, 0, 0, 0.999919, 171269e-11, 0, 0, 0.999882, 300175e-11, 0, 0, 0.999829, 542144e-11, 0, 0, 0.999749, 984182e-11, 0, 0, 0.99962, 176213e-10, 0, 0, 0.999382, 305995e-10, 0, 138418e-10, 0.998751, 496686e-10, 0, 389844e-9, 0.995344, 510733e-10, 0, 150343e-8, 0.990768, 345829e-10, 0, 352451e-8, 0.987464, 342841e-10, 0, 655379e-8, 0.983846, 399072e-10, 0, 0.0106554, 0.980007, 533219e-10, 0, 0.0158723, 0.974494, 696992e-10, 0, 0.0222333, 0.96622, 776754e-10, 0, 0.029758, 0.956273, 747718e-10, 0, 0.0384596, 0.950952, 864611e-10, 0, 0.0483473, 0.945215, 100464e-9, 0, 0.0594266, 0.937287, 103729e-9, 0, 0.0717019, 0.928649, 111665e-9, 0, 0.0851752, 0.918791, 12353e-8, 0, 0.0998479, 0.906685, 127115e-9, 0, 0.115721, 0.893706, 13628e-8, 0, 0.132794, 0.879248, 142427e-9, 0, 0.151067, 0.864685, 148091e-9, 0, 0.170538, 0.850032, 153517e-9, 0, 0.191204, 0.833853, 157322e-9, 0, 0.213063, 0.816353, 161086e-9, 0, 0.236107, 0.797834, 164111e-9, 0, 0.260329, 0.778831, 165446e-9, 0, 0.285714, 0.759756, 167492e-9, 0, 0.312243, 0.739419, 166928e-9, 0, 0.339887, 0.718491, 167e-6, 0, 0.368604, 0.697392, 165674e-9, 0, 0.398329, 0.676102, 163815e-9, 0, 0.428961, 0.654243, 162003e-9, 0, 0.460331, 0.632176, 158831e-9, 0, 0.492064, 0.610407, 155463e-9, 0, 0.52381, 0.588394, 152062e-9, 0, 0.555556, 0.56645, 147665e-9, 0, 0.587302, 0.5449, 14375e-8, 0, 0.619048, 0.523276, 138905e-9, 0, 0.650794, 0.502179, 134189e-9, 0, 0.68254, 0.481359, 129392e-9, 0, 0.714286, 0.46092, 124556e-9, 0, 0.746032, 0.441084, 11957e-8, 0, 0.777778, 0.421517, 114652e-9, 0, 0.809524, 0.402721, 109688e-9, 0, 0.84127, 0.384222, 104667e-9, 0, 0.873016, 0.366534, 999633e-10, 0, 0.904762, 0.349205, 950177e-10, 0, 0.936508, 0.332702, 907301e-10, 0, 0.968254, 0.316599, 859769e-10, 0, 1, 1, 585473e-12, 0, 0, 1, 585507e-12, 0, 0, 1, 58602e-11, 0, 0, 0.999999, 588259e-12, 0, 0, 0.999999, 594381e-12, 0, 0, 0.999998, 607754e-12, 0, 0, 0.999995, 633729e-12, 0, 0, 0.99999, 68137e-11, 0, 0, 0.999984, 767003e-12, 0, 0, 0.999973, 921212e-12, 0, 0, 0.999959, 120218e-11, 0, 0, 0.999936, 172024e-11, 0, 0, 0.999907, 268088e-11, 0, 0, 0.999866, 445512e-11, 0, 0, 0.999806, 768481e-11, 0, 0, 0.999716, 1342e-8, 0, 0, 0.999576, 232473e-10, 0, 0, 0.9993, 391694e-10, 0, 129917e-9, 0.998498, 608429e-10, 0, 845035e-9, 0.994132, 489743e-10, 0, 237616e-8, 0.99031, 384644e-10, 0, 484456e-8, 0.987409, 421768e-10, 0, 832472e-8, 0.983981, 504854e-10, 0, 0.0128643, 0.980268, 671028e-10, 0, 0.0184947, 0.974875, 852749e-10, 0, 0.025237, 0.966063, 85531e-9, 0, 0.0331046, 0.956779, 900588e-10, 0, 0.0421067, 0.950259, 10577e-8, 0, 0.0522487, 0.944239, 119458e-9, 0, 0.0635343, 0.936341, 122164e-9, 0, 0.0759654, 0.928047, 134929e-9, 0, 0.0895434, 0.918065, 145544e-9, 0, 0.104269, 0.906267, 150531e-9, 0, 0.120142, 0.893419, 161652e-9, 0, 0.137163, 0.878758, 16593e-8, 0, 0.15533, 0.863699, 174014e-9, 0, 0.174645, 0.848876, 177877e-9, 0, 0.195106, 0.833032, 184049e-9, 0, 0.21671, 0.815557, 186088e-9, 0, 0.239454, 0.797323, 19054e-8, 0, 0.263332, 0.778124, 191765e-9, 0, 0.288336, 0.758929, 192535e-9, 0, 0.314451, 0.738979, 192688e-9, 0, 0.341658, 0.718213, 191522e-9, 0, 0.369924, 0.696947, 190491e-9, 0, 0.399202, 0.675807, 187913e-9, 0, 0.429416, 0.654147, 184451e-9, 0, 0.460447, 0.63229, 181442e-9, 0, 0.492064, 0.610499, 177139e-9, 0, 0.523809, 0.588747, 172596e-9, 0, 0.555555, 0.566783, 167457e-9, 0, 0.587301, 0.545359, 162518e-9, 0, 0.619048, 0.523984, 156818e-9, 0, 0.650794, 0.502917, 151884e-9, 0, 0.68254, 0.482294, 145514e-9, 0, 0.714286, 0.461945, 140199e-9, 0, 0.746032, 0.442133, 134101e-9, 0, 0.777778, 0.422705, 128374e-9, 0, 0.809524, 0.403916, 122996e-9, 0, 0.84127, 0.38554, 116808e-9, 0, 0.873016, 0.367909, 111973e-9, 0, 0.904762, 0.350651, 105938e-9, 0, 0.936508, 0.334208, 101355e-9, 0, 0.968254, 0.318123, 957629e-10, 0, 1, 1, 111633e-11, 0, 0, 1, 111639e-11, 0, 0, 1, 111725e-11, 0, 0, 1, 112096e-11, 0, 0, 0.999999, 11311e-10, 0, 0, 0.999997, 115315e-11, 0, 0, 0.999995, 11956e-10, 0, 0, 0.999989, 127239e-11, 0, 0, 0.999981, 140772e-11, 0, 0, 0.999969, 164541e-11, 0, 0, 0.999952, 206607e-11, 0, 0, 0.999928, 281783e-11, 0, 0, 0.999895, 416835e-11, 0, 0, 0.999848, 658728e-11, 0, 0, 0.999781, 108648e-10, 0, 0, 0.999682, 182579e-10, 0, 0, 0.999523, 306003e-10, 0, 159122e-10, 0.999205, 499862e-10, 0, 391184e-9, 0.998131, 73306e-9, 0, 147534e-8, 0.993334, 513229e-10, 0, 34227e-7, 0.99016, 467783e-10, 0, 632232e-8, 0.987321, 523413e-10, 0, 0.0102295, 0.984099, 64267e-9, 0, 0.0151794, 0.980432, 843042e-10, 0, 0.0211947, 0.974976, 102819e-9, 0, 0.0282899, 0.966429, 996234e-10, 0, 0.0364739, 0.957633, 111074e-9, 0, 0.0457522, 0.949422, 128644e-9, 0, 0.0561278, 0.943045, 140076e-9, 0, 0.0676023, 0.935448, 146349e-9, 0, 0.0801762, 0.927225, 161854e-9, 0, 0.0938499, 0.917033, 169135e-9, 0, 0.108623, 0.905762, 179987e-9, 0, 0.124496, 0.892879, 189832e-9, 0, 0.141469, 0.878435, 195881e-9, 0, 0.159541, 0.863114, 20466e-8, 0, 0.178713, 0.84776, 209473e-9, 0, 0.198985, 0.832084, 214861e-9, 0, 0.220355, 0.814915, 217695e-9, 0, 0.242823, 0.796711, 220313e-9, 0, 0.266385, 0.777603, 22313e-8, 0, 0.291036, 0.757991, 222471e-9, 0, 0.316767, 0.738371, 222869e-9, 0, 0.343563, 0.717872, 221243e-9, 0, 0.371402, 0.696619, 218089e-9, 0, 0.400248, 0.675379, 21562e-8, 0, 0.430047, 0.65411, 21169e-8, 0, 0.460709, 0.63241, 206947e-9, 0, 0.492079, 0.61046, 201709e-9, 0, 0.52381, 0.58903, 196753e-9, 0, 0.555556, 0.567267, 189637e-9, 0, 0.587302, 0.545886, 184735e-9, 0, 0.619048, 0.524714, 177257e-9, 0, 0.650794, 0.503789, 171424e-9, 0, 0.68254, 0.483204, 164688e-9, 0, 0.714286, 0.462976, 157172e-9, 0, 0.746032, 0.443294, 151341e-9, 0, 0.777778, 0.423988, 143737e-9, 0, 0.809524, 0.405325, 138098e-9, 0, 0.84127, 0.386981, 130698e-9, 0, 0.873016, 0.369436, 125276e-9, 0, 0.904762, 0.35219, 118349e-9, 0, 0.936508, 0.335804, 11312e-8, 0, 0.968254, 0.319749, 106687e-9, 0, 1, 1, 204685e-11, 0, 0, 1, 204694e-11, 0, 0, 1, 204831e-11, 0, 0, 0.999999, 205428e-11, 0, 0, 0.999999, 207056e-11, 0, 0, 0.999997, 210581e-11, 0, 0, 0.999993, 21732e-10, 0, 0, 0.999987, 229365e-11, 0, 0, 0.999979, 250243e-11, 0, 0, 0.999965, 286127e-11, 0, 0, 0.999947, 348028e-11, 0, 0, 0.999918, 455588e-11, 0, 0, 0.999881, 643303e-11, 0, 0, 0.999828, 970064e-11, 0, 0, 0.999753, 153233e-10, 0, 0, 0.999642, 24793e-9, 0, 0, 0.999464, 402032e-10, 0, 122947e-9, 0.999089, 635852e-10, 0, 807414e-9, 0.997567, 857026e-10, 0, 227206e-8, 0.992903, 594912e-10, 0, 462812e-8, 0.990011, 578515e-10, 0, 794162e-8, 0.987192, 65399e-9, 0, 0.0122534, 0.98418, 819675e-10, 0, 0.0175888, 0.980491, 105514e-9, 0, 0.0239635, 0.974779, 121532e-9, 0, 0.031387, 0.96675, 119144e-9, 0, 0.0398644, 0.958248, 136125e-9, 0, 0.0493982, 0.948884, 155408e-9, 0, 0.0599896, 0.941673, 162281e-9, 0, 0.0716382, 0.934521, 176754e-9, 0, 0.0843437, 0.926205, 192873e-9, 0, 0.0981056, 0.916089, 200038e-9, 0, 0.112923, 0.904963, 213624e-9, 0, 0.128796, 0.892089, 221834e-9, 0, 0.145725, 0.878028, 232619e-9, 0, 0.163709, 0.86249, 238632e-9, 0, 0.182749, 0.846587, 247002e-9, 0, 0.202847, 0.830988, 250702e-9, 0, 0.224001, 0.814165, 255562e-9, 0, 0.246214, 0.796135, 257505e-9, 0, 0.269482, 0.777052, 258625e-9, 0, 0.293805, 0.757201, 258398e-9, 0, 0.319176, 0.737655, 256714e-9, 0, 0.345587, 0.717477, 255187e-9, 0, 0.373021, 0.696433, 251792e-9, 0, 0.401454, 0.675084, 247223e-9, 0, 0.430844, 0.653907, 242213e-9, 0, 0.461125, 0.632561, 237397e-9, 0, 0.492187, 0.610658, 229313e-9, 0, 0.52381, 0.589322, 224402e-9, 0, 0.555556, 0.567857, 216116e-9, 0, 0.587302, 0.54652, 209124e-9, 0, 0.619048, 0.525433, 201601e-9, 0, 0.650794, 0.504679, 192957e-9, 0, 0.68254, 0.484203, 186052e-9, 0, 0.714286, 0.464203, 177672e-9, 0, 0.746032, 0.444549, 170005e-9, 0, 0.777778, 0.425346, 162401e-9, 0, 0.809524, 0.406706, 1544e-7, 0, 0.84127, 0.388576, 147437e-9, 0, 0.873016, 0.37094, 139493e-9, 0, 0.904762, 0.353996, 133219e-9, 0, 0.936508, 0.337391, 125573e-9, 0, 0.968254, 0.321648, 119867e-9, 0, 1, 1, 362511e-11, 0, 0, 1, 362525e-11, 0, 0, 1, 362739e-11, 0, 0, 0.999999, 363673e-11, 0, 0, 0.999998, 366214e-11, 0, 0, 0.999996, 371698e-11, 0, 0, 0.999992, 382116e-11, 0, 0, 0.999986, 400554e-11, 0, 0, 0.999976, 432058e-11, 0, 0, 0.999961, 485194e-11, 0, 0, 0.999938, 574808e-11, 0, 0, 0.999908, 726643e-11, 0, 0, 0.999865, 984707e-11, 0, 0, 0.999807, 142217e-10, 0, 0, 0.999723, 215581e-10, 0, 0, 0.999602, 336114e-10, 0, 119113e-10, 0.999398, 527353e-10, 0, 355813e-9, 0.998946, 805809e-10, 0, 137768e-8, 0.996647, 942908e-10, 0, 322469e-8, 0.992298, 668733e-10, 0, 597897e-8, 0.989802, 716564e-10, 0, 968903e-8, 0.987019, 821355e-10, 0, 0.0143845, 0.984219, 104555e-9, 0, 0.0200831, 0.980425, 131245e-9, 0, 0.0267948, 0.974241, 139613e-9, 0, 0.034525, 0.967006, 145931e-9, 0, 0.0432757, 0.95893, 167153e-9, 0, 0.0530471, 0.949157, 188146e-9, 0, 0.0638386, 0.94062, 194625e-9, 0, 0.0756487, 0.933509, 213721e-9, 0, 0.0884762, 0.925088, 229616e-9, 0, 0.10232, 0.915178, 239638e-9, 0, 0.117178, 0.904093, 254814e-9, 0, 0.133051, 0.891337, 263685e-9, 0, 0.149939, 0.877326, 274789e-9, 0, 0.167841, 0.861794, 280534e-9, 0, 0.18676, 0.845758, 289534e-9, 0, 0.206696, 0.829792, 294446e-9, 0, 0.22765, 0.813037, 296877e-9, 0, 0.249625, 0.795285, 300217e-9, 0, 0.27262, 0.776323, 299826e-9, 0, 0.296636, 0.756673, 299787e-9, 0, 0.321671, 0.736856, 297867e-9, 0, 0.347718, 0.716883, 294052e-9, 0, 0.374768, 0.696089, 289462e-9, 0, 0.402804, 0.67505, 285212e-9, 0, 0.431796, 0.653509, 27653e-8, 0, 0.461695, 0.63258, 271759e-9, 0, 0.49242, 0.61104, 262811e-9, 0, 0.523822, 0.589567, 255151e-9, 0, 0.555556, 0.568322, 246434e-9, 0, 0.587302, 0.547235, 237061e-9, 0, 0.619048, 0.52616, 228343e-9, 0, 0.650794, 0.505716, 219236e-9, 0, 0.68254, 0.485274, 209595e-9, 0, 0.714286, 0.465411, 201011e-9, 0, 0.746032, 0.445854, 19109e-8, 0, 0.777778, 0.426911, 182897e-9, 0, 0.809524, 0.408222, 173569e-9, 0, 0.84127, 0.390307, 165496e-9, 0, 0.873016, 0.372624, 156799e-9, 0, 0.904762, 0.355804, 14917e-8, 0, 0.936508, 0.33924, 140907e-9, 0, 0.968254, 0.323534, 134062e-9, 0, 1, 1, 622487e-11, 0, 0, 1, 62251e-10, 0, 0, 1, 622837e-11, 0, 0, 0.999999, 624259e-11, 0, 0, 0.999998, 628127e-11, 0, 0, 0.999996, 636451e-11, 0, 0, 0.999991, 65218e-10, 0, 0, 0.999984, 679782e-11, 0, 0, 0.999973, 726361e-11, 0, 0, 0.999955, 803644e-11, 0, 0, 0.999931, 931397e-11, 0, 0, 0.999896, 114299e-10, 0, 0, 0.999847, 149402e-10, 0, 0, 0.999784, 207461e-10, 0, 0, 0.999692, 302493e-10, 0, 0, 0.999554, 454957e-10, 0, 997275e-10, 0.999326, 690762e-10, 0, 724813e-9, 0.998757, 101605e-9, 0, 20972e-7, 0.995367, 958745e-10, 0, 432324e-8, 0.99209, 832808e-10, 0, 746347e-8, 0.989517, 887601e-10, 0, 0.0115534, 0.987008, 10564e-8, 0, 0.0166134, 0.98421, 133179e-9, 0, 0.0226552, 0.98021, 161746e-9, 0, 0.0296838, 0.973676, 161821e-9, 0, 0.0377016, 0.967052, 178635e-9, 0, 0.0467079, 0.959385, 206765e-9, 0, 0.0567013, 0.949461, 22476e-8, 0, 0.0676796, 0.939578, 23574e-8, 0, 0.0796403, 0.932416, 25893e-8, 0, 0.0925812, 0.923759, 271228e-9, 0, 0.106501, 0.914223, 289165e-9, 0, 0.121397, 0.902942, 301156e-9, 0, 0.13727, 0.890419, 313852e-9, 0, 0.15412, 0.876639, 324408e-9, 0, 0.171946, 0.861316, 33249e-8, 0, 0.190751, 0.84496, 338497e-9, 0, 0.210537, 0.828427, 345861e-9, 0, 0.231305, 0.811871, 347863e-9, 0, 0.253057, 0.794397, 350225e-9, 0, 0.275797, 0.775726, 349915e-9, 0, 0.299525, 0.75617, 347297e-9, 0, 0.324242, 0.736091, 344232e-9, 0, 0.349947, 0.716213, 340835e-9, 0, 0.376633, 0.695736, 332369e-9, 0, 0.404289, 0.674961, 327943e-9, 0, 0.432895, 0.653518, 318533e-9, 0, 0.462415, 0.632574, 310391e-9, 0, 0.492788, 0.61134, 300755e-9, 0, 0.523909, 0.590017, 290506e-9, 0, 0.555556, 0.568752, 280446e-9, 0, 0.587302, 0.548061, 269902e-9, 0, 0.619048, 0.52711, 258815e-9, 0, 0.650794, 0.506682, 248481e-9, 0, 0.68254, 0.486524, 237141e-9, 0, 0.714286, 0.466812, 226872e-9, 0, 0.746032, 0.44732, 216037e-9, 0, 0.777778, 0.428473, 205629e-9, 0, 0.809524, 0.409921, 195691e-9, 0, 0.84127, 0.392028, 185457e-9, 0, 0.873016, 0.374606, 176436e-9, 0, 0.904762, 0.357601, 166508e-9, 0, 0.936508, 0.341348, 158385e-9, 0, 0.968254, 0.32542, 149203e-9, 0, 1, 1, 103967e-10, 0, 0, 1, 10397e-9, 0, 0, 1, 104019e-10, 0, 0, 0.999999, 104231e-10, 0, 0, 0.999998, 104806e-10, 0, 0, 0.999995, 106042e-10, 0, 0, 0.999991, 108366e-10, 0, 0, 0.999982, 112415e-10, 0, 0, 0.999968, 119174e-10, 0, 0, 0.99995, 130227e-10, 0, 0, 0.999922, 148176e-10, 0, 0, 0.999884, 177303e-10, 0, 0, 0.99983, 224564e-10, 0, 0, 0.999758, 300966e-10, 0, 0, 0.999654, 423193e-10, 0, 549083e-11, 0.999503, 614848e-10, 0, 296087e-9, 0.999237, 903576e-10, 0, 123144e-8, 0.998491, 1271e-7, 0, 295954e-8, 0.994594, 107754e-9, 0, 555829e-8, 0.99178, 103025e-9, 0, 907209e-8, 0.989265, 11154e-8, 0, 0.0135257, 0.986998, 136296e-9, 0, 0.0189327, 0.984137, 169154e-9, 0, 0.0252993, 0.979798, 196671e-9, 0, 0.0326272, 0.97337, 196678e-9, 0, 0.0409157, 0.967239, 223121e-9, 0, 0.0501623, 0.959543, 253809e-9, 0, 0.0603638, 0.949466, 265972e-9, 0, 0.0715171, 0.939074, 288372e-9, 0, 0.0836187, 0.931118, 310983e-9, 0, 0.0966657, 0.922525, 325561e-9, 0, 0.110656, 0.912983, 345725e-9, 0, 0.125588, 0.901617, 3556e-7, 0, 0.141461, 0.889487, 374012e-9, 0, 0.158275, 0.875787, 383445e-9, 0, 0.176031, 0.860654, 393972e-9, 0, 0.19473, 0.844417, 400311e-9, 0, 0.214374, 0.82741, 405004e-9, 0, 0.234967, 0.810545, 407378e-9, 0, 0.256512, 0.793312, 407351e-9, 0, 0.279011, 0.774847, 406563e-9, 0, 0.302468, 0.755621, 404903e-9, 0, 0.326887, 0.735511, 397486e-9, 0, 0.352266, 0.715435, 39357e-8, 0, 0.378605, 0.695403, 384739e-9, 0, 0.405897, 0.674681, 376108e-9, 0, 0.43413, 0.65359, 365997e-9, 0, 0.463277, 0.632471, 354957e-9, 0, 0.493295, 0.61151, 343593e-9, 0, 0.524106, 0.59064, 331841e-9, 0, 0.555561, 0.569386, 318891e-9, 0, 0.587302, 0.548785, 3072e-7, 0, 0.619048, 0.528146, 29361e-8, 0, 0.650794, 0.507872, 281709e-9, 0, 0.68254, 0.487805, 268627e-9, 0, 0.714286, 0.468196, 255887e-9, 0, 0.746032, 0.448922, 243997e-9, 0, 0.777778, 0.430093, 231662e-9, 0, 0.809524, 0.411845, 220339e-9, 0, 0.84127, 0.393808, 208694e-9, 0, 0.873016, 0.376615, 198045e-9, 0, 0.904762, 0.359655, 187375e-9, 0, 0.936508, 0.343452, 177371e-9, 0, 0.968254, 0.32765, 167525e-9, 0, 1, 1, 169351e-10, 0, 0, 1, 169356e-10, 0, 0, 1, 169427e-10, 0, 0, 0.999999, 169736e-10, 0, 0, 0.999998, 170575e-10, 0, 0, 0.999995, 172372e-10, 0, 0, 0.99999, 175739e-10, 0, 0, 0.999979, 181568e-10, 0, 0, 0.999966, 191206e-10, 0, 0, 0.999944, 20677e-9, 0, 0, 0.999912, 231644e-10, 0, 0, 0.999869, 271268e-10, 0, 0, 0.999811, 334272e-10, 0, 0, 0.99973, 433979e-10, 0, 0, 0.999617, 590083e-10, 0, 680315e-10, 0.999445, 829497e-10, 0, 612796e-9, 0.999138, 118019e-9, 0, 187408e-8, 0.998095, 156712e-9, 0, 395791e-8, 0.993919, 125054e-9, 0, 692144e-8, 0.991333, 126091e-9, 0, 0.0107962, 0.989226, 144912e-9, 0, 0.0155986, 0.986954, 175737e-9, 0, 0.0213364, 0.983982, 213883e-9, 0, 0.0280114, 0.979128, 234526e-9, 0, 0.0356226, 0.973327, 243725e-9, 0, 0.0441668, 0.967416, 2773e-7, 0, 0.0536399, 0.959729, 308799e-9, 0, 0.0640376, 0.949758, 322447e-9, 0, 0.0753554, 0.939173, 350021e-9, 0, 0.0875893, 0.9296, 370089e-9, 0, 0.100736, 0.921181, 391365e-9, 0, 0.114793, 0.91164, 413636e-9, 0, 0.129759, 0.900435, 427068e-9, 0, 0.145632, 0.888183, 441046e-9, 0, 0.162412, 0.874772, 454968e-9, 0, 0.180101, 0.859566, 461882e-9, 0, 0.1987, 0.843579, 471556e-9, 0, 0.218213, 0.826453, 474335e-9, 0, 0.238641, 0.809164, 477078e-9, 0, 0.259989, 0.792179, 47755e-8, 0, 0.282262, 0.773866, 472573e-9, 0, 0.305464, 0.754944, 469765e-9, 0, 0.329599, 0.735133, 462371e-9, 0, 0.35467, 0.714858, 453674e-9, 0, 0.380678, 0.694829, 443888e-9, 0, 0.407622, 0.674453, 432052e-9, 0, 0.435493, 0.653685, 420315e-9, 0, 0.464275, 0.632666, 406829e-9, 0, 0.493938, 0.611676, 392234e-9, 0, 0.524422, 0.591193, 379208e-9, 0, 0.555624, 0.570145, 36319e-8, 0, 0.587302, 0.549566, 349111e-9, 0, 0.619048, 0.529278, 334166e-9, 0, 0.650794, 0.509026, 318456e-9, 0, 0.68254, 0.489186, 30449e-8, 0, 0.714286, 0.469662, 289051e-9, 0, 0.746032, 0.450691, 275494e-9, 0, 0.777778, 0.431841, 261437e-9, 0, 0.809524, 0.413752, 247846e-9, 0, 0.84127, 0.395951, 235085e-9, 0, 0.873016, 0.378633, 222245e-9, 0, 0.904762, 0.36194, 210533e-9, 0, 0.936508, 0.345599, 198494e-9, 0, 0.968254, 0.329999, 188133e-9, 0, 1, 1, 269663e-10, 0, 0, 1, 26967e-9, 0, 0, 1, 269772e-10, 0, 0, 0.999999, 270214e-10, 0, 0, 0.999998, 271415e-10, 0, 0, 0.999994, 27398e-9, 0, 0, 0.999988, 278771e-10, 0, 0, 0.999977, 287019e-10, 0, 0, 0.999961, 300544e-10, 0, 0, 0.999937, 322138e-10, 0, 0, 0.999904, 356163e-10, 0, 0, 0.999854, 409465e-10, 0, 0, 0.99979, 492651e-10, 0, 0, 0.999699, 621722e-10, 0, 88288e-11, 0.999572, 819715e-10, 0, 223369e-9, 0.999381, 111689e-9, 0, 105414e-8, 0.999016, 153862e-9, 0, 26493e-7, 0.997437, 187667e-9, 0, 508608e-8, 0.993545, 155672e-9, 0, 840554e-8, 0.991135, 161455e-9, 0, 0.012629, 0.989157, 188241e-9, 0, 0.0177661, 0.986874, 226229e-9, 0, 0.0238198, 0.983714, 268668e-9, 0, 0.0307887, 0.978301, 277109e-9, 0, 0.0386688, 0.973227, 303446e-9, 0, 0.0474554, 0.967317, 341851e-9, 0, 0.0571428, 0.959477, 370885e-9, 0, 0.0677256, 0.950012, 392753e-9, 0, 0.0791988, 0.939484, 42781e-8, 0, 0.0915576, 0.928135, 443866e-9, 0, 0.104798, 0.919819, 472959e-9, 0, 0.118918, 0.910049, 491551e-9, 0, 0.133915, 0.899181, 512616e-9, 0, 0.149788, 0.886881, 523563e-9, 0, 0.166537, 0.87359, 540183e-9, 0, 0.184164, 0.858613, 547386e-9, 0, 0.202669, 0.842809, 554809e-9, 0, 0.222056, 0.825727, 558316e-9, 0, 0.242329, 0.808086, 557824e-9, 0, 0.263492, 0.790728, 556346e-9, 0, 0.285551, 0.772987, 552672e-9, 0, 0.30851, 0.7541, 543738e-9, 0, 0.332376, 0.734669, 536107e-9, 0, 0.357153, 0.714411, 523342e-9, 0, 0.382845, 0.694196, 512238e-9, 0, 0.409454, 0.674252, 497465e-9, 0, 0.436977, 0.65357, 481096e-9, 0, 0.465404, 0.632999, 467054e-9, 0, 0.494713, 0.611994, 448771e-9, 0, 0.524864, 0.591604, 431889e-9, 0, 0.555779, 0.571134, 415238e-9, 0, 0.587302, 0.550528, 396369e-9, 0, 0.619048, 0.530292, 379477e-9, 0, 0.650794, 0.510364, 361488e-9, 0, 0.68254, 0.490749, 343787e-9, 0, 0.714286, 0.471266, 327822e-9, 0, 0.746032, 0.452462, 310626e-9, 0, 0.777778, 0.433907, 295352e-9, 0, 0.809524, 0.415659, 279179e-9, 0, 0.84127, 0.398138, 264685e-9, 0, 0.873016, 0.380833, 249905e-9, 0, 0.904762, 0.364247, 236282e-9, 0, 0.936508, 0.348041, 222905e-9, 0, 0.968254, 0.332389, 210522e-9, 0, 1, 1, 420604e-10, 0, 0, 1, 420614e-10, 0, 0, 1, 420757e-10, 0, 0, 0.999999, 42138e-9, 0, 0, 0.999997, 423067e-10, 0, 0, 0.999993, 426668e-10, 0, 0, 0.999986, 433372e-10, 0, 0, 0.999974, 444857e-10, 0, 0, 0.999956, 463554e-10, 0, 0, 0.99993, 493105e-10, 0, 0, 0.999892, 539077e-10, 0, 0, 0.999838, 610005e-10, 0, 0, 0.999767, 718822e-10, 0, 0, 0.999666, 884581e-10, 0, 365471e-10, 0.999525, 113398e-9, 0, 485623e-9, 0.999311, 150043e-9, 0, 162096e-8, 0.998865, 200063e-9, 0, 355319e-8, 0.996278, 211014e-9, 0, 633818e-8, 0.992956, 189672e-9, 0, 0.0100043, 0.991017, 210262e-9, 0, 0.0145648, 0.989055, 244292e-9, 0, 0.0200237, 0.986741, 290481e-9, 0, 0.0263798, 0.983288, 334303e-9, 0, 0.033629, 0.977784, 340307e-9, 0, 0.0417652, 0.973037, 377864e-9, 0, 0.0507821, 0.967181, 4239e-7, 0, 0.060673, 0.958971, 443854e-9, 0, 0.0714314, 0.950093, 483039e-9, 0, 0.0830518, 0.939552, 517934e-9, 0, 0.0955288, 0.927678, 539449e-9, 0, 0.108859, 0.918278, 568604e-9, 0, 0.123038, 0.908449, 588505e-9, 0, 0.138065, 0.897713, 612473e-9, 0, 0.153938, 0.885533, 625575e-9, 0, 0.170657, 0.872131, 63854e-8, 0, 0.188224, 0.857517, 647034e-9, 0, 0.20664, 0.841796, 65209e-8, 0, 0.225909, 0.824726, 6544e-7, 0, 0.246035, 0.807297, 655744e-9, 0, 0.267022, 0.789058, 646716e-9, 0, 0.288878, 0.77189, 643898e-9, 0, 0.311607, 0.753082, 629973e-9, 0, 0.335216, 0.7341, 621564e-9, 0, 0.359713, 0.714094, 605171e-9, 0, 0.385103, 0.693839, 588752e-9, 0, 0.41139, 0.673891, 573294e-9, 0, 0.438576, 0.653565, 552682e-9, 0, 0.466656, 0.633326, 533446e-9, 0, 0.495617, 0.612582, 514635e-9, 0, 0.525431, 0.59205, 49303e-8, 0, 0.556041, 0.571918, 471842e-9, 0, 0.587338, 0.551572, 451713e-9, 0, 0.619048, 0.531553, 430049e-9, 0, 0.650794, 0.51175, 410445e-9, 0, 0.68254, 0.49238, 390098e-9, 0, 0.714286, 0.473143, 370033e-9, 0, 0.746032, 0.45423, 351205e-9, 0, 0.777778, 0.435963, 332049e-9, 0, 0.809524, 0.41787, 315021e-9, 0, 0.84127, 0.400387, 297315e-9, 0, 0.873016, 0.383332, 281385e-9, 0, 0.904762, 0.366665, 265397e-9, 0, 0.936508, 0.350633, 250601e-9, 0, 0.968254, 0.334964, 23589e-8, 0, 1, 1, 643736e-10, 0, 0, 1, 64375e-9, 0, 0, 1, 643947e-10, 0, 0, 0.999999, 64481e-9, 0, 0, 0.999997, 647143e-10, 0, 0, 0.999994, 652119e-10, 0, 0, 0.999985, 661359e-10, 0, 0, 0.999972, 677116e-10, 0, 0, 0.999952, 702599e-10, 0, 0, 0.999922, 742517e-10, 0, 0, 0.99988, 803906e-10, 0, 0, 0.99982, 897315e-10, 0, 0, 0.999741, 103838e-9, 0, 0, 0.999629, 12496e-8, 0, 149024e-9, 0.999474, 156161e-9, 0, 861027e-9, 0.999229, 201034e-9, 0, 231198e-8, 0.998662, 259069e-9, 0, 458147e-8, 0.995299, 245439e-9, 0, 770895e-8, 0.992732, 24498e-8, 0, 0.0117126, 0.990847, 273211e-9, 0, 0.0165989, 0.988911, 316492e-9, 0, 0.0223674, 0.98654, 37161e-8, 0, 0.0290135, 0.982636, 410352e-9, 0, 0.0365309, 0.977346, 421756e-9, 0, 0.0449117, 0.972909, 475578e-9, 0, 0.0541481, 0.966821, 522482e-9, 0, 0.0642326, 0.958686, 545008e-9, 0, 0.075158, 0.949754, 589286e-9, 0, 0.0869181, 0.939184, 619995e-9, 0, 0.0995074, 0.927505, 654266e-9, 0, 0.112922, 0.916606, 682362e-9, 0, 0.127157, 0.906707, 704286e-9, 0, 0.142212, 0.895937, 725909e-9, 0, 0.158085, 0.883913, 743939e-9, 0, 0.174776, 0.870642, 755157e-9, 0, 0.192287, 0.856241, 764387e-9, 0, 0.210619, 0.84069, 771032e-9, 0, 0.229775, 0.823728, 765906e-9, 0, 0.249761, 0.806481, 767604e-9, 0, 0.270582, 0.787924, 754385e-9, 0, 0.292243, 0.770588, 749668e-9, 0, 0.314753, 0.751991, 731613e-9, 0, 0.338118, 0.733407, 717655e-9, 0, 0.362347, 0.713688, 700604e-9, 0, 0.387447, 0.693595, 678765e-9, 0, 0.413424, 0.673426, 657042e-9, 0, 0.440284, 0.65359, 635892e-9, 0, 0.468027, 0.633576, 611569e-9, 0, 0.496645, 0.613144, 586011e-9, 0, 0.526122, 0.592711, 563111e-9, 0, 0.556417, 0.572722, 537699e-9, 0, 0.587451, 0.552762, 512556e-9, 0, 0.619048, 0.532985, 489757e-9, 0, 0.650794, 0.513219, 464139e-9, 0, 0.68254, 0.493992, 442193e-9, 0, 0.714286, 0.47509, 418629e-9, 0, 0.746032, 0.456287, 397045e-9, 0, 0.777778, 0.438152, 375504e-9, 0, 0.809524, 0.420294, 35492e-8, 0, 0.84127, 0.402749, 335327e-9, 0, 0.873016, 0.385879, 316422e-9, 0, 0.904762, 0.369352, 298333e-9, 0, 0.936508, 0.353301, 281417e-9, 0, 0.968254, 0.337781, 265203e-9, 0, 1, 1, 968267e-10, 0, 0, 1, 968284e-10, 0, 0, 1, 968556e-10, 0, 0, 0.999999, 969733e-10, 0, 0, 0.999997, 972913e-10, 0, 0, 0.999993, 979688e-10, 0, 0, 0.999984, 992239e-10, 0, 0, 0.999969, 101356e-9, 0, 0, 0.999946, 104784e-9, 0, 0, 0.999913, 110111e-9, 0, 0, 0.999868, 118217e-9, 0, 0, 0.999801, 130396e-9, 0, 0, 0.999712, 148523e-9, 0, 124907e-10, 0.999589, 175233e-9, 0, 355405e-9, 0.999416, 213999e-9, 0, 13528e-7, 0.999136, 268529e-9, 0, 312557e-8, 0.998367, 333088e-9, 0, 573045e-8, 0.994701, 304757e-9, 0, 919397e-8, 0.992497, 318031e-9, 0, 0.0135261, 0.990608, 353863e-9, 0, 0.0187278, 0.988715, 409044e-9, 0, 0.0247947, 0.986241, 472967e-9, 0, 0.0317196, 0.981696, 495104e-9, 0, 0.039494, 0.977097, 532873e-9, 0, 0.0481087, 0.972583, 594447e-9, 0, 0.0575549, 0.966142, 636867e-9, 0, 0.0678242, 0.95823, 669899e-9, 0, 0.0789089, 0.949677, 719499e-9, 0, 0.0908023, 0.939226, 750584e-9, 0, 0.103499, 0.927501, 793183e-9, 0, 0.116993, 0.915199, 81995e-8, 0, 0.131282, 0.90498, 847654e-9, 0, 0.146364, 0.894243, 868929e-9, 0, 0.162237, 0.882154, 884278e-9, 0, 0.178902, 0.869161, 898108e-9, 0, 0.196358, 0.854751, 901254e-9, 0, 0.21461, 0.839368, 90679e-8, 0, 0.23366, 0.822874, 901541e-9, 0, 0.253512, 0.805514, 897297e-9, 0, 0.274174, 0.78716, 881856e-9, 0, 0.29565, 0.769061, 870032e-9, 0, 0.31795, 0.751, 851719e-9, 0, 0.341081, 0.732614, 830671e-9, 0, 0.365053, 0.713171, 806569e-9, 0, 0.389874, 0.693472, 78338e-8, 0, 0.415553, 0.673528, 756404e-9, 0, 0.442098, 0.653397, 726872e-9, 0, 0.469512, 0.633781, 700494e-9, 0, 0.497794, 0.613877, 67105e-8, 0, 0.526935, 0.593506, 640361e-9, 0, 0.556908, 0.573667, 613502e-9, 0, 0.587657, 0.553932, 583177e-9, 0, 0.61906, 0.534345, 554375e-9, 0, 0.650794, 0.515042, 527811e-9, 0, 0.68254, 0.495674, 499367e-9, 0, 0.714286, 0.477132, 47429e-8, 0, 0.746032, 0.458609, 447726e-9, 0, 0.777778, 0.440354, 424205e-9, 0, 0.809524, 0.422765, 399549e-9, 0, 0.84127, 0.405472, 378315e-9, 0, 0.873016, 0.388482, 355327e-9, 0, 0.904762, 0.372191, 336122e-9, 0, 0.936508, 0.356099, 315247e-9, 0, 0.968254, 0.340737, 29794e-8, 0, 1, 1, 143327e-9, 0, 0, 1, 14333e-8, 0, 0, 1, 143366e-9, 0, 0, 0.999999, 143524e-9, 0, 0, 0.999996, 143952e-9, 0, 0, 0.999991, 144862e-9, 0, 0, 0.999981, 146544e-9, 0, 0, 0.999966, 149391e-9, 0, 0, 0.999941, 153946e-9, 0, 0, 0.999905, 160971e-9, 0, 0, 0.999852, 171562e-9, 0, 0, 0.99978, 18729e-8, 0, 0, 0.999681, 210386e-9, 0, 826239e-10, 0.999546, 243906e-9, 0, 664807e-9, 0.999352, 291739e-9, 0, 196192e-8, 0.999027, 357419e-9, 0, 405941e-8, 0.997886, 422349e-9, 0, 699664e-8, 0.99419, 385008e-9, 0, 0.0107896, 0.99214, 409775e-9, 0, 0.0154415, 0.990274, 456418e-9, 0, 0.0209488, 0.988455, 527008e-9, 0, 0.0273037, 0.985804, 597685e-9, 0, 0.0344969, 0.98103, 613124e-9, 0, 0.0425183, 0.976674, 668321e-9, 0, 0.0513575, 0.972021, 736985e-9, 0, 0.0610046, 0.965274, 773789e-9, 0, 0.0714508, 0.958046, 830852e-9, 0, 0.0826877, 0.949333, 875766e-9, 0, 0.0947085, 0.939135, 917088e-9, 0, 0.107507, 0.927119, 952244e-9, 0, 0.121078, 0.91469, 990626e-9, 0, 0.135419, 0.903006, 101304e-8, 0, 0.150526, 0.892368, 103834e-8, 0, 0.166399, 0.880231, 105002e-8, 0, 0.183038, 0.867432, 106331e-8, 0, 0.200443, 0.853208, 106783e-8, 0, 0.218618, 0.837956, 106458e-8, 0, 0.237566, 0.821772, 105945e-8, 0, 0.257291, 0.804328, 104685e-8, 0, 0.2778, 0.786465, 103178e-8, 0, 0.2991, 0.768004, 101077e-8, 0, 0.321199, 0.74972, 985504e-9, 0, 0.344106, 0.731682, 962893e-9, 0, 0.36783, 0.712813, 932146e-9, 0, 0.392383, 0.693139, 89871e-8, 0, 0.417774, 0.673566, 869678e-9, 0, 0.444013, 0.653483, 835525e-9, 0, 0.471107, 0.633891, 799853e-9, 0, 0.49906, 0.614433, 766838e-9, 0, 0.527869, 0.594586, 732227e-9, 0, 0.557517, 0.574769, 696442e-9, 0, 0.587966, 0.555149, 663935e-9, 0, 0.61913, 0.535898, 629826e-9, 0, 0.650794, 0.516753, 596486e-9, 0, 0.68254, 0.497816, 567078e-9, 0, 0.714286, 0.479034, 534399e-9, 0, 0.746032, 0.460975, 507013e-9, 0, 0.777778, 0.442935, 477421e-9, 0, 0.809524, 0.425263, 451101e-9, 0, 0.84127, 0.408248, 424964e-9, 0, 0.873016, 0.391339, 39993e-8, 0, 0.904762, 0.37513, 377619e-9, 0, 0.936508, 0.359172, 354418e-9, 0, 0.968254, 0.343876, 334823e-9, 0, 1, 1, 209042e-9, 0, 0, 1, 209045e-9, 0, 0, 1, 209093e-9, 0, 0, 0.999999, 209304e-9, 0, 0, 0.999996, 209871e-9, 0, 0, 0.999991, 211078e-9, 0, 0, 0.999979, 213304e-9, 0, 0, 0.999963, 217061e-9, 0, 0, 0.999933, 223042e-9, 0, 0, 0.999894, 232206e-9, 0, 0, 0.999837, 245901e-9, 0, 0, 0.999756, 266023e-9, 0, 102927e-11, 0.999648, 295204e-9, 0, 233468e-9, 0.999499, 336958e-9, 0, 108237e-8, 0.999283, 395563e-9, 0, 268832e-8, 0.998896, 473785e-9, 0, 511138e-8, 0.997006, 520008e-9, 0, 837705e-8, 0.993819, 497261e-9, 0, 0.0124928, 0.991632, 523722e-9, 0, 0.0174561, 0.989875, 587258e-9, 0, 0.0232596, 0.988109, 676329e-9, 0, 0.0298932, 0.985155, 747701e-9, 0, 0.0373453, 0.980479, 768803e-9, 0, 0.0456045, 0.976271, 841054e-9, 0, 0.0546593, 0.971347, 911469e-9, 0, 0.0644994, 0.964528, 953057e-9, 0, 0.0751152, 0.957632, 102221e-8, 0, 0.0864981, 0.948681, 106122e-8, 0, 0.0986407, 0.938716, 111857e-8, 0, 0.111537, 0.926629, 114762e-8, 0, 0.125182, 0.914025, 118995e-8, 0, 0.139571, 0.901026, 121228e-8, 0, 0.154703, 0.890358, 123946e-8, 0, 0.170576, 0.878283, 12527e-7, 0, 0.18719, 0.865459, 125536e-8, 0, 0.204547, 0.851407, 126134e-8, 0, 0.222648, 0.836276, 124759e-8, 0, 0.241498, 0.820436, 124443e-8, 0, 0.261101, 0.803253, 122071e-8, 0, 0.281465, 0.785562, 120107e-8, 0, 0.302595, 0.76718, 117762e-8, 0, 0.324501, 0.748551, 114289e-8, 0, 0.347192, 0.730564, 110872e-8, 0, 0.370679, 0.712253, 107636e-8, 0, 0.394973, 0.692867, 103646e-8, 0, 0.420085, 0.673695, 996793e-9, 0, 0.446027, 0.653912, 95675e-8, 0, 0.47281, 0.634129, 916739e-9, 0, 0.500441, 0.615004, 874401e-9, 0, 0.528921, 0.595587, 833411e-9, 0, 0.558244, 0.575965, 794556e-9, 0, 0.588384, 0.5566, 75196e-8, 0, 0.619281, 0.537428, 716381e-9, 0, 0.650795, 0.518623, 676558e-9, 0, 0.68254, 0.499964, 64074e-8, 0, 0.714286, 0.481356, 605984e-9, 0, 0.746032, 0.463279, 570256e-9, 0, 0.777778, 0.445673, 540138e-9, 0, 0.809524, 0.428032, 507299e-9, 0, 0.84127, 0.411112, 479553e-9, 0, 0.873016, 0.394444, 450737e-9, 0, 0.904762, 0.378247, 424269e-9, 0, 0.936508, 0.362415, 399111e-9, 0, 0.968254, 0.347103, 375274e-9, 0, 1, 1, 300729e-9, 0, 0, 1, 300733e-9, 0, 0, 1, 300797e-9, 0, 0, 0.999998, 301072e-9, 0, 0, 0.999996, 301817e-9, 0, 0, 0.999989, 303398e-9, 0, 0, 0.999977, 306309e-9, 0, 0, 0.999958, 311209e-9, 0, 0, 0.999927, 318975e-9, 0, 0, 0.999884, 330804e-9, 0, 0, 0.99982, 34834e-8, 0, 0, 0.999733, 373854e-9, 0, 326995e-10, 0.999613, 410424e-9, 0, 477174e-9, 0.999447, 462047e-9, 0, 161099e-8, 0.999204, 533322e-9, 0, 353153e-8, 0.998725, 624964e-9, 0, 627965e-8, 0.995871, 631786e-9, 0, 98693e-7, 0.993194, 632017e-9, 0, 0.0143011, 0.991541, 68923e-8, 0, 0.019568, 0.989773, 766892e-9, 0, 0.0256593, 0.987647, 863668e-9, 0, 0.0325625, 0.984193, 922089e-9, 0, 0.0402647, 0.980016, 970749e-9, 0, 0.0487532, 0.975859, 106027e-8, 0, 0.058016, 0.970514, 112239e-8, 0, 0.0680419, 0.963625, 117212e-8, 0, 0.0788208, 0.956959, 125211e-8, 0, 0.0903439, 0.947956, 129411e-8, 0, 0.102604, 0.93809, 135879e-8, 0, 0.115594, 0.92659, 139309e-8, 0, 0.129309, 0.913829, 143253e-8, 0, 0.143745, 0.90005, 145809e-8, 0, 0.158901, 0.888129, 14748e-7, 0, 0.174774, 0.87607, 148756e-8, 0, 0.191365, 0.863461, 148714e-8, 0, 0.208674, 0.849594, 148892e-8, 0, 0.226705, 0.834531, 146496e-8, 0, 0.245461, 0.81903, 14579e-7, 0, 0.264947, 0.802122, 143039e-8, 0, 0.28517, 0.78445, 139717e-8, 0, 0.306137, 0.766434, 136312e-8, 0, 0.327857, 0.747816, 132597e-8, 0, 0.350341, 0.729519, 128323e-8, 0, 0.373598, 0.711454, 123803e-8, 0, 0.397642, 0.692699, 119097e-8, 0, 0.422485, 0.673723, 114565e-8, 0, 0.448139, 0.654386, 109552e-8, 0, 0.474619, 0.634673, 104553e-8, 0, 0.501933, 0.615554, 99985e-8, 0, 0.530089, 0.596462, 948207e-9, 0, 0.559087, 0.577385, 902299e-9, 0, 0.588913, 0.558257, 856448e-9, 0, 0.619525, 0.5392, 810395e-9, 0, 0.650826, 0.520543, 768558e-9, 0, 0.68254, 0.502206, 7239e-7, 0, 0.714286, 0.48402, 685794e-9, 0, 0.746032, 0.465779, 64471e-8, 0, 0.777778, 0.448455, 609583e-9, 0, 0.809524, 0.431091, 57227e-8, 0, 0.84127, 0.414147, 54042e-8, 0, 0.873016, 0.39765, 506545e-9, 0, 0.904762, 0.381576, 477635e-9, 0, 0.936508, 0.365881, 448446e-9, 0, 0.968254, 0.350582, 421424e-9, 0, 1, 1, 427144e-9, 0, 0, 1, 427151e-9, 0, 0, 1, 427232e-9, 0, 0, 0.999998, 42759e-8, 0, 0, 0.999995, 428555e-9, 0, 0, 0.999988, 430603e-9, 0, 0, 0.999976, 434368e-9, 0, 0, 0.999952, 440688e-9, 0, 0, 0.999919, 450667e-9, 0, 0, 0.999871, 46578e-8, 0, 0, 0.999801, 488024e-9, 0, 0, 0.999704, 520092e-9, 0, 129791e-9, 0.999572, 565553e-9, 0, 821056e-9, 0.999389, 628906e-9, 0, 225241e-8, 0.999114, 714911e-9, 0, 449109e-8, 0.998488, 819218e-9, 0, 756249e-8, 0.995234, 80415e-8, 0, 0.0114716, 0.993021, 830181e-9, 0, 0.0162131, 0.991407, 902645e-9, 0, 0.021776, 0.989625, 996934e-9, 0, 0.0281471, 0.987064, 109707e-8, 0, 0.0353118, 0.983265, 114353e-8, 0, 0.0432562, 0.979535, 12272e-7, 0, 0.0519665, 0.975224, 132642e-8, 0, 0.0614298, 0.969574, 138092e-8, 0, 0.0716348, 0.963021, 145896e-8, 0, 0.0825709, 0.956046, 152834e-8, 0, 0.094229, 0.947136, 158217e-8, 0, 0.106602, 0.937313, 16347e-7, 0, 0.119682, 0.926073, 168383e-8, 0, 0.133465, 0.913121, 171627e-8, 0, 0.147947, 0.899165, 174229e-8, 0, 0.163125, 0.885891, 176137e-8, 0, 0.178998, 0.873783, 176406e-8, 0, 0.195566, 0.861331, 176156e-8, 0, 0.21283, 0.847569, 175346e-8, 0, 0.230793, 0.832785, 172753e-8, 0, 0.249459, 0.817442, 170204e-8, 0, 0.268832, 0.800613, 166576e-8, 0, 0.28892, 0.783597, 162909e-8, 0, 0.30973, 0.76571, 15826e-7, 0, 0.331271, 0.747021, 153106e-8, 0, 0.353554, 0.728593, 148036e-8, 0, 0.37659, 0.710661, 142808e-8, 0, 0.400391, 0.692426, 136906e-8, 0, 0.424973, 0.673623, 131066e-8, 0, 0.450347, 0.65494, 125569e-8, 0, 0.476531, 0.635448, 119517e-8, 0, 0.503535, 0.616221, 113828e-8, 0, 0.531372, 0.597531, 10816e-7, 0, 0.560047, 0.578795, 102673e-8, 0, 0.589554, 0.559892, 970985e-9, 0, 0.619869, 0.541307, 919773e-9, 0, 0.650923, 0.522608, 868479e-9, 0, 0.68254, 0.504484, 82137e-8, 0, 0.714286, 0.486603, 772916e-9, 0, 0.746032, 0.468802, 730353e-9, 0, 0.777778, 0.451172, 684955e-9, 0, 0.809524, 0.434348, 647565e-9, 0, 0.84127, 0.417445, 605863e-9, 0, 0.873016, 0.401077, 571885e-9, 0, 0.904762, 0.385039, 536034e-9, 0, 0.936508, 0.369483, 504227e-9, 0, 0.968254, 0.354272, 473165e-9, 0, 1, 1, 599525e-9, 0, 0, 1, 599533e-9, 0, 0, 1, 599639e-9, 0, 0, 0.999998, 600097e-9, 0, 0, 0.999994, 601336e-9, 0, 0, 0.999987, 603958e-9, 0, 0, 0.999972, 608775e-9, 0, 0, 0.999949, 616842e-9, 0, 0, 0.999912, 629534e-9, 0, 0, 0.999857, 648658e-9, 0, 0, 0.999781, 676615e-9, 0, 538873e-11, 0.999674, 716574e-9, 0, 308602e-9, 0.999528, 772641e-9, 0, 127003e-8, 0.999326, 849806e-9, 0, 300783e-8, 0.999009, 952682e-9, 0, 556637e-8, 0.998112, 106394e-8, 0, 895889e-8, 0.994496, 102228e-8, 0, 0.0131827, 0.992806, 108586e-8, 0, 0.0182277, 0.991211, 11759e-7, 0, 0.0240795, 0.989415, 128955e-8, 0, 0.030723, 0.986499, 139038e-8, 0, 0.0381418, 0.982679, 144539e-8, 0, 0.046321, 0.978839, 153954e-8, 0, 0.0552459, 0.974295, 164417e-8, 0, 0.0649034, 0.968784, 171517e-8, 0, 0.0752814, 0.962324, 180282e-8, 0, 0.0863693, 0.954956, 186387e-8, 0, 0.0981578, 0.94624, 193817e-8, 0, 0.110639, 0.936517, 198156e-8, 0, 0.123806, 0.925186, 203042e-8, 0, 0.137655, 0.91252, 20664e-7, 0, 0.15218, 0.898441, 207822e-8, 0, 0.16738, 0.884394, 20992e-7, 0, 0.183253, 0.871273, 208748e-8, 0, 0.199799, 0.859057, 208686e-8, 0, 0.21702, 0.845243, 205519e-8, 0, 0.234918, 0.830723, 202868e-8, 0, 0.253496, 0.815801, 199501e-8, 0, 0.272761, 0.79914, 194193e-8, 0, 0.292719, 0.782372, 188824e-8, 0, 0.313377, 0.76482, 183695e-8, 0, 0.334745, 0.746586, 177418e-8, 0, 0.356833, 0.7281, 170628e-8, 0, 0.379654, 0.709842, 164063e-8, 0, 0.403221, 0.692019, 157355e-8, 0, 0.427548, 0.67364, 150262e-8, 0, 0.452651, 0.655277, 143473e-8, 0, 0.478545, 0.636438, 136371e-8, 0, 0.505246, 0.617364, 129911e-8, 0, 0.532768, 0.598603, 123014e-8, 0, 0.561122, 0.580195, 116587e-8, 0, 0.590309, 0.561786, 110398e-8, 0, 0.620318, 0.543377, 104148e-8, 0, 0.651102, 0.525093, 983984e-9, 0, 0.682545, 0.506791, 92667e-8, 0, 0.714286, 0.489291, 874326e-9, 0, 0.746032, 0.471811, 821734e-9, 0, 0.777778, 0.454435, 774698e-9, 0, 0.809524, 0.437493, 727302e-9, 0, 0.84127, 0.420977, 684039e-9, 0, 0.873016, 0.404729, 64373e-8, 0, 0.904762, 0.388756, 60285e-8, 0, 0.936508, 0.373344, 56765e-8, 0, 0.968254, 0.358191, 531929e-9, 0, 1, 1, 832169e-9, 0, 0, 1, 832178e-9, 0, 0, 1, 83231e-8, 0, 0, 0.999998, 832893e-9, 0, 0, 0.999995, 834465e-9, 0, 0, 0.999985, 837791e-9, 0, 0, 0.999969, 843893e-9, 0, 0, 0.999944, 854086e-9, 0, 0, 0.999903, 870071e-9, 0, 0, 0.999843, 894042e-9, 0, 0, 0.999759, 928865e-9, 0, 531805e-10, 0.999643, 978242e-9, 0, 579365e-9, 0.99948, 104684e-8, 0, 182774e-8, 0.999255, 114012e-8, 0, 387804e-8, 0.998885, 126188e-8, 0, 675709e-8, 0.997405, 135888e-8, 0, 0.010468, 0.99424, 133626e-8, 0, 0.0150018, 0.992458, 140905e-8, 0, 0.0203443, 0.990929, 152305e-8, 0, 0.0264786, 0.989116, 165882e-8, 0, 0.0333875, 0.985624, 174128e-8, 0, 0.0410536, 0.982003, 182108e-8, 0, 0.0494609, 0.978336, 194498e-8, 0, 0.0585941, 0.973184, 202708e-8, 0, 0.0684396, 0.9678, 212166e-8, 0, 0.0789851, 0.961348, 221366e-8, 0, 0.0902199, 0.953841, 228219e-8, 0, 0.102134, 0.94534, 235662e-8, 0, 0.114721, 0.935552, 240572e-8, 0, 0.127972, 0.924064, 244405e-8, 0, 0.141884, 0.911827, 247557e-8, 0, 0.156451, 0.897731, 248374e-8, 0, 0.171672, 0.883409, 249863e-8, 0, 0.187545, 0.868625, 246688e-8, 0, 0.20407, 0.856529, 246523e-8, 0, 0.221249, 0.842999, 242368e-8, 0, 0.239083, 0.828505, 237354e-8, 0, 0.257578, 0.813825, 232588e-8, 0, 0.276738, 0.797813, 226731e-8, 0, 0.296569, 0.781097, 219704e-8, 0, 0.31708, 0.764038, 212394e-8, 0, 0.338281, 0.746067, 204786e-8, 0, 0.360181, 0.727687, 196728e-8, 0, 0.382794, 0.709571, 188779e-8, 0, 0.406133, 0.691503, 180532e-8, 0, 0.430213, 0.673673, 171849e-8, 0, 0.45505, 0.655732, 164147e-8, 0, 0.480662, 0.637399, 155858e-8, 0, 0.507065, 0.618616, 147641e-8, 0, 0.534278, 0.60005, 140125e-8, 0, 0.562313, 0.581713, 132441e-8, 0, 0.59118, 0.563546, 125014e-8, 0, 0.620875, 0.545605, 118249e-8, 0, 0.651373, 0.527559, 11116e-7, 0, 0.682593, 0.509764, 104979e-8, 0, 0.714286, 0.49193, 985977e-9, 0, 0.746032, 0.475011, 928592e-9, 0, 0.777778, 0.457878, 873466e-9, 0, 0.809524, 0.440979, 819585e-9, 0, 0.84127, 0.424613, 772365e-9, 0, 0.873016, 0.408549, 722195e-9, 0, 0.904762, 0.392771, 680014e-9, 0, 0.936508, 0.377317, 636797e-9, 0, 0.968254, 0.362352, 598318e-9, 0, 1, 1, 114313e-8, 0, 0, 1, 114314e-8, 0, 0, 0.999999, 114331e-8, 0, 0, 0.999998, 114404e-8, 0, 0, 0.999994, 114601e-8, 0, 0, 0.999984, 115019e-8, 0, 0, 0.999967, 115784e-8, 0, 0, 0.999937, 11706e-7, 0, 0, 0.999894, 119054e-8, 0, 0, 0.999828, 122031e-8, 0, 0, 0.999735, 126331e-8, 0, 169263e-9, 0.999606, 132382e-8, 0, 949167e-9, 0.999426, 14071e-7, 0, 249668e-8, 0.999173, 151895e-8, 0, 486392e-8, 0.99873, 166102e-8, 0, 806323e-8, 0.996243, 17023e-7, 0, 0.0120895, 0.993779, 172782e-8, 0, 0.0169288, 0.9919, 18108e-7, 0, 0.0225633, 0.990524, 196028e-8, 0, 0.028974, 0.98868, 212014e-8, 0, 0.036142, 0.984663, 217598e-8, 0, 0.044049, 0.981457, 230563e-8, 0, 0.0526781, 0.977608, 243966e-8, 0, 0.0620137, 0.972215, 251336e-8, 0, 0.0720418, 0.966798, 26285e-7, 0, 0.0827499, 0.960241, 271409e-8, 0, 0.0941271, 0.952489, 278381e-8, 0, 0.106164, 0.944127, 285399e-8, 0, 0.118852, 0.934282, 290994e-8, 0, 0.132185, 0.923271, 294558e-8, 0, 0.146157, 0.910803, 296269e-8, 0, 0.160766, 0.896705, 296803e-8, 0, 0.176007, 0.88238, 296637e-8, 0, 0.19188, 0.867116, 293163e-8, 0, 0.208385, 0.853636, 289418e-8, 0, 0.225523, 0.840469, 284663e-8, 0, 0.243296, 0.82639, 278594e-8, 0, 0.261709, 0.811759, 271618e-8, 0, 0.280767, 0.796113, 263187e-8, 0, 0.300476, 0.779518, 254589e-8, 0, 0.320845, 0.763142, 246003e-8, 0, 0.341883, 0.745464, 236529e-8, 0, 0.363601, 0.727491, 226536e-8, 0, 0.386011, 0.709414, 216375e-8, 0, 0.409128, 0.691396, 207127e-8, 0, 0.432967, 0.67368, 197106e-8, 0, 0.457545, 0.656049, 187022e-8, 0, 0.482881, 0.638188, 177605e-8, 0, 0.508992, 0.620177, 168482e-8, 0, 0.535899, 0.601506, 158909e-8, 0, 0.563619, 0.58362, 150583e-8, 0, 0.592165, 0.565496, 141791e-8, 0, 0.621544, 0.54789, 133693e-8, 0, 0.651743, 0.530323, 126038e-8, 0, 0.682709, 0.512795, 118556e-8, 0, 0.714286, 0.495199, 111527e-8, 0, 0.746032, 0.478101, 10489e-7, 0, 0.777778, 0.461511, 984264e-9, 0, 0.809524, 0.444879, 92591e-8, 0, 0.84127, 0.428424, 866582e-9, 0, 0.873016, 0.412495, 814463e-9, 0, 0.904762, 0.396975, 764498e-9, 0, 0.936508, 0.381614, 715967e-9, 0, 0.968254, 0.366732, 672483e-9, 0, 1, 1, 155501e-8, 0, 0, 1, 155503e-8, 0, 0, 1, 155524e-8, 0, 0, 0.999998, 155615e-8, 0, 0, 0.999994, 15586e-7, 0, 0, 0.999983, 156379e-8, 0, 0, 0.999963, 15733e-7, 0, 0, 0.999932, 158911e-8, 0, 0, 0.999882, 161376e-8, 0, 0, 0.99981, 165041e-8, 0, 100875e-10, 0.999708, 170304e-8, 0, 367658e-9, 0.999565, 177658e-8, 0, 14234e-7, 0.999368, 187688e-8, 0, 327939e-8, 0.999081, 200989e-8, 0, 596629e-8, 0.99852, 217177e-8, 0, 94852e-7, 0.99549, 21745e-7, 0, 0.013824, 0.993252, 222357e-8, 0, 0.0189642, 0.991727, 235022e-8, 0, 0.0248856, 0.989951, 250561e-8, 0, 0.0315669, 0.988029, 268829e-8, 0, 0.0389882, 0.984029, 27496e-7, 0, 0.0471302, 0.980683, 289793e-8, 0, 0.0559754, 0.976554, 303315e-8, 0, 0.0655081, 0.97139, 313257e-8, 0, 0.0757138, 0.965544, 323656e-8, 0, 0.08658, 0.95912, 333432e-8, 0, 0.0980954, 0.951183, 34039e-7, 0, 0.110251, 0.942974, 347515e-8, 0, 0.123038, 0.932642, 350381e-8, 0, 0.13645, 0.922158, 354519e-8, 0, 0.150482, 0.909404, 353851e-8, 0, 0.165129, 0.896071, 35435e-7, 0, 0.18039, 0.881206, 349936e-8, 0, 0.196263, 0.866077, 347256e-8, 0, 0.212748, 0.85093, 3415e-6, 0, 0.229847, 0.837703, 333367e-8, 0, 0.247561, 0.823878, 3249e-6, 0, 0.265895, 0.809449, 316347e-8, 0, 0.284854, 0.794379, 306351e-8, 0, 0.304445, 0.778138, 29499e-7, 0, 0.324675, 0.761997, 284099e-8, 0, 0.345555, 0.744938, 272104e-8, 0, 0.367095, 0.727212, 260715e-8, 0, 0.389309, 0.709549, 248855e-8, 0, 0.41221, 0.691704, 236783e-8, 0, 0.435814, 0.673689, 225178e-8, 0, 0.460138, 0.656453, 213765e-8, 0, 0.485203, 0.639128, 202178e-8, 0, 0.511028, 0.621512, 191443e-8, 0, 0.537634, 0.603598, 180977e-8, 0, 0.565041, 0.58559, 170456e-8, 0, 0.593268, 0.567852, 160927e-8, 0, 0.622327, 0.5503, 151395e-8, 0, 0.652217, 0.533033, 142499e-8, 0, 0.682907, 0.515942, 133955e-8, 0, 0.714296, 0.498814, 12602e-7, 0, 0.746032, 0.481595, 118188e-8, 0, 0.777778, 0.465117, 111171e-8, 0, 0.809524, 0.448865, 104091e-8, 0, 0.84127, 0.432711, 976618e-9, 0, 0.873016, 0.416822, 91859e-8, 0, 0.904762, 0.401272, 857704e-9, 0, 0.936508, 0.386226, 807172e-9, 0, 0.968254, 0.371321, 75464e-8, 0, 1, 1, 209596e-8, 0, 0, 1, 209598e-8, 0, 0, 1, 209624e-8, 0, 0, 0.999997, 209736e-8, 0, 0, 0.999991, 210039e-8, 0, 0, 0.999979, 210678e-8, 0, 0, 0.999959, 211847e-8, 0, 0, 0.999925, 21379e-7, 0, 0, 0.99987, 216809e-8, 0, 0, 0.999791, 221281e-8, 0, 681487e-10, 0.999677, 227669e-8, 0, 658161e-9, 0.999521, 236533e-8, 0, 200635e-8, 0.999301, 248514e-8, 0, 41779e-7, 0.998977, 264185e-8, 0, 718648e-8, 0.998191, 281695e-8, 0, 0.0110239, 0.994801, 278518e-8, 0, 0.015672, 0.993091, 288774e-8, 0, 0.0211091, 0.991571, 303931e-8, 0, 0.0273123, 0.9897, 321643e-8, 0, 0.034259, 0.987023, 337332e-8, 0, 0.0419282, 0.983289, 346146e-8, 0, 0.0502998, 0.979892, 363704e-8, 0, 0.0593562, 0.975111, 373601e-8, 0, 0.069081, 0.970351, 38842e-7, 0, 0.0794598, 0.964131, 397053e-8, 0, 0.0904798, 0.957747, 408078e-8, 0, 0.10213, 0.949536, 413533e-8, 0, 0.1144, 0.941372, 420305e-8, 0, 0.127284, 0.931049, 422815e-8, 0, 0.140772, 0.920647, 425048e-8, 0, 0.154862, 0.908033, 42281e-7, 0, 0.169548, 0.895028, 422026e-8, 0, 0.184828, 0.879968, 415042e-8, 0, 0.200701, 0.864875, 408821e-8, 0, 0.217167, 0.84918, 400909e-8, 0, 0.234227, 0.834934, 391178e-8, 0, 0.251884, 0.821397, 380066e-8, 0, 0.270141, 0.807135, 367974e-8, 0, 0.289004, 0.792363, 355172e-8, 0, 0.308479, 0.776661, 3411e-6, 0, 0.328575, 0.760705, 328123e-8, 0, 0.349301, 0.744408, 314003e-8, 0, 0.370668, 0.726994, 29906e-7, 0, 0.392689, 0.709598, 285034e-8, 0, 0.415379, 0.692112, 271179e-8, 0, 0.438754, 0.674435, 257185e-8, 0, 0.46283, 0.65676, 243425e-8, 0, 0.48763, 0.639982, 230351e-8, 0, 0.513173, 0.622983, 21777e-7, 0, 0.539482, 0.605471, 204991e-8, 0, 0.566579, 0.58796, 193759e-8, 0, 0.594488, 0.570463, 181976e-8, 0, 0.623226, 0.553058, 171497e-8, 0, 0.6528, 0.535894, 161109e-8, 0, 0.683198, 0.519089, 151394e-8, 0, 0.714354, 0.502454, 142122e-8, 0, 0.746032, 0.485681, 133488e-8, 0, 0.777778, 0.468935, 124975e-8, 0, 0.809524, 0.452951, 117309e-8, 0, 0.84127, 0.437139, 110155e-8, 0, 0.873016, 0.421446, 103124e-8, 0, 0.904762, 0.405951, 966387e-9, 0, 0.936508, 0.391003, 908119e-9, 0, 0.968254, 0.376198, 848057e-9, 0, 1, 1, 280076e-8, 0, 0, 1, 280078e-8, 0, 0, 0.999999, 280109e-8, 0, 0, 0.999997, 280246e-8, 0, 0, 0.999992, 280616e-8, 0, 0, 0.999979, 281396e-8, 0, 0, 0.999956, 282822e-8, 0, 0, 0.999916, 285186e-8, 0, 0, 0.999857, 28885e-7, 0, 0, 0.999768, 294259e-8, 0, 196026e-9, 0.999645, 301946e-8, 0, 104842e-8, 0.99947, 312541e-8, 0, 270199e-8, 0.999229, 326733e-8, 0, 519449e-8, 0.998852, 344992e-8, 0, 852602e-8, 0.997558, 361052e-8, 0, 0.0126804, 0.994417, 35898e-7, 0, 0.017635, 0.992824, 372393e-8, 0, 0.023365, 0.991344, 390695e-8, 0, 0.0298456, 0.989337, 410392e-8, 0, 0.0370529, 0.985811, 420987e-8, 0, 0.0449651, 0.982772, 437488e-8, 0, 0.0535615, 0.979001, 455069e-8, 0, 0.0628243, 0.974102, 464462e-8, 0, 0.0727368, 0.969197, 480577e-8, 0, 0.0832844, 0.962759, 487818e-8, 0, 0.0944545, 0.956207, 498176e-8, 0, 0.106236, 0.947909, 503392e-8, 0, 0.118619, 0.939596, 507474e-8, 0, 0.131595, 0.929642, 509798e-8, 0, 0.145159, 0.918807, 508476e-8, 0, 0.159305, 0.906921, 505634e-8, 0, 0.174028, 0.893312, 498845e-8, 0, 0.189327, 0.878933, 49133e-7, 0, 0.2052, 0.863986, 48259e-7, 0, 0.221647, 0.847936, 470848e-8, 0, 0.23867, 0.832253, 456889e-8, 0, 0.25627, 0.818619, 442726e-8, 0, 0.274453, 0.804788, 427677e-8, 0, 0.293222, 0.790241, 411906e-8, 0, 0.312585, 0.775162, 394833e-8, 0, 0.33255, 0.759463, 377366e-8, 0, 0.353126, 0.743598, 361026e-8, 0, 0.374324, 0.72697, 343627e-8, 0, 0.396158, 0.709646, 326422e-8, 0, 0.418641, 0.69277, 309717e-8, 0, 0.44179, 0.675371, 29356e-7, 0, 0.465624, 0.657863, 277712e-8, 0, 0.490163, 0.640772, 261738e-8, 0, 0.515429, 0.624441, 24737e-7, 0, 0.541445, 0.607497, 233125e-8, 0, 0.568236, 0.590438, 218994e-8, 0, 0.595828, 0.573224, 20664e-7, 0, 0.624242, 0.556168, 193526e-8, 0, 0.653496, 0.539232, 182463e-8, 0, 0.683588, 0.522352, 170735e-8, 0, 0.714482, 0.506172, 160555e-8, 0, 0.746032, 0.489842, 150451e-8, 0, 0.777778, 0.473463, 140938e-8, 0, 0.809524, 0.457266, 132568e-8, 0, 0.84127, 0.441609, 12376e-7, 0, 0.873016, 0.426348, 116265e-8, 0, 0.904762, 0.411002, 108935e-8, 0, 0.936508, 0.396045, 101946e-8, 0, 0.968254, 0.381448, 955665e-9, 0, 1, 1, 37121e-7, 0, 0, 1, 371213e-8, 0, 0, 1, 371251e-8, 0, 0, 0.999997, 371417e-8, 0, 0, 0.99999, 371863e-8, 0, 0, 0.999977, 372807e-8, 0, 0, 0.99995, 374529e-8, 0, 0, 0.999908, 37738e-7, 0, 0, 0.999843, 381789e-8, 0, 123596e-10, 0.999745, 388273e-8, 0, 407442e-9, 0.999608, 397443e-8, 0, 15447e-7, 0.999415, 409998e-8, 0, 351385e-8, 0.999143, 426662e-8, 0, 63316e-7, 0.9987, 447625e-8, 0, 998679e-8, 0.996363, 455323e-8, 0, 0.0144569, 0.994021, 461052e-8, 0, 0.0197151, 0.992372, 476359e-8, 0, 0.0257344, 0.991007, 499101e-8, 0, 0.0324882, 0.988767, 51972e-7, 0, 0.0399517, 0.984872, 528407e-8, 0, 0.0481022, 0.982004, 548926e-8, 0, 0.0569191, 0.977714, 564385e-8, 0, 0.0663839, 0.973076, 57693e-7, 0, 0.0764801, 0.967565, 58924e-7, 0, 0.0871928, 0.961384, 599629e-8, 0, 0.0985095, 0.954435, 605998e-8, 0, 0.110419, 0.946303, 61133e-7, 0, 0.122912, 0.937662, 612028e-8, 0, 0.13598, 0.927867, 612209e-8, 0, 0.149617, 0.916475, 604813e-8, 0, 0.163817, 0.90541, 603088e-8, 0, 0.178577, 0.891591, 592218e-8, 0, 0.193894, 0.877573, 578854e-8, 0, 0.209767, 0.862511, 566648e-8, 0, 0.226196, 0.846861, 551481e-8, 0, 0.243182, 0.83068, 533754e-8, 0, 0.260728, 0.815725, 515487e-8, 0, 0.278837, 0.802321, 49655e-7, 0, 0.297515, 0.787826, 475421e-8, 0, 0.316768, 0.773454, 456002e-8, 0, 0.336605, 0.758224, 434727e-8, 0, 0.357034, 0.74265, 414444e-8, 0, 0.378067, 0.726729, 393738e-8, 0, 0.399717, 0.710155, 373575e-8, 0, 0.421998, 0.693312, 353736e-8, 0, 0.444928, 0.67653, 334368e-8, 0, 0.468523, 0.659444, 315981e-8, 0, 0.492806, 0.642051, 297809e-8, 0, 0.517798, 0.625758, 280592e-8, 0, 0.543525, 0.609615, 264254e-8, 0, 0.570012, 0.592919, 248459e-8, 0, 0.597288, 0.576298, 233327e-8, 0, 0.625379, 0.559489, 219519e-8, 0, 0.654307, 0.542891, 205441e-8, 0, 0.684084, 0.526255, 193385e-8, 0, 0.714693, 0.509853, 180745e-8, 0, 0.746044, 0.494131, 169817e-8, 0, 0.777778, 0.478114, 15913e-7, 0, 0.809524, 0.462274, 148981e-8, 0, 0.84127, 0.446412, 139537e-8, 0, 0.873016, 0.431274, 130984e-8, 0, 0.904762, 0.41635, 122403e-8, 0, 0.936508, 0.401476, 114809e-8, 0, 0.968254, 0.386993, 107563e-8, 0, 1, 1, 488216e-8, 0, 0, 1, 48822e-7, 0, 0, 1, 488265e-8, 0, 0, 0.999997, 488463e-8, 0, 0, 0.999988, 488999e-8, 0, 0, 0.999974, 490129e-8, 0, 0, 0.999946, 492191e-8, 0, 0, 0.999897, 495598e-8, 0, 0, 0.999825, 500855e-8, 0, 744791e-10, 0.999718, 508559e-8, 0, 712744e-9, 0.999565, 5194e-6, 0, 215249e-8, 0.999352, 534147e-8, 0, 444576e-8, 0.999046, 553523e-8, 0, 759218e-8, 0.998492, 577016e-8, 0, 0.0115714, 0.995564, 578487e-8, 0, 0.0163557, 0.993339, 586414e-8, 0, 0.021915, 0.991834, 606002e-8, 0, 0.0282201, 0.990496, 633312e-8, 0, 0.0352433, 0.987826, 651941e-8, 0, 0.042959, 0.98383, 660842e-8, 0, 0.0513439, 0.98109, 685523e-8, 0, 0.0603772, 0.976131, 695778e-8, 0, 0.0700402, 0.971922, 714236e-8, 0, 0.0803163, 0.965901, 721437e-8, 0, 0.0911908, 0.959606, 732017e-8, 0, 0.102651, 0.952504, 735788e-8, 0, 0.114686, 0.944365, 738493e-8, 0, 0.127286, 0.935652, 737969e-8, 0, 0.140443, 0.925813, 733612e-8, 0, 0.154151, 0.914397, 723094e-8, 0, 0.168405, 0.903257, 714002e-8, 0, 0.183201, 0.890015, 700149e-8, 0, 0.198536, 0.876014, 682813e-8, 0, 0.214409, 0.861436, 665567e-8, 0, 0.23082, 0.845752, 644526e-8, 0, 0.24777, 0.829169, 621635e-8, 0, 0.265263, 0.813435, 597789e-8, 0, 0.283301, 0.799701, 575694e-8, 0, 0.301889, 0.785726, 549866e-8, 0, 0.321035, 0.77152, 52503e-7, 0, 0.340746, 0.75683, 499619e-8, 0, 0.361032, 0.741951, 47543e-7, 0, 0.381904, 0.726367, 45084e-7, 0, 0.403374, 0.710537, 426784e-8, 0, 0.425457, 0.693965, 403487e-8, 0, 0.448169, 0.677724, 38075e-7, 0, 0.47153, 0.66117, 359431e-8, 0, 0.495561, 0.644274, 338354e-8, 0, 0.520284, 0.627449, 318163e-8, 0, 0.545725, 0.611645, 299672e-8, 0, 0.571911, 0.595614, 281016e-8, 0, 0.598873, 0.579426, 264252e-8, 0, 0.62664, 0.563016, 247509e-8, 0, 0.655239, 0.546728, 232647e-8, 0, 0.684692, 0.530539, 217803e-8, 0, 0.714999, 0.514164, 204216e-8, 0, 0.746106, 0.498344, 191403e-8, 0, 0.777778, 0.482957, 179203e-8, 0, 0.809524, 0.467336, 167695e-8, 0, 0.84127, 0.451994, 157567e-8, 0, 0.873016, 0.436514, 147113e-8, 0, 0.904762, 0.42178, 138034e-8, 0, 0.936508, 0.407271, 129219e-8, 0, 0.968254, 0.392822, 12098e-7, 0, 1, 1, 637427e-8, 0, 0, 1, 637431e-8, 0, 0, 0.999999, 637485e-8, 0, 0, 0.999996, 637721e-8, 0, 0, 0.999987, 638357e-8, 0, 0, 0.999971, 6397e-6, 0, 0, 0.999939, 642142e-8, 0, 0, 0.999888, 646177e-8, 0, 0, 0.999807, 652387e-8, 0, 207916e-9, 0.999689, 661454e-8, 0, 112051e-8, 0.99952, 674155e-8, 0, 287719e-8, 0.999283, 691313e-8, 0, 550145e-8, 0.998936, 713598e-8, 0, 897928e-8, 0.998165, 738501e-8, 0, 0.0132829, 0.994847, 734388e-8, 0, 0.01838, 0.993182, 749991e-8, 0, 0.0242381, 0.991665, 77246e-7, 0, 0.030826, 0.989708, 797579e-8, 0, 0.0381152, 0.986663, 813011e-8, 0, 0.0460794, 0.983288, 830365e-8, 0, 0.0546951, 0.980104, 853496e-8, 0, 0.0639411, 0.974855, 861045e-8, 0, 0.0737988, 0.97045, 879133e-8, 0, 0.0842516, 0.964509, 886377e-8, 0, 0.0952848, 0.957594, 890346e-8, 0, 0.106886, 0.950546, 893289e-8, 0, 0.119044, 0.942225, 890074e-8, 0, 0.131749, 0.933365, 886826e-8, 0, 0.144994, 0.923202, 87316e-7, 0, 0.158772, 0.912605, 863082e-8, 0, 0.173078, 0.901099, 847403e-8, 0, 0.187908, 0.888177, 825838e-8, 0, 0.203261, 0.873955, 801834e-8, 0, 0.219134, 0.860091, 779026e-8, 0, 0.235527, 0.84434, 752478e-8, 0, 0.252443, 0.828517, 724074e-8, 0, 0.269883, 0.81239, 693769e-8, 0, 0.287851, 0.79721, 664817e-8, 0, 0.306352, 0.783489, 634763e-8, 0, 0.325393, 0.769514, 604221e-8, 0, 0.344981, 0.755419, 573568e-8, 0, 0.365126, 0.741083, 544359e-8, 0, 0.385839, 0.726059, 515515e-8, 0, 0.407132, 0.710809, 487139e-8, 0, 0.42902, 0.695052, 459846e-8, 0, 0.45152, 0.678886, 433412e-8, 0, 0.474651, 0.663042, 407981e-8, 0, 0.498433, 0.646634, 384264e-8, 0, 0.52289, 0.630117, 360897e-8, 0, 0.548048, 0.613804, 338863e-8, 0, 0.573936, 0.598338, 318486e-8, 0, 0.600584, 0.582687, 298377e-8, 0, 0.628027, 0.566809, 280082e-8, 0, 0.656295, 0.550817, 262255e-8, 0, 0.685417, 0.534937, 245835e-8, 0, 0.715406, 0.519151, 230574e-8, 0, 0.74624, 0.503118, 21549e-7, 0, 0.777778, 0.487723, 202008e-8, 0, 0.809524, 0.472725, 189355e-8, 0, 0.84127, 0.457599, 177108e-8, 0, 0.873016, 0.442558, 165843e-8, 0, 0.904762, 0.427624, 155494e-8, 0, 0.936508, 0.413171, 145273e-8, 0, 0.968254, 0.399122, 136454e-8, 0, 1, 1, 826496e-8, 0, 0, 1, 826499e-8, 0, 0, 1, 826564e-8, 0, 0, 0.999996, 826842e-8, 0, 0, 0.999987, 827589e-8, 0, 0, 0.999967, 829167e-8, 0, 0, 0.999933, 832037e-8, 0, 0, 0.999876, 836768e-8, 0, 109338e-10, 0.999786, 844031e-8, 0, 427145e-9, 0.999655, 854603e-8, 0, 16384e-7, 0.999468, 869337e-8, 0, 372392e-8, 0.999203, 8891e-6, 0, 668513e-8, 0.998803, 914387e-8, 0, 0.0104968, 0.99748, 935838e-8, 0, 0.015125, 0.994446, 933309e-8, 0, 0.0205338, 0.99292, 953084e-8, 0, 0.0266884, 0.991414, 97893e-7, 0, 0.0335565, 0.989049, 0.0100228, 0, 0.0411086, 0.98582, 0.0101664, 0, 0.0493181, 0.982441, 0.0103582, 0, 0.0581613, 0.978595, 0.0105292, 0, 0.0676169, 0.973495, 0.0106274, 0, 0.0776661, 0.968405, 0.0107261, 0, 0.0882926, 0.962717, 0.0108234, 0, 0.0994817, 0.955478, 0.0108102, 0, 0.111221, 0.948275, 0.0107914, 0, 0.123499, 0.940006, 0.0107161, 0, 0.136308, 0.930831, 0.0106309, 0, 0.149639, 0.920648, 0.0104083, 0, 0.163485, 0.910205, 0.0102312, 0, 0.177843, 0.898445, 0.0100051, 0, 0.192707, 0.885986, 971928e-8, 0, 0.208077, 0.872204, 940747e-8, 0, 0.22395, 0.858436, 91085e-7, 0, 0.240326, 0.843454, 876595e-8, 0, 0.257208, 0.827437, 839794e-8, 0, 0.274596, 0.811488, 803692e-8, 0, 0.292496, 0.796039, 767352e-8, 0, 0.310911, 0.781083, 73097e-7, 0, 0.329849, 0.767642, 694032e-8, 0, 0.349316, 0.753901, 657476e-8, 0, 0.369323, 0.740131, 622699e-8, 0, 0.38988, 0.725845, 58838e-7, 0, 0.410999, 0.710991, 555586e-8, 0, 0.432696, 0.696002, 523089e-8, 0, 0.454987, 0.680461, 492494e-8, 0, 0.47789, 0.664875, 463464e-8, 0, 0.501426, 0.649273, 435422e-8, 0, 0.52562, 0.63302, 40875e-7, 0, 0.550498, 0.61705, 384075e-8, 0, 0.576089, 0.601154, 359557e-8, 0, 0.602427, 0.586008, 337636e-8, 0, 0.629544, 0.570699, 316019e-8, 0, 0.657479, 0.555166, 296033e-8, 0, 0.686264, 0.539645, 277552e-8, 0, 0.715924, 0.524159, 259499e-8, 0, 0.746459, 0.508682, 243257e-8, 0, 0.777789, 0.493163, 227851e-8, 0, 0.809524, 0.478004, 213083e-8, 0, 0.84127, 0.46347, 199502e-8, 0, 0.873016, 0.448778, 186967e-8, 0, 0.904762, 0.434105, 174732e-8, 0, 0.936508, 0.419576, 163861e-8, 0, 0.968254, 0.405541, 153341e-8, 0, 1, 1, 0.0106462, 0, 0, 1, 0.0106462, 0, 0, 0.999999, 0.010647, 0, 0, 0.999995, 0.0106502, 0, 0, 0.999985, 0.0106589, 0, 0, 0.999964, 0.0106773, 0, 0, 0.999925, 0.0107106, 0, 0, 0.999861, 0.0107655, 0, 712986e-10, 0.999763, 0.0108497, 0, 743959e-9, 0.999616, 0.0109716, 0, 227361e-8, 0.999408, 0.0111408, 0, 46983e-7, 0.999112, 0.0113659, 0, 800158e-8, 0.998637, 0.0116475, 0, 0.0121493, 0.996223, 0.0117231, 0, 0.0171023, 0.994006, 0.0118064, 0, 0.0228218, 0.992444, 0.0120254, 0, 0.0292711, 0.991028, 0.0123314, 0, 0.036417, 0.98803, 0.0124954, 0, 0.0442295, 0.984816, 0.0126538, 0, 0.0526815, 0.981399, 0.0128537, 0, 0.0617492, 0.977085, 0.0129694, 0, 0.0714114, 0.972154, 0.013091, 0, 0.0816495, 0.966617, 0.0131166, 0, 0.0924472, 0.960628, 0.0131583, 0, 0.10379, 0.953295, 0.0131094, 0, 0.115665, 0.94575, 0.0129966, 0, 0.128062, 0.937654, 0.0128796, 0, 0.140972, 0.927716, 0.0126477, 0, 0.154387, 0.917932, 0.0123889, 0, 0.168301, 0.907719, 0.012131, 0, 0.182709, 0.89584, 0.0118013, 0, 0.197608, 0.883526, 0.0114145, 0, 0.212994, 0.870301, 0.0110075, 0, 0.228867, 0.856272, 0.0106019, 0, 0.245227, 0.842251, 0.0101938, 0, 0.262074, 0.826466, 973254e-8, 0, 0.279412, 0.810859, 92846e-7, 0, 0.297244, 0.795051, 883304e-8, 0, 0.315575, 0.780053, 840272e-8, 0, 0.334412, 0.76575, 796438e-8, 0, 0.35376, 0.752298, 752526e-8, 0, 0.373631, 0.739153, 711486e-8, 0, 0.394034, 0.725514, 670361e-8, 0, 0.414983, 0.711473, 632656e-8, 0, 0.436491, 0.696936, 595206e-8, 0, 0.458575, 0.682126, 559191e-8, 0, 0.481253, 0.667027, 525362e-8, 0, 0.504547, 0.651875, 493805e-8, 0, 0.528481, 0.636463, 462848e-8, 0, 0.553081, 0.620641, 433936e-8, 0, 0.578377, 0.604931, 407e-5, 0, 0.604404, 0.589549, 380864e-8, 0, 0.631197, 0.574712, 357049e-8, 0, 0.658795, 0.559775, 334466e-8, 0, 0.687238, 0.544514, 312505e-8, 0, 0.716559, 0.529555, 293199e-8, 0, 0.746776, 0.514402, 274204e-8, 0, 0.777849, 0.499302, 256647e-8, 0, 0.809524, 0.484114, 239901e-8, 0, 0.84127, 0.469308, 225148e-8, 0, 0.873016, 0.455133, 210178e-8, 0, 0.904762, 0.440939, 19727e-7, 0, 0.936508, 0.426627, 184382e-8, 0, 0.968254, 0.412509, 172548e-8, 0, 1, 1, 0.013628, 0, 0, 1, 0.0136281, 0, 0, 0.999999, 0.0136289, 0, 0, 0.999995, 0.0136327, 0, 0, 0.999983, 0.0136427, 0, 0, 0.99996, 0.0136638, 0, 0, 0.999917, 0.0137022, 0, 0, 0.999846, 0.0137652, 0, 204597e-9, 0.999736, 0.0138615, 0, 116837e-8, 0.999573, 0.0140007, 0, 303325e-8, 0.99934, 0.0141927, 0, 580613e-8, 0.999004, 0.0144457, 0, 945626e-8, 0.998407, 0.0147489, 0, 0.0139421, 0.995464, 0.014731, 0, 0.0192202, 0.993328, 0.0148283, 0, 0.0252495, 0.991799, 0.0150797, 0, 0.0319921, 0.990397, 0.0154316, 0, 0.0394138, 0.986835, 0.0155005, 0, 0.0474843, 0.983938, 0.0157308, 0, 0.0561763, 0.980154, 0.0158753, 0, 0.0654661, 0.975659, 0.0159581, 0, 0.0753326, 0.970171, 0.0159832, 0, 0.0857571, 0.964803, 0.0160084, 0, 0.0967236, 0.958366, 0.0159484, 0, 0.108218, 0.950613, 0.0158001, 0, 0.120227, 0.942874, 0.0155845, 0, 0.132741, 0.935005, 0.0154292, 0, 0.145751, 0.924991, 0.0150742, 0, 0.159249, 0.914814, 0.0146757, 0, 0.17323, 0.904743, 0.0143097, 0, 0.187687, 0.893216, 0.0138695, 0, 0.202619, 0.880769, 0.0133706, 0, 0.218021, 0.868136, 0.0128606, 0, 0.233894, 0.85469, 0.0123403, 0, 0.250238, 0.840593, 0.0118091, 0, 0.267052, 0.825808, 0.011253, 0, 0.284341, 0.81009, 0.0107099, 0, 0.302106, 0.79504, 0.0101636, 0, 0.320354, 0.779757, 964041e-8, 0, 0.33909, 0.764697, 911896e-8, 0, 0.358322, 0.750913, 859533e-8, 0, 0.378059, 0.738175, 811592e-8, 0, 0.398311, 0.725242, 764504e-8, 0, 0.41909, 0.711864, 718885e-8, 0, 0.440412, 0.698009, 675843e-8, 0, 0.462292, 0.683841, 634984e-8, 0, 0.484748, 0.669391, 595502e-8, 0, 0.507802, 0.654731, 558671e-8, 0, 0.531477, 0.639805, 523578e-8, 0, 0.555802, 0.624789, 490834e-8, 0, 0.580805, 0.609325, 459448e-8, 0, 0.606522, 0.593975, 430342e-8, 0, 0.63299, 0.578983, 403019e-8, 0, 0.66025, 0.564442, 37707e-7, 0, 0.688346, 0.549835, 35316e-7, 0, 0.717319, 0.535039, 330255e-8, 0, 0.7472, 0.520403, 308932e-8, 0, 0.777982, 0.505687, 289335e-8, 0, 0.809524, 0.490939, 270818e-8, 0, 0.84127, 0.476233, 25343e-7, 0, 0.873016, 0.461624, 237097e-8, 0, 0.904762, 0.447833, 222065e-8, 0, 0.936508, 0.433992, 207561e-8, 0, 0.968254, 0.420147, 194955e-8, 0, 1, 1, 0.0173415, 0, 0, 1, 0.0173416, 0, 0, 0.999999, 0.0173426, 0, 0, 0.999995, 0.0173468, 0, 0, 0.999983, 0.0173582, 0, 0, 0.999954, 0.0173822, 0, 0, 0.999908, 0.0174258, 0, 669501e-11, 0.999828, 0.0174973, 0, 427399e-9, 0.999705, 0.0176063, 0, 171019e-8, 0.999524, 0.0177631, 0, 39248e-7, 0.999263, 0.0179781, 0, 705382e-8, 0.998878, 0.018258, 0, 0.0110552, 0.998012, 0.0185551, 0, 0.0158812, 0.994614, 0.0184264, 0, 0.0214852, 0.993132, 0.0186385, 0, 0.0278239, 0.991563, 0.0189067, 0, 0.0348585, 0.989298, 0.0191577, 0, 0.0425544, 0.986036, 0.0192522, 0, 0.050881, 0.982558, 0.0194063, 0, 0.059811, 0.978531, 0.019486, 0, 0.0693209, 0.974198, 0.0195847, 0, 0.0793895, 0.968148, 0.0194749, 0, 0.0899984, 0.962565, 0.0194277, 0, 0.101132, 0.956041, 0.0192991, 0, 0.112775, 0.947749, 0.0189893, 0, 0.124917, 0.94018, 0.018704, 0, 0.137547, 0.93165, 0.0183458, 0, 0.150655, 0.921798, 0.0178775, 0, 0.164236, 0.911573, 0.0173618, 0, 0.178281, 0.901569, 0.0168482, 0, 0.192788, 0.890341, 0.016265, 0, 0.207752, 0.877835, 0.0156199, 0, 0.223171, 0.865472, 0.0149516, 0, 0.239044, 0.852905, 0.0143274, 0, 0.255371, 0.838906, 0.0136643, 0, 0.272153, 0.824888, 0.0129903, 0, 0.289393, 0.809977, 0.0123218, 0, 0.307093, 0.794697, 0.0116572, 0, 0.325259, 0.780028, 0.0110307, 0, 0.343896, 0.765124, 0.0104236, 0, 0.363012, 0.750411, 98219e-7, 0, 0.382617, 0.737264, 924397e-8, 0, 0.402719, 0.724799, 868719e-8, 0, 0.423332, 0.712253, 816476e-8, 0, 0.444469, 0.699267, 767262e-8, 0, 0.466146, 0.685618, 719746e-8, 0, 0.488383, 0.671736, 673916e-8, 0, 0.511199, 0.657777, 631937e-8, 0, 0.534618, 0.643497, 592411e-8, 0, 0.558668, 0.62889, 553928e-8, 0, 0.58338, 0.614299, 51934e-7, 0, 0.608787, 0.599197, 485985e-8, 0, 0.634929, 0.584175, 454357e-8, 0, 0.661849, 0.569541, 425787e-8, 0, 0.689594, 0.555193, 397905e-8, 0, 0.718211, 0.540947, 372364e-8, 0, 0.747742, 0.526593, 348599e-8, 0, 0.778205, 0.512335, 326103e-8, 0, 0.80953, 0.498017, 305137e-8, 0, 0.84127, 0.483609, 285485e-8, 0, 0.873016, 0.469368, 267472e-8, 0, 0.904762, 0.455037, 249945e-8, 0, 0.936508, 0.441493, 234792e-8, 0, 0.968254, 0.428147, 219936e-8, 0, 1, 1, 0.0219422, 0, 0, 1, 0.0219423, 0, 0, 0.999998, 0.0219434, 0, 0, 0.999993, 0.0219481, 0, 0, 0.999981, 0.021961, 0, 0, 0.999949, 0.0219879, 0, 0, 0.999896, 0.0220367, 0, 593194e-10, 0.999808, 0.0221167, 0, 75364e-8, 0.99967, 0.0222383, 0, 237884e-8, 0.999466, 0.0224125, 0, 495612e-8, 0.999174, 0.0226495, 0, 844887e-8, 0.998725, 0.0229525, 0, 0.0128058, 0.996979, 0.0231123, 0, 0.0179742, 0.994317, 0.0230742, 0, 0.0239047, 0.992781, 0.0232895, 0, 0.0305526, 0.991191, 0.0235734, 0, 0.0378786, 0.987787, 0.0236152, 0, 0.0458475, 0.985092, 0.0237994, 0, 0.0544287, 0.981121, 0.0238553, 0, 0.0635952, 0.976924, 0.0238706, 0, 0.0733233, 0.97218, 0.0238704, 0, 0.0835922, 0.965956, 0.0236598, 0, 0.0943839, 0.959998, 0.0234735, 0, 0.105682, 0.953245, 0.0232277, 0, 0.117474, 0.944445, 0.0226973, 0, 0.129747, 0.937087, 0.0223527, 0, 0.142491, 0.928341, 0.0218144, 0, 0.155697, 0.9184, 0.0211516, 0, 0.169358, 0.907959, 0.0204553, 0, 0.183469, 0.89808, 0.0197673, 0, 0.198024, 0.887047, 0.0189915, 0, 0.21302, 0.875221, 0.0182082, 0, 0.228455, 0.86269, 0.0173584, 0, 0.244329, 0.850735, 0.0165718, 0, 0.260639, 0.837545, 0.0157524, 0, 0.277389, 0.823639, 0.0149482, 0, 0.29458, 0.809699, 0.0141431, 0, 0.312216, 0.794797, 0.0133527, 0, 0.3303, 0.780578, 0.0126193, 0, 0.34884, 0.766019, 0.0118914, 0, 0.367842, 0.751447, 0.0111839, 0, 0.387315, 0.737275, 0.010514, 0, 0.40727, 0.724545, 987277e-8, 0, 0.427717, 0.712644, 926569e-8, 0, 0.448671, 0.700432, 869029e-8, 0, 0.470149, 0.687664, 814691e-8, 0, 0.492167, 0.674288, 763012e-8, 0, 0.514746, 0.660966, 714437e-8, 0, 0.537911, 0.647264, 668457e-8, 0, 0.561688, 0.633431, 626581e-8, 0, 0.586108, 0.619133, 585593e-8, 0, 0.611206, 0.604935, 548188e-8, 0, 0.637022, 0.590236, 513288e-8, 0, 0.663599, 0.575473, 47906e-7, 0, 0.690989, 0.561228, 448895e-8, 0, 0.719242, 0.547054, 420233e-8, 0, 0.748411, 0.533175, 392869e-8, 0, 0.778531, 0.519163, 367445e-8, 0, 0.809583, 0.505328, 344097e-8, 0, 0.84127, 0.491446, 322003e-8, 0, 0.873016, 0.477356, 301283e-8, 0, 0.904762, 0.46356, 282592e-8, 0, 0.936508, 0.449623, 264956e-8, 0, 0.968254, 0.436068, 246956e-8, 0, 1, 1, 0.0276135, 0, 0, 1, 0.0276136, 0, 0, 0.999998, 0.0276148, 0, 0, 0.999993, 0.0276201, 0, 0, 0.999976, 0.0276342, 0, 0, 0.999945, 0.027664, 0, 0, 0.999884, 0.0277179, 0, 18679e-8, 0.999784, 0.027806, 0, 119607e-8, 0.99963, 0.0279394, 0, 318407e-8, 0.999401, 0.0281295, 0, 613601e-8, 0.999066, 0.0283858, 0, 999963e-8, 0.998524, 0.0287027, 0, 0.0147164, 0.995702, 0.0286256, 0, 0.0202295, 0.993593, 0.0286733, 0, 0.0264876, 0.992067, 0.0288989, 0, 0.0334452, 0.990548, 0.0292135, 0, 0.0410621, 0.986775, 0.0291296, 0, 0.0493032, 0.984054, 0.0293099, 0, 0.0581381, 0.979481, 0.0291881, 0, 0.0675397, 0.975297, 0.0291598, 0, 0.0774848, 0.96981, 0.028954, 0, 0.0879528, 0.963524, 0.028628, 0, 0.0989258, 0.957398, 0.0283135, 0, 0.110388, 0.950088, 0.0278469, 0, 0.122327, 0.941538, 0.0271798, 0, 0.134729, 0.933332, 0.0265388, 0, 0.147587, 0.924392, 0.0257776, 0, 0.160889, 0.914581, 0.024916, 0, 0.174631, 0.904347, 0.0240242, 0, 0.188806, 0.894324, 0.0231229, 0, 0.203409, 0.883724, 0.022153, 0, 0.218437, 0.872207, 0.0211355, 0, 0.233888, 0.859927, 0.0201048, 0, 0.249761, 0.848373, 0.0191263, 0, 0.266056, 0.836023, 0.0181306, 0, 0.282774, 0.82289, 0.0171718, 0, 0.299917, 0.809324, 0.0162196, 0, 0.317488, 0.795361, 0.0152622, 0, 0.335493, 0.781253, 0.01439, 0, 0.353936, 0.767338, 0.013533, 0, 0.372825, 0.753156, 0.0127244, 0, 0.392168, 0.739122, 0.0119454, 0, 0.411976, 0.725358, 0.0112054, 0, 0.432259, 0.712949, 0.010487, 0, 0.453032, 0.701621, 984032e-8, 0, 0.47431, 0.689703, 921495e-8, 0, 0.496111, 0.677216, 862492e-8, 0, 0.518456, 0.664217, 806882e-8, 0, 0.541367, 0.65137, 755922e-8, 0, 0.564872, 0.638, 705705e-8, 0, 0.589001, 0.62453, 661266e-8, 0, 0.613789, 0.610601, 618432e-8, 0, 0.639277, 0.59676, 578033e-8, 0, 0.66551, 0.582433, 540927e-8, 0, 0.692539, 0.568026, 506104e-8, 0, 0.720422, 0.55414, 47353e-7, 0, 0.749216, 0.540178, 442889e-8, 0, 0.778974, 0.526513, 414363e-8, 0, 0.809711, 0.512954, 388237e-8, 0, 0.84127, 0.499403, 362875e-8, 0, 0.873016, 0.486026, 340827e-8, 0, 0.904762, 0.472345, 318598e-8, 0, 0.936508, 0.458828, 297635e-8, 0, 0.968254, 0.445379, 279447e-8, 0, 1, 1, 0.0345716, 0, 0, 1, 0.0345717, 0, 0, 0.999999, 0.034573, 0, 0, 0.999991, 0.0345787, 0, 0, 0.999974, 0.0345941, 0, 0, 0.999937, 0.0346263, 0, 188589e-11, 0.999869, 0.0346847, 0, 409238e-9, 0.999757, 0.0347798, 0, 17674e-7, 0.999582, 0.0349233, 0, 413658e-8, 0.999322, 0.0351265, 0, 747408e-8, 0.998939, 0.0353967, 0, 0.0117157, 0.998219, 0.0357018, 0, 0.0167966, 0.994974, 0.0354726, 0, 0.0226572, 0.993201, 0.0355621, 0, 0.0292445, 0.991573, 0.0357641, 0, 0.0365123, 0.989301, 0.0359252, 0, 0.0444203, 0.985712, 0.0358017, 0, 0.0529334, 0.982411, 0.0358353, 0, 0.0620214, 0.977827, 0.035617, 0, 0.0716574, 0.973278, 0.0354398, 0, 0.0818186, 0.967397, 0.0350483, 0, 0.0924846, 0.960696, 0.0344795, 0, 0.103638, 0.954349, 0.0339861, 0, 0.115263, 0.946066, 0.0331323, 0, 0.127348, 0.938012, 0.032359, 0, 0.13988, 0.929413, 0.0314413, 0, 0.152849, 0.920355, 0.0304103, 0, 0.166248, 0.910586, 0.0292785, 0, 0.18007, 0.900609, 0.0281391, 0, 0.194308, 0.890093, 0.0269103, 0, 0.208958, 0.880013, 0.0257269, 0, 0.224018, 0.869001, 0.0244671, 0, 0.239485, 0.85751, 0.0232252, 0, 0.255359, 0.84582, 0.0220117, 0, 0.271638, 0.834383, 0.0208274, 0, 0.288324, 0.822158, 0.0196628, 0, 0.305419, 0.809056, 0.0185306, 0, 0.322927, 0.795832, 0.0174174, 0, 0.340851, 0.782547, 0.0163758, 0, 0.359199, 0.7689, 0.015391, 0, 0.377975, 0.755526, 0.0144488, 0, 0.397189, 0.741681, 0.0135372, 0, 0.416851, 0.728178, 0.0126957, 0, 0.436971, 0.714642, 0.0118812, 0, 0.457564, 0.702756, 0.0111165, 0, 0.478644, 0.69175, 0.0104145, 0, 0.500229, 0.680159, 974439e-8, 0, 0.522339, 0.668073, 911926e-8, 0, 0.544997, 0.655405, 851393e-8, 0, 0.56823, 0.642921, 797637e-8, 0, 0.592068, 0.629993, 745119e-8, 0, 0.616546, 0.616828, 696972e-8, 0, 0.641705, 0.603305, 652425e-8, 0, 0.66759, 0.589833, 610188e-8, 0, 0.694255, 0.575945, 570834e-8, 0, 0.72176, 0.561745, 533384e-8, 0, 0.750168, 0.548277, 500001e-8, 0, 0.779545, 0.534467, 467582e-8, 0, 0.809933, 0.521032, 438092e-8, 0, 0.841272, 0.507877, 410348e-8, 0, 0.873016, 0.494654, 383618e-8, 0, 0.904762, 0.481592, 358699e-8, 0, 0.936508, 0.468509, 337281e-8, 0, 0.968254, 0.455293, 316196e-8, 0, 1, 1, 0.0430698, 0, 0, 1, 0.0430699, 0, 0, 0.999998, 0.0430713, 0, 0, 0.999991, 0.0430773, 0, 0, 0.99997, 0.0430936, 0, 0, 0.999928, 0.0431277, 0, 406396e-10, 0.999852, 0.0431893, 0, 744376e-9, 0.999724, 0.0432895, 0, 24806e-7, 0.999527, 0.0434397, 0, 524779e-8, 0.99923, 0.0436507, 0, 898164e-8, 0.998783, 0.0439255, 0, 0.0136083, 0.997507, 0.0441104, 0, 0.0190582, 0.994418, 0.0438225, 0, 0.0252694, 0.992864, 0.0439396, 0, 0.0321879, 0.991127, 0.0440962, 0, 0.039767, 0.987331, 0.0438408, 0, 0.0479667, 0.984819, 0.0438991, 0, 0.056752, 0.980384, 0.0435906, 0, 0.0660929, 0.975846, 0.0432543, 0, 0.075963, 0.970748, 0.0428293, 0, 0.0863398, 0.964303, 0.042153, 0, 0.0972035, 0.95772, 0.0414111, 0, 0.108537, 0.950747, 0.0405893, 0, 0.120325, 0.942533, 0.0394887, 0, 0.132554, 0.934045, 0.0383544, 0, 0.145215, 0.924942, 0.037057, 0, 0.158296, 0.915811, 0.0356993, 0, 0.17179, 0.90612, 0.0342401, 0, 0.185691, 0.896434, 0.0328078, 0, 0.199993, 0.886021, 0.031288, 0, 0.214691, 0.876081, 0.0297776, 0, 0.229782, 0.865608, 0.0282334, 0, 0.245265, 0.854924, 0.026749, 0, 0.261138, 0.843607, 0.02526, 0, 0.277401, 0.832456, 0.0238214, 0, 0.294056, 0.821342, 0.0224682, 0, 0.311104, 0.809303, 0.0211297, 0, 0.328548, 0.796468, 0.0198387, 0, 0.346394, 0.784046, 0.0186227, 0, 0.364645, 0.771262, 0.0174561, 0, 0.38331, 0.758118, 0.0163806, 0, 0.402396, 0.745075, 0.0153287, 0, 0.421912, 0.731926, 0.0143647, 0, 0.44187, 0.71863, 0.0134363, 0, 0.462283, 0.705414, 0.0125603, 0, 0.483165, 0.693792, 0.0117508, 0, 0.504535, 0.683108, 0.0110016, 0, 0.52641, 0.67183, 0.0102757, 0, 0.548816, 0.66015, 962044e-8, 0, 0.571776, 0.647907, 898031e-8, 0, 0.595323, 0.635734, 840811e-8, 0, 0.619489, 0.623208, 786211e-8, 0, 0.644317, 0.610438, 734953e-8, 0, 0.669852, 0.597345, 687688e-8, 0, 0.696148, 0.584138, 643469e-8, 0, 0.723267, 0.5707, 602236e-8, 0, 0.75128, 0.556966, 56324e-7, 0, 0.780258, 0.543607, 528277e-8, 0, 0.810268, 0.530213, 493999e-8, 0, 0.841311, 0.516912, 462265e-8, 0, 0.873016, 0.503916, 43307e-7, 0, 0.904762, 0.491146, 406858e-8, 0, 0.936508, 0.478439, 381436e-8, 0, 0.968254, 0.465834, 358003e-8, 0, 1, 1, 0.0534039, 0, 0, 1, 0.053404, 0, 0, 0.999998, 0.0534055, 0, 0, 0.999989, 0.0534116, 0, 0, 0.999968, 0.0534283, 0, 0, 0.999918, 0.0534633, 0, 155895e-9, 0.99983, 0.0535262, 0, 120914e-8, 0.999685, 0.0536281, 0, 334944e-8, 0.999461, 0.0537799, 0, 653077e-8, 0.999119, 0.0539902, 0, 0.0106718, 0.998582, 0.0542524, 0, 0.0156907, 0.995919, 0.0540318, 0, 0.0215147, 0.993735, 0.0538914, 0, 0.0280801, 0.992126, 0.0539557, 0, 0.0353323, 0.990266, 0.0540401, 0, 0.0432247, 0.986317, 0.0536064, 0, 0.0517172, 0.983213, 0.0534425, 0, 0.0607754, 0.978303, 0.0528622, 0, 0.0703698, 0.973665, 0.0523363, 0, 0.0804742, 0.968091, 0.0516165, 0, 0.0910667, 0.961026, 0.0505434, 0, 0.102128, 0.954333, 0.049523, 0, 0.113641, 0.946372, 0.0481698, 0, 0.125591, 0.938254, 0.0467674, 0, 0.137965, 0.929516, 0.0452341, 0, 0.150754, 0.920106, 0.0435083, 0, 0.163947, 0.910899, 0.0417399, 0, 0.177537, 0.901532, 0.0399389, 0, 0.191516, 0.891919, 0.0380901, 0, 0.205881, 0.882006, 0.0362341, 0, 0.220626, 0.871965, 0.0343444, 0, 0.235749, 0.862145, 0.0324832, 0, 0.251248, 0.852058, 0.0306681, 0, 0.267121, 0.84161, 0.0289097, 0, 0.283368, 0.830806, 0.0272079, 0, 0.299992, 0.820476, 0.0256089, 0, 0.316992, 0.809514, 0.0240394, 0, 0.334374, 0.797865, 0.0225379, 0, 0.35214, 0.785621, 0.0211235, 0, 0.370296, 0.773765, 0.0197908, 0, 0.388849, 0.761629, 0.0185235, 0, 0.407807, 0.748891, 0.0173358, 0, 0.427178, 0.736437, 0.0162305, 0, 0.446974, 0.723707, 0.0151778, 0, 0.467207, 0.710606, 0.0141791, 0, 0.487892, 0.698019, 0.0132592, 0, 0.509046, 0.686203, 0.0123887, 0, 0.530687, 0.675692, 0.0115976, 0, 0.552839, 0.664826, 0.0108325, 0, 0.575527, 0.65349, 0.0101348, 0, 0.59878, 0.641774, 947756e-8, 0, 0.622634, 0.629794, 886058e-8, 0, 0.647128, 0.617647, 828526e-8, 0, 0.672308, 0.60534, 775312e-8, 0, 0.698231, 0.592718, 726033e-8, 0, 0.724958, 0.579746, 679731e-8, 0, 0.752563, 0.566763, 636111e-8, 0, 0.781127, 0.553515, 595228e-8, 0, 0.810733, 0.540118, 556876e-8, 0, 0.841426, 0.527325, 523051e-8, 0, 0.873016, 0.514265, 490712e-8, 0, 0.904762, 0.501406, 460297e-8, 0, 0.936508, 0.488922, 431247e-8, 0, 0.968254, 0.476541, 40472e-7, 0, 1, 1, 0.0659184, 0, 0, 1, 0.0659185, 0, 0, 0.999998, 0.06592, 0, 0, 0.999988, 0.0659259, 0, 0, 0.999963, 0.0659423, 0, 0, 0.999907, 0.0659764, 0, 374198e-9, 0.999806, 0.0660376, 0, 182071e-8, 0.999639, 0.0661361, 0, 43894e-7, 0.999378, 0.0662814, 0, 800055e-8, 0.998985, 0.0664779, 0, 0.0125594, 0.998285, 0.0666914, 0, 0.0179786, 0.995071, 0.0661989, 0, 0.0241822, 0.993172, 0.0660454, 0, 0.031106, 0.991438, 0.0660105, 0, 0.0386952, 0.988428, 0.0656875, 0, 0.0469032, 0.985218, 0.0652913, 0, 0.0556905, 0.981128, 0.0647107, 0, 0.065023, 0.976015, 0.0638491, 0, 0.0748717, 0.97097, 0.062993, 0, 0.0852112, 0.964582, 0.0617927, 0, 0.0960199, 0.957383, 0.0603626, 0, 0.107279, 0.949969, 0.0588128, 0, 0.118971, 0.941843, 0.0570274, 0, 0.131084, 0.933624, 0.0551885, 0, 0.143604, 0.924543, 0.053122, 0, 0.156521, 0.914919, 0.0508897, 0, 0.169825, 0.905773, 0.0486418, 0, 0.18351, 0.896434, 0.0463364, 0, 0.197569, 0.887195, 0.0440623, 0, 0.211997, 0.877706, 0.0417799, 0, 0.226789, 0.867719, 0.03945, 0, 0.241944, 0.858587, 0.037243, 0, 0.257458, 0.849317, 0.0350956, 0, 0.273331, 0.839585, 0.0329852, 0, 0.289563, 0.829856, 0.0310028, 0, 0.306154, 0.819589, 0.0290953, 0, 0.323108, 0.809714, 0.0272738, 0, 0.340426, 0.79934, 0.0255631, 0, 0.358113, 0.788224, 0.0239175, 0, 0.376175, 0.776619, 0.0223831, 0, 0.394616, 0.76521, 0.0209298, 0, 0.413445, 0.753716, 0.0195786, 0, 0.432671, 0.741564, 0.0183001, 0, 0.452305, 0.729413, 0.0171259, 0, 0.472358, 0.717146, 0.0159933, 0, 0.492845, 0.70436, 0.0149495, 0, 0.513783, 0.69219, 0.0139681, 0, 0.535189, 0.680289, 0.0130577, 0, 0.557087, 0.669611, 0.0122198, 0, 0.5795, 0.659113, 0.0114174, 0, 0.602459, 0.648148, 0.0106729, 0, 0.625997, 0.636905, 998997e-8, 0, 0.650154, 0.625154, 934313e-8, 0, 0.674976, 0.613481, 874839e-8, 0, 0.700518, 0.60154, 818265e-8, 0, 0.726845, 0.58943, 766889e-8, 0, 0.754032, 0.576828, 717153e-8, 0, 0.782167, 0.564194, 672696e-8, 0, 0.811344, 0.551501, 630863e-8, 0, 0.841644, 0.538635, 592177e-8, 0, 0.873016, 0.525724, 554888e-8, 0, 0.904762, 0.513209, 520225e-8, 0, 0.936508, 0.500457, 488231e-8, 0, 0.968254, 0.48799, 457153e-8, 0, 1, 1, 0.0810131, 0, 0, 1, 0.0810133, 0, 0, 0.999997, 0.0810145, 0, 0, 0.999985, 0.08102, 0, 0, 0.999956, 0.0810347, 0, 195026e-10, 0.999893, 0.0810656, 0, 719316e-9, 0.999777, 0.0811205, 0, 259774e-8, 0.999583, 0.081208, 0, 561807e-8, 0.999281, 0.0813343, 0, 967472e-8, 0.998813, 0.0814969, 0, 0.0146627, 0.997597, 0.0815217, 0, 0.0204902, 0.994379, 0.0808502, 0, 0.0270802, 0.992744, 0.0806792, 0, 0.0343674, 0.990745, 0.0804589, 0, 0.0422974, 0.986646, 0.0796107, 0, 0.0508242, 0.983611, 0.0790913, 0, 0.0599087, 0.978869, 0.0780746, 0, 0.0695175, 0.973475, 0.0768218, 0, 0.0796223, 0.967845, 0.0754926, 0, 0.0901983, 0.960778, 0.0737063, 0, 0.101224, 0.953333, 0.0718052, 0, 0.112682, 0.945274, 0.0695946, 0, 0.124555, 0.936955, 0.0672492, 0, 0.136831, 0.928319, 0.0647732, 0, 0.149496, 0.919075, 0.0620947, 0, 0.162542, 0.909114, 0.0591816, 0, 0.175958, 0.900137, 0.0563917, 0, 0.189739, 0.891069, 0.0535392, 0, 0.203877, 0.882262, 0.0507642, 0, 0.218368, 0.873232, 0.0479793, 0, 0.233208, 0.864042, 0.045226, 0, 0.248393, 0.855002, 0.0425413, 0, 0.263923, 0.846569, 0.0400126, 0, 0.279796, 0.837714, 0.0375269, 0, 0.296012, 0.828918, 0.0352027, 0, 0.312573, 0.819783, 0.0330011, 0, 0.329479, 0.810129, 0.0308908, 0, 0.346734, 0.800866, 0.0289112, 0, 0.364342, 0.79093, 0.0270255, 0, 0.382307, 0.780593, 0.0252758, 0, 0.400637, 0.769511, 0.0236178, 0, 0.419337, 0.758558, 0.0220652, 0, 0.438418, 0.747632, 0.0206289, 0, 0.457889, 0.736146, 0.0192873, 0, 0.477761, 0.724093, 0.0180333, 0, 0.49805, 0.71234, 0.0168264, 0, 0.51877, 0.700201, 0.015746, 0, 0.53994, 0.687949, 0.0147027, 0, 0.561581, 0.676163, 0.0137512, 0, 0.583718, 0.665001, 0.0128655, 0, 0.60638, 0.65472, 0.0120366, 0, 0.629599, 0.644213, 0.0112604, 0, 0.653415, 0.633382, 0.0105413, 0, 0.677874, 0.62212, 986498e-8, 0, 0.70303, 0.610631, 923308e-8, 0, 0.728948, 0.599078, 864206e-8, 0, 0.755706, 0.587519, 811784e-8, 0, 0.783396, 0.575505, 761237e-8, 0, 0.812121, 0.563148, 713949e-8, 0, 0.841989, 0.550828, 668379e-8, 0, 0.873035, 0.538458, 627715e-8, 0, 0.904762, 0.525905, 588336e-8, 0, 0.936508, 0.513517, 552687e-8, 0, 0.968254, 0.501395, 519681e-8, 0, 1, 1, 0.0991506, 0, 0, 1, 0.0991504, 0, 0, 0.999996, 0.0991515, 0, 0, 0.999984, 0.0991558, 0, 0, 0.999947, 0.0991672, 0, 114389e-9, 0.999874, 0.0991912, 0, 121503e-8, 0.999739, 0.0992331, 0, 356108e-8, 0.999514, 0.0992983, 0, 705578e-8, 0.999159, 0.0993877, 0, 0.011574, 0.998586, 0.0994837, 0, 0.017003, 0.995731, 0.0988425, 0, 0.0232484, 0.993384, 0.098276, 0, 0.0302318, 0.991615, 0.0979269, 0, 0.0378884, 0.989029, 0.0973432, 0, 0.0461641, 0.985373, 0.0963539, 0, 0.0550136, 0.981278, 0.0952306, 0, 0.0643988, 0.975777, 0.0936233, 0, 0.0742868, 0.970526, 0.0920219, 0, 0.0846501, 0.963755, 0.0898912, 0, 0.0954644, 0.956676, 0.0876064, 0, 0.106709, 0.948099, 0.0847751, 0, 0.118367, 0.939718, 0.0818638, 0, 0.130423, 0.931305, 0.078857, 0, 0.142862, 0.922342, 0.0756127, 0, 0.155674, 0.912842, 0.0721473, 0, 0.168849, 0.903304, 0.0686195, 0, 0.182378, 0.89411, 0.0650589, 0, 0.196255, 0.885512, 0.0616022, 0, 0.210473, 0.877193, 0.0582434, 0, 0.225027, 0.86877, 0.0548979, 0, 0.239915, 0.860267, 0.0516095, 0, 0.255132, 0.851915, 0.048468, 0, 0.270678, 0.843912, 0.0454447, 0, 0.286551, 0.83604, 0.0425612, 0, 0.302751, 0.828245, 0.0398752, 0, 0.31928, 0.820159, 0.0373198, 0, 0.336138, 0.81167, 0.034916, 0, 0.35333, 0.802659, 0.0326402, 0, 0.370858, 0.793921, 0.0304901, 0, 0.388728, 0.784713, 0.0284857, 0, 0.406944, 0.774946, 0.0266186, 0, 0.425515, 0.76448, 0.0248593, 0, 0.444449, 0.753793, 0.0232114, 0, 0.463756, 0.743506, 0.0217039, 0, 0.483447, 0.732555, 0.0202841, 0, 0.503535, 0.720965, 0.0189648, 0, 0.524036, 0.709422, 0.0177189, 0, 0.544968, 0.697756, 0.0165626, 0, 0.56635, 0.685565, 0.015483, 0, 0.588208, 0.673987, 0.0144892, 0, 0.610569, 0.66244, 0.0135607, 0, 0.633466, 0.651675, 0.0126956, 0, 0.656936, 0.641598, 0.0118788, 0, 0.681025, 0.63121, 0.0111261, 0, 0.705788, 0.620514, 0.010437, 0, 0.731289, 0.609366, 978747e-8, 0, 0.757606, 0.598137, 917257e-8, 0, 0.784834, 0.586966, 859778e-8, 0, 0.813085, 0.575549, 806803e-8, 0, 0.842485, 0.563797, 757294e-8, 0, 0.87313, 0.551758, 710592e-8, 0, 0.904762, 0.539894, 66841e-7, 0, 0.936508, 0.527901, 627901e-8, 0, 0.968254, 0.515819, 590506e-8, 0, 1, 1, 0.120864, 0, 0, 1, 0.120864, 0, 0, 0.999996, 0.120864, 0, 0, 0.99998, 0.120867, 0, 0, 0.99994, 0.120872, 0, 323781e-9, 0.999852, 0.120884, 0, 188693e-8, 0.999693, 0.120903, 0, 473489e-8, 0.999426, 0.120929, 0, 872704e-8, 0.999002, 0.120955, 0, 0.0137237, 0.998235, 0.120918, 0, 0.0196068, 0.994608, 0.119764, 0, 0.0262803, 0.992997, 0.119265, 0, 0.0336657, 0.990968, 0.11863, 0, 0.0416987, 0.987002, 0.117261, 0, 0.0503261, 0.983524, 0.116009, 0, 0.0595035, 0.97875, 0.114252, 0, 0.0691935, 0.972652, 0.11193, 0, 0.0793645, 0.966613, 0.109555, 0, 0.0899894, 0.959275, 0.106612, 0, 0.101045, 0.951272, 0.103375, 0, 0.112512, 0.942323, 0.0996594, 0, 0.124372, 0.933679, 0.0958841, 0, 0.136611, 0.924822, 0.0919265, 0, 0.149216, 0.915742, 0.0878061, 0, 0.162176, 0.906348, 0.0834894, 0, 0.175482, 0.896883, 0.079085, 0, 0.189125, 0.88774, 0.0746745, 0, 0.203098, 0.87986, 0.0705773, 0, 0.217396, 0.871998, 0.0665005, 0, 0.232015, 0.864325, 0.0625413, 0, 0.24695, 0.856685, 0.0586781, 0, 0.2622, 0.84925, 0.0550063, 0, 0.277761, 0.841719, 0.0514727, 0, 0.293634, 0.834755, 0.0481398, 0, 0.309819, 0.827853, 0.0450172, 0, 0.326315, 0.820888, 0.0420969, 0, 0.343126, 0.813616, 0.0393702, 0, 0.360254, 0.805767, 0.0367771, 0, 0.377701, 0.797338, 0.0343274, 0, 0.395474, 0.789122, 0.0320529, 0, 0.413577, 0.780601, 0.0299485, 0, 0.432018, 0.771424, 0.0279812, 0, 0.450804, 0.761502, 0.0261054, 0, 0.469944, 0.751166, 0.0243942, 0, 0.489451, 0.741276, 0.0228087, 0, 0.509337, 0.730898, 0.0213265, 0, 0.529617, 0.719878, 0.0199307, 0, 0.550307, 0.708379, 0.0186574, 0, 0.571428, 0.697165, 0.0174446, 0, 0.593003, 0.685554, 0.0163144, 0, 0.615059, 0.673631, 0.015276, 0, 0.637628, 0.662385, 0.0143003, 0, 0.660746, 0.651059, 0.0134112, 0, 0.68446, 0.640451, 0.0125794, 0, 0.70882, 0.630536, 0.011793, 0, 0.733893, 0.620316, 0.0110547, 0, 0.759756, 0.609722, 0.0103668, 0, 0.786505, 0.598804, 973009e-8, 0, 0.814259, 0.587871, 912812e-8, 0, 0.843157, 0.577121, 858916e-8, 0, 0.87334, 0.566019, 807333e-8, 0, 0.904762, 0.554664, 759687e-8, 0, 0.936508, 0.543101, 714759e-8, 0, 0.968254, 0.531558, 673418e-8, 0, 1, 1, 0.146767, 0, 0, 1, 0.146767, 0, 0, 0.999997, 0.146767, 0, 0, 0.999977, 0.146765, 0, 320658e-11, 0.999929, 0.146762, 0, 682576e-9, 0.999823, 0.146753, 0, 276402e-8, 0.999633, 0.146735, 0, 614771e-8, 0.999314, 0.146699, 0, 0.0106613, 0.998796, 0.14662, 0, 0.0161546, 0.997124, 0.146107, 0, 0.0225063, 0.994062, 0.144857, 0, 0.0296198, 0.992154, 0.144011, 0, 0.037417, 0.989186, 0.142712, 0, 0.0458348, 0.985279, 0.140926, 0, 0.0548211, 0.980826, 0.13885, 0, 0.0643326, 0.975056, 0.136168, 0, 0.074333, 0.969005, 0.133217, 0, 0.0847917, 0.961554, 0.12959, 0, 0.0956828, 0.954206, 0.125886, 0, 0.106984, 0.945046, 0.121335, 0, 0.118675, 0.935678, 0.116492, 0, 0.130741, 0.926748, 0.111635, 0, 0.143166, 0.917764, 0.106625, 0, 0.155939, 0.908358, 0.101325, 0, 0.169049, 0.899219, 0.0960249, 0, 0.182487, 0.890089, 0.0906527, 0, 0.196245, 0.881488, 0.0853905, 0, 0.210317, 0.874031, 0.0804177, 0, 0.224697, 0.866932, 0.0756005, 0, 0.23938, 0.859976, 0.0709019, 0, 0.254364, 0.853375, 0.0664391, 0, 0.269646, 0.846971, 0.0622012, 0, 0.285223, 0.840483, 0.058129, 0, 0.301096, 0.833969, 0.0542762, 0, 0.317265, 0.82806, 0.0507042, 0, 0.333729, 0.822128, 0.047368, 0, 0.350491, 0.815989, 0.044272, 0, 0.367554, 0.809336, 0.0413444, 0, 0.38492, 0.802177, 0.038601, 0, 0.402594, 0.79441, 0.0360227, 0, 0.420582, 0.786573, 0.0336383, 0, 0.438891, 0.778619, 0.0314321, 0, 0.457527, 0.77, 0.029362, 0, 0.476499, 0.760698, 0.0274102, 0, 0.49582, 0.750932, 0.0256146, 0, 0.5155, 0.740993, 0.023974, 0, 0.535555, 0.731159, 0.0224182, 0, 0.556, 0.720836, 0.0209889, 0, 0.576855, 0.709913, 0.0196411, 0, 0.598143, 0.698415, 0.0183824, 0, 0.619888, 0.68745, 0.0172222, 0, 0.642123, 0.676154, 0.0161509, 0, 0.664883, 0.664383, 0.0151397, 0, 0.688211, 0.6533, 0.0141873, 0, 0.71216, 0.642072, 0.0133105, 0, 0.736792, 0.631412, 0.0124932, 0, 0.762186, 0.621622, 0.0117408, 0, 0.788439, 0.611681, 0.0110358, 0, 0.815672, 0.60142, 0.0103775, 0, 0.844034, 0.59083, 975623e-8, 0, 0.873699, 0.580254, 918084e-8, 0, 0.904765, 0.569841, 864721e-8, 0, 0.936508, 0.559224, 815731e-8, 0, 0.968254, 0.548315, 767924e-8, 0, 1, 1, 0.177563, 0, 0, 1, 0.177563, 0, 0, 0.999994, 0.177562, 0, 0, 0.999972, 0.177555, 0, 664171e-10, 0.999914, 0.177536, 0, 12276e-7, 0.999787, 0.177496, 0, 388025e-8, 0.999556, 0.17742, 0, 783463e-8, 0.999165, 0.177285, 0, 0.0128953, 0.9985, 0.177037, 0, 0.0189053, 0.995388, 0.175634, 0, 0.025742, 0.993102, 0.174375, 0, 0.033309, 0.990992, 0.173121, 0, 0.0415298, 0.986932, 0.170896, 0, 0.0503425, 0.982786, 0.16847, 0, 0.0596964, 0.977592, 0.165455, 0, 0.0695498, 0.971075, 0.161676, 0, 0.0798676, 0.963967, 0.157458, 0, 0.0906201, 0.956397, 0.152836, 0, 0.101783, 0.947489, 0.147467, 0, 0.113333, 0.937564, 0.14145, 0, 0.125254, 0.928182, 0.135383, 0, 0.137529, 0.919027, 0.129212, 0, 0.150144, 0.909618, 0.12276, 0, 0.163088, 0.900492, 0.116273, 0, 0.176351, 0.891671, 0.1098, 0, 0.189924, 0.883146, 0.103362, 0, 0.203799, 0.875151, 0.0970799, 0, 0.21797, 0.868338, 0.0911732, 0, 0.232433, 0.862033, 0.0854966, 0, 0.247182, 0.856107, 0.0800691, 0, 0.262216, 0.850644, 0.0749618, 0, 0.27753, 0.845261, 0.070079, 0, 0.293124, 0.839885, 0.0654321, 0, 0.308997, 0.834609, 0.0610975, 0, 0.325149, 0.829083, 0.0569741, 0, 0.341581, 0.82404, 0.0531736, 0, 0.358294, 0.818968, 0.049665, 0, 0.37529, 0.813496, 0.0463856, 0, 0.392573, 0.807533, 0.0433217, 0, 0.410148, 0.80099, 0.0404402, 0, 0.428019, 0.793891, 0.0377578, 0, 0.446192, 0.786281, 0.0352616, 0, 0.464676, 0.778773, 0.0329577, 0, 0.483478, 0.770737, 0.030808, 0, 0.502608, 0.762094, 0.0287964, 0, 0.522079, 0.752898, 0.0269254, 0, 0.541905, 0.743306, 0.0251926, 0, 0.5621, 0.733416, 0.023595, 0, 0.582684, 0.723742, 0.0221155, 0, 0.603677, 0.713542, 0.0207435, 0, 0.625106, 0.702755, 0.019434, 0, 0.646998, 0.691484, 0.0182046, 0, 0.66939, 0.680531, 0.0170771, 0, 0.692324, 0.66953, 0.0160339, 0, 0.715849, 0.658126, 0.0150677, 0, 0.740028, 0.646933, 0.0141551, 0, 0.764937, 0.636107, 0.0133179, 0, 0.790673, 0.625271, 0.0125284, 0, 0.817358, 0.615225, 0.0117937, 0, 0.84515, 0.605678, 0.0111181, 0, 0.874244, 0.59583, 0.0104759, 0, 0.904828, 0.585704, 986672e-8, 0, 0.936508, 0.575413, 929712e-8, 0, 0.968254, 0.565373, 876713e-8, 0, 1, 1, 0.214058, 0, 0, 0.999999, 0.214058, 0, 0, 0.999994, 0.214055, 0, 0, 0.999966, 0.214039, 0, 259642e-9, 0.999893, 0.213998, 0, 200075e-8, 0.999737, 0.21391, 0, 527775e-8, 0.999449, 0.213745, 0, 983959e-8, 0.99896, 0.213458, 0, 0.0154755, 0.9979, 0.212855, 0, 0.0220249, 0.994278, 0.210779, 0, 0.0293654, 0.992254, 0.20926, 0, 0.0374021, 0.98881, 0.206908, 0, 0.0460604, 0.984715, 0.204009, 0, 0.0552802, 0.979738, 0.200471, 0, 0.0650127, 0.972884, 0.195813, 0, 0.0752175, 0.965996, 0.190856, 0, 0.0858612, 0.957974, 0.185077, 0, 0.0969155, 0.949155, 0.17868, 0, 0.108356, 0.939288, 0.171513, 0, 0.120163, 0.928996, 0.163838, 0, 0.132319, 0.919563, 0.156246, 0, 0.144808, 0.910004, 0.148359, 0, 0.157618, 0.900791, 0.140417, 0, 0.170737, 0.892135, 0.132569, 0, 0.184155, 0.883803, 0.124741, 0, 0.197866, 0.876034, 0.117091, 0, 0.211861, 0.869219, 0.109835, 0, 0.226134, 0.863062, 0.102859, 0, 0.240682, 0.857795, 0.0962928, 0, 0.255499, 0.853009, 0.0900725, 0, 0.270583, 0.848603, 0.0842101, 0, 0.285931, 0.844335, 0.0786527, 0, 0.301542, 0.840208, 0.0734397, 0, 0.317415, 0.836035, 0.0685334, 0, 0.33355, 0.83172, 0.0639275, 0, 0.349948, 0.827135, 0.0595909, 0, 0.36661, 0.822797, 0.0556204, 0, 0.383539, 0.818387, 0.0519394, 0, 0.400738, 0.813565, 0.0485317, 0, 0.41821, 0.808142, 0.0453138, 0, 0.435961, 0.802212, 0.0423354, 0, 0.453997, 0.79573, 0.0395553, 0, 0.472324, 0.788741, 0.036988, 0, 0.490951, 0.781093, 0.0345688, 0, 0.509887, 0.773597, 0.0323297, 0, 0.529144, 0.765622, 0.0302719, 0, 0.548735, 0.757083, 0.0283477, 0, 0.568674, 0.747992, 0.0265562, 0, 0.588979, 0.738591, 0.0248844, 0, 0.609671, 0.728719, 0.0233342, 0, 0.630773, 0.719146, 0.0219081, 0, 0.652314, 0.709165, 0.0205711, 0, 0.674328, 0.69875, 0.0193248, 0, 0.696854, 0.687884, 0.0181582, 0, 0.719942, 0.676818, 0.0170746, 0, 0.743651, 0.666247, 0.0160718, 0, 0.768057, 0.655284, 0.0151262, 0, 0.793253, 0.64401, 0.0142561, 0, 0.819363, 0.633353, 0.0134327, 0, 0.846547, 0.622674, 0.012653, 0, 0.875017, 0.612265, 0.0119354, 0, 0.905021, 0.602455, 0.0112533, 0, 0.936508, 0.593147, 0.0106234, 0, 0.968254, 0.583592, 0.0100213, 0, 1, 1, 0.25717, 0, 0, 1, 0.25717, 0, 0, 0.999992, 0.257164, 0, 0, 0.999958, 0.257135, 0, 641715e-9, 0.999864, 0.25706, 0, 305314e-8, 0.999666, 0.256897, 0, 700975e-8, 0.999302, 0.256596, 0, 0.0122194, 0.998663, 0.25607, 0, 0.0184622, 0.995607, 0.254123, 0, 0.0255773, 0.993094, 0.252081, 0, 0.0334439, 0.9907, 0.249867, 0, 0.0419696, 0.98594, 0.246118, 0, 0.0510823, 0.981214, 0.242049, 0, 0.0607242, 0.974966, 0.236869, 0, 0.0708486, 0.967589, 0.230724, 0, 0.081417, 0.95915, 0.223635, 0, 0.0923974, 0.950257, 0.21596, 0, 0.103763, 0.940165, 0.207296, 0, 0.115491, 0.929396, 0.197901, 0, 0.127562, 0.919288, 0.188437, 0, 0.13996, 0.909428, 0.178762, 0, 0.15267, 0.900105, 0.169072, 0, 0.165679, 0.891418, 0.159478, 0, 0.178979, 0.883347, 0.15002, 0, 0.192558, 0.875992, 0.140813, 0, 0.20641, 0.869466, 0.13196, 0, 0.220529, 0.863699, 0.123501, 0, 0.234907, 0.858553, 0.115436, 0, 0.249542, 0.854379, 0.107901, 0, 0.264428, 0.850894, 0.10088, 0, 0.279564, 0.847632, 0.0942296, 0, 0.294947, 0.844571, 0.0879861, 0, 0.310575, 0.84163, 0.0821534, 0, 0.326448, 0.838542, 0.0766409, 0, 0.342566, 0.835412, 0.0715322, 0, 0.358929, 0.831899, 0.0666883, 0, 0.37554, 0.828177, 0.0622175, 0, 0.392399, 0.82416, 0.0580452, 0, 0.409511, 0.820393, 0.054267, 0, 0.426878, 0.816068, 0.0507172, 0, 0.444506, 0.811201, 0.0474041, 0, 0.4624, 0.805785, 0.0443174, 0, 0.480566, 0.799878, 0.0414562, 0, 0.499013, 0.793469, 0.0388147, 0, 0.517749, 0.786473, 0.0363453, 0, 0.536785, 0.778874, 0.0340225, 0, 0.556134, 0.771277, 0.0318599, 0, 0.575809, 0.763426, 0.0298859, 0, 0.595827, 0.755044, 0.0280357, 0, 0.616207, 0.746161, 0.0262979, 0, 0.636973, 0.737124, 0.0247295, 0, 0.65815, 0.72761, 0.0232514, 0, 0.679772, 0.717822, 0.0218755, 0, 0.701876, 0.708279, 0.0205942, 0, 0.724509, 0.698333, 0.0193947, 0, 0.74773, 0.68802, 0.0182717, 0, 0.771609, 0.677321, 0.0172044, 0, 0.79624, 0.666504, 0.0162122, 0, 0.821743, 0.656184, 0.0152924, 0, 0.84828, 0.64556, 0.0144326, 0, 0.876069, 0.634636, 0.0136157, 0, 0.905404, 0.624124, 0.0128612, 0, 0.936508, 0.613914, 0.0121435, 0, 0.968254, 0.603589, 0.0114887, 0, 1, 1, 0.307946, 0, 0, 0.999999, 0.307945, 0, 0, 0.999988, 0.307934, 0, 204479e-10, 0.999944, 0.307886, 0, 127833e-8, 0.999824, 0.307756, 0, 445047e-8, 0.999565, 0.30748, 0, 914673e-8, 0.999085, 0.306966, 0, 0.0150498, 0.998103, 0.306004, 0, 0.0219367, 0.994249, 0.303028, 0, 0.0296485, 0.991807, 0.300435, 0, 0.038068, 0.987773, 0.296554, 0, 0.0471062, 0.982673, 0.2916, 0, 0.0566942, 0.976623, 0.285641, 0, 0.0667768, 0.968757, 0.27815, 0, 0.0773099, 0.959849, 0.269529, 0, 0.088257, 0.950663, 0.260248, 0, 0.0995879, 0.940129, 0.249704, 0, 0.111277, 0.92895, 0.238291, 0, 0.123304, 0.917996, 0.226501, 0, 0.13565, 0.907813, 0.214669, 0, 0.148299, 0.898305, 0.202835, 0, 0.161237, 0.889626, 0.191158, 0, 0.174455, 0.88175, 0.179695, 0, 0.187941, 0.874715, 0.168548, 0, 0.201687, 0.868746, 0.15792, 0, 0.215687, 0.863703, 0.147807, 0, 0.229933, 0.859315, 0.138149, 0, 0.24442, 0.855538, 0.128993, 0, 0.259145, 0.852428, 0.120414, 0, 0.274103, 0.850168, 0.112498, 0, 0.289293, 0.848132, 0.105054, 0, 0.304711, 0.846291, 0.0981087, 0, 0.320357, 0.844431, 0.0915942, 0, 0.33623, 0.842493, 0.0855056, 0, 0.35233, 0.840368, 0.0798204, 0, 0.368658, 0.83798, 0.0745097, 0, 0.385214, 0.83523, 0.0695424, 0, 0.402002, 0.832091, 0.0649092, 0, 0.419023, 0.828667, 0.0606291, 0, 0.436282, 0.824805, 0.0566523, 0, 0.453782, 0.820988, 0.0530229, 0, 0.471529, 0.816635, 0.0496364, 0, 0.489528, 0.811725, 0.0464658, 0, 0.507788, 0.806316, 0.0435082, 0, 0.526317, 0.800469, 0.0407873, 0, 0.545124, 0.794107, 0.038255, 0, 0.564221, 0.787218, 0.0358825, 0, 0.583621, 0.779872, 0.0336785, 0, 0.603341, 0.772097, 0.0316379, 0, 0.623397, 0.764484, 0.0297379, 0, 0.643812, 0.756428, 0.0279581, 0, 0.664611, 0.748022, 0.0263153, 0, 0.685824, 0.739268, 0.0247799, 0, 0.707488, 0.73024, 0.0233385, 0, 0.729646, 0.720893, 0.0220035, 0, 0.752354, 0.71119, 0.0207555, 0, 0.77568, 0.701791, 0.0195843, 0, 0.799715, 0.692184, 0.0184891, 0, 0.824574, 0.682258, 0.0174541, 0, 0.850417, 0.67206, 0.0164873, 0, 0.877466, 0.661717, 0.0155959, 0, 0.90604, 0.651462, 0.0147519, 0, 0.936528, 0.641467, 0.0139727, 0, 0.968254, 0.631229, 0.0132363, 0, 1, 1, 0.367573, 0, 0, 0.999999, 0.367571, 0, 0, 0.999984, 0.367553, 0, 183382e-9, 0.999925, 0.367473, 0, 225254e-8, 0.999759, 0.367259, 0, 628165e-8, 0.99941, 0.366801, 0, 0.0117858, 0.998739, 0.365946, 0, 0.0184359, 0.995529, 0.363191, 0, 0.0260114, 0.992875, 0.360171, 0, 0.0343581, 0.989135, 0.355981, 0, 0.0433637, 0.984166, 0.350401, 0, 0.0529438, 0.977871, 0.343348, 0, 0.0630334, 0.96951, 0.334341, 0, 0.0735805, 0.959964, 0.323862, 0, 0.0845437, 0.950162, 0.312521, 0, 0.095889, 0.938882, 0.299577, 0, 0.107588, 0.926992, 0.285573, 0, 0.119617, 0.915589, 0.271212, 0, 0.131957, 0.904791, 0.256611, 0, 0.144591, 0.895177, 0.242224, 0, 0.157503, 0.886403, 0.227952, 0, 0.170682, 0.878957, 0.214192, 0, 0.184117, 0.872418, 0.200795, 0, 0.197799, 0.867029, 0.188015, 0, 0.21172, 0.862835, 0.175975, 0, 0.225873, 0.859411, 0.164526, 0, 0.240253, 0.856655, 0.153693, 0, 0.254854, 0.854519, 0.14352, 0, 0.269673, 0.852828, 0.13397, 0, 0.284707, 0.851412, 0.124984, 0, 0.299953, 0.850609, 0.116748, 0, 0.315408, 0.849855, 0.10905, 0, 0.331073, 0.849017, 0.101839, 0, 0.346946, 0.848079, 0.0951359, 0, 0.363028, 0.846911, 0.0888774, 0, 0.379318, 0.845445, 0.0830375, 0, 0.395818, 0.84362, 0.0775844, 0, 0.41253, 0.841411, 0.0725054, 0, 0.429457, 0.838768, 0.0677691, 0, 0.446602, 0.835801, 0.0634016, 0, 0.463968, 0.832341, 0.0593095, 0, 0.481561, 0.828424, 0.0555121, 0, 0.499386, 0.824312, 0.052024, 0, 0.51745, 0.819918, 0.0487865, 0, 0.535761, 0.815072, 0.0457801, 0, 0.554328, 0.809863, 0.0430184, 0, 0.573162, 0.804164, 0.0404245, 0, 0.592275, 0.798034, 0.0380146, 0, 0.611681, 0.791436, 0.0357436, 0, 0.631398, 0.784498, 0.0336475, 0, 0.651445, 0.777125, 0.0316666, 0, 0.671845, 0.769365, 0.0298122, 0, 0.692628, 0.761579, 0.0281001, 0, 0.713827, 0.753746, 0.0265049, 0, 0.735484, 0.745573, 0.0250067, 0, 0.75765, 0.737083, 0.0236026, 0, 0.78039, 0.728545, 0.0223302, 0, 0.803789, 0.719691, 0.0211243, 0, 0.82796, 0.710569, 0.0199983, 0, 0.853056, 0.701216, 0.0189569, 0, 0.879298, 0.692094, 0.0179702, 0, 0.907014, 0.682909, 0.0170418, 0, 0.936691, 0.673509, 0.0161732, 0, 0.968254, 0.663863, 0.0153406, 0, 1, 1, 0.437395, 0, 0, 0.999998, 0.437394, 0, 0, 0.99998, 0.437363, 0, 616704e-9, 0.999891, 0.437232, 0, 367925e-8, 0.999656, 0.436877, 0, 867446e-8, 0.999148, 0.436121, 0, 0.0150679, 0.997959, 0.434564, 0, 0.022531, 0.993464, 0.430134, 0, 0.0308507, 0.990606, 0.426077, 0, 0.0398805, 0.985027, 0.419397, 0, 0.0495148, 0.978491, 0.41118, 0, 0.0596749, 0.969643, 0.40048, 0, 0.0703001, 0.959189, 0.38769, 0, 0.0813427, 0.948223, 0.373575, 0, 0.0927641, 0.935955, 0.357622, 0, 0.104533, 0.923237, 0.34043, 0, 0.116624, 0.911074, 0.322735, 0, 0.129015, 0.899724, 0.30479, 0, 0.141687, 0.890189, 0.287392, 0, 0.154626, 0.881796, 0.270248, 0, 0.167818, 0.874781, 0.253659, 0, 0.181252, 0.869166, 0.237786, 0, 0.194918, 0.864725, 0.222618, 0, 0.208807, 0.861565, 0.208356, 0, 0.222913, 0.859284, 0.194867, 0, 0.237229, 0.857677, 0.18212, 0, 0.25175, 0.856714, 0.17018, 0, 0.266473, 0.856155, 0.158969, 0, 0.281392, 0.8558, 0.148413, 0, 0.296505, 0.855672, 0.138578, 0, 0.311811, 0.855538, 0.129345, 0, 0.327306, 0.855689, 0.120861, 0, 0.342991, 0.855767, 0.112969, 0, 0.358864, 0.855618, 0.105593, 0, 0.374925, 0.85525, 0.0987451, 0, 0.391176, 0.854583, 0.0923727, 0, 0.407616, 0.853534, 0.0864143, 0, 0.424249, 0.852061, 0.0808338, 0, 0.441076, 0.850253, 0.0756771, 0, 0.4581, 0.848004, 0.0708612, 0, 0.475324, 0.845333, 0.0663784, 0, 0.492754, 0.842376, 0.0622631, 0, 0.510394, 0.838956, 0.0584112, 0, 0.528251, 0.835121, 0.0548328, 0, 0.546331, 0.830842, 0.0514838, 0, 0.564644, 0.826212, 0.048355, 0, 0.583198, 0.821522, 0.0454714, 0, 0.602005, 0.816551, 0.0428263, 0, 0.621078, 0.811211, 0.0403612, 0, 0.640434, 0.805479, 0.038039, 0, 0.660089, 0.799409, 0.0358739, 0, 0.680066, 0.79306, 0.0338727, 0, 0.70039, 0.786395, 0.0319985, 0, 0.721094, 0.779416, 0.030241, 0, 0.742215, 0.77214, 0.0285951, 0, 0.7638, 0.764636, 0.0270747, 0, 0.785912, 0.756836, 0.0256354, 0, 0.808628, 0.749315, 0.0243027, 0, 0.832055, 0.741561, 0.0230497, 0, 0.856338, 0.733589, 0.0218801, 0, 0.88169, 0.725479, 0.020784, 0, 0.908441, 0.717255, 0.0197702, 0, 0.937125, 0.708829, 0.0188168, 0, 0.968254, 0.700191, 0.0179113, 0, 1, 1, 0.518937, 0, 0, 0.999998, 0.518933, 0, 0, 0.999967, 0.518883, 0, 147741e-8, 0.999832, 0.51866, 0, 573221e-8, 0.999466, 0.518057, 0, 0.011826, 0.998644, 0.516752, 0, 0.0192116, 0.994458, 0.512347, 0, 0.027573, 0.991223, 0.507675, 0, 0.0367099, 0.985515, 0.500188, 0, 0.046487, 0.978308, 0.490408, 0, 0.0568071, 0.968359, 0.477357, 0, 0.0675984, 0.95682, 0.461752, 0, 0.0788059, 0.943929, 0.443796, 0, 0.090386, 0.930224, 0.423893, 0, 0.102304, 0.916514, 0.402682, 0, 0.114532, 0.903653, 0.380914, 0, 0.127047, 0.892315, 0.359212, 0, 0.139828, 0.882942, 0.338102, 0, 0.152861, 0.875438, 0.31773, 0, 0.16613, 0.869642, 0.298186, 0, 0.179624, 0.865304, 0.279491, 0, 0.193332, 0.862382, 0.261804, 0, 0.207247, 0.860666, 0.245146, 0, 0.22136, 0.859788, 0.229406, 0, 0.235666, 0.859608, 0.214605, 0, 0.250158, 0.859912, 0.200691, 0, 0.264832, 0.86053, 0.187623, 0, 0.279684, 0.861368, 0.17539, 0, 0.294711, 0.862237, 0.163901, 0, 0.309911, 0.863127, 0.153175, 0, 0.32528, 0.863923, 0.143147, 0, 0.340819, 0.864567, 0.133781, 0, 0.356524, 0.865013, 0.125042, 0, 0.372397, 0.86539, 0.116952, 0, 0.388438, 0.865591, 0.109476, 0, 0.404645, 0.865517, 0.102542, 0, 0.421022, 0.865084, 0.0960688, 0, 0.437569, 0.864309, 0.0900499, 0, 0.454287, 0.863151, 0.0844328, 0, 0.471181, 0.861649, 0.0792218, 0, 0.488253, 0.859742, 0.0743482, 0, 0.505507, 0.857446, 0.0697963, 0, 0.522947, 0.854757, 0.0655364, 0, 0.54058, 0.851783, 0.061608, 0, 0.558412, 0.848516, 0.0579701, 0, 0.576449, 0.844897, 0.0545742, 0, 0.594701, 0.840956, 0.0514167, 0, 0.613178, 0.836676, 0.0484598, 0, 0.631892, 0.832075, 0.0456934, 0, 0.650856, 0.827191, 0.0431178, 0, 0.670088, 0.822295, 0.0407718, 0, 0.689606, 0.817294, 0.0386032, 0, 0.709434, 0.812013, 0.0365675, 0, 0.7296, 0.806465, 0.0346547, 0, 0.750138, 0.800691, 0.0328717, 0, 0.771093, 0.794709, 0.031211, 0, 0.792519, 0.788493, 0.0296504, 0, 0.814488, 0.782049, 0.0281782, 0, 0.837097, 0.775403, 0.0267965, 0, 0.860481, 0.76857, 0.0255002, 0, 0.884842, 0.761536, 0.0242759, 0, 0.910494, 0.754303, 0.0231142, 0, 0.937985, 0.74692, 0.0220305, 0, 0.968254, 0.739745, 0.0210192, 0, 1, 1, 0.613914, 0, 0, 0.999996, 0.613907, 0, 963597e-10, 0.999942, 0.613814, 0, 301247e-8, 0.999704, 0.613407, 0, 870385e-8, 0.999046, 0.612302, 0, 0.0160714, 0.995516, 0.608266, 0, 0.0245899, 0.991726, 0.602863, 0, 0.0339681, 0.985157, 0.593956, 0, 0.0440254, 0.97642, 0.581748, 0, 0.0546409, 0.964404, 0.565183, 0, 0.0657284, 0.950601, 0.545273, 0, 0.0772246, 0.935158, 0.522129, 0, 0.0890812, 0.919364, 0.496782, 0, 0.10126, 0.904754, 0.470571, 0, 0.113731, 0.89176, 0.444037, 0, 0.126469, 0.881492, 0.418322, 0, 0.139454, 0.873656, 0.393522, 0, 0.15267, 0.868053, 0.369795, 0, 0.166101, 0.864336, 0.347171, 0, 0.179736, 0.862259, 0.325737, 0, 0.193565, 0.861556, 0.305532, 0, 0.207578, 0.861776, 0.286416, 0, 0.221769, 0.862661, 0.268355, 0, 0.23613, 0.864015, 0.251334, 0, 0.250656, 0.865711, 0.235352, 0, 0.265343, 0.867519, 0.220302, 0, 0.280187, 0.869351, 0.206161, 0, 0.295183, 0.871144, 0.192908, 0, 0.31033, 0.872839, 0.180505, 0, 0.325624, 0.874307, 0.168848, 0, 0.341065, 0.875667, 0.158021, 0, 0.35665, 0.876758, 0.147877, 0, 0.37238, 0.87764, 0.138441, 0, 0.388253, 0.878237, 0.129627, 0, 0.404269, 0.878563, 0.121415, 0, 0.42043, 0.878572, 0.113741, 0, 0.436735, 0.87842, 0.106652, 0, 0.453187, 0.878057, 0.100097, 0, 0.469786, 0.877413, 0.0940128, 0, 0.486536, 0.87646, 0.0883462, 0, 0.503439, 0.875233, 0.0830924, 0, 0.520498, 0.8737, 0.0781975, 0, 0.537717, 0.871873, 0.07364, 0, 0.555102, 0.86978, 0.0694103, 0, 0.572657, 0.867405, 0.0654696, 0, 0.59039, 0.864751, 0.0617914, 0, 0.608307, 0.861818, 0.0583491, 0, 0.626419, 0.858645, 0.0551443, 0, 0.644733, 0.855307, 0.0521894, 0, 0.663264, 0.851736, 0.0494334, 0, 0.682025, 0.847927, 0.0468504, 0, 0.701032, 0.843888, 0.0444261, 0, 0.720308, 0.839629, 0.0421497, 0, 0.739875, 0.835158, 0.0400082, 0, 0.759764, 0.830509, 0.0380076, 0, 0.780014, 0.825714, 0.0361488, 0, 0.800673, 0.820729, 0.0343956, 0, 0.821803, 0.815751, 0.0327781, 0, 0.843492, 0.810752, 0.031275, 0, 0.86586, 0.805587, 0.0298542, 0, 0.889087, 0.800317, 0.0285397, 0, 0.913466, 0.79489, 0.0272948, 0, 0.93952, 0.789314, 0.0261139, 0, 0.96835, 0.783593, 0.0249938, 0, 1, 1, 0.724258, 0, 0, 0.999992, 0.724243, 0, 726889e-9, 0.99987, 0.724044, 0, 569574e-8, 0.999336, 0.72317, 0, 0.0131702, 0.996271, 0.719432, 0, 0.0220738, 0.991159, 0.712576, 0, 0.0319405, 0.982465, 0.700927, 0, 0.0425202, 0.97049, 0.684297, 0, 0.0536599, 0.953973, 0.661244, 0, 0.065258, 0.935546, 0.633804, 0, 0.0772427, 0.916596, 0.603071, 0, 0.0895616, 0.899353, 0.57105, 0, 0.102175, 0.885216, 0.539206, 0, 0.11505, 0.875076, 0.508714, 0, 0.128164, 0.868334, 0.479571, 0, 0.141495, 0.864414, 0.451796, 0, 0.155026, 0.862678, 0.425328, 0, 0.168745, 0.862835, 0.400352, 0, 0.182639, 0.864067, 0.376532, 0, 0.196699, 0.866086, 0.35391, 0, 0.210915, 0.868557, 0.332424, 0, 0.225282, 0.871271, 0.312053, 0, 0.239792, 0.874058, 0.292764, 0, 0.25444, 0.8768, 0.27453, 0, 0.269223, 0.87939, 0.257297, 0, 0.284135, 0.8819, 0.24114, 0, 0.299174, 0.884187, 0.225934, 0, 0.314337, 0.886262, 0.211669, 0, 0.329622, 0.888119, 0.198311, 0, 0.345026, 0.889709, 0.185783, 0, 0.360549, 0.891054, 0.174063, 0, 0.376189, 0.892196, 0.163143, 0, 0.391946, 0.893101, 0.152952, 0, 0.407819, 0.893803, 0.143475, 0, 0.423808, 0.894277, 0.134647, 0, 0.439914, 0.894532, 0.126434, 0, 0.456137, 0.894576, 0.1188, 0, 0.472479, 0.894393, 0.111694, 0, 0.48894, 0.893976, 0.105069, 0, 0.505523, 0.893346, 0.0989077, 0, 0.52223, 0.892502, 0.0931724, 0, 0.539064, 0.891441, 0.0878276, 0, 0.556028, 0.890276, 0.082903, 0, 0.573125, 0.888972, 0.0783505, 0, 0.590361, 0.887469, 0.0741083, 0, 0.607741, 0.885785, 0.0701633, 0, 0.62527, 0.883914, 0.0664835, 0, 0.642957, 0.881872, 0.0630567, 0, 0.660809, 0.879651, 0.0598527, 0, 0.678836, 0.877267, 0.0568615, 0, 0.69705, 0.874717, 0.05406, 0, 0.715465, 0.872012, 0.0514378, 0, 0.734098, 0.869157, 0.0489805, 0, 0.752968, 0.866155, 0.0466727, 0, 0.772101, 0.863014, 0.0445056, 0, 0.791529, 0.859748, 0.0424733, 0, 0.81129, 0.856416, 0.0405957, 0, 0.831438, 0.852958, 0.0388273, 0, 0.852044, 0.849382, 0.0371619, 0, 0.87321, 0.845694, 0.0355959, 0, 0.89509, 0.841893, 0.0341155, 0, 0.917932, 0.837981, 0.0327141, 0, 0.942204, 0.833963, 0.0313856, 0, 0.968981, 0.829847, 0.0301275, 0, 1, 1, 0.85214, 0, 0, 0.999969, 0.852095, 0, 279627e-8, 0.999483, 0.851408, 0, 0.0107635, 0.994545, 0.84579, 0, 0.0206454, 0.986188, 0.835231, 0, 0.0315756, 0.969847, 0.814687, 0, 0.0432021, 0.945951, 0.783735, 0, 0.0553396, 0.91917, 0.746074, 0, 0.0678766, 0.895488, 0.706938, 0, 0.0807395, 0.878232, 0.669534, 0, 0.0938767, 0.868252, 0.635168, 0, 0.10725, 0.863873, 0.603069, 0, 0.120832, 0.863369, 0.572514, 0, 0.134598, 0.86545, 0.543169, 0, 0.148533, 0.868803, 0.514578, 0, 0.16262, 0.872794, 0.486762, 0, 0.176849, 0.87702, 0.459811, 0, 0.19121, 0.881054, 0.433654, 0, 0.205694, 0.884974, 0.408574, 0, 0.220294, 0.888587, 0.384525, 0, 0.235005, 0.891877, 0.36156, 0, 0.24982, 0.894793, 0.339661, 0, 0.264737, 0.89743, 0.318913, 0, 0.279751, 0.899796, 0.299302, 0, 0.294859, 0.901943, 0.280843, 0, 0.310058, 0.903858, 0.263481, 0, 0.325346, 0.905574, 0.247197, 0, 0.340721, 0.907069, 0.231915, 0, 0.356181, 0.908379, 0.217614, 0, 0.371725, 0.90952, 0.20425, 0, 0.387353, 0.910483, 0.191758, 0, 0.403063, 0.91128, 0.180092, 0, 0.418854, 0.911936, 0.169222, 0, 0.434727, 0.912454, 0.159098, 0, 0.450682, 0.912835, 0.149668, 0, 0.466718, 0.913078, 0.140884, 0, 0.482837, 0.913192, 0.132709, 0, 0.499038, 0.913175, 0.125095, 0, 0.515324, 0.91304, 0.118012, 0, 0.531695, 0.912781, 0.111417, 0, 0.548153, 0.91241, 0.105281, 0, 0.5647, 0.911924, 0.0995691, 0, 0.581338, 0.911331, 0.0942531, 0, 0.59807, 0.910637, 0.0893076, 0, 0.6149, 0.90984, 0.0846998, 0, 0.63183, 0.908941, 0.0804044, 0, 0.648865, 0.907944, 0.0763984, 0, 0.666011, 0.906857, 0.0726638, 0, 0.683273, 0.90568, 0.0691783, 0, 0.700659, 0.904416, 0.0659222, 0, 0.718176, 0.903067, 0.0628782, 0, 0.735834, 0.901637, 0.0600307, 0, 0.753646, 0.900128, 0.0573647, 0, 0.771625, 0.898544, 0.0548668, 0, 0.78979, 0.89689, 0.052527, 0, 0.808162, 0.895165, 0.0503306, 0, 0.826771, 0.893371, 0.0482668, 0, 0.845654, 0.891572, 0.0463605, 0, 0.864863, 0.889763, 0.0445998, 0, 0.884472, 0.887894, 0.0429451, 0, 0.904592, 0.885967, 0.0413884, 0, 0.925407, 0.883984, 0.0399225, 0, 0.947271, 0.881945, 0.0385405, 0, 0.97105, 0.879854, 0.0372362, 0, 1, 0.999804, 0.995833, 0, 0, 0.938155, 0.933611, 0, 0.0158731, 0.864755, 0.854311, 0, 0.0317461, 0.888594, 0.865264, 0, 0.0476191, 0.905575, 0.863922, 0, 0.0634921, 0.915125, 0.850558, 0, 0.0793651, 0.920665, 0.829254, 0, 0.0952381, 0.924073, 0.802578, 0, 0.111111, 0.926304, 0.772211, 0, 0.126984, 0.927829, 0.739366, 0, 0.142857, 0.928924, 0.705033, 0, 0.15873, 0.92973, 0.670019, 0, 0.174603, 0.930339, 0.634993, 0, 0.190476, 0.930811, 0.600485, 0, 0.206349, 0.931191, 0.566897, 0, 0.222222, 0.93149, 0.534485, 0, 0.238095, 0.931737, 0.503429, 0, 0.253968, 0.931939, 0.473811, 0, 0.269841, 0.932108, 0.445668, 0, 0.285714, 0.93225, 0.418993, 0, 0.301587, 0.932371, 0.393762, 0, 0.31746, 0.932474, 0.369939, 0, 0.333333, 0.932562, 0.347479, 0, 0.349206, 0.932638, 0.326336, 0, 0.365079, 0.932703, 0.306462, 0, 0.380952, 0.93276, 0.287805, 0, 0.396825, 0.932809, 0.270313, 0, 0.412698, 0.932851, 0.253933, 0, 0.428571, 0.932887, 0.23861, 0, 0.444444, 0.932917, 0.224289, 0, 0.460317, 0.932943, 0.210917, 0, 0.47619, 0.932965, 0.19844, 0, 0.492063, 0.932982, 0.186807, 0, 0.507937, 0.932995, 0.175966, 0, 0.52381, 0.933005, 0.165869, 0, 0.539683, 0.933011, 0.156468, 0, 0.555556, 0.933013, 0.147719, 0, 0.571429, 0.933013, 0.139579, 0, 0.587302, 0.93301, 0.132007, 0, 0.603175, 0.933004, 0.124965, 0, 0.619048, 0.932994, 0.118416, 0, 0.634921, 0.932982, 0.112326, 0, 0.650794, 0.932968, 0.106663, 0, 0.666667, 0.93295, 0.101397, 0, 0.68254, 0.932931, 0.0964993, 0, 0.698413, 0.932908, 0.0919438, 0, 0.714286, 0.932883, 0.0877057, 0, 0.730159, 0.932856, 0.0837623, 0, 0.746032, 0.932827, 0.0800921, 0, 0.761905, 0.932796, 0.0766754, 0, 0.777778, 0.932762, 0.0734936, 0, 0.793651, 0.932727, 0.0705296, 0, 0.809524, 0.932689, 0.0677676, 0, 0.825397, 0.93265, 0.0651929, 0, 0.84127, 0.932609, 0.0627917, 0, 0.857143, 0.932565, 0.0605515, 0, 0.873016, 0.932521, 0.0584606, 0, 0.888889, 0.932474, 0.0565082, 0, 0.904762, 0.932427, 0.0546841, 0, 0.920635, 0.932377, 0.0529793, 0, 0.936508, 0.932326, 0.0513851, 0, 0.952381, 0.932274, 0.0498936, 0, 0.968254, 0.93222, 0.0484975, 0, 0.984127, 0.932164, 0.0471899, 0, 1]; + const ltc_float_1 = new Float32Array(LTC_MAT_1); + const ltc_float_2 = new Float32Array(LTC_MAT_2); + const LTC_FLOAT_1 = new DataTexture(ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + const LTC_FLOAT_2 = new DataTexture(ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + LTC_FLOAT_1.needsUpdate = true; + LTC_FLOAT_2.needsUpdate = true; + const ltc_half_1 = new Uint16Array(LTC_MAT_1.length); + LTC_MAT_1.forEach(function(x2, index2) { + ltc_half_1[index2] = DataUtils.toHalfFloat(x2); + }); + const ltc_half_2 = new Uint16Array(LTC_MAT_2.length); + LTC_MAT_2.forEach(function(x2, index2) { + ltc_half_2[index2] = DataUtils.toHalfFloat(x2); + }); + const LTC_HALF_1 = new DataTexture(ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + const LTC_HALF_2 = new DataTexture(ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + LTC_HALF_1.needsUpdate = true; + LTC_HALF_2.needsUpdate = true; + this.LTC_HALF_1 = LTC_HALF_1; + this.LTC_HALF_1 = LTC_HALF_2; + this.LTC_FLOAT_1 = LTC_FLOAT_1; + this.LTC_FLOAT_2 = LTC_FLOAT_2; + return this; + } +}; +RectAreaLightTexturesLib.LTC_HALF_1 = null; +RectAreaLightTexturesLib.LTC_HALF_1 = null; +RectAreaLightTexturesLib.LTC_FLOAT_1 = null; +RectAreaLightTexturesLib.LTC_FLOAT_2 = null; + +// node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js +var RectAreaLightUniformsLib = class { + static init() { + RectAreaLightTexturesLib.init(); + const { LTC_FLOAT_1, LTC_FLOAT_2, LTC_HALF_1, LTC_HALF_2 } = RectAreaLightTexturesLib; + UniformsLib.LTC_FLOAT_1 = LTC_FLOAT_1; + UniformsLib.LTC_FLOAT_2 = LTC_FLOAT_2; + UniformsLib.LTC_HALF_1 = LTC_HALF_1; + UniformsLib.LTC_HALF_2 = LTC_HALF_2; + } +}; + +// node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js +var _box = new Box3(); +var _vector3 = new Vector3(); +var LineSegmentsGeometry = class extends InstancedBufferGeometry { + constructor() { + super(); + this.isLineSegmentsGeometry = true; + this.type = "LineSegmentsGeometry"; + const positions = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0]; + const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2]; + const index2 = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5]; + this.setIndex(index2); + this.setAttribute("position", new Float32BufferAttribute(positions, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + applyMatrix4(matrix3) { + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0) { + start.applyMatrix4(matrix3); + end.applyMatrix4(matrix3); + start.needsUpdate = true; + } + if (this.boundingBox !== null) { + this.computeBoundingBox(); + } + if (this.boundingSphere !== null) { + this.computeBoundingSphere(); + } + return this; + } + setPositions(array) { + let lineSegments; + if (array instanceof Float32Array) { + lineSegments = array; + } else if (Array.isArray(array)) { + lineSegments = new Float32Array(array); + } + const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1); + this.setAttribute("instanceStart", new InterleavedBufferAttribute(instanceBuffer, 3, 0)); + this.setAttribute("instanceEnd", new InterleavedBufferAttribute(instanceBuffer, 3, 3)); + this.computeBoundingBox(); + this.computeBoundingSphere(); + return this; + } + setColors(array) { + let colors; + if (array instanceof Float32Array) { + colors = array; + } else if (Array.isArray(array)) { + colors = new Float32Array(array); + } + const instanceColorBuffer = new InstancedInterleavedBuffer(colors, 6, 1); + this.setAttribute("instanceColorStart", new InterleavedBufferAttribute(instanceColorBuffer, 3, 0)); + this.setAttribute("instanceColorEnd", new InterleavedBufferAttribute(instanceColorBuffer, 3, 3)); + return this; + } + fromWireframeGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromEdgesGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromMesh(mesh) { + this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry)); + return this; + } + fromLineSegments(lineSegments) { + const geometry = lineSegments.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + this.boundingBox.setFromBufferAttribute(start); + _box.setFromBufferAttribute(end); + this.boundingBox.union(_box); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + if (this.boundingBox === null) { + this.computeBoundingBox(); + } + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + const center = this.boundingSphere.center; + this.boundingBox.getCenter(center); + let maxRadiusSq = 0; + for (let i = 0, il = start.count; i < il; i++) { + _vector3.fromBufferAttribute(start, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector3)); + _vector3.fromBufferAttribute(end, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector3)); + } + this.boundingSphere.radius = Math.sqrt(maxRadiusSq); + if (isNaN(this.boundingSphere.radius)) { + console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this); + } + } + } + toJSON() { + } + applyMatrix(matrix3) { + console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."); + return this.applyMatrix4(matrix3); + } +}; + +// node_modules/three/examples/jsm/lines/LineMaterial.js +UniformsLib.line = { + worldUnits: { value: 1 }, + linewidth: { value: 1 }, + resolution: { value: new Vector2(1, 1) }, + dashOffset: { value: 0 }, + dashScale: { value: 1 }, + dashSize: { value: 1 }, + gapSize: { value: 1 } + // todo FIX - maybe change to totalSize +}; +ShaderLib["line"] = { + uniforms: UniformsUtils.merge([ + UniformsLib.common, + UniformsLib.fog, + UniformsLib.line + ]), + vertexShader: ( + /* glsl */ + ` + #include + #include + #include + #include + #include + + uniform float linewidth; + uniform vec2 resolution; + + attribute vec3 instanceStart; + attribute vec3 instanceEnd; + + attribute vec3 instanceColorStart; + attribute vec3 instanceColorEnd; + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #ifdef USE_DASH + + uniform float dashScale; + attribute float instanceDistanceStart; + attribute float instanceDistanceEnd; + varying float vLineDistance; + + #endif + + void trimSegment( const in vec4 start, inout vec4 end ) { + + // trim end segment so it terminates between the camera plane and the near plane + + // conservative estimate of the near plane + float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column + float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column + float nearEstimate = - 0.5 * b / a; + + float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); + + end.xyz = mix( start.xyz, end.xyz, alpha ); + + } + + void main() { + + #ifdef USE_COLOR + + vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; + + #endif + + #ifdef USE_DASH + + vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; + vUv = uv; + + #endif + + float aspect = resolution.x / resolution.y; + + // camera space + vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); + vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); + + #ifdef WORLD_UNITS + + worldStart = start.xyz; + worldEnd = end.xyz; + + #else + + vUv = uv; + + #endif + + // special case for perspective projection, and segments that terminate either in, or behind, the camera plane + // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space + // but we need to perform ndc-space calculations in the shader, so we must address this issue directly + // perhaps there is a more elegant solution -- WestLangley + + bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column + + if ( perspective ) { + + if ( start.z < 0.0 && end.z >= 0.0 ) { + + trimSegment( start, end ); + + } else if ( end.z < 0.0 && start.z >= 0.0 ) { + + trimSegment( end, start ); + + } + + } + + // clip space + vec4 clipStart = projectionMatrix * start; + vec4 clipEnd = projectionMatrix * end; + + // ndc space + vec3 ndcStart = clipStart.xyz / clipStart.w; + vec3 ndcEnd = clipEnd.xyz / clipEnd.w; + + // direction + vec2 dir = ndcEnd.xy - ndcStart.xy; + + // account for clip-space aspect ratio + dir.x *= aspect; + dir = normalize( dir ); + + #ifdef WORLD_UNITS + + vec3 worldDir = normalize( end.xyz - start.xyz ); + vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) ); + vec3 worldUp = normalize( cross( worldDir, tmpFwd ) ); + vec3 worldFwd = cross( worldDir, worldUp ); + worldPos = position.y < 0.5 ? start: end; + + // height offset + float hw = linewidth * 0.5; + worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp; + + // don't extend the line if we're rendering dashes because we + // won't be rendering the endcaps + #ifndef USE_DASH + + // cap extension + worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir; + + // add width to the box + worldPos.xyz += worldFwd * hw; + + // endcaps + if ( position.y > 1.0 || position.y < 0.0 ) { + + worldPos.xyz -= worldFwd * 2.0 * hw; + + } + + #endif + + // project the worldpos + vec4 clip = projectionMatrix * worldPos; + + // shift the depth of the projected points so the line + // segments overlap neatly + vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; + clip.z = clipPose.z * clip.w; + + #else + + vec2 offset = vec2( dir.y, - dir.x ); + // undo aspect ratio adjustment + dir.x /= aspect; + offset.x /= aspect; + + // sign flip + if ( position.x < 0.0 ) offset *= - 1.0; + + // endcaps + if ( position.y < 0.0 ) { + + offset += - dir; + + } else if ( position.y > 1.0 ) { + + offset += dir; + + } + + // adjust for linewidth + offset *= linewidth; + + // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... + offset /= resolution.y; + + // select end + vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; + + // back to clip space + offset *= clip.w; + + clip.xy += offset; + + #endif + + gl_Position = clip; + + vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation + + #include + #include + #include + + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + uniform vec3 diffuse; + uniform float opacity; + uniform float linewidth; + + #ifdef USE_DASH + + uniform float dashOffset; + uniform float dashSize; + uniform float gapSize; + + #endif + + varying float vLineDistance; + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #include + #include + #include + #include + #include + + vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { + + float mua; + float mub; + + vec3 p13 = p1 - p3; + vec3 p43 = p4 - p3; + + vec3 p21 = p2 - p1; + + float d1343 = dot( p13, p43 ); + float d4321 = dot( p43, p21 ); + float d1321 = dot( p13, p21 ); + float d4343 = dot( p43, p43 ); + float d2121 = dot( p21, p21 ); + + float denom = d2121 * d4343 - d4321 * d4321; + + float numer = d1343 * d4321 - d1321 * d4343; + + mua = numer / denom; + mua = clamp( mua, 0.0, 1.0 ); + mub = ( d1343 + d4321 * ( mua ) ) / d4343; + mub = clamp( mub, 0.0, 1.0 ); + + return vec2( mua, mub ); + + } + + void main() { + + #include + + #ifdef USE_DASH + + if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps + + if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX + + #endif + + float alpha = opacity; + + #ifdef WORLD_UNITS + + // Find the closest points on the view ray and the line segment + vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; + vec3 lineDir = worldEnd - worldStart; + vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); + + vec3 p1 = worldStart + lineDir * params.x; + vec3 p2 = rayEnd * params.y; + vec3 delta = p1 - p2; + float len = length( delta ); + float norm = len / linewidth; + + #ifndef USE_DASH + + #ifdef USE_ALPHA_TO_COVERAGE + + float dnorm = fwidth( norm ); + alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); + + #else + + if ( norm > 0.5 ) { + + discard; + + } + + #endif + + #endif + + #else + + #ifdef USE_ALPHA_TO_COVERAGE + + // artifacts appear on some hardware if a derivative is taken within a conditional + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + float dlen = fwidth( len2 ); + + if ( abs( vUv.y ) > 1.0 ) { + + alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); + + } + + #else + + if ( abs( vUv.y ) > 1.0 ) { + + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + + if ( len2 > 1.0 ) discard; + + } + + #endif + + #endif + + vec4 diffuseColor = vec4( diffuse, alpha ); + + #include + #include + + gl_FragColor = vec4( diffuseColor.rgb, alpha ); + + #include + #include + #include + #include + + } + ` + ) +}; +var LineMaterial = class extends ShaderMaterial { + constructor(parameters) { + super({ + type: "LineMaterial", + uniforms: UniformsUtils.clone(ShaderLib["line"].uniforms), + vertexShader: ShaderLib["line"].vertexShader, + fragmentShader: ShaderLib["line"].fragmentShader, + clipping: true + // required for clipping support + }); + this.isLineMaterial = true; + this.setValues(parameters); + } + get color() { + return this.uniforms.diffuse.value; + } + set color(value2) { + this.uniforms.diffuse.value = value2; + } + get worldUnits() { + return "WORLD_UNITS" in this.defines; + } + set worldUnits(value2) { + if (value2 === true) { + this.defines.WORLD_UNITS = ""; + } else { + delete this.defines.WORLD_UNITS; + } + } + get linewidth() { + return this.uniforms.linewidth.value; + } + set linewidth(value2) { + if (!this.uniforms.linewidth) return; + this.uniforms.linewidth.value = value2; + } + get dashed() { + return "USE_DASH" in this.defines; + } + set dashed(value2) { + if (value2 === true !== this.dashed) { + this.needsUpdate = true; + } + if (value2 === true) { + this.defines.USE_DASH = ""; + } else { + delete this.defines.USE_DASH; + } + } + get dashScale() { + return this.uniforms.dashScale.value; + } + set dashScale(value2) { + this.uniforms.dashScale.value = value2; + } + get dashSize() { + return this.uniforms.dashSize.value; + } + set dashSize(value2) { + this.uniforms.dashSize.value = value2; + } + get dashOffset() { + return this.uniforms.dashOffset.value; + } + set dashOffset(value2) { + this.uniforms.dashOffset.value = value2; + } + get gapSize() { + return this.uniforms.gapSize.value; + } + set gapSize(value2) { + this.uniforms.gapSize.value = value2; + } + get opacity() { + return this.uniforms.opacity.value; + } + set opacity(value2) { + if (!this.uniforms) return; + this.uniforms.opacity.value = value2; + } + get resolution() { + return this.uniforms.resolution.value; + } + set resolution(value2) { + this.uniforms.resolution.value.copy(value2); + } + get alphaToCoverage() { + return "USE_ALPHA_TO_COVERAGE" in this.defines; + } + set alphaToCoverage(value2) { + if (!this.defines) return; + if (value2 === true !== this.alphaToCoverage) { + this.needsUpdate = true; + } + if (value2 === true) { + this.defines.USE_ALPHA_TO_COVERAGE = ""; + } else { + delete this.defines.USE_ALPHA_TO_COVERAGE; + } + } +}; + +// node_modules/three/examples/jsm/lines/LineSegments2.js +var _viewport = new Vector4(); +var _start = new Vector3(); +var _end = new Vector3(); +var _start4 = new Vector4(); +var _end4 = new Vector4(); +var _ssOrigin = new Vector4(); +var _ssOrigin3 = new Vector3(); +var _mvMatrix = new Matrix4(); +var _line = new Line3(); +var _closestPoint2 = new Vector3(); +var _box2 = new Box3(); +var _sphere = new Sphere(); +var _clipToWorldVector = new Vector4(); +var _ray2; +var _lineWidth; +function getWorldSpaceHalfWidth(camera, distance, resolution) { + _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + _clipToWorldVector.x = _lineWidth / resolution.width; + _clipToWorldVector.y = _lineWidth / resolution.height; + _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y)); +} +function raycastWorldUnits(lineSegments, intersects) { + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + for (let i = 0, l2 = segmentCount; i < l2; i++) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5; + if (isInside) { + intersects.push({ + point, + pointOnLine, + distance: _ray2.origin.distanceTo(point), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + uv1: null + }); + } + } +} +function raycastScreenSpace(lineSegments, camera, intersects) { + const projectionMatrix = camera.projectionMatrix; + const material = lineSegments.material; + const resolution = material.resolution; + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + const near = -camera.near; + _ray2.at(1, _ssOrigin); + _ssOrigin.w = 1; + _ssOrigin.applyMatrix4(camera.matrixWorldInverse); + _ssOrigin.applyMatrix4(projectionMatrix); + _ssOrigin.multiplyScalar(1 / _ssOrigin.w); + _ssOrigin.x *= resolution.x / 2; + _ssOrigin.y *= resolution.y / 2; + _ssOrigin.z = 0; + _ssOrigin3.copy(_ssOrigin); + _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld); + for (let i = 0, l2 = segmentCount; i < l2; i++) { + _start4.fromBufferAttribute(instanceStart, i); + _end4.fromBufferAttribute(instanceEnd, i); + _start4.w = 1; + _end4.w = 1; + _start4.applyMatrix4(_mvMatrix); + _end4.applyMatrix4(_mvMatrix); + const isBehindCameraNear = _start4.z > near && _end4.z > near; + if (isBehindCameraNear) { + continue; + } + if (_start4.z > near) { + const deltaDist = _start4.z - _end4.z; + const t3 = (_start4.z - near) / deltaDist; + _start4.lerp(_end4, t3); + } else if (_end4.z > near) { + const deltaDist = _end4.z - _start4.z; + const t3 = (_end4.z - near) / deltaDist; + _end4.lerp(_start4, t3); + } + _start4.applyMatrix4(projectionMatrix); + _end4.applyMatrix4(projectionMatrix); + _start4.multiplyScalar(1 / _start4.w); + _end4.multiplyScalar(1 / _end4.w); + _start4.x *= resolution.x / 2; + _start4.y *= resolution.y / 2; + _end4.x *= resolution.x / 2; + _end4.y *= resolution.y / 2; + _line.start.copy(_start4); + _line.start.z = 0; + _line.end.copy(_end4); + _line.end.z = 0; + const param = _line.closestPointToPointParameter(_ssOrigin3, true); + _line.at(param, _closestPoint2); + const zPos = MathUtils.lerp(_start4.z, _end4.z, param); + const isInClipSpace = zPos >= -1 && zPos <= 1; + const isInside = _ssOrigin3.distanceTo(_closestPoint2) < _lineWidth * 0.5; + if (isInClipSpace && isInside) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.start.applyMatrix4(matrixWorld); + _line.end.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + intersects.push({ + point, + pointOnLine, + distance: _ray2.origin.distanceTo(point), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + uv1: null + }); + } + } +} +var LineSegments2 = class extends Mesh { + constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLineSegments2 = true; + this.type = "LineSegments2"; + } + // for backwards-compatibility, but could be a method of LineSegmentsGeometry... + computeLineDistances() { + const geometry = this.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const lineDistances = new Float32Array(2 * instanceStart.count); + for (let i = 0, j = 0, l2 = instanceStart.count; i < l2; i++, j += 2) { + _start.fromBufferAttribute(instanceStart, i); + _end.fromBufferAttribute(instanceEnd, i); + lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; + lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end); + } + const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); + geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); + geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); + return this; + } + raycast(raycaster, intersects) { + const worldUnits = this.material.worldUnits; + const camera = raycaster.camera; + if (camera === null && !worldUnits) { + console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'); + } + const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0; + _ray2 = raycaster.ray; + const matrixWorld = this.matrixWorld; + const geometry = this.geometry; + const material = this.material; + _lineWidth = material.linewidth + threshold; + if (geometry.boundingSphere === null) { + geometry.computeBoundingSphere(); + } + _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld); + let sphereMargin; + if (worldUnits) { + sphereMargin = _lineWidth * 0.5; + } else { + const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray2.origin)); + sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution); + } + _sphere.radius += sphereMargin; + if (_ray2.intersectsSphere(_sphere) === false) { + return; + } + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + _box2.copy(geometry.boundingBox).applyMatrix4(matrixWorld); + let boxMargin; + if (worldUnits) { + boxMargin = _lineWidth * 0.5; + } else { + const distanceToBox = Math.max(camera.near, _box2.distanceToPoint(_ray2.origin)); + boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution); + } + _box2.expandByScalar(boxMargin); + if (_ray2.intersectsBox(_box2) === false) { + return; + } + if (worldUnits) { + raycastWorldUnits(this, intersects); + } else { + raycastScreenSpace(this, camera, intersects); + } + } + onBeforeRender(renderer2) { + const uniforms = this.material.uniforms; + if (uniforms && uniforms.resolution) { + renderer2.getViewport(_viewport); + this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w); + } + } +}; + +// node_modules/three/examples/jsm/lines/LineGeometry.js +var LineGeometry = class extends LineSegmentsGeometry { + constructor() { + super(); + this.isLineGeometry = true; + this.type = "LineGeometry"; + } + setPositions(array) { + const length2 = array.length - 3; + const points = new Float32Array(2 * length2); + for (let i = 0; i < length2; i += 3) { + points[2 * i] = array[i]; + points[2 * i + 1] = array[i + 1]; + points[2 * i + 2] = array[i + 2]; + points[2 * i + 3] = array[i + 3]; + points[2 * i + 4] = array[i + 4]; + points[2 * i + 5] = array[i + 5]; + } + super.setPositions(points); + return this; + } + setColors(array) { + const length2 = array.length - 3; + const colors = new Float32Array(2 * length2); + for (let i = 0; i < length2; i += 3) { + colors[2 * i] = array[i]; + colors[2 * i + 1] = array[i + 1]; + colors[2 * i + 2] = array[i + 2]; + colors[2 * i + 3] = array[i + 3]; + colors[2 * i + 4] = array[i + 4]; + colors[2 * i + 5] = array[i + 5]; + } + super.setColors(colors); + return this; + } + fromLine(line2) { + const geometry = line2.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } +}; + +// node_modules/three/examples/jsm/lines/Line2.js +var Line2 = class extends LineSegments2 { + constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLine2 = true; + this.type = "Line2"; + } +}; + +// node_modules/three/examples/jsm/lines/Wireframe.js +var _start2 = new Vector3(); +var _end2 = new Vector3(); +var _viewport2 = new Vector4(); +var Wireframe = class extends Mesh { + constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isWireframe = true; + this.type = "Wireframe"; + } + // for backwards-compatibility, but could be a method of LineSegmentsGeometry... + computeLineDistances() { + const geometry = this.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const lineDistances = new Float32Array(2 * instanceStart.count); + for (let i = 0, j = 0, l2 = instanceStart.count; i < l2; i++, j += 2) { + _start2.fromBufferAttribute(instanceStart, i); + _end2.fromBufferAttribute(instanceEnd, i); + lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; + lineDistances[j + 1] = lineDistances[j] + _start2.distanceTo(_end2); + } + const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); + geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); + geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); + return this; + } + onBeforeRender(renderer2) { + const uniforms = this.material.uniforms; + if (uniforms && uniforms.resolution) { + renderer2.getViewport(_viewport2); + this.material.uniforms.resolution.value.set(_viewport2.z, _viewport2.w); + } + } +}; + +// node_modules/three/examples/jsm/lines/WireframeGeometry2.js +var WireframeGeometry2 = class extends LineSegmentsGeometry { + constructor(geometry) { + super(); + this.isWireframeGeometry2 = true; + this.type = "WireframeGeometry2"; + this.fromWireframeGeometry(new WireframeGeometry(geometry)); + } +}; + +// node_modules/three/examples/jsm/loaders/EXRLoader.js +var EXRLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const USHORT_RANGE = 1 << 16; + const BITMAP_SIZE = USHORT_RANGE >> 3; + const HUF_ENCBITS = 16; + const HUF_DECBITS = 14; + const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; + const HUF_DECSIZE = 1 << HUF_DECBITS; + const HUF_DECMASK = HUF_DECSIZE - 1; + const NBITS = 16; + const A_OFFSET = 1 << NBITS - 1; + const MOD_MASK = (1 << NBITS) - 1; + const SHORT_ZEROCODE_RUN = 59; + const LONG_ZEROCODE_RUN = 63; + const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN; + const ULONG_SIZE = 8; + const FLOAT32_SIZE = 4; + const INT32_SIZE = 4; + const INT16_SIZE = 2; + const INT8_SIZE = 1; + const STATIC_HUFFMAN = 0; + const DEFLATE = 1; + const UNKNOWN = 0; + const LOSSY_DCT = 1; + const RLE = 2; + const logBase = Math.pow(2.7182818, 2.2); + function reverseLutFromBitmap(bitmap, lut) { + let k2 = 0; + for (let i = 0; i < USHORT_RANGE; ++i) { + if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) { + lut[k2++] = i; + } + } + const n2 = k2 - 1; + while (k2 < USHORT_RANGE) lut[k2++] = 0; + return n2; + } + function hufClearDecTable(hdec) { + for (let i = 0; i < HUF_DECSIZE; i++) { + hdec[i] = {}; + hdec[i].len = 0; + hdec[i].lit = 0; + hdec[i].p = null; + } + } + const getBitsReturn = { l: 0, c: 0, lc: 0 }; + function getBits(nBits, c2, lc2, uInt8Array2, inOffset) { + while (lc2 < nBits) { + c2 = c2 << 8 | parseUint8Array(uInt8Array2, inOffset); + lc2 += 8; + } + lc2 -= nBits; + getBitsReturn.l = c2 >> lc2 & (1 << nBits) - 1; + getBitsReturn.c = c2; + getBitsReturn.lc = lc2; + } + const hufTableBuffer = new Array(59); + function hufCanonicalCodeTable(hcode) { + for (let i = 0; i <= 58; ++i) hufTableBuffer[i] = 0; + for (let i = 0; i < HUF_ENCSIZE; ++i) hufTableBuffer[hcode[i]] += 1; + let c2 = 0; + for (let i = 58; i > 0; --i) { + const nc = c2 + hufTableBuffer[i] >> 1; + hufTableBuffer[i] = c2; + c2 = nc; + } + for (let i = 0; i < HUF_ENCSIZE; ++i) { + const l2 = hcode[i]; + if (l2 > 0) hcode[i] = l2 | hufTableBuffer[l2]++ << 6; + } + } + function hufUnpackEncTable(uInt8Array2, inOffset, ni, im, iM, hcode) { + const p2 = inOffset; + let c2 = 0; + let lc2 = 0; + for (; im <= iM; im++) { + if (p2.value - inOffset.value > ni) return false; + getBits(6, c2, lc2, uInt8Array2, p2); + const l2 = getBitsReturn.l; + c2 = getBitsReturn.c; + lc2 = getBitsReturn.lc; + hcode[im] = l2; + if (l2 == LONG_ZEROCODE_RUN) { + if (p2.value - inOffset.value > ni) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + getBits(8, c2, lc2, uInt8Array2, p2); + let zerun = getBitsReturn.l + SHORTEST_LONG_RUN; + c2 = getBitsReturn.c; + lc2 = getBitsReturn.lc; + if (im + zerun > iM + 1) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + while (zerun--) hcode[im++] = 0; + im--; + } else if (l2 >= SHORT_ZEROCODE_RUN) { + let zerun = l2 - SHORT_ZEROCODE_RUN + 2; + if (im + zerun > iM + 1) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + while (zerun--) hcode[im++] = 0; + im--; + } + } + hufCanonicalCodeTable(hcode); + } + function hufLength(code) { + return code & 63; + } + function hufCode(code) { + return code >> 6; + } + function hufBuildDecTable(hcode, im, iM, hdecod) { + for (; im <= iM; im++) { + const c2 = hufCode(hcode[im]); + const l2 = hufLength(hcode[im]); + if (c2 >> l2) { + throw new Error("Invalid table entry"); + } + if (l2 > HUF_DECBITS) { + const pl = hdecod[c2 >> l2 - HUF_DECBITS]; + if (pl.len) { + throw new Error("Invalid table entry"); + } + pl.lit++; + if (pl.p) { + const p2 = pl.p; + pl.p = new Array(pl.lit); + for (let i = 0; i < pl.lit - 1; ++i) { + pl.p[i] = p2[i]; + } + } else { + pl.p = new Array(1); + } + pl.p[pl.lit - 1] = im; + } else if (l2) { + let plOffset = 0; + for (let i = 1 << HUF_DECBITS - l2; i > 0; i--) { + const pl = hdecod[(c2 << HUF_DECBITS - l2) + plOffset]; + if (pl.len || pl.p) { + throw new Error("Invalid table entry"); + } + pl.len = l2; + pl.lit = im; + plOffset++; + } + } + } + return true; + } + const getCharReturn = { c: 0, lc: 0 }; + function getChar(c2, lc2, uInt8Array2, inOffset) { + c2 = c2 << 8 | parseUint8Array(uInt8Array2, inOffset); + lc2 += 8; + getCharReturn.c = c2; + getCharReturn.lc = lc2; + } + const getCodeReturn = { c: 0, lc: 0 }; + function getCode(po, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) { + if (po == rlc) { + if (lc2 < 8) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + } + lc2 -= 8; + let cs = c2 >> lc2; + cs = new Uint8Array([cs])[0]; + if (outBufferOffset.value + cs > outBufferEndOffset) { + return false; + } + const s = outBuffer[outBufferOffset.value - 1]; + while (cs-- > 0) { + outBuffer[outBufferOffset.value++] = s; + } + } else if (outBufferOffset.value < outBufferEndOffset) { + outBuffer[outBufferOffset.value++] = po; + } else { + return false; + } + getCodeReturn.c = c2; + getCodeReturn.lc = lc2; + } + function UInt16(value2) { + return value2 & 65535; + } + function Int16(value2) { + const ref = UInt16(value2); + return ref > 32767 ? ref - 65536 : ref; + } + const wdec14Return = { a: 0, b: 0 }; + function wdec14(l2, h) { + const ls = Int16(l2); + const hs = Int16(h); + const hi = hs; + const ai = ls + (hi & 1) + (hi >> 1); + const as = ai; + const bs = ai - hi; + wdec14Return.a = as; + wdec14Return.b = bs; + } + function wdec16(l2, h) { + const m = UInt16(l2); + const d = UInt16(h); + const bb = m - (d >> 1) & MOD_MASK; + const aa = d + bb - A_OFFSET & MOD_MASK; + wdec14Return.a = aa; + wdec14Return.b = bb; + } + function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) { + const w14 = mx < 1 << 14; + const n2 = nx > ny ? ny : nx; + let p2 = 1; + let p22; + let py; + while (p2 <= n2) p2 <<= 1; + p2 >>= 1; + p22 = p2; + p2 >>= 1; + while (p2 >= 1) { + py = 0; + const ey = py + oy * (ny - p22); + const oy1 = oy * p2; + const oy2 = oy * p22; + const ox1 = ox * p2; + const ox2 = ox * p22; + let i00, i01, i10, i11; + for (; py <= ey; py += oy2) { + let px = py; + const ex = py + ox * (nx - p22); + for (; px <= ex; px += ox2) { + const p01 = px + ox1; + const p10 = px + oy1; + const p11 = p10 + ox1; + if (w14) { + wdec14(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec14(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec14(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec14(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } else { + wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec16(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec16(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec16(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } + } + if (nx & p2) { + const p10 = px + oy1; + if (w14) + wdec14(buffer2[px + j], buffer2[p10 + j]); + else + wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + buffer2[p10 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + if (ny & p2) { + let px = py; + const ex = py + ox * (nx - p22); + for (; px <= ex; px += ox2) { + const p01 = px + ox1; + if (w14) + wdec14(buffer2[px + j], buffer2[p01 + j]); + else + wdec16(buffer2[px + j], buffer2[p01 + j]); + i00 = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + p22 = p2; + p2 >>= 1; + } + return py; + } + function hufDecode(encodingTable, decodingTable, uInt8Array2, inOffset, ni, rlc, no, outBuffer, outOffset) { + let c2 = 0; + let lc2 = 0; + const outBufferEndOffset = no; + const inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8); + while (inOffset.value < inOffsetEnd) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + while (lc2 >= HUF_DECBITS) { + const index2 = c2 >> lc2 - HUF_DECBITS & HUF_DECMASK; + const pl = decodingTable[index2]; + if (pl.len) { + lc2 -= pl.len; + getCode(pl.lit, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + } else { + if (!pl.p) { + throw new Error("hufDecode issues"); + } + let j; + for (j = 0; j < pl.lit; j++) { + const l2 = hufLength(encodingTable[pl.p[j]]); + while (lc2 < l2 && inOffset.value < inOffsetEnd) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + } + if (lc2 >= l2) { + if (hufCode(encodingTable[pl.p[j]]) == (c2 >> lc2 - l2 & (1 << l2) - 1)) { + lc2 -= l2; + getCode(pl.p[j], rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + break; + } + } + } + if (j == pl.lit) { + throw new Error("hufDecode issues"); + } + } + } + } + const i = 8 - ni & 7; + c2 >>= i; + lc2 -= i; + while (lc2 > 0) { + const pl = decodingTable[c2 << HUF_DECBITS - lc2 & HUF_DECMASK]; + if (pl.len) { + lc2 -= pl.len; + getCode(pl.lit, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + } else { + throw new Error("hufDecode issues"); + } + } + return true; + } + function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) { + const outOffset = { value: 0 }; + const initialInOffset = inOffset.value; + const im = parseUint32(inDataView, inOffset); + const iM = parseUint32(inDataView, inOffset); + inOffset.value += 4; + const nBits = parseUint32(inDataView, inOffset); + inOffset.value += 4; + if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) { + throw new Error("Something wrong with HUF_ENCSIZE"); + } + const freq = new Array(HUF_ENCSIZE); + const hdec = new Array(HUF_DECSIZE); + hufClearDecTable(hdec); + const ni = nCompressed - (inOffset.value - initialInOffset); + hufUnpackEncTable(uInt8Array2, inOffset, ni, im, iM, freq); + if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) { + throw new Error("Something wrong with hufUncompress"); + } + hufBuildDecTable(freq, im, iM, hdec); + hufDecode(freq, hdec, uInt8Array2, inOffset, nBits, iM, nRaw, outBuffer, outOffset); + } + function applyLut(lut, data2, nData) { + for (let i = 0; i < nData; ++i) { + data2[i] = lut[data2[i]]; + } + } + function predictor(source) { + for (let t3 = 1; t3 < source.length; t3++) { + const d = source[t3 - 1] + source[t3] - 128; + source[t3] = d; + } + } + function interleaveScalar(source, out) { + let t1 = 0; + let t22 = Math.floor((source.length + 1) / 2); + let s = 0; + const stop = source.length - 1; + while (true) { + if (s > stop) break; + out[s++] = source[t1++]; + if (s > stop) break; + out[s++] = source[t22++]; + } + } + function decodeRunLength(source) { + let size2 = source.byteLength; + const out = new Array(); + let p2 = 0; + const reader = new DataView(source); + while (size2 > 0) { + const l2 = reader.getInt8(p2++); + if (l2 < 0) { + const count = -l2; + size2 -= count + 1; + for (let i = 0; i < count; i++) { + out.push(reader.getUint8(p2++)); + } + } else { + const count = l2; + size2 -= 2; + const value2 = reader.getUint8(p2++); + for (let i = 0; i < count + 1; i++) { + out.push(value2); + } + } + } + return out; + } + function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) { + let dataView = new DataView(outBuffer.buffer); + const width2 = channelData[cscSet.idx[0]].width; + const height2 = channelData[cscSet.idx[0]].height; + const numComp = 3; + const numFullBlocksX = Math.floor(width2 / 8); + const numBlocksX = Math.ceil(width2 / 8); + const numBlocksY = Math.ceil(height2 / 8); + const leftoverX = width2 - (numBlocksX - 1) * 8; + const leftoverY = height2 - (numBlocksY - 1) * 8; + const currAcComp = { value: 0 }; + const currDcComp = new Array(numComp); + const dctData = new Array(numComp); + const halfZigBlock = new Array(numComp); + const rowBlock = new Array(numComp); + const rowOffsets = new Array(numComp); + for (let comp2 = 0; comp2 < numComp; ++comp2) { + rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]]; + currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY; + dctData[comp2] = new Float32Array(64); + halfZigBlock[comp2] = new Uint16Array(64); + rowBlock[comp2] = new Uint16Array(numBlocksX * 64); + } + for (let blocky = 0; blocky < numBlocksY; ++blocky) { + let maxY = 8; + if (blocky == numBlocksY - 1) + maxY = leftoverY; + let maxX = 8; + for (let blockx = 0; blockx < numBlocksX; ++blockx) { + if (blockx == numBlocksX - 1) + maxX = leftoverX; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + halfZigBlock[comp2].fill(0); + halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++]; + unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]); + unZigZag(halfZigBlock[comp2], dctData[comp2]); + dctInverse(dctData[comp2]); + } + if (numComp == 3) { + csc709Inverse(dctData); + } + for (let comp2 = 0; comp2 < numComp; ++comp2) { + convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64); + } + } + let offset2 = 0; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + const type = channelData[cscSet.idx[comp2]].type; + for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + offset2 = rowOffsets[comp2][y2]; + for (let blockx = 0; blockx < numFullBlocksX; ++blockx) { + const src = blockx * 64 + (y2 & 7) * 8; + dataView.setUint16(offset2 + 0 * INT16_SIZE * type, rowBlock[comp2][src + 0], true); + dataView.setUint16(offset2 + 1 * INT16_SIZE * type, rowBlock[comp2][src + 1], true); + dataView.setUint16(offset2 + 2 * INT16_SIZE * type, rowBlock[comp2][src + 2], true); + dataView.setUint16(offset2 + 3 * INT16_SIZE * type, rowBlock[comp2][src + 3], true); + dataView.setUint16(offset2 + 4 * INT16_SIZE * type, rowBlock[comp2][src + 4], true); + dataView.setUint16(offset2 + 5 * INT16_SIZE * type, rowBlock[comp2][src + 5], true); + dataView.setUint16(offset2 + 6 * INT16_SIZE * type, rowBlock[comp2][src + 6], true); + dataView.setUint16(offset2 + 7 * INT16_SIZE * type, rowBlock[comp2][src + 7], true); + offset2 += 8 * INT16_SIZE * type; + } + } + if (numFullBlocksX != numBlocksX) { + for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type; + const src = numFullBlocksX * 64 + (y2 & 7) * 8; + for (let x2 = 0; x2 < maxX; ++x2) { + dataView.setUint16(offset3 + x2 * INT16_SIZE * type, rowBlock[comp2][src + x2], true); + } + } + } + } + } + const halfRow = new Uint16Array(width2); + dataView = new DataView(outBuffer.buffer); + for (let comp2 = 0; comp2 < numComp; ++comp2) { + channelData[cscSet.idx[comp2]].decoded = true; + const type = channelData[cscSet.idx[comp2]].type; + if (channelData[comp2].type != 2) continue; + for (let y2 = 0; y2 < height2; ++y2) { + const offset2 = rowOffsets[comp2][y2]; + for (let x2 = 0; x2 < width2; ++x2) { + halfRow[x2] = dataView.getUint16(offset2 + x2 * INT16_SIZE * type, true); + } + for (let x2 = 0; x2 < width2; ++x2) { + dataView.setFloat32(offset2 + x2 * INT16_SIZE * type, decodeFloat162(halfRow[x2]), true); + } + } + } + } + function unRleAC(currAcComp, acBuffer, halfZigBlock) { + let acValue; + let dctComp = 1; + while (dctComp < 64) { + acValue = acBuffer[currAcComp.value]; + if (acValue == 65280) { + dctComp = 64; + } else if (acValue >> 8 == 255) { + dctComp += acValue & 255; + } else { + halfZigBlock[dctComp] = acValue; + dctComp++; + } + currAcComp.value++; + } + } + function unZigZag(src, dst) { + dst[0] = decodeFloat162(src[0]); + dst[1] = decodeFloat162(src[1]); + dst[2] = decodeFloat162(src[5]); + dst[3] = decodeFloat162(src[6]); + dst[4] = decodeFloat162(src[14]); + dst[5] = decodeFloat162(src[15]); + dst[6] = decodeFloat162(src[27]); + dst[7] = decodeFloat162(src[28]); + dst[8] = decodeFloat162(src[2]); + dst[9] = decodeFloat162(src[4]); + dst[10] = decodeFloat162(src[7]); + dst[11] = decodeFloat162(src[13]); + dst[12] = decodeFloat162(src[16]); + dst[13] = decodeFloat162(src[26]); + dst[14] = decodeFloat162(src[29]); + dst[15] = decodeFloat162(src[42]); + dst[16] = decodeFloat162(src[3]); + dst[17] = decodeFloat162(src[8]); + dst[18] = decodeFloat162(src[12]); + dst[19] = decodeFloat162(src[17]); + dst[20] = decodeFloat162(src[25]); + dst[21] = decodeFloat162(src[30]); + dst[22] = decodeFloat162(src[41]); + dst[23] = decodeFloat162(src[43]); + dst[24] = decodeFloat162(src[9]); + dst[25] = decodeFloat162(src[11]); + dst[26] = decodeFloat162(src[18]); + dst[27] = decodeFloat162(src[24]); + dst[28] = decodeFloat162(src[31]); + dst[29] = decodeFloat162(src[40]); + dst[30] = decodeFloat162(src[44]); + dst[31] = decodeFloat162(src[53]); + dst[32] = decodeFloat162(src[10]); + dst[33] = decodeFloat162(src[19]); + dst[34] = decodeFloat162(src[23]); + dst[35] = decodeFloat162(src[32]); + dst[36] = decodeFloat162(src[39]); + dst[37] = decodeFloat162(src[45]); + dst[38] = decodeFloat162(src[52]); + dst[39] = decodeFloat162(src[54]); + dst[40] = decodeFloat162(src[20]); + dst[41] = decodeFloat162(src[22]); + dst[42] = decodeFloat162(src[33]); + dst[43] = decodeFloat162(src[38]); + dst[44] = decodeFloat162(src[46]); + dst[45] = decodeFloat162(src[51]); + dst[46] = decodeFloat162(src[55]); + dst[47] = decodeFloat162(src[60]); + dst[48] = decodeFloat162(src[21]); + dst[49] = decodeFloat162(src[34]); + dst[50] = decodeFloat162(src[37]); + dst[51] = decodeFloat162(src[47]); + dst[52] = decodeFloat162(src[50]); + dst[53] = decodeFloat162(src[56]); + dst[54] = decodeFloat162(src[59]); + dst[55] = decodeFloat162(src[61]); + dst[56] = decodeFloat162(src[35]); + dst[57] = decodeFloat162(src[36]); + dst[58] = decodeFloat162(src[48]); + dst[59] = decodeFloat162(src[49]); + dst[60] = decodeFloat162(src[57]); + dst[61] = decodeFloat162(src[58]); + dst[62] = decodeFloat162(src[62]); + dst[63] = decodeFloat162(src[63]); + } + function dctInverse(data2) { + const a2 = 0.5 * Math.cos(3.14159 / 4); + const b3 = 0.5 * Math.cos(3.14159 / 16); + const c2 = 0.5 * Math.cos(3.14159 / 8); + const d = 0.5 * Math.cos(3 * 3.14159 / 16); + const e = 0.5 * Math.cos(5 * 3.14159 / 16); + const f = 0.5 * Math.cos(3 * 3.14159 / 8); + const g2 = 0.5 * Math.cos(7 * 3.14159 / 16); + const alpha = new Array(4); + const beta = new Array(4); + const theta = new Array(4); + const gamma = new Array(4); + for (let row = 0; row < 8; ++row) { + const rowPtr = row * 8; + alpha[0] = c2 * data2[rowPtr + 2]; + alpha[1] = f * data2[rowPtr + 2]; + alpha[2] = c2 * data2[rowPtr + 6]; + alpha[3] = f * data2[rowPtr + 6]; + beta[0] = b3 * data2[rowPtr + 1] + d * data2[rowPtr + 3] + e * data2[rowPtr + 5] + g2 * data2[rowPtr + 7]; + beta[1] = d * data2[rowPtr + 1] - g2 * data2[rowPtr + 3] - b3 * data2[rowPtr + 5] - e * data2[rowPtr + 7]; + beta[2] = e * data2[rowPtr + 1] - b3 * data2[rowPtr + 3] + g2 * data2[rowPtr + 5] + d * data2[rowPtr + 7]; + beta[3] = g2 * data2[rowPtr + 1] - e * data2[rowPtr + 3] + d * data2[rowPtr + 5] - b3 * data2[rowPtr + 7]; + theta[0] = a2 * (data2[rowPtr + 0] + data2[rowPtr + 4]); + theta[3] = a2 * (data2[rowPtr + 0] - data2[rowPtr + 4]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data2[rowPtr + 0] = gamma[0] + beta[0]; + data2[rowPtr + 1] = gamma[1] + beta[1]; + data2[rowPtr + 2] = gamma[2] + beta[2]; + data2[rowPtr + 3] = gamma[3] + beta[3]; + data2[rowPtr + 4] = gamma[3] - beta[3]; + data2[rowPtr + 5] = gamma[2] - beta[2]; + data2[rowPtr + 6] = gamma[1] - beta[1]; + data2[rowPtr + 7] = gamma[0] - beta[0]; + } + for (let column = 0; column < 8; ++column) { + alpha[0] = c2 * data2[16 + column]; + alpha[1] = f * data2[16 + column]; + alpha[2] = c2 * data2[48 + column]; + alpha[3] = f * data2[48 + column]; + beta[0] = b3 * data2[8 + column] + d * data2[24 + column] + e * data2[40 + column] + g2 * data2[56 + column]; + beta[1] = d * data2[8 + column] - g2 * data2[24 + column] - b3 * data2[40 + column] - e * data2[56 + column]; + beta[2] = e * data2[8 + column] - b3 * data2[24 + column] + g2 * data2[40 + column] + d * data2[56 + column]; + beta[3] = g2 * data2[8 + column] - e * data2[24 + column] + d * data2[40 + column] - b3 * data2[56 + column]; + theta[0] = a2 * (data2[column] + data2[32 + column]); + theta[3] = a2 * (data2[column] - data2[32 + column]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data2[0 + column] = gamma[0] + beta[0]; + data2[8 + column] = gamma[1] + beta[1]; + data2[16 + column] = gamma[2] + beta[2]; + data2[24 + column] = gamma[3] + beta[3]; + data2[32 + column] = gamma[3] - beta[3]; + data2[40 + column] = gamma[2] - beta[2]; + data2[48 + column] = gamma[1] - beta[1]; + data2[56 + column] = gamma[0] - beta[0]; + } + } + function csc709Inverse(data2) { + for (let i = 0; i < 64; ++i) { + const y2 = data2[0][i]; + const cb = data2[1][i]; + const cr = data2[2][i]; + data2[0][i] = y2 + 1.5747 * cr; + data2[1][i] = y2 - 0.1873 * cb - 0.4682 * cr; + data2[2][i] = y2 + 1.8556 * cb; + } + } + function convertToHalf(src, dst, idx) { + for (let i = 0; i < 64; ++i) { + dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i])); + } + } + function toLinear(float) { + if (float <= 1) { + return Math.sign(float) * Math.pow(Math.abs(float), 2.2); + } else { + return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1); + } + } + function uncompressRAW(info) { + return new DataView(info.array.buffer, info.offset.value, info.size); + } + function uncompressRLE(info) { + const compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = new Uint8Array(decodeRunLength(compressed)); + const tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressZIP(info) { + const compressed = info.array.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = unzlibSync(compressed); + const tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressPIZ(info) { + const inDataView = info.viewer; + const inOffset = { value: info.offset.value }; + const outBuffer = new Uint16Array(info.columns * info.lines * (info.inputChannels.length * info.type)); + const bitmap = new Uint8Array(BITMAP_SIZE); + let outBufferEnd = 0; + const pizChannelData = new Array(info.inputChannels.length); + for (let i = 0, il = info.inputChannels.length; i < il; i++) { + pizChannelData[i] = {}; + pizChannelData[i]["start"] = outBufferEnd; + pizChannelData[i]["end"] = pizChannelData[i]["start"]; + pizChannelData[i]["nx"] = info.columns; + pizChannelData[i]["ny"] = info.lines; + pizChannelData[i]["size"] = info.type; + outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size; + } + const minNonZero = parseUint16(inDataView, inOffset); + const maxNonZero = parseUint16(inDataView, inOffset); + if (maxNonZero >= BITMAP_SIZE) { + throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE"); + } + if (minNonZero <= maxNonZero) { + for (let i = 0; i < maxNonZero - minNonZero + 1; i++) { + bitmap[i + minNonZero] = parseUint8(inDataView, inOffset); + } + } + const lut = new Uint16Array(USHORT_RANGE); + const maxValue = reverseLutFromBitmap(bitmap, lut); + const length2 = parseUint32(inDataView, inOffset); + hufUncompress(info.array, inDataView, inOffset, length2, outBuffer, outBufferEnd); + for (let i = 0; i < info.inputChannels.length; ++i) { + const cd = pizChannelData[i]; + for (let j = 0; j < pizChannelData[i].size; ++j) { + wav2Decode( + outBuffer, + cd.start + j, + cd.nx, + cd.size, + cd.ny, + cd.nx * cd.size, + maxValue + ); + } + } + applyLut(lut, outBuffer, outBufferEnd); + let tmpOffset = 0; + const tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength); + for (let y2 = 0; y2 < info.lines; y2++) { + for (let c2 = 0; c2 < info.inputChannels.length; c2++) { + const cd = pizChannelData[c2]; + const n2 = cd.nx * cd.size; + const cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n2 * INT16_SIZE); + tmpBuffer.set(cp, tmpOffset); + tmpOffset += n2 * INT16_SIZE; + cd.end += n2; + } + } + return new DataView(tmpBuffer.buffer); + } + function uncompressPXR(info) { + const compressed = info.array.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = unzlibSync(compressed); + const byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes; + const tmpBuffer = new ArrayBuffer(byteSize); + const viewer = new DataView(tmpBuffer); + let tmpBufferEnd = 0; + let writePtr = 0; + const ptr = new Array(4); + for (let y2 = 0; y2 < info.lines; y2++) { + for (let c2 = 0; c2 < info.inputChannels.length; c2++) { + let pixel = 0; + const type = info.inputChannels[c2].pixelType; + switch (type) { + case 1: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.columns; + tmpBufferEnd = ptr[1] + info.columns; + for (let j = 0; j < info.columns; ++j) { + const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++]; + pixel += diff; + viewer.setUint16(writePtr, pixel, true); + writePtr += 2; + } + break; + case 2: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.columns; + ptr[2] = ptr[1] + info.columns; + tmpBufferEnd = ptr[2] + info.columns; + for (let j = 0; j < info.columns; ++j) { + const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8; + pixel += diff; + viewer.setUint32(writePtr, pixel, true); + writePtr += 4; + } + break; + } + } + } + return viewer; + } + function uncompressDWA(info) { + const inDataView = info.viewer; + const inOffset = { value: info.offset.value }; + const outBuffer = new Uint8Array(info.columns * info.lines * (info.inputChannels.length * info.type * INT16_SIZE)); + const dwaHeader = { + version: parseInt64(inDataView, inOffset), + unknownUncompressedSize: parseInt64(inDataView, inOffset), + unknownCompressedSize: parseInt64(inDataView, inOffset), + acCompressedSize: parseInt64(inDataView, inOffset), + dcCompressedSize: parseInt64(inDataView, inOffset), + rleCompressedSize: parseInt64(inDataView, inOffset), + rleUncompressedSize: parseInt64(inDataView, inOffset), + rleRawSize: parseInt64(inDataView, inOffset), + totalAcUncompressedCount: parseInt64(inDataView, inOffset), + totalDcUncompressedCount: parseInt64(inDataView, inOffset), + acCompression: parseInt64(inDataView, inOffset) + }; + if (dwaHeader.version < 2) + throw new Error("EXRLoader.parse: " + EXRHeader.compression + " version " + dwaHeader.version + " is unsupported"); + const channelRules = new Array(); + let ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE; + while (ruleSize > 0) { + const name2 = parseNullTerminatedString(inDataView.buffer, inOffset); + const value2 = parseUint8(inDataView, inOffset); + const compression = value2 >> 2 & 3; + const csc = (value2 >> 4) - 1; + const index2 = new Int8Array([csc])[0]; + const type = parseUint8(inDataView, inOffset); + channelRules.push({ + name: name2, + index: index2, + type, + compression + }); + ruleSize -= name2.length + 3; + } + const channels = EXRHeader.channels; + const channelData = new Array(info.inputChannels.length); + for (let i = 0; i < info.inputChannels.length; ++i) { + const cd = channelData[i] = {}; + const channel = channels[i]; + cd.name = channel.name; + cd.compression = UNKNOWN; + cd.decoded = false; + cd.type = channel.pixelType; + cd.pLinear = channel.pLinear; + cd.width = info.columns; + cd.height = info.lines; + } + const cscSet = { + idx: new Array(3) + }; + for (let offset2 = 0; offset2 < info.inputChannels.length; ++offset2) { + const cd = channelData[offset2]; + for (let i = 0; i < channelRules.length; ++i) { + const rule = channelRules[i]; + if (cd.name == rule.name) { + cd.compression = rule.compression; + if (rule.index >= 0) { + cscSet.idx[rule.index] = offset2; + } + cd.offset = offset2; + } + } + } + let acBuffer, dcBuffer, rleBuffer; + if (dwaHeader.acCompressedSize > 0) { + switch (dwaHeader.acCompression) { + case STATIC_HUFFMAN: + acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount); + hufUncompress(info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount); + break; + case DEFLATE: + const compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount); + const data2 = unzlibSync(compressed); + acBuffer = new Uint16Array(data2.buffer); + inOffset.value += dwaHeader.totalAcUncompressedCount; + break; + } + } + if (dwaHeader.dcCompressedSize > 0) { + const zlibInfo = { + array: info.array, + offset: inOffset, + size: dwaHeader.dcCompressedSize + }; + dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer); + inOffset.value += dwaHeader.dcCompressedSize; + } + if (dwaHeader.rleRawSize > 0) { + const compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize); + const data2 = unzlibSync(compressed); + rleBuffer = decodeRunLength(data2.buffer); + inOffset.value += dwaHeader.rleCompressedSize; + } + let outBufferEnd = 0; + const rowOffsets = new Array(channelData.length); + for (let i = 0; i < rowOffsets.length; ++i) { + rowOffsets[i] = new Array(); + } + for (let y2 = 0; y2 < info.lines; ++y2) { + for (let chan = 0; chan < channelData.length; ++chan) { + rowOffsets[chan].push(outBufferEnd); + outBufferEnd += channelData[chan].width * info.type * INT16_SIZE; + } + } + lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer); + for (let i = 0; i < channelData.length; ++i) { + const cd = channelData[i]; + if (cd.decoded) continue; + switch (cd.compression) { + case RLE: + let row = 0; + let rleOffset = 0; + for (let y2 = 0; y2 < info.lines; ++y2) { + let rowOffsetBytes = rowOffsets[i][row]; + for (let x2 = 0; x2 < cd.width; ++x2) { + for (let byte = 0; byte < INT16_SIZE * cd.type; ++byte) { + outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height]; + } + rleOffset++; + } + row++; + } + break; + case LOSSY_DCT: + default: + throw new Error("EXRLoader.parse: unsupported channel compression"); + } + } + return new DataView(outBuffer.buffer); + } + function parseNullTerminatedString(buffer2, offset2) { + const uintBuffer = new Uint8Array(buffer2); + let endOffset = 0; + while (uintBuffer[offset2.value + endOffset] != 0) { + endOffset += 1; + } + const stringValue = new TextDecoder().decode( + uintBuffer.slice(offset2.value, offset2.value + endOffset) + ); + offset2.value = offset2.value + endOffset + 1; + return stringValue; + } + function parseFixedLengthString(buffer2, offset2, size2) { + const stringValue = new TextDecoder().decode( + new Uint8Array(buffer2).slice(offset2.value, offset2.value + size2) + ); + offset2.value = offset2.value + size2; + return stringValue; + } + function parseRational(dataView, offset2) { + const x2 = parseInt32(dataView, offset2); + const y2 = parseUint32(dataView, offset2); + return [x2, y2]; + } + function parseTimecode(dataView, offset2) { + const x2 = parseUint32(dataView, offset2); + const y2 = parseUint32(dataView, offset2); + return [x2, y2]; + } + function parseInt32(dataView, offset2) { + const Int32 = dataView.getInt32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Int32; + } + function parseUint32(dataView, offset2) { + const Uint32 = dataView.getUint32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Uint32; + } + function parseUint8Array(uInt8Array2, offset2) { + const Uint8 = uInt8Array2[offset2.value]; + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + function parseUint8(dataView, offset2) { + const Uint8 = dataView.getUint8(offset2.value); + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + const parseInt64 = function(dataView, offset2) { + let int; + if ("getBigInt64" in DataView.prototype) { + int = Number(dataView.getBigInt64(offset2.value, true)); + } else { + int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32); + } + offset2.value += ULONG_SIZE; + return int; + }; + function parseFloat32(dataView, offset2) { + const float = dataView.getFloat32(offset2.value, true); + offset2.value += FLOAT32_SIZE; + return float; + } + function decodeFloat32(dataView, offset2) { + return DataUtils.toHalfFloat(parseFloat32(dataView, offset2)); + } + function decodeFloat162(binary) { + const exponent = (binary & 31744) >> 10, fraction = binary & 1023; + return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); + } + function parseUint16(dataView, offset2) { + const Uint16 = dataView.getUint16(offset2.value, true); + offset2.value += INT16_SIZE; + return Uint16; + } + function parseFloat16(buffer2, offset2) { + return decodeFloat162(parseUint16(buffer2, offset2)); + } + function parseChlist(dataView, buffer2, offset2, size2) { + const startOffset = offset2.value; + const channels = []; + while (offset2.value < startOffset + size2 - 1) { + const name2 = parseNullTerminatedString(buffer2, offset2); + const pixelType = parseInt32(dataView, offset2); + const pLinear = parseUint8(dataView, offset2); + offset2.value += 3; + const xSampling = parseInt32(dataView, offset2); + const ySampling = parseInt32(dataView, offset2); + channels.push({ + name: name2, + pixelType, + pLinear, + xSampling, + ySampling + }); + } + offset2.value += 1; + return channels; + } + function parseChromaticities(dataView, offset2) { + const redX = parseFloat32(dataView, offset2); + const redY = parseFloat32(dataView, offset2); + const greenX = parseFloat32(dataView, offset2); + const greenY = parseFloat32(dataView, offset2); + const blueX = parseFloat32(dataView, offset2); + const blueY = parseFloat32(dataView, offset2); + const whiteX = parseFloat32(dataView, offset2); + const whiteY = parseFloat32(dataView, offset2); + return { redX, redY, greenX, greenY, blueX, blueY, whiteX, whiteY }; + } + function parseCompression(dataView, offset2) { + const compressionCodes = [ + "NO_COMPRESSION", + "RLE_COMPRESSION", + "ZIPS_COMPRESSION", + "ZIP_COMPRESSION", + "PIZ_COMPRESSION", + "PXR24_COMPRESSION", + "B44_COMPRESSION", + "B44A_COMPRESSION", + "DWAA_COMPRESSION", + "DWAB_COMPRESSION" + ]; + const compression = parseUint8(dataView, offset2); + return compressionCodes[compression]; + } + function parseBox2i(dataView, offset2) { + const xMin = parseInt32(dataView, offset2); + const yMin = parseInt32(dataView, offset2); + const xMax = parseInt32(dataView, offset2); + const yMax = parseInt32(dataView, offset2); + return { xMin, yMin, xMax, yMax }; + } + function parseLineOrder(dataView, offset2) { + const lineOrders = [ + "INCREASING_Y", + "DECREASING_Y", + "RANDOM_Y" + ]; + const lineOrder = parseUint8(dataView, offset2); + return lineOrders[lineOrder]; + } + function parseEnvmap(dataView, offset2) { + const envmaps = [ + "ENVMAP_LATLONG", + "ENVMAP_CUBE" + ]; + const envmap = parseUint8(dataView, offset2); + return envmaps[envmap]; + } + function parseTiledesc(dataView, offset2) { + const levelModes = [ + "ONE_LEVEL", + "MIPMAP_LEVELS", + "RIPMAP_LEVELS" + ]; + const roundingModes = [ + "ROUND_DOWN", + "ROUND_UP" + ]; + const xSize = parseUint32(dataView, offset2); + const ySize = parseUint32(dataView, offset2); + const modes = parseUint8(dataView, offset2); + return { + xSize, + ySize, + levelMode: levelModes[modes & 15], + roundingMode: roundingModes[modes >> 4] + }; + } + function parseV2f(dataView, offset2) { + const x2 = parseFloat32(dataView, offset2); + const y2 = parseFloat32(dataView, offset2); + return [x2, y2]; + } + function parseV3f(dataView, offset2) { + const x2 = parseFloat32(dataView, offset2); + const y2 = parseFloat32(dataView, offset2); + const z = parseFloat32(dataView, offset2); + return [x2, y2, z]; + } + function parseValue(dataView, buffer2, offset2, type, size2) { + if (type === "string" || type === "stringvector" || type === "iccProfile") { + return parseFixedLengthString(buffer2, offset2, size2); + } else if (type === "chlist") { + return parseChlist(dataView, buffer2, offset2, size2); + } else if (type === "chromaticities") { + return parseChromaticities(dataView, offset2); + } else if (type === "compression") { + return parseCompression(dataView, offset2); + } else if (type === "box2i") { + return parseBox2i(dataView, offset2); + } else if (type === "envmap") { + return parseEnvmap(dataView, offset2); + } else if (type === "tiledesc") { + return parseTiledesc(dataView, offset2); + } else if (type === "lineOrder") { + return parseLineOrder(dataView, offset2); + } else if (type === "float") { + return parseFloat32(dataView, offset2); + } else if (type === "v2f") { + return parseV2f(dataView, offset2); + } else if (type === "v3f") { + return parseV3f(dataView, offset2); + } else if (type === "int") { + return parseInt32(dataView, offset2); + } else if (type === "rational") { + return parseRational(dataView, offset2); + } else if (type === "timecode") { + return parseTimecode(dataView, offset2); + } else if (type === "preview") { + offset2.value += size2; + return "skipped"; + } else { + offset2.value += size2; + return void 0; + } + } + function roundLog2(x2, mode) { + const log22 = Math.log2(x2); + return mode == "ROUND_DOWN" ? Math.floor(log22) : Math.ceil(log22); + } + function calculateTileLevels(tiledesc, w, h) { + let num = 0; + switch (tiledesc.levelMode) { + case "ONE_LEVEL": + num = 1; + break; + case "MIPMAP_LEVELS": + num = roundLog2(Math.max(w, h), tiledesc.roundingMode) + 1; + break; + case "RIPMAP_LEVELS": + throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported."); + } + return num; + } + function calculateTiles(count, dataSize, size2, roundingMode) { + const tiles = new Array(count); + for (let i = 0; i < count; i++) { + const b3 = 1 << i; + let s = dataSize / b3 | 0; + if (roundingMode == "ROUND_UP" && s * b3 < dataSize) s += 1; + const l2 = Math.max(s, 1); + tiles[i] = (l2 + size2 - 1) / size2 | 0; + } + return tiles; + } + function parseTiles() { + const EXRDecoder2 = this; + const offset2 = EXRDecoder2.offset; + const tmpOffset = { value: 0 }; + for (let tile = 0; tile < EXRDecoder2.tileCount; tile++) { + const tileX = parseInt32(EXRDecoder2.viewer, offset2); + const tileY = parseInt32(EXRDecoder2.viewer, offset2); + offset2.value += 8; + EXRDecoder2.size = parseUint32(EXRDecoder2.viewer, offset2); + const startX = tileX * EXRDecoder2.blockWidth; + const startY = tileY * EXRDecoder2.blockHeight; + EXRDecoder2.columns = startX + EXRDecoder2.blockWidth > EXRDecoder2.width ? EXRDecoder2.width - startX : EXRDecoder2.blockWidth; + EXRDecoder2.lines = startY + EXRDecoder2.blockHeight > EXRDecoder2.height ? EXRDecoder2.height - startY : EXRDecoder2.blockHeight; + const bytesBlockLine = EXRDecoder2.columns * EXRDecoder2.totalBytes; + const isCompressed = EXRDecoder2.size < EXRDecoder2.lines * bytesBlockLine; + const viewer = isCompressed ? EXRDecoder2.uncompress(EXRDecoder2) : uncompressRAW(EXRDecoder2); + offset2.value += EXRDecoder2.size; + for (let line2 = 0; line2 < EXRDecoder2.lines; line2++) { + const lineOffset = line2 * EXRDecoder2.columns * EXRDecoder2.totalBytes; + for (let channelID = 0; channelID < EXRDecoder2.inputChannels.length; channelID++) { + const name2 = EXRHeader.channels[channelID].name; + const lOff = EXRDecoder2.channelByteOffsets[name2] * EXRDecoder2.columns; + const cOff = EXRDecoder2.decodeChannels[name2]; + if (cOff === void 0) continue; + tmpOffset.value = lineOffset + lOff; + const outLineOffset = (EXRDecoder2.height - (1 + startY + line2)) * EXRDecoder2.outLineWidth; + for (let x2 = 0; x2 < EXRDecoder2.columns; x2++) { + const outIndex = outLineOffset + (x2 + startX) * EXRDecoder2.outputChannels + cOff; + EXRDecoder2.byteArray[outIndex] = EXRDecoder2.getter(viewer, tmpOffset); + } + } + } + } + } + function parseScanline() { + const EXRDecoder2 = this; + const offset2 = EXRDecoder2.offset; + const tmpOffset = { value: 0 }; + for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder2.height / EXRDecoder2.blockHeight; scanlineBlockIdx++) { + const line2 = parseInt32(EXRDecoder2.viewer, offset2) - EXRHeader.dataWindow.yMin; + EXRDecoder2.size = parseUint32(EXRDecoder2.viewer, offset2); + EXRDecoder2.lines = line2 + EXRDecoder2.blockHeight > EXRDecoder2.height ? EXRDecoder2.height - line2 : EXRDecoder2.blockHeight; + const bytesPerLine = EXRDecoder2.columns * EXRDecoder2.totalBytes; + const isCompressed = EXRDecoder2.size < EXRDecoder2.lines * bytesPerLine; + const viewer = isCompressed ? EXRDecoder2.uncompress(EXRDecoder2) : uncompressRAW(EXRDecoder2); + offset2.value += EXRDecoder2.size; + for (let line_y = 0; line_y < EXRDecoder2.blockHeight; line_y++) { + const scan_y = scanlineBlockIdx * EXRDecoder2.blockHeight; + const true_y = line_y + EXRDecoder2.scanOrder(scan_y); + if (true_y >= EXRDecoder2.height) continue; + const lineOffset = line_y * bytesPerLine; + const outLineOffset = (EXRDecoder2.height - 1 - true_y) * EXRDecoder2.outLineWidth; + for (let channelID = 0; channelID < EXRDecoder2.inputChannels.length; channelID++) { + const name2 = EXRHeader.channels[channelID].name; + const lOff = EXRDecoder2.channelByteOffsets[name2] * EXRDecoder2.columns; + const cOff = EXRDecoder2.decodeChannels[name2]; + if (cOff === void 0) continue; + tmpOffset.value = lineOffset + lOff; + for (let x2 = 0; x2 < EXRDecoder2.columns; x2++) { + const outIndex = outLineOffset + x2 * EXRDecoder2.outputChannels + cOff; + EXRDecoder2.byteArray[outIndex] = EXRDecoder2.getter(viewer, tmpOffset); + } + } + } + } + } + function parseHeader(dataView, buffer2, offset2) { + const EXRHeader2 = {}; + if (dataView.getUint32(0, true) != 20000630) { + throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format."); + } + EXRHeader2.version = dataView.getUint8(4); + const spec = dataView.getUint8(5); + EXRHeader2.spec = { + singleTile: !!(spec & 2), + longName: !!(spec & 4), + deepFormat: !!(spec & 8), + multiPart: !!(spec & 16) + }; + offset2.value = 8; + let keepReading = true; + while (keepReading) { + const attributeName = parseNullTerminatedString(buffer2, offset2); + if (attributeName == 0) { + keepReading = false; + } else { + const attributeType = parseNullTerminatedString(buffer2, offset2); + const attributeSize = parseUint32(dataView, offset2); + const attributeValue = parseValue(dataView, buffer2, offset2, attributeType, attributeSize); + if (attributeValue === void 0) { + console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${attributeType}'.`); + } else { + EXRHeader2[attributeName] = attributeValue; + } + } + } + if ((spec & ~6) != 0) { + console.error("THREE.EXRHeader:", EXRHeader2); + throw new Error("THREE.EXRLoader: Provided file is currently unsupported."); + } + return EXRHeader2; + } + function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) { + const EXRDecoder2 = { + size: 0, + viewer: dataView, + array: uInt8Array2, + offset: offset2, + width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1, + height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1, + inputChannels: EXRHeader2.channels, + channelByteOffsets: {}, + scanOrder: null, + totalBytes: null, + columns: null, + lines: null, + type: null, + uncompress: null, + getter: null, + format: null, + colorSpace: LinearSRGBColorSpace + }; + switch (EXRHeader2.compression) { + case "NO_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressRAW; + break; + case "RLE_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressRLE; + break; + case "ZIPS_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "ZIP_COMPRESSION": + EXRDecoder2.blockHeight = 16; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "PIZ_COMPRESSION": + EXRDecoder2.blockHeight = 32; + EXRDecoder2.uncompress = uncompressPIZ; + break; + case "PXR24_COMPRESSION": + EXRDecoder2.blockHeight = 16; + EXRDecoder2.uncompress = uncompressPXR; + break; + case "DWAA_COMPRESSION": + EXRDecoder2.blockHeight = 32; + EXRDecoder2.uncompress = uncompressDWA; + break; + case "DWAB_COMPRESSION": + EXRDecoder2.blockHeight = 256; + EXRDecoder2.uncompress = uncompressDWA; + break; + default: + throw new Error("EXRLoader.parse: " + EXRHeader2.compression + " is unsupported"); + } + const channels = {}; + for (const channel of EXRHeader2.channels) { + switch (channel.name) { + case "Y": + case "R": + case "G": + case "B": + case "A": + channels[channel.name] = true; + EXRDecoder2.type = channel.pixelType; + } + } + let fillAlpha = false; + if (channels.R && channels.G && channels.B) { + fillAlpha = !channels.A; + EXRDecoder2.outputChannels = 4; + EXRDecoder2.decodeChannels = { R: 0, G: 1, B: 2, A: 3 }; + } else if (channels.Y) { + EXRDecoder2.outputChannels = 1; + EXRDecoder2.decodeChannels = { Y: 0 }; + } else { + throw new Error("EXRLoader.parse: file contains unsupported data channels."); + } + if (EXRDecoder2.type == 1) { + switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat16; + break; + case HalfFloatType: + EXRDecoder2.getter = parseUint16; + break; + } + } else if (EXRDecoder2.type == 2) { + switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat32; + break; + case HalfFloatType: + EXRDecoder2.getter = decodeFloat32; + } + } else { + throw new Error("EXRLoader.parse: unsupported pixelType " + EXRDecoder2.type + " for " + EXRHeader2.compression + "."); + } + EXRDecoder2.columns = EXRDecoder2.width; + const size2 = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels; + switch (outputType) { + case FloatType: + EXRDecoder2.byteArray = new Float32Array(size2); + if (fillAlpha) + EXRDecoder2.byteArray.fill(1, 0, size2); + break; + case HalfFloatType: + EXRDecoder2.byteArray = new Uint16Array(size2); + if (fillAlpha) + EXRDecoder2.byteArray.fill(15360, 0, size2); + break; + default: + console.error("THREE.EXRLoader: unsupported type: ", outputType); + break; + } + let byteOffset = 0; + for (const channel of EXRHeader2.channels) { + if (EXRDecoder2.decodeChannels[channel.name] !== void 0) { + EXRDecoder2.channelByteOffsets[channel.name] = byteOffset; + } + byteOffset += channel.pixelType * 2; + } + EXRDecoder2.totalBytes = byteOffset; + EXRDecoder2.outLineWidth = EXRDecoder2.width * EXRDecoder2.outputChannels; + if (EXRHeader2.lineOrder === "INCREASING_Y") { + EXRDecoder2.scanOrder = (y2) => y2; + } else { + EXRDecoder2.scanOrder = (y2) => EXRDecoder2.height - 1 - y2; + } + if (EXRDecoder2.outputChannels == 4) { + EXRDecoder2.format = RGBAFormat; + EXRDecoder2.colorSpace = LinearSRGBColorSpace; + } else { + EXRDecoder2.format = RedFormat; + EXRDecoder2.colorSpace = NoColorSpace; + } + if (EXRHeader2.spec.singleTile) { + EXRDecoder2.blockHeight = EXRHeader2.tiles.ySize; + EXRDecoder2.blockWidth = EXRHeader2.tiles.xSize; + const numXLevels = calculateTileLevels(EXRHeader2.tiles, EXRDecoder2.width, EXRDecoder2.height); + const numXTiles = calculateTiles(numXLevels, EXRDecoder2.width, EXRHeader2.tiles.xSize, EXRHeader2.tiles.roundingMode); + const numYTiles = calculateTiles(numXLevels, EXRDecoder2.height, EXRHeader2.tiles.ySize, EXRHeader2.tiles.roundingMode); + EXRDecoder2.tileCount = numXTiles[0] * numYTiles[0]; + for (let l2 = 0; l2 < numXLevels; l2++) + for (let y2 = 0; y2 < numYTiles[l2]; y2++) + for (let x2 = 0; x2 < numXTiles[l2]; x2++) + parseInt64(dataView, offset2); + EXRDecoder2.decode = parseTiles.bind(EXRDecoder2); + } else { + EXRDecoder2.blockWidth = EXRDecoder2.width; + const blockCount = Math.ceil(EXRDecoder2.height / EXRDecoder2.blockHeight); + for (let i = 0; i < blockCount; i++) + parseInt64(dataView, offset2); + EXRDecoder2.decode = parseScanline.bind(EXRDecoder2); + } + return EXRDecoder2; + } + const offset = { value: 0 }; + const bufferDataView = new DataView(buffer); + const uInt8Array = new Uint8Array(buffer); + const EXRHeader = parseHeader(bufferDataView, buffer, offset); + const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type); + EXRDecoder.decode(); + return { + header: EXRHeader, + width: EXRDecoder.width, + height: EXRDecoder.height, + data: EXRDecoder.byteArray, + format: EXRDecoder.format, + colorSpace: EXRDecoder.colorSpace, + type: this.type + }; + } + setDataType(value2) { + this.type = value2; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + texture.colorSpace = texData.colorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = false; + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; + +// node_modules/three/examples/jsm/loaders/3DMLoader.js +var _taskCache = /* @__PURE__ */ new WeakMap(); +var Rhino3dmLoader = class extends Loader { + constructor(manager) { + super(manager); + this.libraryPath = ""; + this.libraryPending = null; + this.libraryBinary = null; + this.libraryConfig = {}; + this.url = ""; + this.workerLimit = 4; + this.workerPool = []; + this.workerNextTaskID = 1; + this.workerSourceURL = ""; + this.workerConfig = {}; + this.materials = []; + this.warnings = []; + } + setLibraryPath(path) { + this.libraryPath = path; + return this; + } + setWorkerLimit(workerLimit) { + this.workerLimit = workerLimit; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + this.url = url; + loader.load(url, (buffer) => { + if (_taskCache.has(buffer)) { + const cachedTask = _taskCache.get(buffer); + return cachedTask.promise.then(onLoad).catch(onError); + } + this.decodeObjects(buffer, url).then((result) => { + result.userData.warnings = this.warnings; + onLoad(result); + }).catch((e) => onError(e)); + }, onProgress, onError); + } + debug() { + console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); + } + decodeObjects(buffer, url) { + let worker; + let taskID; + const taskCost = buffer.byteLength; + const objectPending = this._getWorker(taskCost).then((_worker) => { + worker = _worker; + taskID = this.workerNextTaskID++; + return new Promise((resolve, reject2) => { + worker._callbacks[taskID] = { resolve, reject: reject2 }; + worker.postMessage({ type: "decode", id: taskID, buffer }, [buffer]); + }); + }).then((message) => this._createGeometry(message.data)).catch((e) => { + throw e; + }); + objectPending.catch(() => true).then(() => { + if (worker && taskID) { + this._releaseTask(worker, taskID); + } + }); + _taskCache.set(buffer, { + url, + promise: objectPending + }); + return objectPending; + } + parse(data2, onLoad, onError) { + this.decodeObjects(data2, "").then((result) => { + result.userData.warnings = this.warnings; + onLoad(result); + }).catch((e) => onError(e)); + } + _compareMaterials(material) { + const mat = {}; + mat.name = material.name; + mat.color = {}; + mat.color.r = material.color.r; + mat.color.g = material.color.g; + mat.color.b = material.color.b; + mat.type = material.type; + mat.vertexColors = material.vertexColors; + const json = JSON.stringify(mat); + for (let i = 0; i < this.materials.length; i++) { + const m = this.materials[i]; + const _mat = {}; + _mat.name = m.name; + _mat.color = {}; + _mat.color.r = m.color.r; + _mat.color.g = m.color.g; + _mat.color.b = m.color.b; + _mat.type = m.type; + _mat.vertexColors = m.vertexColors; + if (JSON.stringify(_mat) === json) { + return m; + } + } + this.materials.push(material); + return material; + } + _createMaterial(material, renderEnvironment) { + if (material === void 0) { + return new MeshStandardMaterial({ + color: new Color(1, 1, 1), + metalness: 0.8, + name: Loader.DEFAULT_MATERIAL_NAME, + side: DoubleSide + }); + } + const mat = new MeshPhysicalMaterial({ + color: new Color(material.diffuseColor.r / 255, material.diffuseColor.g / 255, material.diffuseColor.b / 255), + emissive: new Color(material.emissionColor.r, material.emissionColor.g, material.emissionColor.b), + flatShading: material.disableLighting, + ior: material.indexOfRefraction, + name: material.name, + reflectivity: material.reflectivity, + opacity: 1 - material.transparency, + side: DoubleSide, + specularColor: material.specularColor, + transparent: material.transparency > 0 ? true : false + }); + mat.userData.id = material.id; + if (material.pbrSupported) { + const pbr = material.pbr; + mat.anisotropy = pbr.anisotropic; + mat.anisotropyRotation = pbr.anisotropicRotation; + mat.color = new Color(pbr.baseColor.r, pbr.baseColor.g, pbr.baseColor.b); + mat.clearcoat = pbr.clearcoat; + mat.clearcoatRoughness = pbr.clearcoatRoughness; + mat.metalness = pbr.metallic; + mat.transmission = 1 - pbr.opacity; + mat.roughness = pbr.roughness; + mat.sheen = pbr.sheen; + mat.specularIntensity = pbr.specular; + mat.thickness = pbr.subsurface; + } + if (material.pbrSupported && material.pbr.opacity === 0 && material.transparency === 1) { + mat.opacity = 0.2; + mat.transmission = 1; + } + const textureLoader = new TextureLoader(); + for (let i = 0; i < material.textures.length; i++) { + const texture = material.textures[i]; + if (texture.image !== null) { + const map2 = textureLoader.load(texture.image); + switch (texture.type) { + case "Bump": + mat.bumpMap = map2; + break; + case "Diffuse": + mat.map = map2; + break; + case "Emap": + mat.envMap = map2; + break; + case "Opacity": + mat.transmissionMap = map2; + break; + case "Transparency": + mat.alphaMap = map2; + mat.transparent = true; + break; + case "PBR_Alpha": + mat.alphaMap = map2; + mat.transparent = true; + break; + case "PBR_AmbientOcclusion": + mat.aoMap = map2; + break; + case "PBR_Anisotropic": + mat.anisotropyMap = map2; + break; + case "PBR_BaseColor": + mat.map = map2; + break; + case "PBR_Clearcoat": + mat.clearcoatMap = map2; + break; + case "PBR_ClearcoatBump": + mat.clearcoatNormalMap = map2; + break; + case "PBR_ClearcoatRoughness": + mat.clearcoatRoughnessMap = map2; + break; + case "PBR_Displacement": + mat.displacementMap = map2; + break; + case "PBR_Emission": + mat.emissiveMap = map2; + break; + case "PBR_Metallic": + mat.metalnessMap = map2; + break; + case "PBR_Roughness": + mat.roughnessMap = map2; + break; + case "PBR_Sheen": + mat.sheenColorMap = map2; + break; + case "PBR_Specular": + mat.specularColorMap = map2; + break; + case "PBR_Subsurface": + mat.thicknessMap = map2; + break; + default: + this.warnings.push({ + message: `THREE.3DMLoader: No conversion exists for 3dm ${texture.type}.`, + type: "no conversion" + }); + break; + } + map2.wrapS = texture.wrapU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + map2.wrapT = texture.wrapV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if (texture.repeat) { + map2.repeat.set(texture.repeat[0], texture.repeat[1]); + } + } + } + if (renderEnvironment) { + new EXRLoader().load(renderEnvironment.image, function(texture) { + texture.mapping = THREE.EquirectangularReflectionMapping; + mat.envMap = texture; + }); + } + return mat; + } + _createGeometry(data2) { + const object = new Object3D(); + const instanceDefinitionObjects = []; + const instanceDefinitions = []; + const instanceReferences = []; + object.userData["layers"] = data2.layers; + object.userData["groups"] = data2.groups; + object.userData["settings"] = data2.settings; + object.userData.settings["renderSettings"] = data2.renderSettings; + object.userData["objectType"] = "File3dm"; + object.userData["materials"] = null; + object.name = this.url; + let objects = data2.objects; + const materials = data2.materials; + for (let i = 0; i < objects.length; i++) { + const obj = objects[i]; + const attributes = obj.attributes; + switch (obj.objectType) { + case "InstanceDefinition": + instanceDefinitions.push(obj); + break; + case "InstanceReference": + instanceReferences.push(obj); + break; + default: + let matId = null; + switch (attributes.materialSource.name) { + case "ObjectMaterialSource_MaterialFromLayer": + if (attributes.layerIndex >= 0) { + matId = data2.layers[attributes.layerIndex].renderMaterialIndex; + } + break; + case "ObjectMaterialSource_MaterialFromObject": + if (attributes.materialIndex >= 0) { + matId = attributes.materialIndex; + } + break; + } + let material = null; + if (matId >= 0) { + const rMaterial = materials[matId]; + material = this._createMaterial(rMaterial, data2.renderEnvironment); + } + const _object = this._createObject(obj, material); + if (_object === void 0) { + continue; + } + const layer = data2.layers[attributes.layerIndex]; + _object.visible = layer ? data2.layers[attributes.layerIndex].visible : true; + if (attributes.isInstanceDefinitionObject) { + instanceDefinitionObjects.push(_object); + } else { + object.add(_object); + } + break; + } + } + for (let i = 0; i < instanceDefinitions.length; i++) { + const iDef = instanceDefinitions[i]; + objects = []; + for (let j = 0; j < iDef.attributes.objectIds.length; j++) { + const objId = iDef.attributes.objectIds[j]; + for (let p2 = 0; p2 < instanceDefinitionObjects.length; p2++) { + const idoId = instanceDefinitionObjects[p2].userData.attributes.id; + if (objId === idoId) { + objects.push(instanceDefinitionObjects[p2]); + } + } + } + for (let j = 0; j < instanceReferences.length; j++) { + const iRef = instanceReferences[j]; + if (iRef.geometry.parentIdefId === iDef.attributes.id) { + const iRefObject = new Object3D(); + const xf = iRef.geometry.xform.array; + const matrix3 = new Matrix4(); + matrix3.set(...xf); + iRefObject.applyMatrix4(matrix3); + for (let p2 = 0; p2 < objects.length; p2++) { + iRefObject.add(objects[p2].clone(true)); + } + object.add(iRefObject); + } + } + } + object.userData["materials"] = this.materials; + object.name = ""; + return object; + } + _createObject(obj, mat) { + const loader = new BufferGeometryLoader(); + const attributes = obj.attributes; + let geometry, material, _color5, color; + switch (obj.objectType) { + case "Point": + case "PointSet": + geometry = loader.parse(obj.geometry); + if (geometry.attributes.hasOwnProperty("color")) { + material = new PointsMaterial({ vertexColors: true, sizeAttenuation: false, size: 2 }); + } else { + _color5 = attributes.drawColor; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + material = new PointsMaterial({ color, sizeAttenuation: false, size: 2 }); + } + material = this._compareMaterials(material); + const points = new Points(geometry, material); + points.userData["attributes"] = attributes; + points.userData["objectType"] = obj.objectType; + if (attributes.name) { + points.name = attributes.name; + } + return points; + case "Mesh": + case "Extrusion": + case "SubD": + case "Brep": + if (obj.geometry === null) return; + geometry = loader.parse(obj.geometry); + if (mat === null) { + mat = this._createMaterial(); + } + if (geometry.attributes.hasOwnProperty("color")) { + mat.vertexColors = true; + } + mat = this._compareMaterials(mat); + const mesh = new Mesh(geometry, mat); + mesh.castShadow = attributes.castsShadows; + mesh.receiveShadow = attributes.receivesShadows; + mesh.userData["attributes"] = attributes; + mesh.userData["objectType"] = obj.objectType; + if (attributes.name) { + mesh.name = attributes.name; + } + return mesh; + case "Curve": + geometry = loader.parse(obj.geometry); + _color5 = attributes.drawColor; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + material = new LineBasicMaterial({ color }); + material = this._compareMaterials(material); + const lines = new Line(geometry, material); + lines.userData["attributes"] = attributes; + lines.userData["objectType"] = obj.objectType; + if (attributes.name) { + lines.name = attributes.name; + } + return lines; + case "TextDot": + geometry = obj.geometry; + const ctx = document.createElement("canvas").getContext("2d"); + const font = `${geometry.fontHeight}px ${geometry.fontFace}`; + ctx.font = font; + const width2 = ctx.measureText(geometry.text).width + 10; + const height2 = geometry.fontHeight + 10; + const r = window.devicePixelRatio; + ctx.canvas.width = width2 * r; + ctx.canvas.height = height2 * r; + ctx.canvas.style.width = width2 + "px"; + ctx.canvas.style.height = height2 + "px"; + ctx.setTransform(r, 0, 0, r, 0, 0); + ctx.font = font; + ctx.textBaseline = "middle"; + ctx.textAlign = "center"; + color = attributes.drawColor; + ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`; + ctx.fillRect(0, 0, width2, height2); + ctx.fillStyle = "white"; + ctx.fillText(geometry.text, width2 / 2, height2 / 2); + const texture = new CanvasTexture(ctx.canvas); + texture.minFilter = LinearFilter; + texture.wrapS = ClampToEdgeWrapping; + texture.wrapT = ClampToEdgeWrapping; + material = new SpriteMaterial({ map: texture, depthTest: false }); + const sprite = new Sprite(material); + sprite.position.set(geometry.point[0], geometry.point[1], geometry.point[2]); + sprite.scale.set(width2 / 10, height2 / 10, 1); + sprite.userData["attributes"] = attributes; + sprite.userData["objectType"] = obj.objectType; + if (attributes.name) { + sprite.name = attributes.name; + } + return sprite; + case "Light": + geometry = obj.geometry; + let light; + switch (geometry.lightStyle.name) { + case "LightStyle_WorldPoint": + light = new PointLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldSpot": + light = new SpotLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + light.angle = geometry.spotAngleRadians; + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldRectangular": + light = new RectAreaLight(); + const width3 = Math.abs(geometry.width[2]); + const height3 = Math.abs(geometry.length[0]); + light.position.set(geometry.location[0] - height3 / 2, geometry.location[1], geometry.location[2] - width3 / 2); + light.height = height3; + light.width = width3; + light.lookAt(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + break; + case "LightStyle_WorldDirectional": + light = new DirectionalLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldLinear": + break; + default: + break; + } + if (light) { + light.intensity = geometry.intensity; + _color5 = geometry.diffuse; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + light.color = color; + light.userData["attributes"] = attributes; + light.userData["objectType"] = obj.objectType; + } + return light; + } + } + _initLibrary() { + if (!this.libraryPending) { + const jsLoader = new FileLoader(this.manager); + jsLoader.setPath(this.libraryPath); + const jsContent = new Promise((resolve, reject2) => { + jsLoader.load("rhino3dm.js", resolve, void 0, reject2); + }); + const binaryLoader = new FileLoader(this.manager); + binaryLoader.setPath(this.libraryPath); + binaryLoader.setResponseType("arraybuffer"); + const binaryContent = new Promise((resolve, reject2) => { + binaryLoader.load("rhino3dm.wasm", resolve, void 0, reject2); + }); + this.libraryPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { + this.libraryConfig.wasmBinary = binaryContent2; + const fn = Rhino3dmWorker.toString(); + const body = [ + "/* rhino3dm.js */", + jsContent2, + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + }); + } + return this.libraryPending; + } + _getWorker(taskCost) { + return this._initLibrary().then(() => { + if (this.workerPool.length < this.workerLimit) { + const worker2 = new Worker(this.workerSourceURL); + worker2._callbacks = {}; + worker2._taskCosts = {}; + worker2._taskLoad = 0; + worker2.postMessage({ + type: "init", + libraryConfig: this.libraryConfig + }); + worker2.onmessage = (e) => { + const message = e.data; + switch (message.type) { + case "warning": + this.warnings.push(message.data); + console.warn(message.data); + break; + case "decode": + worker2._callbacks[message.id].resolve(message); + break; + case "error": + worker2._callbacks[message.id].reject(message); + break; + default: + console.error('THREE.Rhino3dmLoader: Unexpected message, "' + message.type + '"'); + } + }; + this.workerPool.push(worker2); + } else { + this.workerPool.sort(function(a2, b3) { + return a2._taskLoad > b3._taskLoad ? -1 : 1; + }); + } + const worker = this.workerPool[this.workerPool.length - 1]; + worker._taskLoad += taskCost; + return worker; + }); + } + _releaseTask(worker, taskID) { + worker._taskLoad -= worker._taskCosts[taskID]; + delete worker._callbacks[taskID]; + delete worker._taskCosts[taskID]; + } + dispose() { + for (let i = 0; i < this.workerPool.length; ++i) { + this.workerPool[i].terminate(); + } + this.workerPool.length = 0; + return this; + } +}; +function Rhino3dmWorker() { + let libraryPending; + let libraryConfig; + let rhino; + let taskID; + onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "init": + libraryConfig = message.libraryConfig; + const wasmBinary = libraryConfig.wasmBinary; + let RhinoModule; + libraryPending = new Promise(function(resolve) { + RhinoModule = { wasmBinary, onRuntimeInitialized: resolve }; + rhino3dm(RhinoModule); + }).then(() => { + rhino = RhinoModule; + }); + break; + case "decode": + taskID = message.id; + const buffer = message.buffer; + libraryPending.then(() => { + try { + const data2 = decodeObjects(rhino, buffer); + self.postMessage({ type: "decode", id: message.id, data: data2 }); + } catch (error) { + self.postMessage({ type: "error", id: message.id, error }); + } + }); + break; + } + }; + function decodeObjects(rhino2, buffer) { + const arr = new Uint8Array(buffer); + const doc = rhino2.File3dm.fromByteArray(arr); + const objects = []; + const materials = []; + const layers = []; + const views = []; + const namedViews = []; + const groups = []; + const strings = []; + const objs = doc.objects(); + const cnt = objs.count; + for (let i = 0; i < cnt; i++) { + const _object = objs.get(i); + const object = extractObjectData(_object, doc); + _object.delete(); + if (object) { + objects.push(object); + } + } + for (let i = 0; i < doc.instanceDefinitions().count; i++) { + const idef = doc.instanceDefinitions().get(i); + const idefAttributes = extractProperties(idef); + idefAttributes.objectIds = idef.getObjectIds(); + objects.push({ geometry: null, attributes: idefAttributes, objectType: "InstanceDefinition" }); + } + const textureTypes = [ + // rhino.TextureType.Bitmap, + rhino2.TextureType.Diffuse, + rhino2.TextureType.Bump, + rhino2.TextureType.Transparency, + rhino2.TextureType.Opacity, + rhino2.TextureType.Emap + ]; + const pbrTextureTypes = [ + rhino2.TextureType.PBR_BaseColor, + rhino2.TextureType.PBR_Subsurface, + rhino2.TextureType.PBR_SubsurfaceScattering, + rhino2.TextureType.PBR_SubsurfaceScatteringRadius, + rhino2.TextureType.PBR_Metallic, + rhino2.TextureType.PBR_Specular, + rhino2.TextureType.PBR_SpecularTint, + rhino2.TextureType.PBR_Roughness, + rhino2.TextureType.PBR_Anisotropic, + rhino2.TextureType.PBR_Anisotropic_Rotation, + rhino2.TextureType.PBR_Sheen, + rhino2.TextureType.PBR_SheenTint, + rhino2.TextureType.PBR_Clearcoat, + rhino2.TextureType.PBR_ClearcoatBump, + rhino2.TextureType.PBR_ClearcoatRoughness, + rhino2.TextureType.PBR_OpacityIor, + rhino2.TextureType.PBR_OpacityRoughness, + rhino2.TextureType.PBR_Emission, + rhino2.TextureType.PBR_AmbientOcclusion, + rhino2.TextureType.PBR_Displacement + ]; + for (let i = 0; i < doc.materials().count; i++) { + const _material = doc.materials().get(i); + const material = extractProperties(_material); + const textures = []; + textures.push(...extractTextures(_material, textureTypes, doc)); + material.pbrSupported = _material.physicallyBased().supported; + if (material.pbrSupported) { + textures.push(...extractTextures(_material, pbrTextureTypes, doc)); + material.pbr = extractProperties(_material.physicallyBased()); + } + material.textures = textures; + materials.push(material); + _material.delete(); + } + for (let i = 0; i < doc.layers().count; i++) { + const _layer = doc.layers().get(i); + const layer = extractProperties(_layer); + layers.push(layer); + _layer.delete(); + } + for (let i = 0; i < doc.views().count; i++) { + const _view = doc.views().get(i); + const view = extractProperties(_view); + views.push(view); + _view.delete(); + } + for (let i = 0; i < doc.namedViews().count; i++) { + const _namedView = doc.namedViews().get(i); + const namedView = extractProperties(_namedView); + namedViews.push(namedView); + _namedView.delete(); + } + for (let i = 0; i < doc.groups().count; i++) { + const _group = doc.groups().get(i); + const group = extractProperties(_group); + groups.push(group); + _group.delete(); + } + const settings = extractProperties(doc.settings()); + const strings_count = doc.strings().count; + for (let i = 0; i < strings_count; i++) { + strings.push(doc.strings().get(i)); + } + const reflectionId = doc.settings().renderSettings().renderEnvironments.reflectionId; + const rc = doc.renderContent(); + let renderEnvironment = null; + for (let i = 0; i < rc.count; i++) { + const content2 = rc.get(i); + switch (content2.kind) { + case "environment": + const id = content2.id; + if (id !== reflectionId) break; + const renderTexture = content2.findChild("texture"); + const fileName = renderTexture.fileName; + for (let j = 0; j < doc.embeddedFiles().count; j++) { + const _fileName = doc.embeddedFiles().get(j).fileName; + if (fileName === _fileName) { + const background = doc.getEmbeddedFileAsBase64(fileName); + const backgroundImage = "data:image/png;base64," + background; + renderEnvironment = { type: "renderEnvironment", image: backgroundImage, name: fileName }; + } + } + break; + } + } + const renderSettings = { + ambientLight: doc.settings().renderSettings().ambientLight, + backgroundColorTop: doc.settings().renderSettings().backgroundColorTop, + backgroundColorBottom: doc.settings().renderSettings().backgroundColorBottom, + useHiddenLights: doc.settings().renderSettings().useHiddenLights, + depthCue: doc.settings().renderSettings().depthCue, + flatShade: doc.settings().renderSettings().flatShade, + renderBackFaces: doc.settings().renderSettings().renderBackFaces, + renderPoints: doc.settings().renderSettings().renderPoints, + renderCurves: doc.settings().renderSettings().renderCurves, + renderIsoParams: doc.settings().renderSettings().renderIsoParams, + renderMeshEdges: doc.settings().renderSettings().renderMeshEdges, + renderAnnotations: doc.settings().renderSettings().renderAnnotations, + useViewportSize: doc.settings().renderSettings().useViewportSize, + scaleBackgroundToFit: doc.settings().renderSettings().scaleBackgroundToFit, + transparentBackground: doc.settings().renderSettings().transparentBackground, + imageDpi: doc.settings().renderSettings().imageDpi, + shadowMapLevel: doc.settings().renderSettings().shadowMapLevel, + namedView: doc.settings().renderSettings().namedView, + snapShot: doc.settings().renderSettings().snapShot, + specificViewport: doc.settings().renderSettings().specificViewport, + groundPlane: extractProperties(doc.settings().renderSettings().groundPlane), + safeFrame: extractProperties(doc.settings().renderSettings().safeFrame), + dithering: extractProperties(doc.settings().renderSettings().dithering), + skylight: extractProperties(doc.settings().renderSettings().skylight), + linearWorkflow: extractProperties(doc.settings().renderSettings().linearWorkflow), + renderChannels: extractProperties(doc.settings().renderSettings().renderChannels), + sun: extractProperties(doc.settings().renderSettings().sun), + renderEnvironments: extractProperties(doc.settings().renderSettings().renderEnvironments), + postEffects: extractProperties(doc.settings().renderSettings().postEffects) + }; + doc.delete(); + return { objects, materials, layers, views, namedViews, groups, strings, settings, renderSettings, renderEnvironment }; + } + function extractTextures(m, tTypes, d) { + const textures = []; + for (let i = 0; i < tTypes.length; i++) { + const _texture = m.getTexture(tTypes[i]); + if (_texture) { + let textureType = tTypes[i].constructor.name; + textureType = textureType.substring(12, textureType.length); + const texture = extractTextureData(_texture, textureType, d); + textures.push(texture); + _texture.delete(); + } + } + return textures; + } + function extractTextureData(t3, tType, d) { + const texture = { type: tType }; + const image = d.getEmbeddedFileAsBase64(t3.fileName); + texture.wrapU = t3.wrapU; + texture.wrapV = t3.wrapV; + texture.wrapW = t3.wrapW; + const uvw = t3.uvwTransform.toFloatArray(true); + texture.repeat = [uvw[0], uvw[5]]; + if (image) { + texture.image = "data:image/png;base64," + image; + } else { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: Image for ${tType} texture not embedded in file.`, + type: "missing resource" + } + }); + texture.image = null; + } + return texture; + } + function extractObjectData(object, doc) { + const _geometry2 = object.geometry(); + const _attributes = object.attributes(); + let objectType = _geometry2.objectType; + let geometry, attributes, position2, data2, mesh; + switch (objectType) { + case rhino.ObjectType.Curve: + const pts = curveToPoints(_geometry2, 100); + position2 = {}; + attributes = {}; + data2 = {}; + position2.itemSize = 3; + position2.type = "Float32Array"; + position2.array = []; + for (let j = 0; j < pts.length; j++) { + position2.array.push(pts[j][0]); + position2.array.push(pts[j][1]); + position2.array.push(pts[j][2]); + } + attributes.position = position2; + data2.attributes = attributes; + geometry = { data: data2 }; + break; + case rhino.ObjectType.Point: + const pt = _geometry2.location; + position2 = {}; + const color = {}; + attributes = {}; + data2 = {}; + position2.itemSize = 3; + position2.type = "Float32Array"; + position2.array = [pt[0], pt[1], pt[2]]; + const _color5 = _attributes.drawColor(doc); + color.itemSize = 3; + color.type = "Float32Array"; + color.array = [_color5.r / 255, _color5.g / 255, _color5.b / 255]; + attributes.position = position2; + attributes.color = color; + data2.attributes = attributes; + geometry = { data: data2 }; + break; + case rhino.ObjectType.PointSet: + case rhino.ObjectType.Mesh: + geometry = _geometry2.toThreejsJSON(); + break; + case rhino.ObjectType.Brep: + const faces = _geometry2.faces(); + mesh = new rhino.Mesh(); + for (let faceIndex = 0; faceIndex < faces.count; faceIndex++) { + const face = faces.get(faceIndex); + const _mesh = face.getMesh(rhino.MeshType.Any); + if (_mesh) { + mesh.append(_mesh); + _mesh.delete(); + } + face.delete(); + } + if (mesh.faces().count > 0) { + mesh.compact(); + geometry = mesh.toThreejsJSON(); + faces.delete(); + } + mesh.delete(); + break; + case rhino.ObjectType.Extrusion: + mesh = _geometry2.getMesh(rhino.MeshType.Any); + if (mesh) { + geometry = mesh.toThreejsJSON(); + mesh.delete(); + } + break; + case rhino.ObjectType.TextDot: + geometry = extractProperties(_geometry2); + break; + case rhino.ObjectType.Light: + geometry = extractProperties(_geometry2); + if (geometry.lightStyle.name === "LightStyle_WorldLinear") { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: No conversion exists for ${objectType.constructor.name} ${geometry.lightStyle.name}`, + type: "no conversion", + guid: _attributes.id + } + }); + } + break; + case rhino.ObjectType.InstanceReference: + geometry = extractProperties(_geometry2); + geometry.xform = extractProperties(_geometry2.xform); + geometry.xform.array = _geometry2.xform.toFloatArray(true); + break; + case rhino.ObjectType.SubD: + _geometry2.subdivide(3); + mesh = rhino.Mesh.createFromSubDControlNet(_geometry2, false); + if (mesh) { + geometry = mesh.toThreejsJSON(); + mesh.delete(); + } + break; + default: + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: Conversion not implemented for ${objectType.constructor.name}`, + type: "not implemented", + guid: _attributes.id + } + }); + break; + } + if (geometry) { + attributes = extractProperties(_attributes); + attributes.geometry = extractProperties(_geometry2); + if (_attributes.groupCount > 0) { + attributes.groupIds = _attributes.getGroupList(); + } + if (_attributes.userStringCount > 0) { + attributes.userStrings = _attributes.getUserStrings(); + } + if (_geometry2.userStringCount > 0) { + attributes.geometry.userStrings = _geometry2.getUserStrings(); + } + if (_attributes.decals().count > 0) { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: "THREE.3DMLoader: No conversion exists for the decals associated with this object.", + type: "no conversion", + guid: _attributes.id + } + }); + } + attributes.drawColor = _attributes.drawColor(doc); + objectType = objectType.constructor.name; + objectType = objectType.substring(11, objectType.length); + return { geometry, attributes, objectType }; + } else { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`, + type: "missing mesh", + guid: _attributes.id + } + }); + } + } + function extractProperties(object) { + const result = {}; + for (const property2 in object) { + const value2 = object[property2]; + if (typeof value2 !== "function") { + if (typeof value2 === "object" && value2 !== null && value2.hasOwnProperty("constructor")) { + result[property2] = { name: value2.constructor.name, value: value2.value }; + } else if (typeof value2 === "object" && value2 !== null) { + result[property2] = extractProperties(value2); + } else { + result[property2] = value2; + } + } else { + } + } + return result; + } + function curveToPoints(curve, pointLimit) { + let pointCount = pointLimit; + let rc = []; + const ts = []; + if (curve instanceof rhino.LineCurve) { + return [curve.pointAtStart, curve.pointAtEnd]; + } + if (curve instanceof rhino.PolylineCurve) { + pointCount = curve.pointCount; + for (let i = 0; i < pointCount; i++) { + rc.push(curve.point(i)); + } + return rc; + } + if (curve instanceof rhino.PolyCurve) { + const segmentCount = curve.segmentCount; + for (let i = 0; i < segmentCount; i++) { + const segment = curve.segmentCurve(i); + const segmentArray = curveToPoints(segment, pointCount); + rc = rc.concat(segmentArray); + segment.delete(); + } + return rc; + } + if (curve instanceof rhino.ArcCurve) { + pointCount = Math.floor(curve.angleDegrees / 5); + pointCount = pointCount < 2 ? 2 : pointCount; + } + if (curve instanceof rhino.NurbsCurve && curve.degree === 1) { + const pLine = curve.tryGetPolyline(); + for (let i = 0; i < pLine.count; i++) { + rc.push(pLine.get(i)); + } + pLine.delete(); + return rc; + } + const domain = curve.domain; + const divisions = pointCount - 1; + for (let j = 0; j < pointCount; j++) { + const t3 = domain[0] + j / divisions * (domain[1] - domain[0]); + if (t3 === domain[0] || t3 === domain[1]) { + ts.push(t3); + continue; + } + const tan = curve.tangentAt(t3); + const prevTan = curve.tangentAt(ts.slice(-1)[0]); + const tS = tan[0] * tan[0] + tan[1] * tan[1] + tan[2] * tan[2]; + const ptS = prevTan[0] * prevTan[0] + prevTan[1] * prevTan[1] + prevTan[2] * prevTan[2]; + const denominator = Math.sqrt(tS * ptS); + let angle; + if (denominator === 0) { + angle = Math.PI / 2; + } else { + const theta = (tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z) / denominator; + angle = Math.acos(Math.max(-1, Math.min(1, theta))); + } + if (angle < 0.1) continue; + ts.push(t3); + } + rc = ts.map((t3) => curve.pointAt(t3)); + return rc; + } +} + +// node_modules/three/examples/jsm/loaders/3MFLoader.js +var COLOR_SPACE_3MF = SRGBColorSpace; +var ThreeMFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.availableExtensions = []; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + const scope = this; + const textureLoader = new TextureLoader(this.manager); + function loadDocument(data3) { + let zip = null; + let file = null; + let relsName; + let modelRelsName; + const modelPartNames = []; + const texturesPartNames = []; + let modelRels; + const modelParts = {}; + const printTicketParts = {}; + const texturesParts = {}; + const textDecoder = new TextDecoder(); + try { + zip = unzipSync(new Uint8Array(data3)); + } catch (e) { + if (e instanceof ReferenceError) { + console.error("THREE.3MFLoader: fflate missing and file is compressed."); + return null; + } + } + for (file in zip) { + if (file.match(/\_rels\/.rels$/)) { + relsName = file; + } else if (file.match(/3D\/_rels\/.*\.model\.rels$/)) { + modelRelsName = file; + } else if (file.match(/^3D\/.*\.model$/)) { + modelPartNames.push(file); + } else if (file.match(/^3D\/Textures?\/.*/)) { + texturesPartNames.push(file); + } + } + if (relsName === void 0) throw new Error("THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive."); + const relsView = zip[relsName]; + const relsFileText = textDecoder.decode(relsView); + const rels = parseRelsXml(relsFileText); + if (modelRelsName) { + const relsView2 = zip[modelRelsName]; + const relsFileText2 = textDecoder.decode(relsView2); + modelRels = parseRelsXml(relsFileText2); + } + for (let i = 0; i < modelPartNames.length; i++) { + const modelPart = modelPartNames[i]; + const view = zip[modelPart]; + const fileText = textDecoder.decode(view); + const xmlData = new DOMParser().parseFromString(fileText, "application/xml"); + if (xmlData.documentElement.nodeName.toLowerCase() !== "model") { + console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart); + } + const modelNode = xmlData.querySelector("model"); + const extensions = {}; + for (let i2 = 0; i2 < modelNode.attributes.length; i2++) { + const attr = modelNode.attributes[i2]; + if (attr.name.match(/^xmlns:(.+)$/)) { + extensions[attr.value] = RegExp.$1; + } + } + const modelData = parseModelNode(modelNode); + modelData["xml"] = modelNode; + if (0 < Object.keys(extensions).length) { + modelData["extensions"] = extensions; + } + modelParts[modelPart] = modelData; + } + for (let i = 0; i < texturesPartNames.length; i++) { + const texturesPartName = texturesPartNames[i]; + texturesParts[texturesPartName] = zip[texturesPartName].buffer; + } + return { + rels, + modelRels, + model: modelParts, + printTicket: printTicketParts, + texture: texturesParts + }; + } + function parseRelsXml(relsFileText) { + const relationships = []; + const relsXmlData = new DOMParser().parseFromString(relsFileText, "application/xml"); + const relsNodes = relsXmlData.querySelectorAll("Relationship"); + for (let i = 0; i < relsNodes.length; i++) { + const relsNode = relsNodes[i]; + const relationship = { + target: relsNode.getAttribute("Target"), + //required + id: relsNode.getAttribute("Id"), + //required + type: relsNode.getAttribute("Type") + //required + }; + relationships.push(relationship); + } + return relationships; + } + function parseMetadataNodes(metadataNodes) { + const metadataData = {}; + for (let i = 0; i < metadataNodes.length; i++) { + const metadataNode = metadataNodes[i]; + const name2 = metadataNode.getAttribute("name"); + const validNames = [ + "Title", + "Designer", + "Description", + "Copyright", + "LicenseTerms", + "Rating", + "CreationDate", + "ModificationDate" + ]; + if (0 <= validNames.indexOf(name2)) { + metadataData[name2] = metadataNode.textContent; + } + } + return metadataData; + } + function parseBasematerialsNode(basematerialsNode) { + const basematerialsData = { + id: basematerialsNode.getAttribute("id"), + // required + basematerials: [] + }; + const basematerialNodes = basematerialsNode.querySelectorAll("base"); + for (let i = 0; i < basematerialNodes.length; i++) { + const basematerialNode = basematerialNodes[i]; + const basematerialData = parseBasematerialNode(basematerialNode); + basematerialData.index = i; + basematerialsData.basematerials.push(basematerialData); + } + return basematerialsData; + } + function parseTexture2DNode(texture2DNode) { + const texture2dData = { + id: texture2DNode.getAttribute("id"), + // required + path: texture2DNode.getAttribute("path"), + // required + contenttype: texture2DNode.getAttribute("contenttype"), + // required + tilestyleu: texture2DNode.getAttribute("tilestyleu"), + tilestylev: texture2DNode.getAttribute("tilestylev"), + filter: texture2DNode.getAttribute("filter") + }; + return texture2dData; + } + function parseTextures2DGroupNode(texture2DGroupNode) { + const texture2DGroupData = { + id: texture2DGroupNode.getAttribute("id"), + // required + texid: texture2DGroupNode.getAttribute("texid"), + // required + displaypropertiesid: texture2DGroupNode.getAttribute("displaypropertiesid") + }; + const tex2coordNodes = texture2DGroupNode.querySelectorAll("tex2coord"); + const uvs = []; + for (let i = 0; i < tex2coordNodes.length; i++) { + const tex2coordNode = tex2coordNodes[i]; + const u = tex2coordNode.getAttribute("u"); + const v = tex2coordNode.getAttribute("v"); + uvs.push(parseFloat(u), parseFloat(v)); + } + texture2DGroupData["uvs"] = new Float32Array(uvs); + return texture2DGroupData; + } + function parseColorGroupNode(colorGroupNode) { + const colorGroupData = { + id: colorGroupNode.getAttribute("id"), + // required + displaypropertiesid: colorGroupNode.getAttribute("displaypropertiesid") + }; + const colorNodes = colorGroupNode.querySelectorAll("color"); + const colors = []; + const colorObject = new Color(); + for (let i = 0; i < colorNodes.length; i++) { + const colorNode = colorNodes[i]; + const color = colorNode.getAttribute("color"); + colorObject.setStyle(color.substring(0, 7), COLOR_SPACE_3MF); + colors.push(colorObject.r, colorObject.g, colorObject.b); + } + colorGroupData["colors"] = new Float32Array(colors); + return colorGroupData; + } + function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) { + const metallicDisplaypropertiesData = { + id: metallicDisplaypropetiesNode.getAttribute("id") + // required + }; + const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll("pbmetallic"); + const metallicData = []; + for (let i = 0; i < metallicNodes.length; i++) { + const metallicNode = metallicNodes[i]; + metallicData.push({ + name: metallicNode.getAttribute("name"), + // required + metallicness: parseFloat(metallicNode.getAttribute("metallicness")), + // required + roughness: parseFloat(metallicNode.getAttribute("roughness")) + // required + }); + } + metallicDisplaypropertiesData.data = metallicData; + return metallicDisplaypropertiesData; + } + function parseBasematerialNode(basematerialNode) { + const basematerialData = {}; + basematerialData["name"] = basematerialNode.getAttribute("name"); + basematerialData["displaycolor"] = basematerialNode.getAttribute("displaycolor"); + basematerialData["displaypropertiesid"] = basematerialNode.getAttribute("displaypropertiesid"); + return basematerialData; + } + function parseMeshNode(meshNode) { + const meshData = {}; + const vertices = []; + const vertexNodes = meshNode.querySelectorAll("vertices vertex"); + for (let i = 0; i < vertexNodes.length; i++) { + const vertexNode = vertexNodes[i]; + const x2 = vertexNode.getAttribute("x"); + const y2 = vertexNode.getAttribute("y"); + const z = vertexNode.getAttribute("z"); + vertices.push(parseFloat(x2), parseFloat(y2), parseFloat(z)); + } + meshData["vertices"] = new Float32Array(vertices); + const triangleProperties = []; + const triangles = []; + const triangleNodes = meshNode.querySelectorAll("triangles triangle"); + for (let i = 0; i < triangleNodes.length; i++) { + const triangleNode = triangleNodes[i]; + const v12 = triangleNode.getAttribute("v1"); + const v2 = triangleNode.getAttribute("v2"); + const v3 = triangleNode.getAttribute("v3"); + const p1 = triangleNode.getAttribute("p1"); + const p2 = triangleNode.getAttribute("p2"); + const p3 = triangleNode.getAttribute("p3"); + const pid = triangleNode.getAttribute("pid"); + const triangleProperty = {}; + triangleProperty["v1"] = parseInt(v12, 10); + triangleProperty["v2"] = parseInt(v2, 10); + triangleProperty["v3"] = parseInt(v3, 10); + triangles.push(triangleProperty["v1"], triangleProperty["v2"], triangleProperty["v3"]); + if (p1) { + triangleProperty["p1"] = parseInt(p1, 10); + } + if (p2) { + triangleProperty["p2"] = parseInt(p2, 10); + } + if (p3) { + triangleProperty["p3"] = parseInt(p3, 10); + } + if (pid) { + triangleProperty["pid"] = pid; + } + if (0 < Object.keys(triangleProperty).length) { + triangleProperties.push(triangleProperty); + } + } + meshData["triangleProperties"] = triangleProperties; + meshData["triangles"] = new Uint32Array(triangles); + return meshData; + } + function parseComponentsNode(componentsNode) { + const components = []; + const componentNodes = componentsNode.querySelectorAll("component"); + for (let i = 0; i < componentNodes.length; i++) { + const componentNode = componentNodes[i]; + const componentData = parseComponentNode(componentNode); + components.push(componentData); + } + return components; + } + function parseComponentNode(componentNode) { + const componentData = {}; + componentData["objectId"] = componentNode.getAttribute("objectid"); + const transform2 = componentNode.getAttribute("transform"); + if (transform2) { + componentData["transform"] = parseTransform(transform2); + } + return componentData; + } + function parseTransform(transform2) { + const t3 = []; + transform2.split(" ").forEach(function(s) { + t3.push(parseFloat(s)); + }); + const matrix3 = new Matrix4(); + matrix3.set( + t3[0], + t3[3], + t3[6], + t3[9], + t3[1], + t3[4], + t3[7], + t3[10], + t3[2], + t3[5], + t3[8], + t3[11], + 0, + 0, + 0, + 1 + ); + return matrix3; + } + function parseObjectNode(objectNode) { + const objectData = { + type: objectNode.getAttribute("type") + }; + const id = objectNode.getAttribute("id"); + if (id) { + objectData["id"] = id; + } + const pid = objectNode.getAttribute("pid"); + if (pid) { + objectData["pid"] = pid; + } + const pindex = objectNode.getAttribute("pindex"); + if (pindex) { + objectData["pindex"] = pindex; + } + const thumbnail = objectNode.getAttribute("thumbnail"); + if (thumbnail) { + objectData["thumbnail"] = thumbnail; + } + const partnumber = objectNode.getAttribute("partnumber"); + if (partnumber) { + objectData["partnumber"] = partnumber; + } + const name2 = objectNode.getAttribute("name"); + if (name2) { + objectData["name"] = name2; + } + const meshNode = objectNode.querySelector("mesh"); + if (meshNode) { + objectData["mesh"] = parseMeshNode(meshNode); + } + const componentsNode = objectNode.querySelector("components"); + if (componentsNode) { + objectData["components"] = parseComponentsNode(componentsNode); + } + return objectData; + } + function parseResourcesNode(resourcesNode) { + const resourcesData = {}; + resourcesData["basematerials"] = {}; + const basematerialsNodes = resourcesNode.querySelectorAll("basematerials"); + for (let i = 0; i < basematerialsNodes.length; i++) { + const basematerialsNode = basematerialsNodes[i]; + const basematerialsData = parseBasematerialsNode(basematerialsNode); + resourcesData["basematerials"][basematerialsData["id"]] = basematerialsData; + } + resourcesData["texture2d"] = {}; + const textures2DNodes = resourcesNode.querySelectorAll("texture2d"); + for (let i = 0; i < textures2DNodes.length; i++) { + const textures2DNode = textures2DNodes[i]; + const texture2DData = parseTexture2DNode(textures2DNode); + resourcesData["texture2d"][texture2DData["id"]] = texture2DData; + } + resourcesData["colorgroup"] = {}; + const colorGroupNodes = resourcesNode.querySelectorAll("colorgroup"); + for (let i = 0; i < colorGroupNodes.length; i++) { + const colorGroupNode = colorGroupNodes[i]; + const colorGroupData = parseColorGroupNode(colorGroupNode); + resourcesData["colorgroup"][colorGroupData["id"]] = colorGroupData; + } + resourcesData["pbmetallicdisplayproperties"] = {}; + const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll("pbmetallicdisplayproperties"); + for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) { + const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i]; + const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode); + resourcesData["pbmetallicdisplayproperties"][pbmetallicdisplaypropertiesData["id"]] = pbmetallicdisplaypropertiesData; + } + resourcesData["texture2dgroup"] = {}; + const textures2DGroupNodes = resourcesNode.querySelectorAll("texture2dgroup"); + for (let i = 0; i < textures2DGroupNodes.length; i++) { + const textures2DGroupNode = textures2DGroupNodes[i]; + const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode); + resourcesData["texture2dgroup"][textures2DGroupData["id"]] = textures2DGroupData; + } + resourcesData["object"] = {}; + const objectNodes = resourcesNode.querySelectorAll("object"); + for (let i = 0; i < objectNodes.length; i++) { + const objectNode = objectNodes[i]; + const objectData = parseObjectNode(objectNode); + resourcesData["object"][objectData["id"]] = objectData; + } + return resourcesData; + } + function parseBuildNode(buildNode) { + const buildData = []; + const itemNodes = buildNode.querySelectorAll("item"); + for (let i = 0; i < itemNodes.length; i++) { + const itemNode = itemNodes[i]; + const buildItem = { + objectId: itemNode.getAttribute("objectid") + }; + const transform2 = itemNode.getAttribute("transform"); + if (transform2) { + buildItem["transform"] = parseTransform(transform2); + } + buildData.push(buildItem); + } + return buildData; + } + function parseModelNode(modelNode) { + const modelData = { unit: modelNode.getAttribute("unit") || "millimeter" }; + const metadataNodes = modelNode.querySelectorAll("metadata"); + if (metadataNodes) { + modelData["metadata"] = parseMetadataNodes(metadataNodes); + } + const resourcesNode = modelNode.querySelector("resources"); + if (resourcesNode) { + modelData["resources"] = parseResourcesNode(resourcesNode); + } + const buildNode = modelNode.querySelector("build"); + if (buildNode) { + modelData["build"] = parseBuildNode(buildNode); + } + return modelData; + } + function buildTexture(texture2dgroup, objects2, modelData, textureData) { + const texid = texture2dgroup.texid; + const texture2ds = modelData.resources.texture2d; + const texture2d = texture2ds[texid]; + if (texture2d) { + const data3 = textureData[texture2d.path]; + const type = texture2d.contenttype; + const blob = new Blob([data3], { type }); + const sourceURI = URL.createObjectURL(blob); + const texture = textureLoader.load(sourceURI, function() { + URL.revokeObjectURL(sourceURI); + }); + texture.colorSpace = COLOR_SPACE_3MF; + switch (texture2d.tilestyleu) { + case "wrap": + texture.wrapS = RepeatWrapping; + break; + case "mirror": + texture.wrapS = MirroredRepeatWrapping; + break; + case "none": + case "clamp": + texture.wrapS = ClampToEdgeWrapping; + break; + default: + texture.wrapS = RepeatWrapping; + } + switch (texture2d.tilestylev) { + case "wrap": + texture.wrapT = RepeatWrapping; + break; + case "mirror": + texture.wrapT = MirroredRepeatWrapping; + break; + case "none": + case "clamp": + texture.wrapT = ClampToEdgeWrapping; + break; + default: + texture.wrapT = RepeatWrapping; + } + switch (texture2d.filter) { + case "auto": + texture.magFilter = LinearFilter; + texture.minFilter = LinearMipmapLinearFilter; + break; + case "linear": + texture.magFilter = LinearFilter; + texture.minFilter = LinearFilter; + break; + case "nearest": + texture.magFilter = NearestFilter; + texture.minFilter = NearestFilter; + break; + default: + texture.magFilter = LinearFilter; + texture.minFilter = LinearMipmapLinearFilter; + } + return texture; + } else { + return null; + } + } + function buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData) { + const objectPindex = objectData.pindex; + const materialMap = {}; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + const pindex = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectPindex; + if (materialMap[pindex] === void 0) materialMap[pindex] = []; + materialMap[pindex].push(triangleProperty); + } + const keys2 = Object.keys(materialMap); + const meshes = []; + for (let i = 0, l2 = keys2.length; i < l2; i++) { + const materialIndex = keys2[i]; + const trianglePropertiesProps = materialMap[materialIndex]; + const basematerialData = basematerials.basematerials[materialIndex]; + const material = getBuild(basematerialData, objects2, modelData, textureData, objectData, buildBasematerial); + const geometry = new BufferGeometry(); + const positionData = []; + const vertices = meshData.vertices; + for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) { + const triangleProperty = trianglePropertiesProps[j]; + positionData.push(vertices[triangleProperty.v1 * 3 + 0]); + positionData.push(vertices[triangleProperty.v1 * 3 + 1]); + positionData.push(vertices[triangleProperty.v1 * 3 + 2]); + positionData.push(vertices[triangleProperty.v2 * 3 + 0]); + positionData.push(vertices[triangleProperty.v2 * 3 + 1]); + positionData.push(vertices[triangleProperty.v2 * 3 + 2]); + positionData.push(vertices[triangleProperty.v3 * 3 + 0]); + positionData.push(vertices[triangleProperty.v3 * 3 + 1]); + positionData.push(vertices[triangleProperty.v3 * 3 + 2]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + const mesh = new Mesh(geometry, material); + meshes.push(mesh); + } + return meshes; + } + function buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData) { + const geometry = new BufferGeometry(); + const positionData = []; + const uvData = []; + const vertices = meshData.vertices; + const uvs = texture2dgroup.uvs; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + positionData.push(vertices[triangleProperty.v1 * 3 + 0]); + positionData.push(vertices[triangleProperty.v1 * 3 + 1]); + positionData.push(vertices[triangleProperty.v1 * 3 + 2]); + positionData.push(vertices[triangleProperty.v2 * 3 + 0]); + positionData.push(vertices[triangleProperty.v2 * 3 + 1]); + positionData.push(vertices[triangleProperty.v2 * 3 + 2]); + positionData.push(vertices[triangleProperty.v3 * 3 + 0]); + positionData.push(vertices[triangleProperty.v3 * 3 + 1]); + positionData.push(vertices[triangleProperty.v3 * 3 + 2]); + uvData.push(uvs[triangleProperty.p1 * 2 + 0]); + uvData.push(uvs[triangleProperty.p1 * 2 + 1]); + uvData.push(uvs[triangleProperty.p2 * 2 + 0]); + uvData.push(uvs[triangleProperty.p2 * 2 + 1]); + uvData.push(uvs[triangleProperty.p3 * 2 + 0]); + uvData.push(uvs[triangleProperty.p3 * 2 + 1]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvData, 2)); + const texture = getBuild(texture2dgroup, objects2, modelData, textureData, objectData, buildTexture); + const material = new MeshPhongMaterial({ map: texture, flatShading: true }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objectData) { + const geometry = new BufferGeometry(); + const positionData = []; + const colorData = []; + const vertices = meshData.vertices; + const colors = colorgroup.colors; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + const v12 = triangleProperty.v1; + const v2 = triangleProperty.v2; + const v3 = triangleProperty.v3; + positionData.push(vertices[v12 * 3 + 0]); + positionData.push(vertices[v12 * 3 + 1]); + positionData.push(vertices[v12 * 3 + 2]); + positionData.push(vertices[v2 * 3 + 0]); + positionData.push(vertices[v2 * 3 + 1]); + positionData.push(vertices[v2 * 3 + 2]); + positionData.push(vertices[v3 * 3 + 0]); + positionData.push(vertices[v3 * 3 + 1]); + positionData.push(vertices[v3 * 3 + 2]); + const p1 = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectData.pindex; + const p2 = triangleProperty.p2 !== void 0 ? triangleProperty.p2 : p1; + const p3 = triangleProperty.p3 !== void 0 ? triangleProperty.p3 : p1; + colorData.push(colors[p1 * 3 + 0]); + colorData.push(colors[p1 * 3 + 1]); + colorData.push(colors[p1 * 3 + 2]); + colorData.push(colors[p2 * 3 + 0]); + colorData.push(colors[p2 * 3 + 1]); + colorData.push(colors[p2 * 3 + 2]); + colorData.push(colors[p3 * 3 + 0]); + colorData.push(colors[p3 * 3 + 1]); + colorData.push(colors[p3 * 3 + 2]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colorData, 3)); + const material = new MeshPhongMaterial({ vertexColors: true, flatShading: true }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildDefaultMesh(meshData) { + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(meshData["triangles"], 1)); + geometry.setAttribute("position", new BufferAttribute(meshData["vertices"], 3)); + const material = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 16777215, + flatShading: true + }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData) { + const keys2 = Object.keys(resourceMap); + const meshes = []; + for (let i = 0, il = keys2.length; i < il; i++) { + const resourceId = keys2[i]; + const triangleProperties = resourceMap[resourceId]; + const resourceType = getResourceType(resourceId, modelData); + switch (resourceType) { + case "material": + const basematerials = modelData.resources.basematerials[resourceId]; + const newMeshes = buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData); + for (let j = 0, jl = newMeshes.length; j < jl; j++) { + meshes.push(newMeshes[j]); + } + break; + case "texture": + const texture2dgroup = modelData.resources.texture2dgroup[resourceId]; + meshes.push(buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData)); + break; + case "vertexColors": + const colorgroup = modelData.resources.colorgroup[resourceId]; + meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objectData)); + break; + case "default": + meshes.push(buildDefaultMesh(meshData)); + break; + default: + console.error("THREE.3MFLoader: Unsupported resource type."); + } + } + if (objectData.name) { + for (let i = 0; i < meshes.length; i++) { + meshes[i].name = objectData.name; + } + } + return meshes; + } + function getResourceType(pid, modelData) { + if (modelData.resources.texture2dgroup[pid] !== void 0) { + return "texture"; + } else if (modelData.resources.basematerials[pid] !== void 0) { + return "material"; + } else if (modelData.resources.colorgroup[pid] !== void 0) { + return "vertexColors"; + } else if (pid === "default") { + return "default"; + } else { + return void 0; + } + } + function analyzeObject(meshData, objectData) { + const resourceMap = {}; + const triangleProperties = meshData["triangleProperties"]; + const objectPid = objectData.pid; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + let pid = triangleProperty.pid !== void 0 ? triangleProperty.pid : objectPid; + if (pid === void 0) pid = "default"; + if (resourceMap[pid] === void 0) resourceMap[pid] = []; + resourceMap[pid].push(triangleProperty); + } + return resourceMap; + } + function buildGroup(meshData, objects2, modelData, textureData, objectData) { + const group = new Group(); + const resourceMap = analyzeObject(meshData, objectData); + const meshes = buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData); + for (let i = 0, l2 = meshes.length; i < l2; i++) { + group.add(meshes[i]); + } + return group; + } + function applyExtensions(extensions, meshData, modelXml) { + if (!extensions) { + return; + } + const availableExtensions = []; + const keys2 = Object.keys(extensions); + for (let i = 0; i < keys2.length; i++) { + const ns = keys2[i]; + for (let j = 0; j < scope.availableExtensions.length; j++) { + const extension = scope.availableExtensions[j]; + if (extension.ns === ns) { + availableExtensions.push(extension); + } + } + } + for (let i = 0; i < availableExtensions.length; i++) { + const extension = availableExtensions[i]; + extension.apply(modelXml, extensions[extension["ns"]], meshData); + } + } + function getBuild(data3, objects2, modelData, textureData, objectData, builder) { + if (data3.build !== void 0) return data3.build; + data3.build = builder(data3, objects2, modelData, textureData, objectData); + return data3.build; + } + function buildBasematerial(materialData, objects2, modelData) { + let material; + const displaypropertiesid = materialData.displaypropertiesid; + const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties; + if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== void 0) { + const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid]; + const metallicData = pbmetallicdisplayproperty.data[materialData.index]; + material = new MeshStandardMaterial({ flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness }); + } else { + material = new MeshPhongMaterial({ flatShading: true }); + } + material.name = materialData.name; + const displaycolor = materialData.displaycolor; + const color = displaycolor.substring(0, 7); + material.color.setStyle(color, COLOR_SPACE_3MF); + if (displaycolor.length === 9) { + material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255; + } + return material; + } + function buildComposite(compositeData, objects2, modelData, textureData) { + const composite = new Group(); + for (let j = 0; j < compositeData.length; j++) { + const component = compositeData[j]; + let build2 = objects2[component.objectId]; + if (build2 === void 0) { + buildObject(component.objectId, objects2, modelData, textureData); + build2 = objects2[component.objectId]; + } + const object3D = build2.clone(); + const transform2 = component.transform; + if (transform2) { + object3D.applyMatrix4(transform2); + } + composite.add(object3D); + } + return composite; + } + function buildObject(objectId, objects2, modelData, textureData) { + const objectData = modelData["resources"]["object"][objectId]; + if (objectData["mesh"]) { + const meshData = objectData["mesh"]; + const extensions = modelData["extensions"]; + const modelXml = modelData["xml"]; + applyExtensions(extensions, meshData, modelXml); + objects2[objectData.id] = getBuild(meshData, objects2, modelData, textureData, objectData, buildGroup); + } else { + const compositeData = objectData["components"]; + objects2[objectData.id] = getBuild(compositeData, objects2, modelData, textureData, objectData, buildComposite); + } + if (objectData.name) { + objects2[objectData.id].name = objectData.name; + } + } + function buildObjects(data3mf2) { + const modelsData = data3mf2.model; + const modelRels = data3mf2.modelRels; + const objects2 = {}; + const modelsKeys = Object.keys(modelsData); + const textureData = {}; + if (modelRels) { + for (let i = 0, l2 = modelRels.length; i < l2; i++) { + const modelRel = modelRels[i]; + const textureKey = modelRel.target.substring(1); + if (data3mf2.texture[textureKey]) { + textureData[modelRel.target] = data3mf2.texture[textureKey]; + } + } + } + for (let i = 0; i < modelsKeys.length; i++) { + const modelsKey = modelsKeys[i]; + const modelData = modelsData[modelsKey]; + const objectIds = Object.keys(modelData["resources"]["object"]); + for (let j = 0; j < objectIds.length; j++) { + const objectId = objectIds[j]; + buildObject(objectId, objects2, modelData, textureData); + } + } + return objects2; + } + function fetch3DModelPart(rels) { + for (let i = 0; i < rels.length; i++) { + const rel = rels[i]; + const extension = rel.target.split(".").pop(); + if (extension.toLowerCase() === "model") return rel; + } + } + function build(objects2, data3mf2) { + const group = new Group(); + const relationship = fetch3DModelPart(data3mf2["rels"]); + const buildData = data3mf2.model[relationship["target"].substring(1)]["build"]; + for (let i = 0; i < buildData.length; i++) { + const buildItem = buildData[i]; + const object3D = objects2[buildItem["objectId"]].clone(); + const transform2 = buildItem["transform"]; + if (transform2) { + object3D.applyMatrix4(transform2); + } + group.add(object3D); + } + return group; + } + const data3mf = loadDocument(data2); + const objects = buildObjects(data3mf); + return build(objects, data3mf); + } + addExtension(extension) { + this.availableExtensions.push(extension); + } +}; + +// node_modules/three/examples/jsm/loaders/AMFLoader.js +var AMFLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function loadDocument(data3) { + let view = new DataView(data3); + const magic = String.fromCharCode(view.getUint8(0), view.getUint8(1)); + if (magic === "PK") { + let zip = null; + let file = null; + console.log("THREE.AMFLoader: Loading Zip"); + try { + zip = unzipSync(new Uint8Array(data3)); + } catch (e) { + if (e instanceof ReferenceError) { + console.log("THREE.AMFLoader: fflate missing and file is compressed."); + return null; + } + } + for (file in zip) { + if (file.toLowerCase().slice(-4) === ".amf") { + break; + } + } + console.log("THREE.AMFLoader: Trying to load file asset: " + file); + view = new DataView(zip[file].buffer); + } + const fileText = new TextDecoder().decode(view); + const xmlData2 = new DOMParser().parseFromString(fileText, "application/xml"); + if (xmlData2.documentElement.nodeName.toLowerCase() !== "amf") { + console.log("THREE.AMFLoader: Error loading AMF - no AMF document found."); + return null; + } + return xmlData2; + } + function loadDocumentScale(node) { + let scale2 = 1; + let unit = "millimeter"; + if (node.documentElement.attributes.unit !== void 0) { + unit = node.documentElement.attributes.unit.value.toLowerCase(); + } + const scaleUnits = { + millimeter: 1, + inch: 25.4, + feet: 304.8, + meter: 1e3, + micron: 1e-3 + }; + if (scaleUnits[unit] !== void 0) { + scale2 = scaleUnits[unit]; + } + console.log("THREE.AMFLoader: Unit scale: " + scale2); + return scale2; + } + function loadMaterials(node) { + let matName = "AMF Material"; + const matId = node.attributes.id.textContent; + let color = { r: 1, g: 1, b: 1, a: 1 }; + let loadedMaterial = null; + for (let i2 = 0; i2 < node.childNodes.length; i2++) { + const matChildEl = node.childNodes[i2]; + if (matChildEl.nodeName === "metadata" && matChildEl.attributes.type !== void 0) { + if (matChildEl.attributes.type.value === "name") { + matName = matChildEl.textContent; + } + } else if (matChildEl.nodeName === "color") { + color = loadColor(matChildEl); + } + } + loadedMaterial = new MeshPhongMaterial({ + flatShading: true, + color: new Color(color.r, color.g, color.b), + name: matName + }); + if (color.a !== 1) { + loadedMaterial.transparent = true; + loadedMaterial.opacity = color.a; + } + return { id: matId, material: loadedMaterial }; + } + function loadColor(node) { + const color = { r: 1, g: 1, b: 1, a: 1 }; + for (let i2 = 0; i2 < node.childNodes.length; i2++) { + const matColor = node.childNodes[i2]; + if (matColor.nodeName === "r") { + color.r = matColor.textContent; + } else if (matColor.nodeName === "g") { + color.g = matColor.textContent; + } else if (matColor.nodeName === "b") { + color.b = matColor.textContent; + } else if (matColor.nodeName === "a") { + color.a = matColor.textContent; + } + } + return color; + } + function loadMeshVolume(node) { + const volume = { name: "", triangles: [], materialid: null }; + let currVolumeNode = node.firstElementChild; + if (node.attributes.materialid !== void 0) { + volume.materialId = node.attributes.materialid.nodeValue; + } + while (currVolumeNode) { + if (currVolumeNode.nodeName === "metadata") { + if (currVolumeNode.attributes.type !== void 0) { + if (currVolumeNode.attributes.type.value === "name") { + volume.name = currVolumeNode.textContent; + } + } + } else if (currVolumeNode.nodeName === "triangle") { + const v12 = currVolumeNode.getElementsByTagName("v1")[0].textContent; + const v2 = currVolumeNode.getElementsByTagName("v2")[0].textContent; + const v3 = currVolumeNode.getElementsByTagName("v3")[0].textContent; + volume.triangles.push(v12, v2, v3); + } + currVolumeNode = currVolumeNode.nextElementSibling; + } + return volume; + } + function loadMeshVertices(node) { + const vertArray = []; + const normalArray = []; + let currVerticesNode = node.firstElementChild; + while (currVerticesNode) { + if (currVerticesNode.nodeName === "vertex") { + let vNode = currVerticesNode.firstElementChild; + while (vNode) { + if (vNode.nodeName === "coordinates") { + const x2 = vNode.getElementsByTagName("x")[0].textContent; + const y2 = vNode.getElementsByTagName("y")[0].textContent; + const z = vNode.getElementsByTagName("z")[0].textContent; + vertArray.push(x2, y2, z); + } else if (vNode.nodeName === "normal") { + const nx = vNode.getElementsByTagName("nx")[0].textContent; + const ny = vNode.getElementsByTagName("ny")[0].textContent; + const nz = vNode.getElementsByTagName("nz")[0].textContent; + normalArray.push(nx, ny, nz); + } + vNode = vNode.nextElementSibling; + } + } + currVerticesNode = currVerticesNode.nextElementSibling; + } + return { "vertices": vertArray, "normals": normalArray }; + } + function loadObject(node) { + const objId = node.attributes.id.textContent; + const loadedObject = { name: "amfobject", meshes: [] }; + let currColor = null; + let currObjNode = node.firstElementChild; + while (currObjNode) { + if (currObjNode.nodeName === "metadata") { + if (currObjNode.attributes.type !== void 0) { + if (currObjNode.attributes.type.value === "name") { + loadedObject.name = currObjNode.textContent; + } + } + } else if (currObjNode.nodeName === "color") { + currColor = loadColor(currObjNode); + } else if (currObjNode.nodeName === "mesh") { + let currMeshNode = currObjNode.firstElementChild; + const mesh = { vertices: [], normals: [], volumes: [], color: currColor }; + while (currMeshNode) { + if (currMeshNode.nodeName === "vertices") { + const loadedVertices = loadMeshVertices(currMeshNode); + mesh.normals = mesh.normals.concat(loadedVertices.normals); + mesh.vertices = mesh.vertices.concat(loadedVertices.vertices); + } else if (currMeshNode.nodeName === "volume") { + mesh.volumes.push(loadMeshVolume(currMeshNode)); + } + currMeshNode = currMeshNode.nextElementSibling; + } + loadedObject.meshes.push(mesh); + } + currObjNode = currObjNode.nextElementSibling; + } + return { "id": objId, "obj": loadedObject }; + } + const xmlData = loadDocument(data2); + let amfName = ""; + let amfAuthor = ""; + const amfScale = loadDocumentScale(xmlData); + const amfMaterials = {}; + const amfObjects = {}; + const childNodes = xmlData.documentElement.childNodes; + let i, j; + for (i = 0; i < childNodes.length; i++) { + const child = childNodes[i]; + if (child.nodeName === "metadata") { + if (child.attributes.type !== void 0) { + if (child.attributes.type.value === "name") { + amfName = child.textContent; + } else if (child.attributes.type.value === "author") { + amfAuthor = child.textContent; + } + } + } else if (child.nodeName === "material") { + const loadedMaterial = loadMaterials(child); + amfMaterials[loadedMaterial.id] = loadedMaterial.material; + } else if (child.nodeName === "object") { + const loadedObject = loadObject(child); + amfObjects[loadedObject.id] = loadedObject.obj; + } + } + const sceneObject = new Group(); + const defaultMaterial = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 11184895, + flatShading: true + }); + sceneObject.name = amfName; + sceneObject.userData.author = amfAuthor; + sceneObject.userData.loader = "AMF"; + for (const id in amfObjects) { + const part = amfObjects[id]; + const meshes = part.meshes; + const newObject = new Group(); + newObject.name = part.name || ""; + for (i = 0; i < meshes.length; i++) { + let objDefaultMaterial = defaultMaterial; + const mesh = meshes[i]; + const vertices = new Float32BufferAttribute(mesh.vertices, 3); + let normals = null; + if (mesh.normals.length) { + normals = new Float32BufferAttribute(mesh.normals, 3); + } + if (mesh.color) { + const color = mesh.color; + objDefaultMaterial = defaultMaterial.clone(); + objDefaultMaterial.color = new Color(color.r, color.g, color.b); + if (color.a !== 1) { + objDefaultMaterial.transparent = true; + objDefaultMaterial.opacity = color.a; + } + } + const volumes = mesh.volumes; + for (j = 0; j < volumes.length; j++) { + const volume = volumes[j]; + const newGeometry = new BufferGeometry(); + let material = objDefaultMaterial; + newGeometry.setIndex(volume.triangles); + newGeometry.setAttribute("position", vertices.clone()); + if (normals) { + newGeometry.setAttribute("normal", normals.clone()); + } + if (amfMaterials[volume.materialId] !== void 0) { + material = amfMaterials[volume.materialId]; + } + newGeometry.scale(amfScale, amfScale, amfScale); + newObject.add(new Mesh(newGeometry, material.clone())); + } + } + sceneObject.add(newObject); + } + return sceneObject; + } +}; + +// node_modules/three/examples/jsm/loaders/BVHLoader.js +var BVHLoader = class extends Loader { + constructor(manager) { + super(manager); + this.animateBonePositions = true; + this.animateBoneRotations = true; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2) { + function readBvh(lines2) { + if (nextLine(lines2) !== "HIERARCHY") { + console.error("THREE.BVHLoader: HIERARCHY expected."); + } + const list = []; + const root = readNode(lines2, nextLine(lines2), list); + if (nextLine(lines2) !== "MOTION") { + console.error("THREE.BVHLoader: MOTION expected."); + } + let tokens = nextLine(lines2).split(/[\s]+/); + const numFrames = parseInt(tokens[1]); + if (isNaN(numFrames)) { + console.error("THREE.BVHLoader: Failed to read number of frames."); + } + tokens = nextLine(lines2).split(/[\s]+/); + const frameTime = parseFloat(tokens[2]); + if (isNaN(frameTime)) { + console.error("THREE.BVHLoader: Failed to read frame time."); + } + for (let i = 0; i < numFrames; i++) { + tokens = nextLine(lines2).split(/[\s]+/); + readFrameData(tokens, i * frameTime, root); + } + return list; + } + function readFrameData(data2, frameTime, bone) { + if (bone.type === "ENDSITE") return; + const keyframe = { + time: frameTime, + position: new Vector3(), + rotation: new Quaternion() + }; + bone.frames.push(keyframe); + const quat = new Quaternion(); + const vx = new Vector3(1, 0, 0); + const vy = new Vector3(0, 1, 0); + const vz = new Vector3(0, 0, 1); + for (let i = 0; i < bone.channels.length; i++) { + switch (bone.channels[i]) { + case "Xposition": + keyframe.position.x = parseFloat(data2.shift().trim()); + break; + case "Yposition": + keyframe.position.y = parseFloat(data2.shift().trim()); + break; + case "Zposition": + keyframe.position.z = parseFloat(data2.shift().trim()); + break; + case "Xrotation": + quat.setFromAxisAngle(vx, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + case "Yrotation": + quat.setFromAxisAngle(vy, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + case "Zrotation": + quat.setFromAxisAngle(vz, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + default: + console.warn("THREE.BVHLoader: Invalid channel type."); + } + } + for (let i = 0; i < bone.children.length; i++) { + readFrameData(data2, frameTime, bone.children[i]); + } + } + function readNode(lines2, firstline, list) { + const node = { name: "", type: "", frames: [] }; + list.push(node); + let tokens = firstline.split(/[\s]+/); + if (tokens[0].toUpperCase() === "END" && tokens[1].toUpperCase() === "SITE") { + node.type = "ENDSITE"; + node.name = "ENDSITE"; + } else { + node.name = tokens[1]; + node.type = tokens[0].toUpperCase(); + } + if (nextLine(lines2) !== "{") { + console.error("THREE.BVHLoader: Expected opening { after type & name"); + } + tokens = nextLine(lines2).split(/[\s]+/); + if (tokens[0] !== "OFFSET") { + console.error("THREE.BVHLoader: Expected OFFSET but got: " + tokens[0]); + } + if (tokens.length !== 4) { + console.error("THREE.BVHLoader: Invalid number of values for OFFSET."); + } + const offset = new Vector3( + parseFloat(tokens[1]), + parseFloat(tokens[2]), + parseFloat(tokens[3]) + ); + if (isNaN(offset.x) || isNaN(offset.y) || isNaN(offset.z)) { + console.error("THREE.BVHLoader: Invalid values of OFFSET."); + } + node.offset = offset; + if (node.type !== "ENDSITE") { + tokens = nextLine(lines2).split(/[\s]+/); + if (tokens[0] !== "CHANNELS") { + console.error("THREE.BVHLoader: Expected CHANNELS definition."); + } + const numChannels = parseInt(tokens[1]); + node.channels = tokens.splice(2, numChannels); + node.children = []; + } + while (true) { + const line2 = nextLine(lines2); + if (line2 === "}") { + return node; + } else { + node.children.push(readNode(lines2, line2, list)); + } + } + } + function toTHREEBone(source, list) { + const bone = new Bone(); + list.push(bone); + bone.position.add(source.offset); + bone.name = source.name; + if (source.type !== "ENDSITE") { + for (let i = 0; i < source.children.length; i++) { + bone.add(toTHREEBone(source.children[i], list)); + } + } + return bone; + } + function toTHREEAnimation(bones2) { + const tracks = []; + for (let i = 0; i < bones2.length; i++) { + const bone = bones2[i]; + if (bone.type === "ENDSITE") + continue; + const times = []; + const positions = []; + const rotations = []; + for (let j = 0; j < bone.frames.length; j++) { + const frame = bone.frames[j]; + times.push(frame.time); + positions.push(frame.position.x + bone.offset.x); + positions.push(frame.position.y + bone.offset.y); + positions.push(frame.position.z + bone.offset.z); + rotations.push(frame.rotation.x); + rotations.push(frame.rotation.y); + rotations.push(frame.rotation.z); + rotations.push(frame.rotation.w); + } + if (scope.animateBonePositions) { + tracks.push(new VectorKeyframeTrack(bone.name + ".position", times, positions)); + } + if (scope.animateBoneRotations) { + tracks.push(new QuaternionKeyframeTrack(bone.name + ".quaternion", times, rotations)); + } + } + return new AnimationClip("animation", -1, tracks); + } + function nextLine(lines2) { + let line2; + while ((line2 = lines2.shift().trim()).length === 0) { + } + return line2; + } + const scope = this; + const lines = text2.split(/[\r\n]+/g); + const bones = readBvh(lines); + const threeBones = []; + toTHREEBone(bones[0], threeBones); + const threeClip = toTHREEAnimation(bones); + return { + skeleton: new Skeleton(threeBones), + clip: threeClip + }; + } +}; + +// node_modules/three/examples/jsm/loaders/TGALoader.js +var TGALoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer) { + function tgaCheckHeader(header2) { + switch (header2.image_type) { + case TGA_TYPE_INDEXED: + case TGA_TYPE_RLE_INDEXED: + if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) { + throw new Error("THREE.TGALoader: Invalid type colormap data for indexed type."); + } + break; + case TGA_TYPE_RGB: + case TGA_TYPE_GREY: + case TGA_TYPE_RLE_RGB: + case TGA_TYPE_RLE_GREY: + if (header2.colormap_type) { + throw new Error("THREE.TGALoader: Invalid type colormap data for colormap type."); + } + break; + case TGA_TYPE_NO_DATA: + throw new Error("THREE.TGALoader: No data."); + default: + throw new Error("THREE.TGALoader: Invalid type " + header2.image_type); + } + if (header2.width <= 0 || header2.height <= 0) { + throw new Error("THREE.TGALoader: Invalid image size."); + } + if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) { + throw new Error("THREE.TGALoader: Invalid pixel size " + header2.pixel_size); + } + } + function tgaParse(use_rle2, use_pal2, header2, offset2, data2) { + let pixel_data, palettes; + const pixel_size = header2.pixel_size >> 3; + const pixel_total = header2.width * header2.height * pixel_size; + if (use_pal2) { + palettes = data2.subarray(offset2, offset2 += header2.colormap_length * (header2.colormap_size >> 3)); + } + if (use_rle2) { + pixel_data = new Uint8Array(pixel_total); + let c2, count, i; + let shift = 0; + const pixels = new Uint8Array(pixel_size); + while (shift < pixel_total) { + c2 = data2[offset2++]; + count = (c2 & 127) + 1; + if (c2 & 128) { + for (i = 0; i < pixel_size; ++i) { + pixels[i] = data2[offset2++]; + } + for (i = 0; i < count; ++i) { + pixel_data.set(pixels, shift + i * pixel_size); + } + shift += pixel_size * count; + } else { + count *= pixel_size; + for (i = 0; i < count; ++i) { + pixel_data[shift + i] = data2[offset2++]; + } + shift += count; + } + } + } else { + pixel_data = data2.subarray( + offset2, + offset2 += use_pal2 ? header2.width * header2.height : pixel_total + ); + } + return { + pixel_data, + palettes + }; + } + function tgaGetImageData8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes) { + const colormap = palettes; + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i++) { + color = image[i]; + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + imageData2[(x2 + width2 * y2) * 4 + 2] = colormap[color * 3 + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = colormap[color * 3 + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = colormap[color * 3 + 2]; + } + } + return imageData2; + } + function tgaGetImageData16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 2) { + color = image[i + 0] + (image[i + 1] << 8); + imageData2[(x2 + width2 * y2) * 4 + 0] = (color & 31744) >> 7; + imageData2[(x2 + width2 * y2) * 4 + 1] = (color & 992) >> 2; + imageData2[(x2 + width2 * y2) * 4 + 2] = (color & 31) << 3; + imageData2[(x2 + width2 * y2) * 4 + 3] = color & 32768 ? 0 : 255; + } + } + return imageData2; + } + function tgaGetImageData24bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 3) { + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 2]; + } + } + return imageData2; + } + function tgaGetImageData32bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 4) { + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 2]; + imageData2[(x2 + width2 * y2) * 4 + 3] = image[i + 3]; + } + } + return imageData2; + } + function tgaGetImageDataGrey8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i++) { + color = image[i]; + imageData2[(x2 + width2 * y2) * 4 + 0] = color; + imageData2[(x2 + width2 * y2) * 4 + 1] = color; + imageData2[(x2 + width2 * y2) * 4 + 2] = color; + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + } + } + return imageData2; + } + function tgaGetImageDataGrey16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 2) { + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 3] = image[i + 1]; + } + } + return imageData2; + } + function getTgaRGBA(data2, width2, height2, image, palette) { + let x_start, y_start, x_step, y_step, x_end, y_end; + switch ((header.flags & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT) { + default: + case TGA_ORIGIN_UL: + x_start = 0; + x_step = 1; + x_end = width2; + y_start = 0; + y_step = 1; + y_end = height2; + break; + case TGA_ORIGIN_BL: + x_start = 0; + x_step = 1; + x_end = width2; + y_start = height2 - 1; + y_step = -1; + y_end = -1; + break; + case TGA_ORIGIN_UR: + x_start = width2 - 1; + x_step = -1; + x_end = -1; + y_start = 0; + y_step = 1; + y_end = height2; + break; + case TGA_ORIGIN_BR: + x_start = width2 - 1; + x_step = -1; + x_end = -1; + y_start = height2 - 1; + y_step = -1; + y_end = -1; + break; + } + if (use_grey) { + switch (header.pixel_size) { + case 8: + tgaGetImageDataGrey8bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 16: + tgaGetImageDataGrey16bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + default: + throw new Error("THREE.TGALoader: Format not supported."); + break; + } + } else { + switch (header.pixel_size) { + case 8: + tgaGetImageData8bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image, palette); + break; + case 16: + tgaGetImageData16bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 24: + tgaGetImageData24bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 32: + tgaGetImageData32bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + default: + throw new Error("THREE.TGALoader: Format not supported."); + break; + } + } + return data2; + } + const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3; + if (buffer.length < 19) throw new Error("THREE.TGALoader: Not enough data to contain header."); + let offset = 0; + const content2 = new Uint8Array(buffer), header = { + id_length: content2[offset++], + colormap_type: content2[offset++], + image_type: content2[offset++], + colormap_index: content2[offset++] | content2[offset++] << 8, + colormap_length: content2[offset++] | content2[offset++] << 8, + colormap_size: content2[offset++], + origin: [ + content2[offset++] | content2[offset++] << 8, + content2[offset++] | content2[offset++] << 8 + ], + width: content2[offset++] | content2[offset++] << 8, + height: content2[offset++] | content2[offset++] << 8, + pixel_size: content2[offset++], + flags: content2[offset++] + }; + tgaCheckHeader(header); + if (header.id_length + offset > buffer.length) { + throw new Error("THREE.TGALoader: No data."); + } + offset += header.id_length; + let use_rle = false, use_pal = false, use_grey = false; + switch (header.image_type) { + case TGA_TYPE_RLE_INDEXED: + use_rle = true; + use_pal = true; + break; + case TGA_TYPE_INDEXED: + use_pal = true; + break; + case TGA_TYPE_RLE_RGB: + use_rle = true; + break; + case TGA_TYPE_RGB: + break; + case TGA_TYPE_RLE_GREY: + use_rle = true; + use_grey = true; + break; + case TGA_TYPE_GREY: + use_grey = true; + break; + } + const imageData = new Uint8Array(header.width * header.height * 4); + const result = tgaParse(use_rle, use_pal, header, offset, content2); + getTgaRGBA(imageData, header.width, header.height, result.pixel_data, result.palettes); + return { + data: imageData, + width: header.width, + height: header.height, + flipY: true, + generateMipmaps: true, + minFilter: LinearMipmapLinearFilter + }; + } +}; + +// node_modules/three/examples/jsm/loaders/ColladaLoader.js +var ColladaLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2, path) { + function getElementsByTagName(xml2, name2) { + const array = []; + const childNodes = xml2.childNodes; + for (let i = 0, l2 = childNodes.length; i < l2; i++) { + const child = childNodes[i]; + if (child.nodeName === name2) { + array.push(child); + } + } + return array; + } + function parseStrings(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parts[i]; + } + return array; + } + function parseFloats(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parseFloat(parts[i]); + } + return array; + } + function parseInts(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parseInt(parts[i]); + } + return array; + } + function parseId(text3) { + return text3.substring(1); + } + function generateId() { + return "three_default_" + count++; + } + function isEmpty2(object) { + return Object.keys(object).length === 0; + } + function parseAsset(xml2) { + return { + unit: parseAssetUnit(getElementsByTagName(xml2, "unit")[0]), + upAxis: parseAssetUpAxis(getElementsByTagName(xml2, "up_axis")[0]) + }; + } + function parseAssetUnit(xml2) { + if (xml2 !== void 0 && xml2.hasAttribute("meter") === true) { + return parseFloat(xml2.getAttribute("meter")); + } else { + return 1; + } + } + function parseAssetUpAxis(xml2) { + return xml2 !== void 0 ? xml2.textContent : "Y_UP"; + } + function parseLibrary(xml2, libraryName, nodeName, parser) { + const library2 = getElementsByTagName(xml2, libraryName)[0]; + if (library2 !== void 0) { + const elements = getElementsByTagName(library2, nodeName); + for (let i = 0; i < elements.length; i++) { + parser(elements[i]); + } + } + } + function buildLibrary(data2, builder) { + for (const name2 in data2) { + const object = data2[name2]; + object.build = builder(data2[name2]); + } + } + function getBuild(data2, builder) { + if (data2.build !== void 0) return data2.build; + data2.build = builder(data2); + return data2.build; + } + function parseAnimation(xml2) { + const data2 = { + sources: {}, + samplers: {}, + channels: {} + }; + let hasChildren = false; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let id; + switch (child.nodeName) { + case "source": + id = child.getAttribute("id"); + data2.sources[id] = parseSource(child); + break; + case "sampler": + id = child.getAttribute("id"); + data2.samplers[id] = parseAnimationSampler(child); + break; + case "channel": + id = child.getAttribute("target"); + data2.channels[id] = parseAnimationChannel(child); + break; + case "animation": + parseAnimation(child); + hasChildren = true; + break; + default: + console.log(child); + } + } + if (hasChildren === false) { + library.animations[xml2.getAttribute("id") || MathUtils.generateUUID()] = data2; + } + } + function parseAnimationSampler(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const id = parseId(child.getAttribute("source")); + const semantic = child.getAttribute("semantic"); + data2.inputs[semantic] = id; + break; + } + } + return data2; + } + function parseAnimationChannel(xml2) { + const data2 = {}; + const target = xml2.getAttribute("target"); + let parts = target.split("/"); + const id = parts.shift(); + let sid = parts.shift(); + const arraySyntax = sid.indexOf("(") !== -1; + const memberSyntax = sid.indexOf(".") !== -1; + if (memberSyntax) { + parts = sid.split("."); + sid = parts.shift(); + data2.member = parts.shift(); + } else if (arraySyntax) { + const indices = sid.split("("); + sid = indices.shift(); + for (let i = 0; i < indices.length; i++) { + indices[i] = parseInt(indices[i].replace(/\)/, "")); + } + data2.indices = indices; + } + data2.id = id; + data2.sid = sid; + data2.arraySyntax = arraySyntax; + data2.memberSyntax = memberSyntax; + data2.sampler = parseId(xml2.getAttribute("source")); + return data2; + } + function buildAnimation(data2) { + const tracks = []; + const channels = data2.channels; + const samplers = data2.samplers; + const sources = data2.sources; + for (const target in channels) { + if (channels.hasOwnProperty(target)) { + const channel = channels[target]; + const sampler = samplers[channel.sampler]; + const inputId = sampler.inputs.INPUT; + const outputId = sampler.inputs.OUTPUT; + const inputSource = sources[inputId]; + const outputSource = sources[outputId]; + const animation = buildAnimationChannel(channel, inputSource, outputSource); + createKeyframeTracks(animation, tracks); + } + } + return tracks; + } + function getAnimation(id) { + return getBuild(library.animations[id], buildAnimation); + } + function buildAnimationChannel(channel, inputSource, outputSource) { + const node = library.nodes[channel.id]; + const object3D = getNode(node.id); + const transform2 = node.transforms[channel.sid]; + const defaultMatrix = node.matrix.clone().transpose(); + let time2, stride; + let i, il, j, jl; + const data2 = {}; + switch (transform2) { + case "matrix": + for (i = 0, il = inputSource.array.length; i < il; i++) { + time2 = inputSource.array[i]; + stride = i * outputSource.stride; + if (data2[time2] === void 0) data2[time2] = {}; + if (channel.arraySyntax === true) { + const value2 = outputSource.array[stride]; + const index2 = channel.indices[0] + 4 * channel.indices[1]; + data2[time2][index2] = value2; + } else { + for (j = 0, jl = outputSource.stride; j < jl; j++) { + data2[time2][j] = outputSource.array[stride + j]; + } + } + } + break; + case "translate": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + case "rotate": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + case "scale": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + } + const keyframes = prepareAnimationData(data2, defaultMatrix); + const animation = { + name: object3D.uuid, + keyframes + }; + return animation; + } + function prepareAnimationData(data2, defaultMatrix) { + const keyframes = []; + for (const time2 in data2) { + keyframes.push({ time: parseFloat(time2), value: data2[time2] }); + } + keyframes.sort(ascending); + for (let i = 0; i < 16; i++) { + transformAnimationData(keyframes, i, defaultMatrix.elements[i]); + } + return keyframes; + function ascending(a2, b3) { + return a2.time - b3.time; + } + } + const position2 = new Vector3(); + const scale2 = new Vector3(); + const quaternion = new Quaternion(); + function createKeyframeTracks(animation, tracks) { + const keyframes = animation.keyframes; + const name2 = animation.name; + const times = []; + const positionData = []; + const quaternionData = []; + const scaleData = []; + for (let i = 0, l2 = keyframes.length; i < l2; i++) { + const keyframe = keyframes[i]; + const time2 = keyframe.time; + const value2 = keyframe.value; + matrix3.fromArray(value2).transpose(); + matrix3.decompose(position2, quaternion, scale2); + times.push(time2); + positionData.push(position2.x, position2.y, position2.z); + quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w); + scaleData.push(scale2.x, scale2.y, scale2.z); + } + if (positionData.length > 0) tracks.push(new VectorKeyframeTrack(name2 + ".position", times, positionData)); + if (quaternionData.length > 0) tracks.push(new QuaternionKeyframeTrack(name2 + ".quaternion", times, quaternionData)); + if (scaleData.length > 0) tracks.push(new VectorKeyframeTrack(name2 + ".scale", times, scaleData)); + return tracks; + } + function transformAnimationData(keyframes, property2, defaultValue) { + let keyframe; + let empty = true; + let i, l2; + for (i = 0, l2 = keyframes.length; i < l2; i++) { + keyframe = keyframes[i]; + if (keyframe.value[property2] === void 0) { + keyframe.value[property2] = null; + } else { + empty = false; + } + } + if (empty === true) { + for (i = 0, l2 = keyframes.length; i < l2; i++) { + keyframe = keyframes[i]; + keyframe.value[property2] = defaultValue; + } + } else { + createMissingKeyframes(keyframes, property2); + } + } + function createMissingKeyframes(keyframes, property2) { + let prev, next; + for (let i = 0, l2 = keyframes.length; i < l2; i++) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] === null) { + prev = getPrev(keyframes, i, property2); + next = getNext(keyframes, i, property2); + if (prev === null) { + keyframe.value[property2] = next.value[property2]; + continue; + } + if (next === null) { + keyframe.value[property2] = prev.value[property2]; + continue; + } + interpolate(keyframe, prev, next, property2); + } + } + } + function getPrev(keyframes, i, property2) { + while (i >= 0) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] !== null) return keyframe; + i--; + } + return null; + } + function getNext(keyframes, i, property2) { + while (i < keyframes.length) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] !== null) return keyframe; + i++; + } + return null; + } + function interpolate(key2, prev, next, property2) { + if (next.time - prev.time === 0) { + key2.value[property2] = prev.value[property2]; + return; + } + key2.value[property2] = (key2.time - prev.time) * (next.value[property2] - prev.value[property2]) / (next.time - prev.time) + prev.value[property2]; + } + function parseAnimationClip(xml2) { + const data2 = { + name: xml2.getAttribute("id") || "default", + start: parseFloat(xml2.getAttribute("start") || 0), + end: parseFloat(xml2.getAttribute("end") || 0), + animations: [] + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "instance_animation": + data2.animations.push(parseId(child.getAttribute("url"))); + break; + } + } + library.clips[xml2.getAttribute("id")] = data2; + } + function buildAnimationClip(data2) { + const tracks = []; + const name2 = data2.name; + const duration = data2.end - data2.start || -1; + const animations2 = data2.animations; + for (let i = 0, il = animations2.length; i < il; i++) { + const animationTracks = getAnimation(animations2[i]); + for (let j = 0, jl = animationTracks.length; j < jl; j++) { + tracks.push(animationTracks[j]); + } + } + return new AnimationClip(name2, duration, tracks); + } + function getAnimationClip(id) { + return getBuild(library.clips[id], buildAnimationClip); + } + function parseController(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "skin": + data2.id = parseId(child.getAttribute("source")); + data2.skin = parseSkin(child); + break; + case "morph": + data2.id = parseId(child.getAttribute("source")); + console.warn("THREE.ColladaLoader: Morph target animation not supported yet."); + break; + } + } + library.controllers[xml2.getAttribute("id")] = data2; + } + function parseSkin(xml2) { + const data2 = { + sources: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "bind_shape_matrix": + data2.bindShapeMatrix = parseFloats(child.textContent); + break; + case "source": + const id = child.getAttribute("id"); + data2.sources[id] = parseSource(child); + break; + case "joints": + data2.joints = parseJoints(child); + break; + case "vertex_weights": + data2.vertexWeights = parseVertexWeights(child); + break; + } + } + return data2; + } + function parseJoints(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const semantic = child.getAttribute("semantic"); + const id = parseId(child.getAttribute("source")); + data2.inputs[semantic] = id; + break; + } + } + return data2; + } + function parseVertexWeights(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const semantic = child.getAttribute("semantic"); + const id = parseId(child.getAttribute("source")); + const offset = parseInt(child.getAttribute("offset")); + data2.inputs[semantic] = { id, offset }; + break; + case "vcount": + data2.vcount = parseInts(child.textContent); + break; + case "v": + data2.v = parseInts(child.textContent); + break; + } + } + return data2; + } + function buildController(data2) { + const build = { + id: data2.id + }; + const geometry = library.geometries[build.id]; + if (data2.skin !== void 0) { + build.skin = buildSkin(data2.skin); + geometry.sources.skinIndices = build.skin.indices; + geometry.sources.skinWeights = build.skin.weights; + } + return build; + } + function buildSkin(data2) { + const BONE_LIMIT = 4; + const build = { + joints: [], + // this must be an array to preserve the joint order + indices: { + array: [], + stride: BONE_LIMIT + }, + weights: { + array: [], + stride: BONE_LIMIT + } + }; + const sources = data2.sources; + const vertexWeights = data2.vertexWeights; + const vcount = vertexWeights.vcount; + const v = vertexWeights.v; + const jointOffset = vertexWeights.inputs.JOINT.offset; + const weightOffset = vertexWeights.inputs.WEIGHT.offset; + const jointSource = data2.sources[data2.joints.inputs.JOINT]; + const inverseSource = data2.sources[data2.joints.inputs.INV_BIND_MATRIX]; + const weights = sources[vertexWeights.inputs.WEIGHT.id].array; + let stride = 0; + let i, j, l2; + for (i = 0, l2 = vcount.length; i < l2; i++) { + const jointCount = vcount[i]; + const vertexSkinData = []; + for (j = 0; j < jointCount; j++) { + const skinIndex = v[stride + jointOffset]; + const weightId = v[stride + weightOffset]; + const skinWeight = weights[weightId]; + vertexSkinData.push({ index: skinIndex, weight: skinWeight }); + stride += 2; + } + vertexSkinData.sort(descending); + for (j = 0; j < BONE_LIMIT; j++) { + const d = vertexSkinData[j]; + if (d !== void 0) { + build.indices.array.push(d.index); + build.weights.array.push(d.weight); + } else { + build.indices.array.push(0); + build.weights.array.push(0); + } + } + } + if (data2.bindShapeMatrix) { + build.bindMatrix = new Matrix4().fromArray(data2.bindShapeMatrix).transpose(); + } else { + build.bindMatrix = new Matrix4().identity(); + } + for (i = 0, l2 = jointSource.array.length; i < l2; i++) { + const name2 = jointSource.array[i]; + const boneInverse = new Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose(); + build.joints.push({ name: name2, boneInverse }); + } + return build; + function descending(a2, b3) { + return b3.weight - a2.weight; + } + } + function getController(id) { + return getBuild(library.controllers[id], buildController); + } + function parseImage(xml2) { + const data2 = { + init_from: getElementsByTagName(xml2, "init_from")[0].textContent + }; + library.images[xml2.getAttribute("id")] = data2; + } + function buildImage(data2) { + if (data2.build !== void 0) return data2.build; + return data2.init_from; + } + function getImage(id) { + const data2 = library.images[id]; + if (data2 !== void 0) { + return getBuild(data2, buildImage); + } + console.warn("THREE.ColladaLoader: Couldn't find image with ID:", id); + return null; + } + function parseEffect(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "profile_COMMON": + data2.profile = parseEffectProfileCOMMON(child); + break; + } + } + library.effects[xml2.getAttribute("id")] = data2; + } + function parseEffectProfileCOMMON(xml2) { + const data2 = { + surfaces: {}, + samplers: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "newparam": + parseEffectNewparam(child, data2); + break; + case "technique": + data2.technique = parseEffectTechnique(child); + break; + case "extra": + data2.extra = parseEffectExtra(child); + break; + } + } + return data2; + } + function parseEffectNewparam(xml2, data2) { + const sid = xml2.getAttribute("sid"); + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "surface": + data2.surfaces[sid] = parseEffectSurface(child); + break; + case "sampler2D": + data2.samplers[sid] = parseEffectSampler(child); + break; + } + } + } + function parseEffectSurface(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "init_from": + data2.init_from = child.textContent; + break; + } + } + return data2; + } + function parseEffectSampler(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "source": + data2.source = child.textContent; + break; + } + } + return data2; + } + function parseEffectTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "constant": + case "lambert": + case "blinn": + case "phong": + data2.type = child.nodeName; + data2.parameters = parseEffectParameters(child); + break; + case "extra": + data2.extra = parseEffectExtra(child); + break; + } + } + return data2; + } + function parseEffectParameters(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "emission": + case "diffuse": + case "specular": + case "bump": + case "ambient": + case "shininess": + case "transparency": + data2[child.nodeName] = parseEffectParameter(child); + break; + case "transparent": + data2[child.nodeName] = { + opaque: child.hasAttribute("opaque") ? child.getAttribute("opaque") : "A_ONE", + data: parseEffectParameter(child) + }; + break; + } + } + return data2; + } + function parseEffectParameter(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "color": + data2[child.nodeName] = parseFloats(child.textContent); + break; + case "float": + data2[child.nodeName] = parseFloat(child.textContent); + break; + case "texture": + data2[child.nodeName] = { id: child.getAttribute("texture"), extra: parseEffectParameterTexture(child) }; + break; + } + } + return data2; + } + function parseEffectParameterTexture(xml2) { + const data2 = { + technique: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "extra": + parseEffectParameterTextureExtra(child, data2); + break; + } + } + return data2; + } + function parseEffectParameterTextureExtra(xml2, data2) { + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique": + parseEffectParameterTextureExtraTechnique(child, data2); + break; + } + } + } + function parseEffectParameterTextureExtraTechnique(xml2, data2) { + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "repeatU": + case "repeatV": + case "offsetU": + case "offsetV": + data2.technique[child.nodeName] = parseFloat(child.textContent); + break; + case "wrapU": + case "wrapV": + if (child.textContent.toUpperCase() === "TRUE") { + data2.technique[child.nodeName] = 1; + } else if (child.textContent.toUpperCase() === "FALSE") { + data2.technique[child.nodeName] = 0; + } else { + data2.technique[child.nodeName] = parseInt(child.textContent); + } + break; + case "bump": + data2[child.nodeName] = parseEffectExtraTechniqueBump(child); + break; + } + } + } + function parseEffectExtra(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique": + data2.technique = parseEffectExtraTechnique(child); + break; + } + } + return data2; + } + function parseEffectExtraTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "double_sided": + data2[child.nodeName] = parseInt(child.textContent); + break; + case "bump": + data2[child.nodeName] = parseEffectExtraTechniqueBump(child); + break; + } + } + return data2; + } + function parseEffectExtraTechniqueBump(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "texture": + data2[child.nodeName] = { id: child.getAttribute("texture"), texcoord: child.getAttribute("texcoord"), extra: parseEffectParameterTexture(child) }; + break; + } + } + return data2; + } + function buildEffect(data2) { + return data2; + } + function getEffect(id) { + return getBuild(library.effects[id], buildEffect); + } + function parseMaterial(xml2) { + const data2 = { + name: xml2.getAttribute("name") + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "instance_effect": + data2.url = parseId(child.getAttribute("url")); + break; + } + } + library.materials[xml2.getAttribute("id")] = data2; + } + function getTextureLoader(image) { + let loader; + let extension = image.slice((image.lastIndexOf(".") - 1 >>> 0) + 2); + extension = extension.toLowerCase(); + switch (extension) { + case "tga": + loader = tgaLoader; + break; + default: + loader = textureLoader; + } + return loader; + } + function buildMaterial2(data2) { + const effect2 = getEffect(data2.url); + const technique = effect2.profile.technique; + let material; + switch (technique.type) { + case "phong": + case "blinn": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + material = new MeshBasicMaterial(); + break; + } + material.name = data2.name || ""; + function getTexture(textureObject, colorSpace = null) { + const sampler = effect2.profile.samplers[textureObject.id]; + let image = null; + if (sampler !== void 0) { + const surface = effect2.profile.surfaces[sampler.source]; + image = getImage(surface.init_from); + } else { + console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530)."); + image = getImage(textureObject.id); + } + if (image !== null) { + const loader = getTextureLoader(image); + if (loader !== void 0) { + const texture = loader.load(image); + const extra = textureObject.extra; + if (extra !== void 0 && extra.technique !== void 0 && isEmpty2(extra.technique) === false) { + const technique2 = extra.technique; + texture.wrapS = technique2.wrapU ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = technique2.wrapV ? RepeatWrapping : ClampToEdgeWrapping; + texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0); + texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1); + } else { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + } + if (colorSpace !== null) { + texture.colorSpace = colorSpace; + } + return texture; + } else { + console.warn("THREE.ColladaLoader: Loader for texture %s not found.", image); + return null; + } + } else { + console.warn("THREE.ColladaLoader: Couldn't create texture with ID:", textureObject.id); + return null; + } + } + const parameters = technique.parameters; + for (const key2 in parameters) { + const parameter = parameters[key2]; + switch (key2) { + case "diffuse": + if (parameter.color) material.color.fromArray(parameter.color); + if (parameter.texture) material.map = getTexture(parameter.texture, SRGBColorSpace); + break; + case "specular": + if (parameter.color && material.specular) material.specular.fromArray(parameter.color); + if (parameter.texture) material.specularMap = getTexture(parameter.texture); + break; + case "bump": + if (parameter.texture) material.normalMap = getTexture(parameter.texture); + break; + case "ambient": + if (parameter.texture) material.lightMap = getTexture(parameter.texture, SRGBColorSpace); + break; + case "shininess": + if (parameter.float && material.shininess) material.shininess = parameter.float; + break; + case "emission": + if (parameter.color && material.emissive) material.emissive.fromArray(parameter.color); + if (parameter.texture) material.emissiveMap = getTexture(parameter.texture, SRGBColorSpace); + break; + } + } + material.color.convertSRGBToLinear(); + if (material.specular) material.specular.convertSRGBToLinear(); + if (material.emissive) material.emissive.convertSRGBToLinear(); + let transparent = parameters["transparent"]; + let transparency = parameters["transparency"]; + if (transparency === void 0 && transparent) { + transparency = { + float: 1 + }; + } + if (transparent === void 0 && transparency) { + transparent = { + opaque: "A_ONE", + data: { + color: [1, 1, 1, 1] + } + }; + } + if (transparent && transparency) { + if (transparent.data.texture) { + material.transparent = true; + } else { + const color = transparent.data.color; + switch (transparent.opaque) { + case "A_ONE": + material.opacity = color[3] * transparency.float; + break; + case "RGB_ZERO": + material.opacity = 1 - color[0] * transparency.float; + break; + case "A_ZERO": + material.opacity = 1 - color[3] * transparency.float; + break; + case "RGB_ONE": + material.opacity = color[0] * transparency.float; + break; + default: + console.warn('THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.', transparent.opaque); + } + if (material.opacity < 1) material.transparent = true; + } + } + if (technique.extra !== void 0 && technique.extra.technique !== void 0) { + const techniques = technique.extra.technique; + for (const k2 in techniques) { + const v = techniques[k2]; + switch (k2) { + case "double_sided": + material.side = v === 1 ? DoubleSide : FrontSide; + break; + case "bump": + material.normalMap = getTexture(v.texture); + material.normalScale = new Vector2(1, 1); + break; + } + } + } + return material; + } + function getMaterial2(id) { + return getBuild(library.materials[id], buildMaterial2); + } + function parseCamera(xml2) { + const data2 = { + name: xml2.getAttribute("name") + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "optics": + data2.optics = parseCameraOptics(child); + break; + } + } + library.cameras[xml2.getAttribute("id")] = data2; + } + function parseCameraOptics(xml2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "technique_common": + return parseCameraTechnique(child); + } + } + return {}; + } + function parseCameraTechnique(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "perspective": + case "orthographic": + data2.technique = child.nodeName; + data2.parameters = parseCameraParameters(child); + break; + } + } + return data2; + } + function parseCameraParameters(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "xfov": + case "yfov": + case "xmag": + case "ymag": + case "znear": + case "zfar": + case "aspect_ratio": + data2[child.nodeName] = parseFloat(child.textContent); + break; + } + } + return data2; + } + function buildCamera2(data2) { + let camera; + switch (data2.optics.technique) { + case "perspective": + camera = new PerspectiveCamera( + data2.optics.parameters.yfov, + data2.optics.parameters.aspect_ratio, + data2.optics.parameters.znear, + data2.optics.parameters.zfar + ); + break; + case "orthographic": + let ymag = data2.optics.parameters.ymag; + let xmag = data2.optics.parameters.xmag; + const aspectRatio = data2.optics.parameters.aspect_ratio; + xmag = xmag === void 0 ? ymag * aspectRatio : xmag; + ymag = ymag === void 0 ? xmag / aspectRatio : ymag; + xmag *= 0.5; + ymag *= 0.5; + camera = new OrthographicCamera( + -xmag, + xmag, + ymag, + -ymag, + // left, right, top, bottom + data2.optics.parameters.znear, + data2.optics.parameters.zfar + ); + break; + default: + camera = new PerspectiveCamera(); + break; + } + camera.name = data2.name || ""; + return camera; + } + function getCamera(id) { + const data2 = library.cameras[id]; + if (data2 !== void 0) { + return getBuild(data2, buildCamera2); + } + console.warn("THREE.ColladaLoader: Couldn't find camera with ID:", id); + return null; + } + function parseLight(xml2) { + let data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + data2 = parseLightTechnique(child); + break; + } + } + library.lights[xml2.getAttribute("id")] = data2; + } + function parseLightTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "directional": + case "point": + case "spot": + case "ambient": + data2.technique = child.nodeName; + data2.parameters = parseLightParameters(child); + } + } + return data2; + } + function parseLightParameters(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "color": + const array = parseFloats(child.textContent); + data2.color = new Color().fromArray(array).convertSRGBToLinear(); + break; + case "falloff_angle": + data2.falloffAngle = parseFloat(child.textContent); + break; + case "quadratic_attenuation": + const f = parseFloat(child.textContent); + data2.distance = f ? Math.sqrt(1 / f) : 0; + break; + } + } + return data2; + } + function buildLight(data2) { + let light; + switch (data2.technique) { + case "directional": + light = new DirectionalLight(); + break; + case "point": + light = new PointLight(); + break; + case "spot": + light = new SpotLight(); + break; + case "ambient": + light = new AmbientLight(); + break; + } + if (data2.parameters.color) light.color.copy(data2.parameters.color); + if (data2.parameters.distance) light.distance = data2.parameters.distance; + return light; + } + function getLight(id) { + const data2 = library.lights[id]; + if (data2 !== void 0) { + return getBuild(data2, buildLight); + } + console.warn("THREE.ColladaLoader: Couldn't find light with ID:", id); + return null; + } + function parseGeometry(xml2) { + const data2 = { + name: xml2.getAttribute("name"), + sources: {}, + vertices: {}, + primitives: [] + }; + const mesh = getElementsByTagName(xml2, "mesh")[0]; + if (mesh === void 0) return; + for (let i = 0; i < mesh.childNodes.length; i++) { + const child = mesh.childNodes[i]; + if (child.nodeType !== 1) continue; + const id = child.getAttribute("id"); + switch (child.nodeName) { + case "source": + data2.sources[id] = parseSource(child); + break; + case "vertices": + data2.vertices = parseGeometryVertices(child); + break; + case "polygons": + console.warn("THREE.ColladaLoader: Unsupported primitive type: ", child.nodeName); + break; + case "lines": + case "linestrips": + case "polylist": + case "triangles": + data2.primitives.push(parseGeometryPrimitive(child)); + break; + default: + console.log(child); + } + } + library.geometries[xml2.getAttribute("id")] = data2; + } + function parseSource(xml2) { + const data2 = { + array: [], + stride: 3 + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "float_array": + data2.array = parseFloats(child.textContent); + break; + case "Name_array": + data2.array = parseStrings(child.textContent); + break; + case "technique_common": + const accessor = getElementsByTagName(child, "accessor")[0]; + if (accessor !== void 0) { + data2.stride = parseInt(accessor.getAttribute("stride")); + } + break; + } + } + return data2; + } + function parseGeometryVertices(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + data2[child.getAttribute("semantic")] = parseId(child.getAttribute("source")); + } + return data2; + } + function parseGeometryPrimitive(xml2) { + const primitive = { + type: xml2.nodeName, + material: xml2.getAttribute("material"), + count: parseInt(xml2.getAttribute("count")), + inputs: {}, + stride: 0, + hasUV: false + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const id = parseId(child.getAttribute("source")); + const semantic = child.getAttribute("semantic"); + const offset = parseInt(child.getAttribute("offset")); + const set = parseInt(child.getAttribute("set")); + const inputname = set > 0 ? semantic + set : semantic; + primitive.inputs[inputname] = { id, offset }; + primitive.stride = Math.max(primitive.stride, offset + 1); + if (semantic === "TEXCOORD") primitive.hasUV = true; + break; + case "vcount": + primitive.vcount = parseInts(child.textContent); + break; + case "p": + primitive.p = parseInts(child.textContent); + break; + } + } + return primitive; + } + function groupPrimitives(primitives) { + const build = {}; + for (let i = 0; i < primitives.length; i++) { + const primitive = primitives[i]; + if (build[primitive.type] === void 0) build[primitive.type] = []; + build[primitive.type].push(primitive); + } + return build; + } + function checkUVCoordinates(primitives) { + let count2 = 0; + for (let i = 0, l2 = primitives.length; i < l2; i++) { + const primitive = primitives[i]; + if (primitive.hasUV === true) { + count2++; + } + } + if (count2 > 0 && count2 < primitives.length) { + primitives.uvsNeedsFix = true; + } + } + function buildGeometry(data2) { + const build = {}; + const sources = data2.sources; + const vertices = data2.vertices; + const primitives = data2.primitives; + if (primitives.length === 0) return {}; + const groupedPrimitives = groupPrimitives(primitives); + for (const type in groupedPrimitives) { + const primitiveType = groupedPrimitives[type]; + checkUVCoordinates(primitiveType); + build[type] = buildGeometryType(primitiveType, sources, vertices); + } + return build; + } + function buildGeometryType(primitives, sources, vertices) { + const build = {}; + const position3 = { array: [], stride: 0 }; + const normal = { array: [], stride: 0 }; + const uv = { array: [], stride: 0 }; + const uv1 = { array: [], stride: 0 }; + const color = { array: [], stride: 0 }; + const skinIndex = { array: [], stride: 4 }; + const skinWeight = { array: [], stride: 4 }; + const geometry = new BufferGeometry(); + const materialKeys = []; + let start = 0; + for (let p2 = 0; p2 < primitives.length; p2++) { + const primitive = primitives[p2]; + const inputs = primitive.inputs; + let count2 = 0; + switch (primitive.type) { + case "lines": + case "linestrips": + count2 = primitive.count * 2; + break; + case "triangles": + count2 = primitive.count * 3; + break; + case "polylist": + for (let g2 = 0; g2 < primitive.count; g2++) { + const vc = primitive.vcount[g2]; + switch (vc) { + case 3: + count2 += 3; + break; + case 4: + count2 += 6; + break; + default: + count2 += (vc - 2) * 3; + break; + } + } + break; + default: + console.warn("THREE.ColladaLoader: Unknow primitive type:", primitive.type); + } + geometry.addGroup(start, count2, p2); + start += count2; + if (primitive.material) { + materialKeys.push(primitive.material); + } + for (const name2 in inputs) { + const input = inputs[name2]; + switch (name2) { + case "VERTEX": + for (const key2 in vertices) { + const id = vertices[key2]; + switch (key2) { + case "POSITION": + const prevLength = position3.array.length; + buildGeometryData(primitive, sources[id], input.offset, position3.array); + position3.stride = sources[id].stride; + if (sources.skinWeights && sources.skinIndices) { + buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array); + buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array); + } + if (primitive.hasUV === false && primitives.uvsNeedsFix === true) { + const count3 = (position3.array.length - prevLength) / position3.stride; + for (let i = 0; i < count3; i++) { + uv.array.push(0, 0); + } + } + break; + case "NORMAL": + buildGeometryData(primitive, sources[id], input.offset, normal.array); + normal.stride = sources[id].stride; + break; + case "COLOR": + buildGeometryData(primitive, sources[id], input.offset, color.array); + color.stride = sources[id].stride; + break; + case "TEXCOORD": + buildGeometryData(primitive, sources[id], input.offset, uv.array); + uv.stride = sources[id].stride; + break; + case "TEXCOORD1": + buildGeometryData(primitive, sources[id], input.offset, uv1.array); + uv.stride = sources[id].stride; + break; + default: + console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.', key2); + } + } + break; + case "NORMAL": + buildGeometryData(primitive, sources[input.id], input.offset, normal.array); + normal.stride = sources[input.id].stride; + break; + case "COLOR": + buildGeometryData(primitive, sources[input.id], input.offset, color.array, true); + color.stride = sources[input.id].stride; + break; + case "TEXCOORD": + buildGeometryData(primitive, sources[input.id], input.offset, uv.array); + uv.stride = sources[input.id].stride; + break; + case "TEXCOORD1": + buildGeometryData(primitive, sources[input.id], input.offset, uv1.array); + uv1.stride = sources[input.id].stride; + break; + } + } + } + if (position3.array.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position3.array, position3.stride)); + if (normal.array.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal.array, normal.stride)); + if (color.array.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color.array, color.stride)); + if (uv.array.length > 0) geometry.setAttribute("uv", new Float32BufferAttribute(uv.array, uv.stride)); + if (uv1.array.length > 0) geometry.setAttribute("uv1", new Float32BufferAttribute(uv1.array, uv1.stride)); + if (skinIndex.array.length > 0) geometry.setAttribute("skinIndex", new Float32BufferAttribute(skinIndex.array, skinIndex.stride)); + if (skinWeight.array.length > 0) geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeight.array, skinWeight.stride)); + build.data = geometry; + build.type = primitives[0].type; + build.materialKeys = materialKeys; + return build; + } + function buildGeometryData(primitive, source, offset, array, isColor = false) { + const indices = primitive.p; + const stride = primitive.stride; + const vcount = primitive.vcount; + function pushVector(i) { + let index2 = indices[i + offset] * sourceStride; + const length2 = index2 + sourceStride; + for (; index2 < length2; index2++) { + array.push(sourceArray[index2]); + } + if (isColor) { + const startIndex = array.length - sourceStride - 1; + tempColor.setRGB( + array[startIndex + 0], + array[startIndex + 1], + array[startIndex + 2] + ).convertSRGBToLinear(); + array[startIndex + 0] = tempColor.r; + array[startIndex + 1] = tempColor.g; + array[startIndex + 2] = tempColor.b; + } + } + const sourceArray = source.array; + const sourceStride = source.stride; + if (primitive.vcount !== void 0) { + let index2 = 0; + for (let i = 0, l2 = vcount.length; i < l2; i++) { + const count2 = vcount[i]; + if (count2 === 4) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * 1; + const c2 = index2 + stride * 2; + const d = index2 + stride * 3; + pushVector(a2); + pushVector(b3); + pushVector(d); + pushVector(b3); + pushVector(c2); + pushVector(d); + } else if (count2 === 3) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * 1; + const c2 = index2 + stride * 2; + pushVector(a2); + pushVector(b3); + pushVector(c2); + } else if (count2 > 4) { + for (let k2 = 1, kl = count2 - 2; k2 <= kl; k2++) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * k2; + const c2 = index2 + stride * (k2 + 1); + pushVector(a2); + pushVector(b3); + pushVector(c2); + } + } + index2 += stride * count2; + } + } else { + for (let i = 0, l2 = indices.length; i < l2; i += stride) { + pushVector(i); + } + } + } + function getGeometry(id) { + return getBuild(library.geometries[id], buildGeometry); + } + function parseKinematicsModel(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + joints: {}, + links: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + parseKinematicsTechniqueCommon(child, data2); + break; + } + } + library.kinematicsModels[xml2.getAttribute("id")] = data2; + } + function buildKinematicsModel(data2) { + if (data2.build !== void 0) return data2.build; + return data2; + } + function getKinematicsModel(id) { + return getBuild(library.kinematicsModels[id], buildKinematicsModel); + } + function parseKinematicsTechniqueCommon(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "joint": + data2.joints[child.getAttribute("sid")] = parseKinematicsJoint(child); + break; + case "link": + data2.links.push(parseKinematicsLink(child)); + break; + } + } + } + function parseKinematicsJoint(xml2) { + let data2; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "prismatic": + case "revolute": + data2 = parseKinematicsJointParameter(child); + break; + } + } + return data2; + } + function parseKinematicsJointParameter(xml2) { + const data2 = { + sid: xml2.getAttribute("sid"), + name: xml2.getAttribute("name") || "", + axis: new Vector3(), + limits: { + min: 0, + max: 0 + }, + type: xml2.nodeName, + static: false, + zeroPosition: 0, + middlePosition: 0 + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "axis": + const array = parseFloats(child.textContent); + data2.axis.fromArray(array); + break; + case "limits": + const max2 = child.getElementsByTagName("max")[0]; + const min = child.getElementsByTagName("min")[0]; + data2.limits.max = parseFloat(max2.textContent); + data2.limits.min = parseFloat(min.textContent); + break; + } + } + if (data2.limits.min >= data2.limits.max) { + data2.static = true; + } + data2.middlePosition = (data2.limits.min + data2.limits.max) / 2; + return data2; + } + function parseKinematicsLink(xml2) { + const data2 = { + sid: xml2.getAttribute("sid"), + name: xml2.getAttribute("name") || "", + attachments: [], + transforms: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "attachment_full": + data2.attachments.push(parseKinematicsAttachment(child)); + break; + case "matrix": + case "translate": + case "rotate": + data2.transforms.push(parseKinematicsTransform(child)); + break; + } + } + return data2; + } + function parseKinematicsAttachment(xml2) { + const data2 = { + joint: xml2.getAttribute("joint").split("/").pop(), + transforms: [], + links: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "link": + data2.links.push(parseKinematicsLink(child)); + break; + case "matrix": + case "translate": + case "rotate": + data2.transforms.push(parseKinematicsTransform(child)); + break; + } + } + return data2; + } + function parseKinematicsTransform(xml2) { + const data2 = { + type: xml2.nodeName + }; + const array = parseFloats(xml2.textContent); + switch (data2.type) { + case "matrix": + data2.obj = new Matrix4(); + data2.obj.fromArray(array).transpose(); + break; + case "translate": + data2.obj = new Vector3(); + data2.obj.fromArray(array); + break; + case "rotate": + data2.obj = new Vector3(); + data2.obj.fromArray(array); + data2.angle = MathUtils.degToRad(array[3]); + break; + } + return data2; + } + function parsePhysicsModel(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + rigidBodies: {} + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "rigid_body": + data2.rigidBodies[child.getAttribute("name")] = {}; + parsePhysicsRigidBody(child, data2.rigidBodies[child.getAttribute("name")]); + break; + } + } + library.physicsModels[xml2.getAttribute("id")] = data2; + } + function parsePhysicsRigidBody(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + parsePhysicsTechniqueCommon(child, data2); + break; + } + } + } + function parsePhysicsTechniqueCommon(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "inertia": + data2.inertia = parseFloats(child.textContent); + break; + case "mass": + data2.mass = parseFloats(child.textContent)[0]; + break; + } + } + } + function parseKinematicsScene(xml2) { + const data2 = { + bindJointAxis: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "bind_joint_axis": + data2.bindJointAxis.push(parseKinematicsBindJointAxis(child)); + break; + } + } + library.kinematicsScenes[parseId(xml2.getAttribute("url"))] = data2; + } + function parseKinematicsBindJointAxis(xml2) { + const data2 = { + target: xml2.getAttribute("target").split("/").pop() + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "axis": + const param = child.getElementsByTagName("param")[0]; + data2.axis = param.textContent; + const tmpJointIndex = data2.axis.split("inst_").pop().split("axis")[0]; + data2.jointIndex = tmpJointIndex.substring(0, tmpJointIndex.length - 1); + break; + } + } + return data2; + } + function buildKinematicsScene(data2) { + if (data2.build !== void 0) return data2.build; + return data2; + } + function getKinematicsScene(id) { + return getBuild(library.kinematicsScenes[id], buildKinematicsScene); + } + function setupKinematics() { + const kinematicsModelId = Object.keys(library.kinematicsModels)[0]; + const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0]; + const visualSceneId = Object.keys(library.visualScenes)[0]; + if (kinematicsModelId === void 0 || kinematicsSceneId === void 0) return; + const kinematicsModel = getKinematicsModel(kinematicsModelId); + const kinematicsScene = getKinematicsScene(kinematicsSceneId); + const visualScene = getVisualScene(visualSceneId); + const bindJointAxis = kinematicsScene.bindJointAxis; + const jointMap = {}; + for (let i = 0, l2 = bindJointAxis.length; i < l2; i++) { + const axis = bindJointAxis[i]; + const targetElement = collada.querySelector('[sid="' + axis.target + '"]'); + if (targetElement) { + const parentVisualElement = targetElement.parentElement; + connect(axis.jointIndex, parentVisualElement); + } + } + function connect(jointIndex, visualElement) { + const visualElementName = visualElement.getAttribute("name"); + const joint = kinematicsModel.joints[jointIndex]; + visualScene.traverse(function(object) { + if (object.name === visualElementName) { + jointMap[jointIndex] = { + object, + transforms: buildTransformList(visualElement), + joint, + position: joint.zeroPosition + }; + } + }); + } + const m0 = new Matrix4(); + kinematics = { + joints: kinematicsModel && kinematicsModel.joints, + getJointValue: function(jointIndex) { + const jointData = jointMap[jointIndex]; + if (jointData) { + return jointData.position; + } else { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " doesn't exist."); + } + }, + setJointValue: function(jointIndex, value2) { + const jointData = jointMap[jointIndex]; + if (jointData) { + const joint = jointData.joint; + if (value2 > joint.limits.max || value2 < joint.limits.min) { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " value " + value2 + " outside of limits (min: " + joint.limits.min + ", max: " + joint.limits.max + ")."); + } else if (joint.static) { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " is static."); + } else { + const object = jointData.object; + const axis = joint.axis; + const transforms = jointData.transforms; + matrix3.identity(); + for (let i = 0; i < transforms.length; i++) { + const transform2 = transforms[i]; + if (transform2.sid && transform2.sid.indexOf(jointIndex) !== -1) { + switch (joint.type) { + case "revolute": + matrix3.multiply(m0.makeRotationAxis(axis, MathUtils.degToRad(value2))); + break; + case "prismatic": + matrix3.multiply(m0.makeTranslation(axis.x * value2, axis.y * value2, axis.z * value2)); + break; + default: + console.warn("THREE.ColladaLoader: Unknown joint type: " + joint.type); + break; + } + } else { + switch (transform2.type) { + case "matrix": + matrix3.multiply(transform2.obj); + break; + case "translate": + matrix3.multiply(m0.makeTranslation(transform2.obj.x, transform2.obj.y, transform2.obj.z)); + break; + case "scale": + matrix3.scale(transform2.obj); + break; + case "rotate": + matrix3.multiply(m0.makeRotationAxis(transform2.obj, transform2.angle)); + break; + } + } + } + object.matrix.copy(matrix3); + object.matrix.decompose(object.position, object.quaternion, object.scale); + jointMap[jointIndex].position = value2; + } + } else { + console.log("THREE.ColladaLoader: " + jointIndex + " does not exist."); + } + } + }; + } + function buildTransformList(node) { + const transforms = []; + const xml2 = collada.querySelector('[id="' + node.id + '"]'); + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let array, vector2; + switch (child.nodeName) { + case "matrix": + array = parseFloats(child.textContent); + const matrix4 = new Matrix4().fromArray(array).transpose(); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: matrix4 + }); + break; + case "translate": + case "scale": + array = parseFloats(child.textContent); + vector2 = new Vector3().fromArray(array); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: vector2 + }); + break; + case "rotate": + array = parseFloats(child.textContent); + vector2 = new Vector3().fromArray(array); + const angle = MathUtils.degToRad(array[3]); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: vector2, + angle + }); + break; + } + } + return transforms; + } + function prepareNodes(xml2) { + const elements = xml2.getElementsByTagName("node"); + for (let i = 0; i < elements.length; i++) { + const element = elements[i]; + if (element.hasAttribute("id") === false) { + element.setAttribute("id", generateId()); + } + } + } + const matrix3 = new Matrix4(); + const vector = new Vector3(); + function parseNode(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + type: xml2.getAttribute("type"), + id: xml2.getAttribute("id"), + sid: xml2.getAttribute("sid"), + matrix: new Matrix4(), + nodes: [], + instanceCameras: [], + instanceControllers: [], + instanceLights: [], + instanceGeometries: [], + instanceNodes: [], + transforms: {} + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let array; + switch (child.nodeName) { + case "node": + data2.nodes.push(child.getAttribute("id")); + parseNode(child); + break; + case "instance_camera": + data2.instanceCameras.push(parseId(child.getAttribute("url"))); + break; + case "instance_controller": + data2.instanceControllers.push(parseNodeInstance(child)); + break; + case "instance_light": + data2.instanceLights.push(parseId(child.getAttribute("url"))); + break; + case "instance_geometry": + data2.instanceGeometries.push(parseNodeInstance(child)); + break; + case "instance_node": + data2.instanceNodes.push(parseId(child.getAttribute("url"))); + break; + case "matrix": + array = parseFloats(child.textContent); + data2.matrix.multiply(matrix3.fromArray(array).transpose()); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "translate": + array = parseFloats(child.textContent); + vector.fromArray(array); + data2.matrix.multiply(matrix3.makeTranslation(vector.x, vector.y, vector.z)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "rotate": + array = parseFloats(child.textContent); + const angle = MathUtils.degToRad(array[3]); + data2.matrix.multiply(matrix3.makeRotationAxis(vector.fromArray(array), angle)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "scale": + array = parseFloats(child.textContent); + data2.matrix.scale(vector.fromArray(array)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "extra": + break; + default: + console.log(child); + } + } + if (hasNode(data2.id)) { + console.warn("THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.", data2.id); + } else { + library.nodes[data2.id] = data2; + } + return data2; + } + function parseNodeInstance(xml2) { + const data2 = { + id: parseId(xml2.getAttribute("url")), + materials: {}, + skeletons: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "bind_material": + const instances = child.getElementsByTagName("instance_material"); + for (let j = 0; j < instances.length; j++) { + const instance = instances[j]; + const symbol = instance.getAttribute("symbol"); + const target = instance.getAttribute("target"); + data2.materials[symbol] = parseId(target); + } + break; + case "skeleton": + data2.skeletons.push(parseId(child.textContent)); + break; + default: + break; + } + } + return data2; + } + function buildSkeleton(skeletons, joints) { + const boneData = []; + const sortedBoneData = []; + let i, j, data2; + for (i = 0; i < skeletons.length; i++) { + const skeleton = skeletons[i]; + let root; + if (hasNode(skeleton)) { + root = getNode(skeleton); + buildBoneHierarchy(root, joints, boneData); + } else if (hasVisualScene(skeleton)) { + const visualScene = library.visualScenes[skeleton]; + const children = visualScene.children; + for (let j2 = 0; j2 < children.length; j2++) { + const child = children[j2]; + if (child.type === "JOINT") { + const root2 = getNode(child.id); + buildBoneHierarchy(root2, joints, boneData); + } + } + } else { + console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:", skeleton); + } + } + for (i = 0; i < joints.length; i++) { + for (j = 0; j < boneData.length; j++) { + data2 = boneData[j]; + if (data2.bone.name === joints[i].name) { + sortedBoneData[i] = data2; + data2.processed = true; + break; + } + } + } + for (i = 0; i < boneData.length; i++) { + data2 = boneData[i]; + if (data2.processed === false) { + sortedBoneData.push(data2); + data2.processed = true; + } + } + const bones = []; + const boneInverses = []; + for (i = 0; i < sortedBoneData.length; i++) { + data2 = sortedBoneData[i]; + bones.push(data2.bone); + boneInverses.push(data2.boneInverse); + } + return new Skeleton(bones, boneInverses); + } + function buildBoneHierarchy(root, joints, boneData) { + root.traverse(function(object) { + if (object.isBone === true) { + let boneInverse; + for (let i = 0; i < joints.length; i++) { + const joint = joints[i]; + if (joint.name === object.name) { + boneInverse = joint.boneInverse; + break; + } + } + if (boneInverse === void 0) { + boneInverse = new Matrix4(); + } + boneData.push({ bone: object, boneInverse, processed: false }); + } + }); + } + function buildNode(data2) { + const objects = []; + const matrix4 = data2.matrix; + const nodes = data2.nodes; + const type = data2.type; + const instanceCameras = data2.instanceCameras; + const instanceControllers = data2.instanceControllers; + const instanceLights = data2.instanceLights; + const instanceGeometries = data2.instanceGeometries; + const instanceNodes = data2.instanceNodes; + for (let i = 0, l2 = nodes.length; i < l2; i++) { + objects.push(getNode(nodes[i])); + } + for (let i = 0, l2 = instanceCameras.length; i < l2; i++) { + const instanceCamera = getCamera(instanceCameras[i]); + if (instanceCamera !== null) { + objects.push(instanceCamera.clone()); + } + } + for (let i = 0, l2 = instanceControllers.length; i < l2; i++) { + const instance = instanceControllers[i]; + const controller = getController(instance.id); + const geometries = getGeometry(controller.id); + const newObjects = buildObjects(geometries, instance.materials); + const skeletons = instance.skeletons; + const joints = controller.skin.joints; + const skeleton = buildSkeleton(skeletons, joints); + for (let j = 0, jl = newObjects.length; j < jl; j++) { + const object2 = newObjects[j]; + if (object2.isSkinnedMesh) { + object2.bind(skeleton, controller.skin.bindMatrix); + object2.normalizeSkinWeights(); + } + objects.push(object2); + } + } + for (let i = 0, l2 = instanceLights.length; i < l2; i++) { + const instanceLight = getLight(instanceLights[i]); + if (instanceLight !== null) { + objects.push(instanceLight.clone()); + } + } + for (let i = 0, l2 = instanceGeometries.length; i < l2; i++) { + const instance = instanceGeometries[i]; + const geometries = getGeometry(instance.id); + const newObjects = buildObjects(geometries, instance.materials); + for (let j = 0, jl = newObjects.length; j < jl; j++) { + objects.push(newObjects[j]); + } + } + for (let i = 0, l2 = instanceNodes.length; i < l2; i++) { + objects.push(getNode(instanceNodes[i]).clone()); + } + let object; + if (nodes.length === 0 && objects.length === 1) { + object = objects[0]; + } else { + object = type === "JOINT" ? new Bone() : new Group(); + for (let i = 0; i < objects.length; i++) { + object.add(objects[i]); + } + } + object.name = type === "JOINT" ? data2.sid : data2.name; + object.matrix.copy(matrix4); + object.matrix.decompose(object.position, object.quaternion, object.scale); + return object; + } + const fallbackMaterial = new MeshBasicMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 16711935 + }); + function resolveMaterialBinding(keys2, instanceMaterials) { + const materials = []; + for (let i = 0, l2 = keys2.length; i < l2; i++) { + const id = instanceMaterials[keys2[i]]; + if (id === void 0) { + console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.", keys2[i]); + materials.push(fallbackMaterial); + } else { + materials.push(getMaterial2(id)); + } + } + return materials; + } + function buildObjects(geometries, instanceMaterials) { + const objects = []; + for (const type in geometries) { + const geometry = geometries[type]; + const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials); + if (materials.length === 0) { + if (type === "lines" || type === "linestrips") { + materials.push(new LineBasicMaterial()); + } else { + materials.push(new MeshPhongMaterial()); + } + } + if (type === "lines" || type === "linestrips") { + for (let i = 0, l2 = materials.length; i < l2; i++) { + const material2 = materials[i]; + if (material2.isMeshPhongMaterial === true || material2.isMeshLambertMaterial === true) { + const lineMaterial = new LineBasicMaterial(); + lineMaterial.color.copy(material2.color); + lineMaterial.opacity = material2.opacity; + lineMaterial.transparent = material2.transparent; + materials[i] = lineMaterial; + } + } + } + const skinning = geometry.data.attributes.skinIndex !== void 0; + const material = materials.length === 1 ? materials[0] : materials; + let object; + switch (type) { + case "lines": + object = new LineSegments(geometry.data, material); + break; + case "linestrips": + object = new Line(geometry.data, material); + break; + case "triangles": + case "polylist": + if (skinning) { + object = new SkinnedMesh(geometry.data, material); + } else { + object = new Mesh(geometry.data, material); + } + break; + } + objects.push(object); + } + return objects; + } + function hasNode(id) { + return library.nodes[id] !== void 0; + } + function getNode(id) { + return getBuild(library.nodes[id], buildNode); + } + function parseVisualScene(xml2) { + const data2 = { + name: xml2.getAttribute("name"), + children: [] + }; + prepareNodes(xml2); + const elements = getElementsByTagName(xml2, "node"); + for (let i = 0; i < elements.length; i++) { + data2.children.push(parseNode(elements[i])); + } + library.visualScenes[xml2.getAttribute("id")] = data2; + } + function buildVisualScene(data2) { + const group = new Group(); + group.name = data2.name; + const children = data2.children; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + group.add(getNode(child.id)); + } + return group; + } + function hasVisualScene(id) { + return library.visualScenes[id] !== void 0; + } + function getVisualScene(id) { + return getBuild(library.visualScenes[id], buildVisualScene); + } + function parseScene(xml2) { + const instance = getElementsByTagName(xml2, "instance_visual_scene")[0]; + return getVisualScene(parseId(instance.getAttribute("url"))); + } + function setupAnimations() { + const clips = library.clips; + if (isEmpty2(clips) === true) { + if (isEmpty2(library.animations) === false) { + const tracks = []; + for (const id in library.animations) { + const animationTracks = getAnimation(id); + for (let i = 0, l2 = animationTracks.length; i < l2; i++) { + tracks.push(animationTracks[i]); + } + } + animations.push(new AnimationClip("default", -1, tracks)); + } + } else { + for (const id in clips) { + animations.push(getAnimationClip(id)); + } + } + } + function parserErrorToText(parserError2) { + let result = ""; + const stack = [parserError2]; + while (stack.length) { + const node = stack.shift(); + if (node.nodeType === Node.TEXT_NODE) { + result += node.textContent; + } else { + result += "\n"; + stack.push.apply(stack, node.childNodes); + } + } + return result.trim(); + } + if (text2.length === 0) { + return { scene: new Scene() }; + } + const xml = new DOMParser().parseFromString(text2, "application/xml"); + const collada = getElementsByTagName(xml, "COLLADA")[0]; + const parserError = xml.getElementsByTagName("parsererror")[0]; + if (parserError !== void 0) { + const errorElement = getElementsByTagName(parserError, "div")[0]; + let errorText; + if (errorElement) { + errorText = errorElement.textContent; + } else { + errorText = parserErrorToText(parserError); + } + console.error("THREE.ColladaLoader: Failed to parse collada file.\n", errorText); + return null; + } + const version = collada.getAttribute("version"); + console.debug("THREE.ColladaLoader: File version", version); + const asset = parseAsset(getElementsByTagName(collada, "asset")[0]); + const textureLoader = new TextureLoader(this.manager); + textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + let tgaLoader; + if (TGALoader) { + tgaLoader = new TGALoader(this.manager); + tgaLoader.setPath(this.resourcePath || path); + } + const tempColor = new Color(); + const animations = []; + let kinematics = {}; + let count = 0; + const library = { + animations: {}, + clips: {}, + controllers: {}, + images: {}, + effects: {}, + materials: {}, + cameras: {}, + lights: {}, + geometries: {}, + nodes: {}, + visualScenes: {}, + kinematicsModels: {}, + physicsModels: {}, + kinematicsScenes: {} + }; + parseLibrary(collada, "library_animations", "animation", parseAnimation); + parseLibrary(collada, "library_animation_clips", "animation_clip", parseAnimationClip); + parseLibrary(collada, "library_controllers", "controller", parseController); + parseLibrary(collada, "library_images", "image", parseImage); + parseLibrary(collada, "library_effects", "effect", parseEffect); + parseLibrary(collada, "library_materials", "material", parseMaterial); + parseLibrary(collada, "library_cameras", "camera", parseCamera); + parseLibrary(collada, "library_lights", "light", parseLight); + parseLibrary(collada, "library_geometries", "geometry", parseGeometry); + parseLibrary(collada, "library_nodes", "node", parseNode); + parseLibrary(collada, "library_visual_scenes", "visual_scene", parseVisualScene); + parseLibrary(collada, "library_kinematics_models", "kinematics_model", parseKinematicsModel); + parseLibrary(collada, "library_physics_models", "physics_model", parsePhysicsModel); + parseLibrary(collada, "scene", "instance_kinematics_scene", parseKinematicsScene); + buildLibrary(library.animations, buildAnimation); + buildLibrary(library.clips, buildAnimationClip); + buildLibrary(library.controllers, buildController); + buildLibrary(library.images, buildImage); + buildLibrary(library.effects, buildEffect); + buildLibrary(library.materials, buildMaterial2); + buildLibrary(library.cameras, buildCamera2); + buildLibrary(library.lights, buildLight); + buildLibrary(library.geometries, buildGeometry); + buildLibrary(library.visualScenes, buildVisualScene); + setupAnimations(); + setupKinematics(); + const scene = parseScene(getElementsByTagName(collada, "scene")[0]); + scene.animations = animations; + if (asset.upAxis === "Z_UP") { + console.warn("THREE.ColladaLoader: You are loading an asset with a Z-UP coordinate system. The loader just rotates the asset to transform it into Y-UP. The vertex data are not converted, see #24289."); + scene.rotation.set(-Math.PI / 2, 0, 0); + } + scene.scale.multiplyScalar(asset.unit); + return { + get animations() { + console.warn("THREE.ColladaLoader: Please access animations over scene.animations now."); + return animations; + }, + kinematics, + library, + scene + }; + } +}; + +// node_modules/three/examples/jsm/loaders/DDSLoader.js +var DDSLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 }; + const DDS_MAGIC = 542327876; + const DDSD_MIPMAPCOUNT = 131072; + const DDSCAPS2_CUBEMAP = 512; + const DDSCAPS2_CUBEMAP_POSITIVEX = 1024; + const DDSCAPS2_CUBEMAP_NEGATIVEX = 2048; + const DDSCAPS2_CUBEMAP_POSITIVEY = 4096; + const DDSCAPS2_CUBEMAP_NEGATIVEY = 8192; + const DDSCAPS2_CUBEMAP_POSITIVEZ = 16384; + const DDSCAPS2_CUBEMAP_NEGATIVEZ = 32768; + const DXGI_FORMAT_BC6H_UF16 = 95; + const DXGI_FORMAT_BC6H_SF16 = 96; + function fourCCToInt32(value2) { + return value2.charCodeAt(0) + (value2.charCodeAt(1) << 8) + (value2.charCodeAt(2) << 16) + (value2.charCodeAt(3) << 24); + } + function int32ToFourCC(value2) { + return String.fromCharCode( + value2 & 255, + value2 >> 8 & 255, + value2 >> 16 & 255, + value2 >> 24 & 255 + ); + } + function loadARGBMip(buffer2, dataOffset2, width2, height2) { + const dataLength = width2 * height2 * 4; + const srcBuffer = new Uint8Array(buffer2, dataOffset2, dataLength); + const byteArray = new Uint8Array(dataLength); + let dst = 0; + let src = 0; + for (let y2 = 0; y2 < height2; y2++) { + for (let x2 = 0; x2 < width2; x2++) { + const b3 = srcBuffer[src]; + src++; + const g2 = srcBuffer[src]; + src++; + const r = srcBuffer[src]; + src++; + const a2 = srcBuffer[src]; + src++; + byteArray[dst] = r; + dst++; + byteArray[dst] = g2; + dst++; + byteArray[dst] = b3; + dst++; + byteArray[dst] = a2; + dst++; + } + } + return byteArray; + } + const FOURCC_DXT1 = fourCCToInt32("DXT1"); + const FOURCC_DXT3 = fourCCToInt32("DXT3"); + const FOURCC_DXT5 = fourCCToInt32("DXT5"); + const FOURCC_ETC1 = fourCCToInt32("ETC1"); + const FOURCC_DX10 = fourCCToInt32("DX10"); + const headerLengthInt = 31; + const extendedHeaderLengthInt = 5; + const off_magic = 0; + const off_size = 1; + const off_flags = 2; + const off_height = 3; + const off_width = 4; + const off_mipmapCount = 7; + const off_pfFourCC = 21; + const off_RGBBitCount = 22; + const off_RBitMask = 23; + const off_GBitMask = 24; + const off_BBitMask = 25; + const off_ABitMask = 26; + const off_caps2 = 28; + const off_dxgiFormat = 0; + const header = new Int32Array(buffer, 0, headerLengthInt); + if (header[off_magic] !== DDS_MAGIC) { + console.error("THREE.DDSLoader.parse: Invalid magic number in DDS header."); + return dds; + } + let blockBytes; + const fourCC = header[off_pfFourCC]; + let isRGBAUncompressed = false; + let dataOffset = header[off_size] + 4; + switch (fourCC) { + case FOURCC_DXT1: + blockBytes = 8; + dds.format = RGB_S3TC_DXT1_Format; + break; + case FOURCC_DXT3: + blockBytes = 16; + dds.format = RGBA_S3TC_DXT3_Format; + break; + case FOURCC_DXT5: + blockBytes = 16; + dds.format = RGBA_S3TC_DXT5_Format; + break; + case FOURCC_ETC1: + blockBytes = 8; + dds.format = RGB_ETC1_Format; + break; + case FOURCC_DX10: + dataOffset += extendedHeaderLengthInt * 4; + const extendedHeader = new Int32Array(buffer, (headerLengthInt + 1) * 4, extendedHeaderLengthInt); + const dxgiFormat = extendedHeader[off_dxgiFormat]; + switch (dxgiFormat) { + case DXGI_FORMAT_BC6H_SF16: { + blockBytes = 16; + dds.format = RGB_BPTC_SIGNED_Format; + break; + } + case DXGI_FORMAT_BC6H_UF16: { + blockBytes = 16; + dds.format = RGB_BPTC_UNSIGNED_Format; + break; + } + default: { + console.error("THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ", dxgiFormat); + return dds; + } + } + break; + default: + if (header[off_RGBBitCount] === 32 && header[off_RBitMask] & 16711680 && header[off_GBitMask] & 65280 && header[off_BBitMask] & 255 && header[off_ABitMask] & 4278190080) { + isRGBAUncompressed = true; + blockBytes = 64; + dds.format = RGBAFormat; + } else { + console.error("THREE.DDSLoader.parse: Unsupported FourCC code ", int32ToFourCC(fourCC)); + return dds; + } + } + dds.mipmapCount = 1; + if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) { + dds.mipmapCount = Math.max(1, header[off_mipmapCount]); + } + const caps2 = header[off_caps2]; + dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false; + if (dds.isCubemap && (!(caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ))) { + console.error("THREE.DDSLoader.parse: Incomplete cubemap faces"); + return dds; + } + dds.width = header[off_width]; + dds.height = header[off_height]; + const faces = dds.isCubemap ? 6 : 1; + for (let face = 0; face < faces; face++) { + let width2 = dds.width; + let height2 = dds.height; + for (let i = 0; i < dds.mipmapCount; i++) { + let byteArray, dataLength; + if (isRGBAUncompressed) { + byteArray = loadARGBMip(buffer, dataOffset, width2, height2); + dataLength = byteArray.length; + } else { + dataLength = Math.max(4, width2) / 4 * Math.max(4, height2) / 4 * blockBytes; + byteArray = new Uint8Array(buffer, dataOffset, dataLength); + } + const mipmap = { "data": byteArray, "width": width2, "height": height2 }; + dds.mipmaps.push(mipmap); + dataOffset += dataLength; + width2 = Math.max(width2 >> 1, 1); + height2 = Math.max(height2 >> 1, 1); + } + } + return dds; + } +}; + +// node_modules/three/examples/jsm/loaders/DRACOLoader.js +var _taskCache2 = /* @__PURE__ */ new WeakMap(); +var DRACOLoader = class extends Loader { + constructor(manager) { + super(manager); + this.decoderPath = ""; + this.decoderConfig = {}; + this.decoderBinary = null; + this.decoderPending = null; + this.workerLimit = 4; + this.workerPool = []; + this.workerNextTaskID = 1; + this.workerSourceURL = ""; + this.defaultAttributeIDs = { + position: "POSITION", + normal: "NORMAL", + color: "COLOR", + uv: "TEX_COORD" + }; + this.defaultAttributeTypes = { + position: "Float32Array", + normal: "Float32Array", + color: "Float32Array", + uv: "Float32Array" + }; + } + setDecoderPath(path) { + this.decoderPath = path; + return this; + } + setDecoderConfig(config) { + this.decoderConfig = config; + return this; + } + setWorkerLimit(workerLimit) { + this.workerLimit = workerLimit; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + this.parse(buffer, onLoad, onError); + }, onProgress, onError); + } + parse(buffer, onLoad, onError = () => { + }) { + this.decodeDracoFile(buffer, onLoad, null, null, SRGBColorSpace, onError).catch(onError); + } + decodeDracoFile(buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => { + }) { + const taskConfig = { + attributeIDs: attributeIDs || this.defaultAttributeIDs, + attributeTypes: attributeTypes || this.defaultAttributeTypes, + useUniqueIDs: !!attributeIDs, + vertexColorSpace + }; + return this.decodeGeometry(buffer, taskConfig).then(callback).catch(onError); + } + decodeGeometry(buffer, taskConfig) { + const taskKey = JSON.stringify(taskConfig); + if (_taskCache2.has(buffer)) { + const cachedTask = _taskCache2.get(buffer); + if (cachedTask.key === taskKey) { + return cachedTask.promise; + } else if (buffer.byteLength === 0) { + throw new Error( + "THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred." + ); + } + } + let worker; + const taskID = this.workerNextTaskID++; + const taskCost = buffer.byteLength; + const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => { + worker = _worker; + return new Promise((resolve, reject2) => { + worker._callbacks[taskID] = { resolve, reject: reject2 }; + worker.postMessage({ type: "decode", id: taskID, taskConfig, buffer }, [buffer]); + }); + }).then((message) => this._createGeometry(message.geometry)); + geometryPending.catch(() => true).then(() => { + if (worker && taskID) { + this._releaseTask(worker, taskID); + } + }); + _taskCache2.set(buffer, { + key: taskKey, + promise: geometryPending + }); + return geometryPending; + } + _createGeometry(geometryData) { + const geometry = new BufferGeometry(); + if (geometryData.index) { + geometry.setIndex(new BufferAttribute(geometryData.index.array, 1)); + } + for (let i = 0; i < geometryData.attributes.length; i++) { + const result = geometryData.attributes[i]; + const name2 = result.name; + const array = result.array; + const itemSize = result.itemSize; + const attribute = new BufferAttribute(array, itemSize); + if (name2 === "color") { + this._assignVertexColorSpace(attribute, result.vertexColorSpace); + attribute.normalized = array instanceof Float32Array === false; + } + geometry.setAttribute(name2, attribute); + } + return geometry; + } + _assignVertexColorSpace(attribute, inputColorSpace) { + if (inputColorSpace !== SRGBColorSpace) return; + const _color5 = new Color(); + for (let i = 0, il = attribute.count; i < il; i++) { + _color5.fromBufferAttribute(attribute, i).convertSRGBToLinear(); + attribute.setXYZ(i, _color5.r, _color5.g, _color5.b); + } + } + _loadLibrary(url, responseType) { + const loader = new FileLoader(this.manager); + loader.setPath(this.decoderPath); + loader.setResponseType(responseType); + loader.setWithCredentials(this.withCredentials); + return new Promise((resolve, reject2) => { + loader.load(url, resolve, void 0, reject2); + }); + } + preload() { + this._initDecoder(); + return this; + } + _initDecoder() { + if (this.decoderPending) return this.decoderPending; + const useJS = typeof WebAssembly !== "object" || this.decoderConfig.type === "js"; + const librariesPending = []; + if (useJS) { + librariesPending.push(this._loadLibrary("draco_decoder.js", "text")); + } else { + librariesPending.push(this._loadLibrary("draco_wasm_wrapper.js", "text")); + librariesPending.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer")); + } + this.decoderPending = Promise.all(librariesPending).then((libraries) => { + const jsContent = libraries[0]; + if (!useJS) { + this.decoderConfig.wasmBinary = libraries[1]; + } + const fn = DRACOWorker.toString(); + const body = [ + "/* draco decoder */", + jsContent, + "", + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + }); + return this.decoderPending; + } + _getWorker(taskID, taskCost) { + return this._initDecoder().then(() => { + if (this.workerPool.length < this.workerLimit) { + const worker2 = new Worker(this.workerSourceURL); + worker2._callbacks = {}; + worker2._taskCosts = {}; + worker2._taskLoad = 0; + worker2.postMessage({ type: "init", decoderConfig: this.decoderConfig }); + worker2.onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "decode": + worker2._callbacks[message.id].resolve(message); + break; + case "error": + worker2._callbacks[message.id].reject(message); + break; + default: + console.error('THREE.DRACOLoader: Unexpected message, "' + message.type + '"'); + } + }; + this.workerPool.push(worker2); + } else { + this.workerPool.sort(function(a2, b3) { + return a2._taskLoad > b3._taskLoad ? -1 : 1; + }); + } + const worker = this.workerPool[this.workerPool.length - 1]; + worker._taskCosts[taskID] = taskCost; + worker._taskLoad += taskCost; + return worker; + }); + } + _releaseTask(worker, taskID) { + worker._taskLoad -= worker._taskCosts[taskID]; + delete worker._callbacks[taskID]; + delete worker._taskCosts[taskID]; + } + debug() { + console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); + } + dispose() { + for (let i = 0; i < this.workerPool.length; ++i) { + this.workerPool[i].terminate(); + } + this.workerPool.length = 0; + if (this.workerSourceURL !== "") { + URL.revokeObjectURL(this.workerSourceURL); + } + return this; + } +}; +function DRACOWorker() { + let decoderConfig; + let decoderPending; + onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "init": + decoderConfig = message.decoderConfig; + decoderPending = new Promise(function(resolve) { + decoderConfig.onModuleLoaded = function(draco) { + resolve({ draco }); + }; + DracoDecoderModule(decoderConfig); + }); + break; + case "decode": + const buffer = message.buffer; + const taskConfig = message.taskConfig; + decoderPending.then((module2) => { + const draco = module2.draco; + const decoder = new draco.Decoder(); + try { + const geometry = decodeGeometry(draco, decoder, new Int8Array(buffer), taskConfig); + const buffers = geometry.attributes.map((attr) => attr.array.buffer); + if (geometry.index) buffers.push(geometry.index.array.buffer); + self.postMessage({ type: "decode", id: message.id, geometry }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ type: "error", id: message.id, error: error.message }); + } finally { + draco.destroy(decoder); + } + }); + break; + } + }; + function decodeGeometry(draco, decoder, array, taskConfig) { + const attributeIDs = taskConfig.attributeIDs; + const attributeTypes = taskConfig.attributeTypes; + let dracoGeometry; + let decodingStatus; + const geometryType = decoder.GetEncodedGeometryType(array); + if (geometryType === draco.TRIANGULAR_MESH) { + dracoGeometry = new draco.Mesh(); + decodingStatus = decoder.DecodeArrayToMesh(array, array.byteLength, dracoGeometry); + } else if (geometryType === draco.POINT_CLOUD) { + dracoGeometry = new draco.PointCloud(); + decodingStatus = decoder.DecodeArrayToPointCloud(array, array.byteLength, dracoGeometry); + } else { + throw new Error("THREE.DRACOLoader: Unexpected geometry type."); + } + if (!decodingStatus.ok() || dracoGeometry.ptr === 0) { + throw new Error("THREE.DRACOLoader: Decoding failed: " + decodingStatus.error_msg()); + } + const geometry = { index: null, attributes: [] }; + for (const attributeName in attributeIDs) { + const attributeType = self[attributeTypes[attributeName]]; + let attribute; + let attributeID; + if (taskConfig.useUniqueIDs) { + attributeID = attributeIDs[attributeName]; + attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID); + } else { + attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]); + if (attributeID === -1) continue; + attribute = decoder.GetAttribute(dracoGeometry, attributeID); + } + const attributeResult = decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute); + if (attributeName === "color") { + attributeResult.vertexColorSpace = taskConfig.vertexColorSpace; + } + geometry.attributes.push(attributeResult); + } + if (geometryType === draco.TRIANGULAR_MESH) { + geometry.index = decodeIndex(draco, decoder, dracoGeometry); + } + draco.destroy(dracoGeometry); + return geometry; + } + function decodeIndex(draco, decoder, dracoGeometry) { + const numFaces = dracoGeometry.num_faces(); + const numIndices = numFaces * 3; + const byteLength = numIndices * 4; + const ptr = draco._malloc(byteLength); + decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr); + const index2 = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice(); + draco._free(ptr); + return { array: index2, itemSize: 1 }; + } + function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) { + const numComponents = attribute.num_components(); + const numPoints = dracoGeometry.num_points(); + const numValues = numPoints * numComponents; + const byteLength = numValues * attributeType.BYTES_PER_ELEMENT; + const dataType = getDracoDataType(draco, attributeType); + const ptr = draco._malloc(byteLength); + decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr); + const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice(); + draco._free(ptr); + return { + name: attributeName, + array, + itemSize: numComponents + }; + } + function getDracoDataType(draco, attributeType) { + switch (attributeType) { + case Float32Array: + return draco.DT_FLOAT32; + case Int8Array: + return draco.DT_INT8; + case Int16Array: + return draco.DT_INT16; + case Int32Array: + return draco.DT_INT32; + case Uint8Array: + return draco.DT_UINT8; + case Uint16Array: + return draco.DT_UINT16; + case Uint32Array: + return draco.DT_UINT32; + } + } +} + +// node_modules/three/examples/jsm/loaders/FBXLoader.js +var fbxTree; +var connections; +var sceneGraph; +var FBXLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(FBXBuffer, path) { + if (isFbxFormatBinary(FBXBuffer)) { + fbxTree = new BinaryParser().parse(FBXBuffer); + } else { + const FBXText = convertArrayBufferToString(FBXBuffer); + if (!isFbxFormatASCII(FBXText)) { + throw new Error("THREE.FBXLoader: Unknown format."); + } + if (getFbxVersion(FBXText) < 7e3) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText)); + } + fbxTree = new TextParser().parse(FBXText); + } + const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree); + } +}; +var FBXTreeParser = class { + constructor(textureLoader, manager) { + this.textureLoader = textureLoader; + this.manager = manager; + } + parse() { + connections = this.parseConnections(); + const images = this.parseImages(); + const textures = this.parseTextures(images); + const materials = this.parseMaterials(textures); + const deformers = this.parseDeformers(); + const geometryMap = new GeometryParser().parse(deformers); + this.parseScene(deformers, geometryMap, materials); + return sceneGraph; + } + // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry ) + // and details the connection type + parseConnections() { + const connectionMap = /* @__PURE__ */ new Map(); + if ("Connections" in fbxTree) { + const rawConnections = fbxTree.Connections.connections; + rawConnections.forEach(function(rawConnection) { + const fromID = rawConnection[0]; + const toID = rawConnection[1]; + const relationship = rawConnection[2]; + if (!connectionMap.has(fromID)) { + connectionMap.set(fromID, { + parents: [], + children: [] + }); + } + const parentRelationship = { ID: toID, relationship }; + connectionMap.get(fromID).parents.push(parentRelationship); + if (!connectionMap.has(toID)) { + connectionMap.set(toID, { + parents: [], + children: [] + }); + } + const childRelationship = { ID: fromID, relationship }; + connectionMap.get(toID).children.push(childRelationship); + }); + } + return connectionMap; + } + // Parse FBXTree.Objects.Video for embedded image data + // These images are connected to textures in FBXTree.Objects.Textures + // via FBXTree.Connections. + parseImages() { + const images = {}; + const blobs = {}; + if ("Video" in fbxTree.Objects) { + const videoNodes = fbxTree.Objects.Video; + for (const nodeID in videoNodes) { + const videoNode = videoNodes[nodeID]; + const id = parseInt(nodeID); + images[id] = videoNode.RelativeFilename || videoNode.Filename; + if ("Content" in videoNode) { + const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0; + const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== ""; + if (arrayBufferContent || base64Content) { + const image = this.parseImage(videoNodes[nodeID]); + blobs[videoNode.RelativeFilename || videoNode.Filename] = image; + } + } + } + } + for (const id in images) { + const filename = images[id]; + if (blobs[filename] !== void 0) images[id] = blobs[filename]; + else images[id] = images[id].split("\\").pop(); + } + return images; + } + // Parse embedded image data in FBXTree.Video.Content + parseImage(videoNode) { + const content2 = videoNode.Content; + const fileName = videoNode.RelativeFilename || videoNode.Filename; + const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); + let type; + switch (extension) { + case "bmp": + type = "image/bmp"; + break; + case "jpg": + case "jpeg": + type = "image/jpeg"; + break; + case "png": + type = "image/png"; + break; + case "tif": + type = "image/tiff"; + break; + case "tga": + if (this.manager.getHandler(".tga") === null) { + console.warn("FBXLoader: TGA loader not found, skipping ", fileName); + } + type = "image/tga"; + break; + default: + console.warn('FBXLoader: Image type "' + extension + '" is not supported.'); + return; + } + if (typeof content2 === "string") { + return "data:" + type + ";base64," + content2; + } else { + const array = new Uint8Array(content2); + return window.URL.createObjectURL(new Blob([array], { type })); + } + } + // Parse nodes in FBXTree.Objects.Texture + // These contain details such as UV scaling, cropping, rotation etc and are connected + // to images in FBXTree.Objects.Video + parseTextures(images) { + const textureMap = /* @__PURE__ */ new Map(); + if ("Texture" in fbxTree.Objects) { + const textureNodes = fbxTree.Objects.Texture; + for (const nodeID in textureNodes) { + const texture = this.parseTexture(textureNodes[nodeID], images); + textureMap.set(parseInt(nodeID), texture); + } + } + return textureMap; + } + // Parse individual node in FBXTree.Objects.Texture + parseTexture(textureNode, images) { + const texture = this.loadTexture(textureNode, images); + texture.ID = textureNode.id; + texture.name = textureNode.attrName; + const wrapModeU = textureNode.WrapModeU; + const wrapModeV = textureNode.WrapModeV; + const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0; + const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0; + texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if ("Scaling" in textureNode) { + const values2 = textureNode.Scaling.value; + texture.repeat.x = values2[0]; + texture.repeat.y = values2[1]; + } + if ("Translation" in textureNode) { + const values2 = textureNode.Translation.value; + texture.offset.x = values2[0]; + texture.offset.y = values2[1]; + } + return texture; + } + // load a texture specified as a blob or data URI, or via an external URL using TextureLoader + loadTexture(textureNode, images) { + const nonNativeExtensions = /* @__PURE__ */ new Set(["tga", "tif", "tiff", "exr", "dds", "hdr", "ktx2"]); + const extension = textureNode.FileName.split(".").pop().toLowerCase(); + const loader = nonNativeExtensions.has(extension) ? this.manager.getHandler(`.${extension}`) : this.textureLoader; + if (!loader) { + console.warn( + `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`, + textureNode.RelativeFilename + ); + return new Texture(); + } + const loaderPath = loader.path; + if (!loaderPath) { + loader.setPath(this.textureLoader.path); + } + const children = connections.get(textureNode.id).children; + let fileName; + if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) { + fileName = images[children[0].ID]; + if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) { + loader.setPath(void 0); + } + } + const texture = loader.load(fileName); + loader.setPath(loaderPath); + return texture; + } + // Parse nodes in FBXTree.Objects.Material + parseMaterials(textureMap) { + const materialMap = /* @__PURE__ */ new Map(); + if ("Material" in fbxTree.Objects) { + const materialNodes = fbxTree.Objects.Material; + for (const nodeID in materialNodes) { + const material = this.parseMaterial(materialNodes[nodeID], textureMap); + if (material !== null) materialMap.set(parseInt(nodeID), material); + } + } + return materialMap; + } + // Parse single node in FBXTree.Objects.Material + // Materials are connected to texture maps in FBXTree.Objects.Textures + // FBX format currently only supports Lambert and Phong shading models + parseMaterial(materialNode, textureMap) { + const ID = materialNode.id; + const name2 = materialNode.attrName; + let type = materialNode.ShadingModel; + if (typeof type === "object") { + type = type.value; + } + if (!connections.has(ID)) return null; + const parameters = this.parseParameters(materialNode, textureMap, ID); + let material; + switch (type.toLowerCase()) { + case "phong": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type); + material = new MeshPhongMaterial(); + break; + } + material.setValues(parameters); + material.name = name2; + return material; + } + // Parse FBX material and return parameters suitable for a three.js material + // Also parse the texture map and return any textures associated with the material + parseParameters(materialNode, textureMap, ID) { + const parameters = {}; + if (materialNode.BumpFactor) { + parameters.bumpScale = materialNode.BumpFactor.value; + } + if (materialNode.Diffuse) { + parameters.color = new Color().fromArray(materialNode.Diffuse.value).convertSRGBToLinear(); + } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) { + parameters.color = new Color().fromArray(materialNode.DiffuseColor.value).convertSRGBToLinear(); + } + if (materialNode.DisplacementFactor) { + parameters.displacementScale = materialNode.DisplacementFactor.value; + } + if (materialNode.Emissive) { + parameters.emissive = new Color().fromArray(materialNode.Emissive.value).convertSRGBToLinear(); + } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) { + parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value).convertSRGBToLinear(); + } + if (materialNode.EmissiveFactor) { + parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value); + } + if (materialNode.Opacity) { + parameters.opacity = parseFloat(materialNode.Opacity.value); + } + if (parameters.opacity < 1) { + parameters.transparent = true; + } + if (materialNode.ReflectionFactor) { + parameters.reflectivity = materialNode.ReflectionFactor.value; + } + if (materialNode.Shininess) { + parameters.shininess = materialNode.Shininess.value; + } + if (materialNode.Specular) { + parameters.specular = new Color().fromArray(materialNode.Specular.value).convertSRGBToLinear(); + } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") { + parameters.specular = new Color().fromArray(materialNode.SpecularColor.value).convertSRGBToLinear(); + } + const scope = this; + connections.get(ID).children.forEach(function(child) { + const type = child.relationship; + switch (type) { + case "Bump": + parameters.bumpMap = scope.getTexture(textureMap, child.ID); + break; + case "Maya|TEX_ao_map": + parameters.aoMap = scope.getTexture(textureMap, child.ID); + break; + case "DiffuseColor": + case "Maya|TEX_color_map": + parameters.map = scope.getTexture(textureMap, child.ID); + if (parameters.map !== void 0) { + parameters.map.colorSpace = SRGBColorSpace; + } + break; + case "DisplacementColor": + parameters.displacementMap = scope.getTexture(textureMap, child.ID); + break; + case "EmissiveColor": + parameters.emissiveMap = scope.getTexture(textureMap, child.ID); + if (parameters.emissiveMap !== void 0) { + parameters.emissiveMap.colorSpace = SRGBColorSpace; + } + break; + case "NormalMap": + case "Maya|TEX_normal_map": + parameters.normalMap = scope.getTexture(textureMap, child.ID); + break; + case "ReflectionColor": + parameters.envMap = scope.getTexture(textureMap, child.ID); + if (parameters.envMap !== void 0) { + parameters.envMap.mapping = EquirectangularReflectionMapping; + parameters.envMap.colorSpace = SRGBColorSpace; + } + break; + case "SpecularColor": + parameters.specularMap = scope.getTexture(textureMap, child.ID); + if (parameters.specularMap !== void 0) { + parameters.specularMap.colorSpace = SRGBColorSpace; + } + break; + case "TransparentColor": + case "TransparencyFactor": + parameters.alphaMap = scope.getTexture(textureMap, child.ID); + parameters.transparent = true; + break; + case "AmbientColor": + case "ShininessExponent": + case "SpecularFactor": + case "VectorDisplacementColor": + default: + console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type); + break; + } + }); + return parameters; + } + // get a texture from the textureMap for use by a material. + getTexture(textureMap, id) { + if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) { + console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."); + id = connections.get(id).children[0].ID; + } + return textureMap.get(id); + } + // Parse nodes in FBXTree.Objects.Deformer + // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here + // Generates map of Skeleton-like objects for use later when generating and binding skeletons. + parseDeformers() { + const skeletons = {}; + const morphTargets = {}; + if ("Deformer" in fbxTree.Objects) { + const DeformerNodes = fbxTree.Objects.Deformer; + for (const nodeID in DeformerNodes) { + const deformerNode = DeformerNodes[nodeID]; + const relationships = connections.get(parseInt(nodeID)); + if (deformerNode.attrType === "Skin") { + const skeleton = this.parseSkeleton(relationships, DeformerNodes); + skeleton.ID = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."); + skeleton.geometryID = relationships.parents[0].ID; + skeletons[nodeID] = skeleton; + } else if (deformerNode.attrType === "BlendShape") { + const morphTarget = { + id: nodeID + }; + morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes); + morphTarget.id = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."); + morphTargets[nodeID] = morphTarget; + } + } + } + return { + skeletons, + morphTargets + }; + } + // Parse single nodes in FBXTree.Objects.Deformer + // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster' + // Each skin node represents a skeleton and each cluster node represents a bone + parseSkeleton(relationships, deformerNodes) { + const rawBones = []; + relationships.children.forEach(function(child) { + const boneNode = deformerNodes[child.ID]; + if (boneNode.attrType !== "Cluster") return; + const rawBone = { + ID: child.ID, + indices: [], + weights: [], + transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) + // transform: new Matrix4().fromArray( boneNode.Transform.a ), + // linkMode: boneNode.Mode, + }; + if ("Indexes" in boneNode) { + rawBone.indices = boneNode.Indexes.a; + rawBone.weights = boneNode.Weights.a; + } + rawBones.push(rawBone); + }); + return { + rawBones, + bones: [] + }; + } + // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel" + parseMorphTargets(relationships, deformerNodes) { + const rawMorphTargets = []; + for (let i = 0; i < relationships.children.length; i++) { + const child = relationships.children[i]; + const morphTargetNode = deformerNodes[child.ID]; + const rawMorphTarget = { + name: morphTargetNode.attrName, + initialWeight: morphTargetNode.DeformPercent, + id: morphTargetNode.id, + fullWeights: morphTargetNode.FullWeights.a + }; + if (morphTargetNode.attrType !== "BlendShapeChannel") return; + rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) { + return child2.relationship === void 0; + })[0].ID; + rawMorphTargets.push(rawMorphTarget); + } + return rawMorphTargets; + } + // create the main Group() to be returned by the loader + parseScene(deformers, geometryMap, materialMap) { + sceneGraph = new Group(); + const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap); + const modelNodes = fbxTree.Objects.Model; + const scope = this; + modelMap.forEach(function(model) { + const modelNode = modelNodes[model.ID]; + scope.setLookAtProperties(model, modelNode); + const parentConnections = connections.get(model.ID).parents; + parentConnections.forEach(function(connection) { + const parent2 = modelMap.get(connection.ID); + if (parent2 !== void 0) parent2.add(model); + }); + if (model.parent === null) { + sceneGraph.add(model); + } + }); + this.bindSkeleton(deformers.skeletons, geometryMap, modelMap); + this.addGlobalSceneSettings(); + sceneGraph.traverse(function(node) { + if (node.userData.transformData) { + if (node.parent) { + node.userData.transformData.parentMatrix = node.parent.matrix; + node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld; + } + const transform2 = generateTransform(node.userData.transformData); + node.applyMatrix4(transform2); + node.updateWorldMatrix(); + } + }); + const animations = new AnimationParser().parse(); + if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) { + sceneGraph.children[0].animations = animations; + sceneGraph = sceneGraph.children[0]; + } + sceneGraph.animations = animations; + } + // parse nodes in FBXTree.Objects.Model + parseModels(skeletons, geometryMap, materialMap) { + const modelMap = /* @__PURE__ */ new Map(); + const modelNodes = fbxTree.Objects.Model; + for (const nodeID in modelNodes) { + const id = parseInt(nodeID); + const node = modelNodes[nodeID]; + const relationships = connections.get(id); + let model = this.buildSkeleton(relationships, skeletons, id, node.attrName); + if (!model) { + switch (node.attrType) { + case "Camera": + model = this.createCamera(relationships); + break; + case "Light": + model = this.createLight(relationships); + break; + case "Mesh": + model = this.createMesh(relationships, geometryMap, materialMap); + break; + case "NurbsCurve": + model = this.createCurve(relationships, geometryMap); + break; + case "LimbNode": + case "Root": + model = new Bone(); + break; + case "Null": + default: + model = new Group(); + break; + } + model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : ""; + model.userData.originalName = node.attrName; + model.ID = id; + } + this.getTransformData(model, node); + modelMap.set(id, model); + } + return modelMap; + } + buildSkeleton(relationships, skeletons, id, name2) { + let bone = null; + relationships.parents.forEach(function(parent2) { + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + skeleton.rawBones.forEach(function(rawBone, i) { + if (rawBone.ID === parent2.ID) { + const subBone = bone; + bone = new Bone(); + bone.matrixWorld.copy(rawBone.transformLink); + bone.name = name2 ? PropertyBinding.sanitizeNodeName(name2) : ""; + bone.userData.originalName = name2; + bone.ID = id; + skeleton.bones[i] = bone; + if (subBone !== null) { + bone.add(subBone); + } + } + }); + } + }); + return bone; + } + // create a PerspectiveCamera or OrthographicCamera + createCamera(relationships) { + let model; + let cameraAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + cameraAttribute = attr; + } + }); + if (cameraAttribute === void 0) { + model = new Object3D(); + } else { + let type = 0; + if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) { + type = 1; + } + let nearClippingPlane = 1; + if (cameraAttribute.NearPlane !== void 0) { + nearClippingPlane = cameraAttribute.NearPlane.value / 1e3; + } + let farClippingPlane = 1e3; + if (cameraAttribute.FarPlane !== void 0) { + farClippingPlane = cameraAttribute.FarPlane.value / 1e3; + } + let width2 = window.innerWidth; + let height2 = window.innerHeight; + if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) { + width2 = cameraAttribute.AspectWidth.value; + height2 = cameraAttribute.AspectHeight.value; + } + const aspect = width2 / height2; + let fov = 45; + if (cameraAttribute.FieldOfView !== void 0) { + fov = cameraAttribute.FieldOfView.value; + } + const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; + switch (type) { + case 0: + model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane); + if (focalLength !== null) model.setFocalLength(focalLength); + break; + case 1: + model = new OrthographicCamera(-width2 / 2, width2 / 2, height2 / 2, -height2 / 2, nearClippingPlane, farClippingPlane); + break; + default: + console.warn("THREE.FBXLoader: Unknown camera type " + type + "."); + model = new Object3D(); + break; + } + } + return model; + } + // Create a DirectionalLight, PointLight or SpotLight + createLight(relationships) { + let model; + let lightAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + lightAttribute = attr; + } + }); + if (lightAttribute === void 0) { + model = new Object3D(); + } else { + let type; + if (lightAttribute.LightType === void 0) { + type = 0; + } else { + type = lightAttribute.LightType.value; + } + let color = 16777215; + if (lightAttribute.Color !== void 0) { + color = new Color().fromArray(lightAttribute.Color.value).convertSRGBToLinear(); + } + let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100; + if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) { + intensity = 0; + } + let distance = 0; + if (lightAttribute.FarAttenuationEnd !== void 0) { + if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) { + distance = 0; + } else { + distance = lightAttribute.FarAttenuationEnd.value; + } + } + const decay = 1; + switch (type) { + case 0: + model = new PointLight(color, intensity, distance, decay); + break; + case 1: + model = new DirectionalLight(color, intensity); + break; + case 2: + let angle = Math.PI / 3; + if (lightAttribute.InnerAngle !== void 0) { + angle = MathUtils.degToRad(lightAttribute.InnerAngle.value); + } + let penumbra = 0; + if (lightAttribute.OuterAngle !== void 0) { + penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value); + penumbra = Math.max(penumbra, 1); + } + model = new SpotLight(color, intensity, distance, angle, penumbra, decay); + break; + default: + console.warn("THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."); + model = new PointLight(color, intensity); + break; + } + if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) { + model.castShadow = true; + } + } + return model; + } + createMesh(relationships, geometryMap, materialMap) { + let model; + let geometry = null; + let material = null; + const materials = []; + relationships.children.forEach(function(child) { + if (geometryMap.has(child.ID)) { + geometry = geometryMap.get(child.ID); + } + if (materialMap.has(child.ID)) { + materials.push(materialMap.get(child.ID)); + } + }); + if (materials.length > 1) { + material = materials; + } else if (materials.length > 0) { + material = materials[0]; + } else { + material = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 13421772 + }); + materials.push(material); + } + if ("color" in geometry.attributes) { + materials.forEach(function(material2) { + material2.vertexColors = true; + }); + } + if (geometry.FBX_Deformer) { + model = new SkinnedMesh(geometry, material); + model.normalizeSkinWeights(); + } else { + model = new Mesh(geometry, material); + } + return model; + } + createCurve(relationships, geometryMap) { + const geometry = relationships.children.reduce(function(geo, child) { + if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID); + return geo; + }, null); + const material = new LineBasicMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 3342591, + linewidth: 1 + }); + return new Line(geometry, material); + } + // parse the model node for transform data + getTransformData(model, modelNode) { + const transformData = {}; + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + else transformData.eulerOrder = "ZYX"; + if ("Lcl_Translation" in modelNode) transformData.translation = modelNode.Lcl_Translation.value; + if ("PreRotation" in modelNode) transformData.preRotation = modelNode.PreRotation.value; + if ("Lcl_Rotation" in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value; + if ("PostRotation" in modelNode) transformData.postRotation = modelNode.PostRotation.value; + if ("Lcl_Scaling" in modelNode) transformData.scale = modelNode.Lcl_Scaling.value; + if ("ScalingOffset" in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value; + if ("ScalingPivot" in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value; + if ("RotationOffset" in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value; + if ("RotationPivot" in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value; + model.userData.transformData = transformData; + } + setLookAtProperties(model, modelNode) { + if ("LookAtProperty" in modelNode) { + const children = connections.get(model.ID).children; + children.forEach(function(child) { + if (child.relationship === "LookAtProperty") { + const lookAtTarget = fbxTree.Objects.Model[child.ID]; + if ("Lcl_Translation" in lookAtTarget) { + const pos = lookAtTarget.Lcl_Translation.value; + if (model.target !== void 0) { + model.target.position.fromArray(pos); + sceneGraph.add(model.target); + } else { + model.lookAt(new Vector3().fromArray(pos)); + } + } + } + }); + } + } + bindSkeleton(skeletons, geometryMap, modelMap) { + const bindMatrices = this.parsePoseNodes(); + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + const parents = connections.get(parseInt(skeleton.ID)).parents; + parents.forEach(function(parent2) { + if (geometryMap.has(parent2.ID)) { + const geoID = parent2.ID; + const geoRelationships = connections.get(geoID); + geoRelationships.parents.forEach(function(geoConnParent) { + if (modelMap.has(geoConnParent.ID)) { + const model = modelMap.get(geoConnParent.ID); + model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]); + } + }); + } + }); + } + } + parsePoseNodes() { + const bindMatrices = {}; + if ("Pose" in fbxTree.Objects) { + const BindPoseNode = fbxTree.Objects.Pose; + for (const nodeID in BindPoseNode) { + if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) { + const poseNodes = BindPoseNode[nodeID].PoseNode; + if (Array.isArray(poseNodes)) { + poseNodes.forEach(function(poseNode) { + bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a); + }); + } else { + bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a); + } + } + } + } + return bindMatrices; + } + addGlobalSceneSettings() { + if ("GlobalSettings" in fbxTree) { + if ("AmbientColor" in fbxTree.GlobalSettings) { + const ambientColor = fbxTree.GlobalSettings.AmbientColor.value; + const r = ambientColor[0]; + const g2 = ambientColor[1]; + const b3 = ambientColor[2]; + if (r !== 0 || g2 !== 0 || b3 !== 0) { + const color = new Color(r, g2, b3).convertSRGBToLinear(); + sceneGraph.add(new AmbientLight(color, 1)); + } + } + if ("UnitScaleFactor" in fbxTree.GlobalSettings) { + sceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value; + } + } + } +}; +var GeometryParser = class { + constructor() { + this.negativeMaterialIndices = false; + } + // Parse nodes in FBXTree.Objects.Geometry + parse(deformers) { + const geometryMap = /* @__PURE__ */ new Map(); + if ("Geometry" in fbxTree.Objects) { + const geoNodes = fbxTree.Objects.Geometry; + for (const nodeID in geoNodes) { + const relationships = connections.get(parseInt(nodeID)); + const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers); + geometryMap.set(parseInt(nodeID), geo); + } + } + if (this.negativeMaterialIndices === true) { + console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."); + } + return geometryMap; + } + // Parse single node in FBXTree.Objects.Geometry + parseGeometry(relationships, geoNode, deformers) { + switch (geoNode.attrType) { + case "Mesh": + return this.parseMeshGeometry(relationships, geoNode, deformers); + break; + case "NurbsCurve": + return this.parseNurbsGeometry(geoNode); + break; + } + } + // Parse single node mesh geometry in FBXTree.Objects.Geometry + parseMeshGeometry(relationships, geoNode, deformers) { + const skeletons = deformers.skeletons; + const morphTargets = []; + const modelNodes = relationships.parents.map(function(parent2) { + return fbxTree.Objects.Model[parent2.ID]; + }); + if (modelNodes.length === 0) return; + const skeleton = relationships.children.reduce(function(skeleton2, child) { + if (skeletons[child.ID] !== void 0) skeleton2 = skeletons[child.ID]; + return skeleton2; + }, null); + relationships.children.forEach(function(child) { + if (deformers.morphTargets[child.ID] !== void 0) { + morphTargets.push(deformers.morphTargets[child.ID]); + } + }); + const modelNode = modelNodes[0]; + const transformData = {}; + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("GeometricTranslation" in modelNode) transformData.translation = modelNode.GeometricTranslation.value; + if ("GeometricRotation" in modelNode) transformData.rotation = modelNode.GeometricRotation.value; + if ("GeometricScaling" in modelNode) transformData.scale = modelNode.GeometricScaling.value; + const transform2 = generateTransform(transformData); + return this.genGeometry(geoNode, skeleton, morphTargets, transform2); + } + // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry + genGeometry(geoNode, skeleton, morphTargets, preTransform) { + const geo = new BufferGeometry(); + if (geoNode.attrName) geo.name = geoNode.attrName; + const geoInfo = this.parseGeoNode(geoNode, skeleton); + const buffers = this.genBuffers(geoInfo); + const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3); + positionAttribute.applyMatrix4(preTransform); + geo.setAttribute("position", positionAttribute); + if (buffers.colors.length > 0) { + geo.setAttribute("color", new Float32BufferAttribute(buffers.colors, 3)); + } + if (skeleton) { + geo.setAttribute("skinIndex", new Uint16BufferAttribute(buffers.weightsIndices, 4)); + geo.setAttribute("skinWeight", new Float32BufferAttribute(buffers.vertexWeights, 4)); + geo.FBX_Deformer = skeleton; + } + if (buffers.normal.length > 0) { + const normalMatrix = new Matrix3().getNormalMatrix(preTransform); + const normalAttribute = new Float32BufferAttribute(buffers.normal, 3); + normalAttribute.applyNormalMatrix(normalMatrix); + geo.setAttribute("normal", normalAttribute); + } + buffers.uvs.forEach(function(uvBuffer, i) { + const name2 = i === 0 ? "uv" : `uv${i}`; + geo.setAttribute(name2, new Float32BufferAttribute(buffers.uvs[i], 2)); + }); + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + let prevMaterialIndex = buffers.materialIndex[0]; + let startIndex = 0; + buffers.materialIndex.forEach(function(currentIndex, i) { + if (currentIndex !== prevMaterialIndex) { + geo.addGroup(startIndex, i - startIndex, prevMaterialIndex); + prevMaterialIndex = currentIndex; + startIndex = i; + } + }); + if (geo.groups.length > 0) { + const lastGroup = geo.groups[geo.groups.length - 1]; + const lastIndex = lastGroup.start + lastGroup.count; + if (lastIndex !== buffers.materialIndex.length) { + geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex); + } + } + if (geo.groups.length === 0) { + geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]); + } + } + this.addMorphTargets(geo, geoNode, morphTargets, preTransform); + return geo; + } + parseGeoNode(geoNode, skeleton) { + const geoInfo = {}; + geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : []; + geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : []; + if (geoNode.LayerElementColor) { + geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]); + } + if (geoNode.LayerElementMaterial) { + geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]); + } + if (geoNode.LayerElementNormal) { + geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]); + } + if (geoNode.LayerElementUV) { + geoInfo.uv = []; + let i = 0; + while (geoNode.LayerElementUV[i]) { + if (geoNode.LayerElementUV[i].UV) { + geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i])); + } + i++; + } + } + geoInfo.weightTable = {}; + if (skeleton !== null) { + geoInfo.skeleton = skeleton; + skeleton.rawBones.forEach(function(rawBone, i) { + rawBone.indices.forEach(function(index2, j) { + if (geoInfo.weightTable[index2] === void 0) geoInfo.weightTable[index2] = []; + geoInfo.weightTable[index2].push({ + id: i, + weight: rawBone.weights[j] + }); + }); + }); + } + return geoInfo; + } + genBuffers(geoInfo) { + const buffers = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [] + }; + let polygonIndex = 0; + let faceLength = 0; + let displayedWeightsWarning = false; + let facePositionIndexes = []; + let faceNormals = []; + let faceColors = []; + let faceUVs = []; + let faceWeights = []; + let faceWeightIndices = []; + const scope = this; + geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) { + let materialIndex; + let endOfFace = false; + if (vertexIndex < 0) { + vertexIndex = vertexIndex ^ -1; + endOfFace = true; + } + let weightIndices = []; + let weights = []; + facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2); + if (geoInfo.color) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color); + faceColors.push(data2[0], data2[1], data2[2]); + } + if (geoInfo.skeleton) { + if (geoInfo.weightTable[vertexIndex] !== void 0) { + geoInfo.weightTable[vertexIndex].forEach(function(wt) { + weights.push(wt.weight); + weightIndices.push(wt.id); + }); + } + if (weights.length > 4) { + if (!displayedWeightsWarning) { + console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."); + displayedWeightsWarning = true; + } + const wIndex = [0, 0, 0, 0]; + const Weight = [0, 0, 0, 0]; + weights.forEach(function(weight, weightIndex) { + let currentWeight = weight; + let currentIndex = weightIndices[weightIndex]; + Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) { + if (currentWeight > comparedWeight) { + comparedWeightArray[comparedWeightIndex] = currentWeight; + currentWeight = comparedWeight; + const tmp = wIndex[comparedWeightIndex]; + wIndex[comparedWeightIndex] = currentIndex; + currentIndex = tmp; + } + }); + }); + weightIndices = wIndex; + weights = Weight; + } + while (weights.length < 4) { + weights.push(0); + weightIndices.push(0); + } + for (let i = 0; i < 4; ++i) { + faceWeights.push(weights[i]); + faceWeightIndices.push(weightIndices[i]); + } + } + if (geoInfo.normal) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal); + faceNormals.push(data2[0], data2[1], data2[2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0]; + if (materialIndex < 0) { + scope.negativeMaterialIndices = true; + materialIndex = 0; + } + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, i) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv); + if (faceUVs[i] === void 0) { + faceUVs[i] = []; + } + faceUVs[i].push(data2[0]); + faceUVs[i].push(data2[1]); + }); + } + faceLength++; + if (endOfFace) { + scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength); + polygonIndex++; + faceLength = 0; + facePositionIndexes = []; + faceNormals = []; + faceColors = []; + faceUVs = []; + faceWeights = []; + faceWeightIndices = []; + } + }); + return buffers; + } + // See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal + getNormalNewell(vertices) { + const normal = new Vector3(0, 0, 0); + for (let i = 0; i < vertices.length; i++) { + const current = vertices[i]; + const next = vertices[(i + 1) % vertices.length]; + normal.x += (current.y - next.y) * (current.z + next.z); + normal.y += (current.z - next.z) * (current.x + next.x); + normal.z += (current.x - next.x) * (current.y + next.y); + } + normal.normalize(); + return normal; + } + getNormalTangentAndBitangent(vertices) { + const normalVector = this.getNormalNewell(vertices); + const up = Math.abs(normalVector.z) > 0.5 ? new Vector3(0, 1, 0) : new Vector3(0, 0, 1); + const tangent = up.cross(normalVector).normalize(); + const bitangent = normalVector.clone().cross(tangent).normalize(); + return { + normal: normalVector, + tangent, + bitangent + }; + } + flattenVertex(vertex, normalTangent, normalBitangent) { + return new Vector2( + vertex.dot(normalTangent), + vertex.dot(normalBitangent) + ); + } + // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris + genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) { + let triangles; + if (faceLength > 3) { + const vertices = []; + const positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions; + for (let i = 0; i < facePositionIndexes.length; i += 3) { + vertices.push( + new Vector3( + positions[facePositionIndexes[i]], + positions[facePositionIndexes[i + 1]], + positions[facePositionIndexes[i + 2]] + ) + ); + } + const { tangent, bitangent } = this.getNormalTangentAndBitangent(vertices); + const triangulationInput = []; + for (const vertex of vertices) { + triangulationInput.push(this.flattenVertex(vertex, tangent, bitangent)); + } + triangles = ShapeUtils.triangulateShape(triangulationInput, []); + } else { + triangles = [[0, 1, 2]]; + } + for (const [i0, i1, i2] of triangles) { + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 2]]); + if (geoInfo.skeleton) { + buffers.vertexWeights.push(faceWeights[i0 * 4]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i1 * 4]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i2 * 4]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 3]); + } + if (geoInfo.color) { + buffers.colors.push(faceColors[i0 * 3]); + buffers.colors.push(faceColors[i0 * 3 + 1]); + buffers.colors.push(faceColors[i0 * 3 + 2]); + buffers.colors.push(faceColors[i1 * 3]); + buffers.colors.push(faceColors[i1 * 3 + 1]); + buffers.colors.push(faceColors[i1 * 3 + 2]); + buffers.colors.push(faceColors[i2 * 3]); + buffers.colors.push(faceColors[i2 * 3 + 1]); + buffers.colors.push(faceColors[i2 * 3 + 2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + } + if (geoInfo.normal) { + buffers.normal.push(faceNormals[i0 * 3]); + buffers.normal.push(faceNormals[i0 * 3 + 1]); + buffers.normal.push(faceNormals[i0 * 3 + 2]); + buffers.normal.push(faceNormals[i1 * 3]); + buffers.normal.push(faceNormals[i1 * 3 + 1]); + buffers.normal.push(faceNormals[i1 * 3 + 2]); + buffers.normal.push(faceNormals[i2 * 3]); + buffers.normal.push(faceNormals[i2 * 3 + 1]); + buffers.normal.push(faceNormals[i2 * 3 + 2]); + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, j) { + if (buffers.uvs[j] === void 0) buffers.uvs[j] = []; + buffers.uvs[j].push(faceUVs[j][i0 * 2]); + buffers.uvs[j].push(faceUVs[j][i0 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i1 * 2]); + buffers.uvs[j].push(faceUVs[j][i1 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i2 * 2]); + buffers.uvs[j].push(faceUVs[j][i2 * 2 + 1]); + }); + } + } + } + addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) { + if (morphTargets.length === 0) return; + parentGeo.morphTargetsRelative = true; + parentGeo.morphAttributes.position = []; + const scope = this; + morphTargets.forEach(function(morphTarget) { + morphTarget.rawTargets.forEach(function(rawTarget) { + const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID]; + if (morphGeoNode !== void 0) { + scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name); + } + }); + }); + } + // a morph geometry node is similar to a standard node, and the node is also contained + // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal + // and a special attribute Index defining which vertices of the original geometry are affected + // Normal and position attributes only have data for the vertices that are affected by the morph + genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name2) { + const basePositions = parentGeoNode.Vertices !== void 0 ? parentGeoNode.Vertices.a : []; + const baseIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : []; + const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : []; + const morphIndices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : []; + const length2 = parentGeo.attributes.position.count * 3; + const morphPositions = new Float32Array(length2); + for (let i = 0; i < morphIndices.length; i++) { + const morphIndex = morphIndices[i] * 3; + morphPositions[morphIndex] = morphPositionsSparse[i * 3]; + morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1]; + morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2]; + } + const morphGeoInfo = { + vertexIndices: baseIndices, + vertexPositions: morphPositions, + baseVertexPositions: basePositions + }; + const morphBuffers = this.genBuffers(morphGeoInfo); + const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3); + positionAttribute.name = name2 || morphGeoNode.attrName; + positionAttribute.applyMatrix4(preTransform); + parentGeo.morphAttributes.position.push(positionAttribute); + } + // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists + parseNormals(NormalNode) { + const mappingType = NormalNode.MappingInformationType; + const referenceType = NormalNode.ReferenceInformationType; + const buffer = NormalNode.Normals.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + if ("NormalIndex" in NormalNode) { + indexBuffer = NormalNode.NormalIndex.a; + } else if ("NormalsIndex" in NormalNode) { + indexBuffer = NormalNode.NormalsIndex.a; + } + } + return { + dataSize: 3, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists + parseUVs(UVNode) { + const mappingType = UVNode.MappingInformationType; + const referenceType = UVNode.ReferenceInformationType; + const buffer = UVNode.UV.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = UVNode.UVIndex.a; + } + return { + dataSize: 2, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists + parseVertexColors(ColorNode) { + const mappingType = ColorNode.MappingInformationType; + const referenceType = ColorNode.ReferenceInformationType; + const buffer = ColorNode.Colors.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = ColorNode.ColorIndex.a; + } + for (let i = 0, c2 = new Color(); i < buffer.length; i += 4) { + c2.fromArray(buffer, i).convertSRGBToLinear().toArray(buffer, i); + } + return { + dataSize: 4, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists + parseMaterialIndices(MaterialNode) { + const mappingType = MaterialNode.MappingInformationType; + const referenceType = MaterialNode.ReferenceInformationType; + if (mappingType === "NoMappingInformation") { + return { + dataSize: 1, + buffer: [0], + indices: [0], + mappingType: "AllSame", + referenceType + }; + } + const materialIndexBuffer = MaterialNode.Materials.a; + const materialIndices = []; + for (let i = 0; i < materialIndexBuffer.length; ++i) { + materialIndices.push(i); + } + return { + dataSize: 1, + buffer: materialIndexBuffer, + indices: materialIndices, + mappingType, + referenceType + }; + } + // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry + parseNurbsGeometry(geoNode) { + const order = parseInt(geoNode.Order); + if (isNaN(order)) { + console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id); + return new BufferGeometry(); + } + const degree = order - 1; + const knots = geoNode.KnotVector.a; + const controlPoints = []; + const pointsValues = geoNode.Points.a; + for (let i = 0, l2 = pointsValues.length; i < l2; i += 4) { + controlPoints.push(new Vector4().fromArray(pointsValues, i)); + } + let startKnot, endKnot; + if (geoNode.Form === "Closed") { + controlPoints.push(controlPoints[0]); + } else if (geoNode.Form === "Periodic") { + startKnot = degree; + endKnot = knots.length - 1 - startKnot; + for (let i = 0; i < degree; ++i) { + controlPoints.push(controlPoints[i]); + } + } + const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot); + const points = curve.getPoints(controlPoints.length * 12); + return new BufferGeometry().setFromPoints(points); + } +}; +var AnimationParser = class { + // take raw animation clips and turn them into three.js animation clips + parse() { + const animationClips = []; + const rawClips = this.parseClips(); + if (rawClips !== void 0) { + for (const key2 in rawClips) { + const rawClip = rawClips[key2]; + const clip = this.addClip(rawClip); + animationClips.push(clip); + } + } + return animationClips; + } + parseClips() { + if (fbxTree.Objects.AnimationCurve === void 0) return void 0; + const curveNodesMap = this.parseAnimationCurveNodes(); + this.parseAnimationCurves(curveNodesMap); + const layersMap = this.parseAnimationLayers(curveNodesMap); + const rawClips = this.parseAnimStacks(layersMap); + return rawClips; + } + // parse nodes in FBXTree.Objects.AnimationCurveNode + // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation ) + // and is referenced by an AnimationLayer + parseAnimationCurveNodes() { + const rawCurveNodes = fbxTree.Objects.AnimationCurveNode; + const curveNodesMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawCurveNodes) { + const rawCurveNode = rawCurveNodes[nodeID]; + if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) { + const curveNode = { + id: rawCurveNode.id, + attr: rawCurveNode.attrName, + curves: {} + }; + curveNodesMap.set(curveNode.id, curveNode); + } + } + return curveNodesMap; + } + // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to + // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated + // axis ( e.g. times and values of x rotation) + parseAnimationCurves(curveNodesMap) { + const rawCurves = fbxTree.Objects.AnimationCurve; + for (const nodeID in rawCurves) { + const animationCurve = { + id: rawCurves[nodeID].id, + times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds), + values: rawCurves[nodeID].KeyValueFloat.a + }; + const relationships = connections.get(animationCurve.id); + if (relationships !== void 0) { + const animationCurveID = relationships.parents[0].ID; + const animationCurveRelationship = relationships.parents[0].relationship; + if (animationCurveRelationship.match(/X/)) { + curveNodesMap.get(animationCurveID).curves["x"] = animationCurve; + } else if (animationCurveRelationship.match(/Y/)) { + curveNodesMap.get(animationCurveID).curves["y"] = animationCurve; + } else if (animationCurveRelationship.match(/Z/)) { + curveNodesMap.get(animationCurveID).curves["z"] = animationCurve; + } else if (animationCurveRelationship.match(/DeformPercent/) && curveNodesMap.has(animationCurveID)) { + curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve; + } + } + } + } + // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references + // to various AnimationCurveNodes and is referenced by an AnimationStack node + // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack + parseAnimationLayers(curveNodesMap) { + const rawLayers = fbxTree.Objects.AnimationLayer; + const layersMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawLayers) { + const layerCurveNodes = []; + const connection = connections.get(parseInt(nodeID)); + if (connection !== void 0) { + const children = connection.children; + children.forEach(function(child, i) { + if (curveNodesMap.has(child.ID)) { + const curveNode = curveNodesMap.get(child.ID); + if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) { + if (layerCurveNodes[i] === void 0) { + const modelID = connections.get(child.ID).parents.filter(function(parent2) { + return parent2.relationship !== void 0; + })[0].ID; + if (modelID !== void 0) { + const rawModel = fbxTree.Objects.Model[modelID.toString()]; + if (rawModel === void 0) { + console.warn("THREE.FBXLoader: Encountered a unused curve.", child); + return; + } + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + ID: rawModel.id, + initialPosition: [0, 0, 0], + initialRotation: [0, 0, 0], + initialScale: [1, 1, 1] + }; + sceneGraph.traverse(function(child2) { + if (child2.ID === rawModel.id) { + node.transform = child2.matrix; + if (child2.userData.transformData) node.eulerOrder = child2.userData.transformData.eulerOrder; + } + }); + if (!node.transform) node.transform = new Matrix4(); + if ("PreRotation" in rawModel) node.preRotation = rawModel.PreRotation.value; + if ("PostRotation" in rawModel) node.postRotation = rawModel.PostRotation.value; + layerCurveNodes[i] = node; + } + } + if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode; + } else if (curveNode.curves.morph !== void 0) { + if (layerCurveNodes[i] === void 0) { + const deformerID = connections.get(child.ID).parents.filter(function(parent2) { + return parent2.relationship !== void 0; + })[0].ID; + const morpherID = connections.get(deformerID).parents[0].ID; + const geoID = connections.get(morpherID).parents[0].ID; + const modelID = connections.get(geoID).parents[0].ID; + const rawModel = fbxTree.Objects.Model[modelID]; + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + morphName: fbxTree.Objects.Deformer[deformerID].attrName + }; + layerCurveNodes[i] = node; + } + layerCurveNodes[i][curveNode.attr] = curveNode; + } + } + }); + layersMap.set(parseInt(nodeID), layerCurveNodes); + } + } + return layersMap; + } + // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation + // hierarchy. Each Stack node will be used to create a AnimationClip + parseAnimStacks(layersMap) { + const rawStacks = fbxTree.Objects.AnimationStack; + const rawClips = {}; + for (const nodeID in rawStacks) { + const children = connections.get(parseInt(nodeID)).children; + if (children.length > 1) { + console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); + } + const layer = layersMap.get(children[0].ID); + rawClips[nodeID] = { + name: rawStacks[nodeID].attrName, + layer + }; + } + return rawClips; + } + addClip(rawClip) { + let tracks = []; + const scope = this; + rawClip.layer.forEach(function(rawTracks) { + tracks = tracks.concat(scope.generateTracks(rawTracks)); + }); + return new AnimationClip(rawClip.name, -1, tracks); + } + generateTracks(rawTracks) { + const tracks = []; + let initialPosition = new Vector3(); + let initialScale = new Vector3(); + if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, new Quaternion(), initialScale); + initialPosition = initialPosition.toArray(); + initialScale = initialScale.toArray(); + if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) { + const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, "position"); + if (positionTrack !== void 0) tracks.push(positionTrack); + } + if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) { + const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder); + if (rotationTrack !== void 0) tracks.push(rotationTrack); + } + if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) { + const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale"); + if (scaleTrack !== void 0) tracks.push(scaleTrack); + } + if (rawTracks.DeformPercent !== void 0) { + const morphTrack = this.generateMorphTrack(rawTracks); + if (morphTrack !== void 0) tracks.push(morphTrack); + } + return tracks; + } + generateVectorTrack(modelName, curves, initialValue, type) { + const times = this.getTimesForAllAxes(curves); + const values2 = this.getKeyframeTrackValues(times, curves, initialValue); + return new VectorKeyframeTrack(modelName + "." + type, times, values2); + } + generateRotationTrack(modelName, curves, preRotation, postRotation, eulerOrder) { + let times; + let values2; + if (curves.x !== void 0 && curves.y !== void 0 && curves.z !== void 0) { + const result = this.interpolateRotations(curves.x, curves.y, curves.z, eulerOrder); + times = result[0]; + values2 = result[1]; + } + if (preRotation !== void 0) { + preRotation = preRotation.map(MathUtils.degToRad); + preRotation.push(eulerOrder); + preRotation = new Euler().fromArray(preRotation); + preRotation = new Quaternion().setFromEuler(preRotation); + } + if (postRotation !== void 0) { + postRotation = postRotation.map(MathUtils.degToRad); + postRotation.push(eulerOrder); + postRotation = new Euler().fromArray(postRotation); + postRotation = new Quaternion().setFromEuler(postRotation).invert(); + } + const quaternion = new Quaternion(); + const euler = new Euler(); + const quaternionValues = []; + if (!values2 || !times) return new QuaternionKeyframeTrack(modelName + ".quaternion", [0], [0]); + for (let i = 0; i < values2.length; i += 3) { + euler.set(values2[i], values2[i + 1], values2[i + 2], eulerOrder); + quaternion.setFromEuler(euler); + if (preRotation !== void 0) quaternion.premultiply(preRotation); + if (postRotation !== void 0) quaternion.multiply(postRotation); + if (i > 2) { + const prevQuat = new Quaternion().fromArray( + quaternionValues, + (i - 3) / 3 * 4 + ); + if (prevQuat.dot(quaternion) < 0) { + quaternion.set(-quaternion.x, -quaternion.y, -quaternion.z, -quaternion.w); + } + } + quaternion.toArray(quaternionValues, i / 3 * 4); + } + return new QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues); + } + generateMorphTrack(rawTracks) { + const curves = rawTracks.DeformPercent.curves.morph; + const values2 = curves.values.map(function(val2) { + return val2 / 100; + }); + const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName]; + return new NumberKeyframeTrack(rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]", curves.times, values2); + } + // For all animated objects, times are defined separately for each axis + // Here we'll combine the times into one sorted array without duplicates + getTimesForAllAxes(curves) { + let times = []; + if (curves.x !== void 0) times = times.concat(curves.x.times); + if (curves.y !== void 0) times = times.concat(curves.y.times); + if (curves.z !== void 0) times = times.concat(curves.z.times); + times = times.sort(function(a2, b3) { + return a2 - b3; + }); + if (times.length > 1) { + let targetIndex = 1; + let lastValue = times[0]; + for (let i = 1; i < times.length; i++) { + const currentValue = times[i]; + if (currentValue !== lastValue) { + times[targetIndex] = currentValue; + lastValue = currentValue; + targetIndex++; + } + } + times = times.slice(0, targetIndex); + } + return times; + } + getKeyframeTrackValues(times, curves, initialValue) { + const prevValue = initialValue; + const values2 = []; + let xIndex = -1; + let yIndex = -1; + let zIndex = -1; + times.forEach(function(time2) { + if (curves.x) xIndex = curves.x.times.indexOf(time2); + if (curves.y) yIndex = curves.y.times.indexOf(time2); + if (curves.z) zIndex = curves.z.times.indexOf(time2); + if (xIndex !== -1) { + const xValue = curves.x.values[xIndex]; + values2.push(xValue); + prevValue[0] = xValue; + } else { + values2.push(prevValue[0]); + } + if (yIndex !== -1) { + const yValue = curves.y.values[yIndex]; + values2.push(yValue); + prevValue[1] = yValue; + } else { + values2.push(prevValue[1]); + } + if (zIndex !== -1) { + const zValue = curves.z.values[zIndex]; + values2.push(zValue); + prevValue[2] = zValue; + } else { + values2.push(prevValue[2]); + } + }); + return values2; + } + // Rotations are defined as Euler angles which can have values of any size + // These will be converted to quaternions which don't support values greater than + // PI, so we'll interpolate large rotations + interpolateRotations(curvex, curvey, curvez, eulerOrder) { + const times = []; + const values2 = []; + times.push(curvex.times[0]); + values2.push(MathUtils.degToRad(curvex.values[0])); + values2.push(MathUtils.degToRad(curvey.values[0])); + values2.push(MathUtils.degToRad(curvez.values[0])); + for (let i = 1; i < curvex.values.length; i++) { + const initialValue = [ + curvex.values[i - 1], + curvey.values[i - 1], + curvez.values[i - 1] + ]; + if (isNaN(initialValue[0]) || isNaN(initialValue[1]) || isNaN(initialValue[2])) { + continue; + } + const initialValueRad = initialValue.map(MathUtils.degToRad); + const currentValue = [ + curvex.values[i], + curvey.values[i], + curvez.values[i] + ]; + if (isNaN(currentValue[0]) || isNaN(currentValue[1]) || isNaN(currentValue[2])) { + continue; + } + const currentValueRad = currentValue.map(MathUtils.degToRad); + const valuesSpan = [ + currentValue[0] - initialValue[0], + currentValue[1] - initialValue[1], + currentValue[2] - initialValue[2] + ]; + const absoluteSpan = [ + Math.abs(valuesSpan[0]), + Math.abs(valuesSpan[1]), + Math.abs(valuesSpan[2]) + ]; + if (absoluteSpan[0] >= 180 || absoluteSpan[1] >= 180 || absoluteSpan[2] >= 180) { + const maxAbsSpan = Math.max(...absoluteSpan); + const numSubIntervals = maxAbsSpan / 180; + const E1 = new Euler(...initialValueRad, eulerOrder); + const E2 = new Euler(...currentValueRad, eulerOrder); + const Q1 = new Quaternion().setFromEuler(E1); + const Q22 = new Quaternion().setFromEuler(E2); + if (Q1.dot(Q22)) { + Q22.set(-Q22.x, -Q22.y, -Q22.z, -Q22.w); + } + const initialTime = curvex.times[i - 1]; + const timeSpan = curvex.times[i] - initialTime; + const Q3 = new Quaternion(); + const E3 = new Euler(); + for (let t3 = 0; t3 < 1; t3 += 1 / numSubIntervals) { + Q3.copy(Q1.clone().slerp(Q22.clone(), t3)); + times.push(initialTime + t3 * timeSpan); + E3.setFromQuaternion(Q3, eulerOrder); + values2.push(E3.x); + values2.push(E3.y); + values2.push(E3.z); + } + } else { + times.push(curvex.times[i]); + values2.push(MathUtils.degToRad(curvex.values[i])); + values2.push(MathUtils.degToRad(curvey.values[i])); + values2.push(MathUtils.degToRad(curvez.values[i])); + } + } + return [times, values2]; + } +}; +var TextParser = class { + getPrevNode() { + return this.nodeStack[this.currentIndent - 2]; + } + getCurrentNode() { + return this.nodeStack[this.currentIndent - 1]; + } + getCurrentProp() { + return this.currentProp; + } + pushStack(node) { + this.nodeStack.push(node); + this.currentIndent += 1; + } + popStack() { + this.nodeStack.pop(); + this.currentIndent -= 1; + } + setCurrentProp(val2, name2) { + this.currentProp = val2; + this.currentPropName = name2; + } + parse(text2) { + this.currentIndent = 0; + this.allNodes = new FBXTree(); + this.nodeStack = []; + this.currentProp = []; + this.currentPropName = ""; + const scope = this; + const split = text2.split(/[\r\n]+/); + split.forEach(function(line2, i) { + const matchComment = line2.match(/^[\s\t]*;/); + const matchEmpty = line2.match(/^[\s\t]*$/); + if (matchComment || matchEmpty) return; + const matchBeginning = line2.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", ""); + const matchProperty = line2.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"); + const matchEnd = line2.match("^\\t{" + (scope.currentIndent - 1) + "}}"); + if (matchBeginning) { + scope.parseNodeBegin(line2, matchBeginning); + } else if (matchProperty) { + scope.parseNodeProperty(line2, matchProperty, split[++i]); + } else if (matchEnd) { + scope.popStack(); + } else if (line2.match(/^[^\s\t}]/)) { + scope.parseNodePropertyContinued(line2); + } + }); + return this.allNodes; + } + parseNodeBegin(line2, property2) { + const nodeName = property2[1].trim().replace(/^"/, "").replace(/"$/, ""); + const nodeAttrs = property2[2].split(",").map(function(attr) { + return attr.trim().replace(/^"/, "").replace(/"$/, ""); + }); + const node = { name: nodeName }; + const attrs = this.parseNodeAttr(nodeAttrs); + const currentNode = this.getCurrentNode(); + if (this.currentIndent === 0) { + this.allNodes.add(nodeName, node); + } else { + if (nodeName in currentNode) { + if (nodeName === "PoseNode") { + currentNode.PoseNode.push(node); + } else if (currentNode[nodeName].id !== void 0) { + currentNode[nodeName] = {}; + currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName]; + } + if (attrs.id !== "") currentNode[nodeName][attrs.id] = node; + } else if (typeof attrs.id === "number") { + currentNode[nodeName] = {}; + currentNode[nodeName][attrs.id] = node; + } else if (nodeName !== "Properties70") { + if (nodeName === "PoseNode") currentNode[nodeName] = [node]; + else currentNode[nodeName] = node; + } + } + if (typeof attrs.id === "number") node.id = attrs.id; + if (attrs.name !== "") node.attrName = attrs.name; + if (attrs.type !== "") node.attrType = attrs.type; + this.pushStack(node); + } + parseNodeAttr(attrs) { + let id = attrs[0]; + if (attrs[0] !== "") { + id = parseInt(attrs[0]); + if (isNaN(id)) { + id = attrs[0]; + } + } + let name2 = "", type = ""; + if (attrs.length > 1) { + name2 = attrs[1].replace(/^(\w+)::/, ""); + type = attrs[2]; + } + return { id, name: name2, type }; + } + parseNodeProperty(line2, property2, contentLine) { + let propName = property2[1].replace(/^"/, "").replace(/"$/, "").trim(); + let propValue = property2[2].replace(/^"/, "").replace(/"$/, "").trim(); + if (propName === "Content" && propValue === ",") { + propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim(); + } + const currentNode = this.getCurrentNode(); + const parentName = currentNode.name; + if (parentName === "Properties70") { + this.parseNodeSpecialProperty(line2, propName, propValue); + return; + } + if (propName === "C") { + const connProps = propValue.split(",").slice(1); + const from = parseInt(connProps[0]); + const to = parseInt(connProps[1]); + let rest = propValue.split(",").slice(3); + rest = rest.map(function(elem2) { + return elem2.trim().replace(/^"/, ""); + }); + propName = "connections"; + propValue = [from, to]; + append(propValue, rest); + if (currentNode[propName] === void 0) { + currentNode[propName] = []; + } + } + if (propName === "Node") currentNode.id = propValue; + if (propName in currentNode && Array.isArray(currentNode[propName])) { + currentNode[propName].push(propValue); + } else { + if (propName !== "a") currentNode[propName] = propValue; + else currentNode.a = propValue; + } + this.setCurrentProp(currentNode, propName); + if (propName === "a" && propValue.slice(-1) !== ",") { + currentNode.a = parseNumberArray(propValue); + } + } + parseNodePropertyContinued(line2) { + const currentNode = this.getCurrentNode(); + currentNode.a += line2; + if (line2.slice(-1) !== ",") { + currentNode.a = parseNumberArray(currentNode.a); + } + } + // parse "Property70" + parseNodeSpecialProperty(line2, propName, propValue) { + const props = propValue.split('",').map(function(prop) { + return prop.trim().replace(/^\"/, "").replace(/\s/, "_"); + }); + const innerPropName = props[0]; + const innerPropType1 = props[1]; + const innerPropType2 = props[2]; + const innerPropFlag = props[3]; + let innerPropValue = props[4]; + switch (innerPropType1) { + case "int": + case "enum": + case "bool": + case "ULongLong": + case "double": + case "Number": + case "FieldOfView": + innerPropValue = parseFloat(innerPropValue); + break; + case "Color": + case "ColorRGB": + case "Vector3D": + case "Lcl_Translation": + case "Lcl_Rotation": + case "Lcl_Scaling": + innerPropValue = parseNumberArray(innerPropValue); + break; + } + this.getPrevNode()[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + this.setCurrentProp(this.getPrevNode(), innerPropName); + } +}; +var BinaryParser = class { + parse(buffer) { + const reader = new BinaryReader(buffer); + reader.skip(23); + const version = reader.getUint32(); + if (version < 6400) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version); + } + const allNodes = new FBXTree(); + while (!this.endOfContent(reader)) { + const node = this.parseNode(reader, version); + if (node !== null) allNodes.add(node.name, node); + } + return allNodes; + } + // Check if reader has reached the end of content. + endOfContent(reader) { + if (reader.size() % 16 === 0) { + return (reader.getOffset() + 160 + 16 & ~15) >= reader.size(); + } else { + return reader.getOffset() + 160 + 16 >= reader.size(); + } + } + // recursively parse nodes until the end of the file is reached + parseNode(reader, version) { + const node = {}; + const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32(); + const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32(); + version >= 7500 ? reader.getUint64() : reader.getUint32(); + const nameLen = reader.getUint8(); + const name2 = reader.getString(nameLen); + if (endOffset === 0) return null; + const propertyList = []; + for (let i = 0; i < numProperties; i++) { + propertyList.push(this.parseProperty(reader)); + } + const id = propertyList.length > 0 ? propertyList[0] : ""; + const attrName = propertyList.length > 1 ? propertyList[1] : ""; + const attrType = propertyList.length > 2 ? propertyList[2] : ""; + node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false; + while (endOffset > reader.getOffset()) { + const subNode = this.parseNode(reader, version); + if (subNode !== null) this.parseSubNode(name2, node, subNode); + } + node.propertyList = propertyList; + if (typeof id === "number") node.id = id; + if (attrName !== "") node.attrName = attrName; + if (attrType !== "") node.attrType = attrType; + if (name2 !== "") node.name = name2; + return node; + } + parseSubNode(name2, node, subNode) { + if (subNode.singleProperty === true) { + const value2 = subNode.propertyList[0]; + if (Array.isArray(value2)) { + node[subNode.name] = subNode; + subNode.a = value2; + } else { + node[subNode.name] = value2; + } + } else if (name2 === "Connections" && subNode.name === "C") { + const array = []; + subNode.propertyList.forEach(function(property2, i) { + if (i !== 0) array.push(property2); + }); + if (node.connections === void 0) { + node.connections = []; + } + node.connections.push(array); + } else if (subNode.name === "Properties70") { + const keys2 = Object.keys(subNode); + keys2.forEach(function(key2) { + node[key2] = subNode[key2]; + }); + } else if (name2 === "Properties70" && subNode.name === "P") { + let innerPropName = subNode.propertyList[0]; + let innerPropType1 = subNode.propertyList[1]; + const innerPropType2 = subNode.propertyList[2]; + const innerPropFlag = subNode.propertyList[3]; + let innerPropValue; + if (innerPropName.indexOf("Lcl ") === 0) innerPropName = innerPropName.replace("Lcl ", "Lcl_"); + if (innerPropType1.indexOf("Lcl ") === 0) innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_"); + if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) { + innerPropValue = [ + subNode.propertyList[4], + subNode.propertyList[5], + subNode.propertyList[6] + ]; + } else { + innerPropValue = subNode.propertyList[4]; + } + node[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + } else if (node[subNode.name] === void 0) { + if (typeof subNode.id === "number") { + node[subNode.name] = {}; + node[subNode.name][subNode.id] = subNode; + } else { + node[subNode.name] = subNode; + } + } else { + if (subNode.name === "PoseNode") { + if (!Array.isArray(node[subNode.name])) { + node[subNode.name] = [node[subNode.name]]; + } + node[subNode.name].push(subNode); + } else if (node[subNode.name][subNode.id] === void 0) { + node[subNode.name][subNode.id] = subNode; + } + } + } + parseProperty(reader) { + const type = reader.getString(1); + let length2; + switch (type) { + case "C": + return reader.getBoolean(); + case "D": + return reader.getFloat64(); + case "F": + return reader.getFloat32(); + case "I": + return reader.getInt32(); + case "L": + return reader.getInt64(); + case "R": + length2 = reader.getUint32(); + return reader.getArrayBuffer(length2); + case "S": + length2 = reader.getUint32(); + return reader.getString(length2); + case "Y": + return reader.getInt16(); + case "b": + case "c": + case "d": + case "f": + case "i": + case "l": + const arrayLength = reader.getUint32(); + const encoding = reader.getUint32(); + const compressedLength = reader.getUint32(); + if (encoding === 0) { + switch (type) { + case "b": + case "c": + return reader.getBooleanArray(arrayLength); + case "d": + return reader.getFloat64Array(arrayLength); + case "f": + return reader.getFloat32Array(arrayLength); + case "i": + return reader.getInt32Array(arrayLength); + case "l": + return reader.getInt64Array(arrayLength); + } + } + const data2 = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))); + const reader2 = new BinaryReader(data2.buffer); + switch (type) { + case "b": + case "c": + return reader2.getBooleanArray(arrayLength); + case "d": + return reader2.getFloat64Array(arrayLength); + case "f": + return reader2.getFloat32Array(arrayLength); + case "i": + return reader2.getInt32Array(arrayLength); + case "l": + return reader2.getInt64Array(arrayLength); + } + break; + default: + throw new Error("THREE.FBXLoader: Unknown property type " + type); + } + } +}; +var BinaryReader = class { + constructor(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + this._textDecoder = new TextDecoder(); + } + getOffset() { + return this.offset; + } + size() { + return this.dv.buffer.byteLength; + } + skip(length2) { + this.offset += length2; + } + // seems like true/false representation depends on exporter. + // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54) + // then sees LSB. + getBoolean() { + return (this.getUint8() & 1) === 1; + } + getBooleanArray(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getBoolean()); + } + return a2; + } + getUint8() { + const value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + } + getInt16() { + const value2 = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + } + getInt32() { + const value2 = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + getInt32Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getInt32()); + } + return a2; + } + getUint32() { + const value2 = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + // JavaScript doesn't support 64-bit integer so calculate this here + // 1 << 32 will return 1 so using multiply operation instead here. + // There's a possibility that this method returns wrong value if the value + // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER. + // TODO: safely handle 64-bit integer + getInt64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + if (high & 2147483648) { + high = ~high & 4294967295; + low = ~low & 4294967295; + if (low === 4294967295) high = high + 1 & 4294967295; + low = low + 1 & 4294967295; + return -(high * 4294967296 + low); + } + return high * 4294967296 + low; + } + getInt64Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getInt64()); + } + return a2; + } + // Note: see getInt64() comment + getUint64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + return high * 4294967296 + low; + } + getFloat32() { + const value2 = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + getFloat32Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + } + getFloat64() { + const value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + } + getFloat64Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + } + getArrayBuffer(size2) { + const value2 = this.dv.buffer.slice(this.offset, this.offset + size2); + this.offset += size2; + return value2; + } + getString(size2) { + const start = this.offset; + let a2 = new Uint8Array(this.dv.buffer, start, size2); + this.skip(size2); + const nullByte = a2.indexOf(0); + if (nullByte >= 0) a2 = new Uint8Array(this.dv.buffer, start, nullByte); + return this._textDecoder.decode(a2); + } +}; +var FBXTree = class { + add(key2, val2) { + this[key2] = val2; + } +}; +function isFbxFormatBinary(buffer) { + const CORRECT = "Kaydara FBX Binary \0"; + return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length); +} +function isFbxFormatASCII(text2) { + const CORRECT = ["K", "a", "y", "d", "a", "r", "a", "\\", "F", "B", "X", "\\", "B", "i", "n", "a", "r", "y", "\\", "\\"]; + let cursor = 0; + function read(offset) { + const result = text2[offset - 1]; + text2 = text2.slice(cursor + offset); + cursor++; + return result; + } + for (let i = 0; i < CORRECT.length; ++i) { + const num = read(1); + if (num === CORRECT[i]) { + return false; + } + } + return true; +} +function getFbxVersion(text2) { + const versionRegExp = /FBXVersion: (\d+)/; + const match = text2.match(versionRegExp); + if (match) { + const version = parseInt(match[1]); + return version; + } + throw new Error("THREE.FBXLoader: Cannot find the version number for the file given."); +} +function convertFBXTimeToSeconds(time2) { + return time2 / 46186158e3; +} +var dataArray = []; +function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) { + let index2; + switch (infoObject.mappingType) { + case "ByPolygonVertex": + index2 = polygonVertexIndex; + break; + case "ByPolygon": + index2 = polygonIndex; + break; + case "ByVertice": + index2 = vertexIndex; + break; + case "AllSame": + index2 = infoObject.indices[0]; + break; + default: + console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType); + } + if (infoObject.referenceType === "IndexToDirect") index2 = infoObject.indices[index2]; + const from = index2 * infoObject.dataSize; + const to = from + infoObject.dataSize; + return slice(dataArray, infoObject.buffer, from, to); +} +var tempEuler = new Euler(); +var tempVec = new Vector3(); +function generateTransform(transformData) { + const lTranslationM = new Matrix4(); + const lPreRotationM = new Matrix4(); + const lRotationM = new Matrix4(); + const lPostRotationM = new Matrix4(); + const lScalingM = new Matrix4(); + const lScalingPivotM = new Matrix4(); + const lScalingOffsetM = new Matrix4(); + const lRotationOffsetM = new Matrix4(); + const lRotationPivotM = new Matrix4(); + const lParentGX = new Matrix4(); + const lParentLX = new Matrix4(); + const lGlobalT = new Matrix4(); + const inheritType = transformData.inheritType ? transformData.inheritType : 0; + if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation)); + if (transformData.preRotation) { + const array = transformData.preRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.rotation) { + const array = transformData.rotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.postRotation) { + const array = transformData.postRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + lPostRotationM.invert(); + } + if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); + if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset)); + if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot)); + if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset)); + if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); + if (transformData.parentMatrixWorld) { + lParentLX.copy(transformData.parentMatrix); + lParentGX.copy(transformData.parentMatrixWorld); + } + const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); + const lParentGRM = new Matrix4(); + lParentGRM.extractRotation(lParentGX); + const lParentTM = new Matrix4(); + lParentTM.copyPosition(lParentGX); + const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX); + const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM); + const lLSM = lScalingM; + const lGlobalRS = new Matrix4(); + if (inheritType === 0) { + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM); + } else if (inheritType === 1) { + lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM); + } else { + const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX)); + const lParentLSM_inv = lParentLSM.clone().invert(); + const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv); + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM); + } + const lRotationPivotM_inv = lRotationPivotM.clone().invert(); + const lScalingPivotM_inv = lScalingPivotM.clone().invert(); + let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv); + const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform); + const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo); + lGlobalT.copyPosition(lGlobalTranslation); + lTransform = lGlobalT.clone().multiply(lGlobalRS); + lTransform.premultiply(lParentGX.invert()); + return lTransform; +} +function getEulerOrder(order) { + order = order || 0; + const enums = [ + "ZYX", + // -> XYZ extrinsic + "YZX", + // -> XZY extrinsic + "XZY", + // -> YZX extrinsic + "ZXY", + // -> YXZ extrinsic + "YXZ", + // -> ZXY extrinsic + "XYZ" + // -> ZYX extrinsic + //'SphericXYZ', // not possible to support + ]; + if (order === 6) { + console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."); + return enums[0]; + } + return enums[order]; +} +function parseNumberArray(value2) { + const array = value2.split(",").map(function(val2) { + return parseFloat(val2); + }); + return array; +} +function convertArrayBufferToString(buffer, from, to) { + if (from === void 0) from = 0; + if (to === void 0) to = buffer.byteLength; + return new TextDecoder().decode(new Uint8Array(buffer, from, to)); +} +function append(a2, b3) { + for (let i = 0, j = a2.length, l2 = b3.length; i < l2; i++, j++) { + a2[j] = b3[i]; + } +} +function slice(a2, b3, from, to) { + for (let i = from, j = 0; i < to; i++, j++) { + a2[j] = b3[i]; + } + return a2; +} + +// node_modules/three/examples/jsm/loaders/FontLoader.js +var FontLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + const font = scope.parse(JSON.parse(text2)); + if (onLoad) onLoad(font); + }, onProgress, onError); + } + parse(json) { + return new Font(json); + } +}; +var Font = class { + constructor(data2) { + this.isFont = true; + this.type = "Font"; + this.data = data2; + } + generateShapes(text2, size2 = 100) { + const shapes = []; + const paths = createPaths(text2, size2, this.data); + for (let p2 = 0, pl = paths.length; p2 < pl; p2++) { + shapes.push(...paths[p2].toShapes()); + } + return shapes; + } +}; +function createPaths(text2, size2, data2) { + const chars = Array.from(text2); + const scale2 = size2 / data2.resolution; + const line_height = (data2.boundingBox.yMax - data2.boundingBox.yMin + data2.underlineThickness) * scale2; + const paths = []; + let offsetX = 0, offsetY = 0; + for (let i = 0; i < chars.length; i++) { + const char = chars[i]; + if (char === "\n") { + offsetX = 0; + offsetY -= line_height; + } else { + const ret = createPath2(char, scale2, offsetX, offsetY, data2); + offsetX += ret.offsetX; + paths.push(ret.path); + } + } + return paths; +} +function createPath2(char, scale2, offsetX, offsetY, data2) { + const glyph = data2.glyphs[char] || data2.glyphs["?"]; + if (!glyph) { + console.error('THREE.Font: character "' + char + '" does not exists in font family ' + data2.familyName + "."); + return; + } + const path = new ShapePath2(); + let x2, y2, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + if (glyph.o) { + const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(" ")); + for (let i = 0, l2 = outline.length; i < l2; ) { + const action = outline[i++]; + switch (action) { + case "m": + x2 = outline[i++] * scale2 + offsetX; + y2 = outline[i++] * scale2 + offsetY; + path.moveTo(x2, y2); + break; + case "l": + x2 = outline[i++] * scale2 + offsetX; + y2 = outline[i++] * scale2 + offsetY; + path.lineTo(x2, y2); + break; + case "q": + cpx = outline[i++] * scale2 + offsetX; + cpy = outline[i++] * scale2 + offsetY; + cpx1 = outline[i++] * scale2 + offsetX; + cpy1 = outline[i++] * scale2 + offsetY; + path.quadraticCurveTo(cpx1, cpy1, cpx, cpy); + break; + case "b": + cpx = outline[i++] * scale2 + offsetX; + cpy = outline[i++] * scale2 + offsetY; + cpx1 = outline[i++] * scale2 + offsetX; + cpy1 = outline[i++] * scale2 + offsetY; + cpx2 = outline[i++] * scale2 + offsetX; + cpy2 = outline[i++] * scale2 + offsetY; + path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy); + break; + } + } + } + return { offsetX: glyph.ha * scale2, path }; +} + +// node_modules/three/examples/jsm/loaders/GCodeLoader.js +var GCodeLoader = class extends Loader { + constructor(manager) { + super(manager); + this.splitLayer = false; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + let state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false }; + const layers = []; + let currentLayer = void 0; + const pathMaterial = new LineBasicMaterial({ color: 16711680 }); + pathMaterial.name = "path"; + const extrudingMaterial = new LineBasicMaterial({ color: 65280 }); + extrudingMaterial.name = "extruded"; + function newLayer(line2) { + currentLayer = { vertex: [], pathVertex: [], z: line2.z }; + layers.push(currentLayer); + } + function addSegment2(p1, p2) { + if (currentLayer === void 0) { + newLayer(p1); + } + if (state.extruding) { + currentLayer.vertex.push(p1.x, p1.y, p1.z); + currentLayer.vertex.push(p2.x, p2.y, p2.z); + } else { + currentLayer.pathVertex.push(p1.x, p1.y, p1.z); + currentLayer.pathVertex.push(p2.x, p2.y, p2.z); + } + } + function delta(v12, v2) { + return state.relative ? v2 : v2 - v12; + } + function absolute(v12, v2) { + return state.relative ? v12 + v2 : v2; + } + const lines = data2.replace(/;.+/g, "").split("\n"); + for (let i = 0; i < lines.length; i++) { + const tokens = lines[i].split(" "); + const cmd = tokens[0].toUpperCase(); + const args = {}; + tokens.splice(1).forEach(function(token) { + if (token[0] !== void 0) { + const key2 = token[0].toLowerCase(); + const value2 = parseFloat(token.substring(1)); + args[key2] = value2; + } + }); + if (cmd === "G0" || cmd === "G1") { + const line2 = { + x: args.x !== void 0 ? absolute(state.x, args.x) : state.x, + y: args.y !== void 0 ? absolute(state.y, args.y) : state.y, + z: args.z !== void 0 ? absolute(state.z, args.z) : state.z, + e: args.e !== void 0 ? absolute(state.e, args.e) : state.e, + f: args.f !== void 0 ? absolute(state.f, args.f) : state.f + }; + if (delta(state.e, line2.e) > 0) { + state.extruding = delta(state.e, line2.e) > 0; + if (currentLayer == void 0 || line2.z != currentLayer.z) { + newLayer(line2); + } + } + addSegment2(state, line2); + state = line2; + } else if (cmd === "G2" || cmd === "G3") { + } else if (cmd === "G90") { + state.relative = false; + } else if (cmd === "G91") { + state.relative = true; + } else if (cmd === "G92") { + const line2 = state; + line2.x = args.x !== void 0 ? args.x : line2.x; + line2.y = args.y !== void 0 ? args.y : line2.y; + line2.z = args.z !== void 0 ? args.z : line2.z; + line2.e = args.e !== void 0 ? args.e : line2.e; + } else { + } + } + function addObject(vertex, extruding, i) { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertex, 3)); + const segments = new LineSegments(geometry, extruding ? extrudingMaterial : pathMaterial); + segments.name = "layer" + i; + object.add(segments); + } + const object = new Group(); + object.name = "gcode"; + if (this.splitLayer) { + for (let i = 0; i < layers.length; i++) { + const layer = layers[i]; + addObject(layer.vertex, true, i); + addObject(layer.pathVertex, false, i); + } + } else { + const vertex = [], pathVertex = []; + for (let i = 0; i < layers.length; i++) { + const layer = layers[i]; + const layerVertex = layer.vertex; + const layerPathVertex = layer.pathVertex; + for (let j = 0; j < layerVertex.length; j++) { + vertex.push(layerVertex[j]); + } + for (let j = 0; j < layerPathVertex.length; j++) { + pathVertex.push(layerPathVertex[j]); + } + } + addObject(vertex, true, layers.length); + addObject(pathVertex, false, layers.length); + } + object.rotation.set(-Math.PI / 2, 0, 0); + return object; + } +}; + +// node_modules/three/examples/jsm/loaders/RGBELoader.js +var RGBELoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html + parse(buffer) { + const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) { + switch (rgbe_error_code) { + case rgbe_read_error: + throw new Error("THREE.RGBELoader: Read Error: " + (msg || "")); + case rgbe_write_error: + throw new Error("THREE.RGBELoader: Write Error: " + (msg || "")); + case rgbe_format_error: + throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || "")); + default: + case rgbe_memory_error: + throw new Error("THREE.RGBELoader: Memory Error: " + (msg || "")); + } + }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) { + const chunkSize = 128; + lineLimit = !lineLimit ? 1024 : lineLimit; + let p2 = buffer2.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p2, p2 + chunkSize))); + while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p2 < buffer2.byteLength) { + s += chunk; + len += chunk.length; + p2 += chunkSize; + chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p2, p2 + chunkSize))); + } + if (-1 < i) { + if (false !== consume) buffer2.pos += len + i + 1; + return s + chunk.slice(0, i); + } + return false; + }, RGBE_ReadHeader = function(buffer2) { + const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/, dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/, header = { + valid: 0, + /* indicate which fields are valid */ + string: "", + /* the actual header string */ + comments: "", + /* comments found in header */ + programtype: "RGBE", + /* listed at beginning of file to identify it after "#?". defaults to "RGBE" */ + format: "", + /* RGBE format, default 32-bit_rle_rgbe */ + gamma: 1, + /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */ + exposure: 1, + /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */ + width: 0, + height: 0 + /* image dimensions, width/height */ + }; + let line2, match; + if (buffer2.pos >= buffer2.byteLength || !(line2 = fgets(buffer2))) { + rgbe_error(rgbe_read_error, "no header found"); + } + if (!(match = line2.match(magic_token_re))) { + rgbe_error(rgbe_format_error, "bad initial token"); + } + header.valid |= RGBE_VALID_PROGRAMTYPE; + header.programtype = match[1]; + header.string += line2 + "\n"; + while (true) { + line2 = fgets(buffer2); + if (false === line2) break; + header.string += line2 + "\n"; + if ("#" === line2.charAt(0)) { + header.comments += line2 + "\n"; + continue; + } + if (match = line2.match(gamma_re)) { + header.gamma = parseFloat(match[1]); + } + if (match = line2.match(exposure_re)) { + header.exposure = parseFloat(match[1]); + } + if (match = line2.match(format_re)) { + header.valid |= RGBE_VALID_FORMAT; + header.format = match[1]; + } + if (match = line2.match(dimensions_re)) { + header.valid |= RGBE_VALID_DIMENSIONS; + header.height = parseInt(match[1], 10); + header.width = parseInt(match[2], 10); + } + if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break; + } + if (!(header.valid & RGBE_VALID_FORMAT)) { + rgbe_error(rgbe_format_error, "missing format specifier"); + } + if (!(header.valid & RGBE_VALID_DIMENSIONS)) { + rgbe_error(rgbe_format_error, "missing image size specifier"); + } + return header; + }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) { + const scanline_width = w2; + if ( + // run length encoding is not allowed so read flat + scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded + (2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128) + ) { + return new Uint8Array(buffer2); + } + if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) { + rgbe_error(rgbe_format_error, "wrong scanline width"); + } + const data_rgba = new Uint8Array(4 * w2 * h2); + if (!data_rgba.length) { + rgbe_error(rgbe_memory_error, "unable to allocate buffer space"); + } + let offset = 0, pos = 0; + const ptr_end = 4 * scanline_width; + const rgbeStart = new Uint8Array(4); + const scanline_buffer = new Uint8Array(ptr_end); + let num_scanlines = h2; + while (num_scanlines > 0 && pos < buffer2.byteLength) { + if (pos + 4 > buffer2.byteLength) { + rgbe_error(rgbe_read_error); + } + rgbeStart[0] = buffer2[pos++]; + rgbeStart[1] = buffer2[pos++]; + rgbeStart[2] = buffer2[pos++]; + rgbeStart[3] = buffer2[pos++]; + if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) { + rgbe_error(rgbe_format_error, "bad rgbe scanline format"); + } + let ptr = 0, count; + while (ptr < ptr_end && pos < buffer2.byteLength) { + count = buffer2[pos++]; + const isEncodedRun = count > 128; + if (isEncodedRun) count -= 128; + if (0 === count || ptr + count > ptr_end) { + rgbe_error(rgbe_format_error, "bad scanline data"); + } + if (isEncodedRun) { + const byteValue = buffer2[pos++]; + for (let i = 0; i < count; i++) { + scanline_buffer[ptr++] = byteValue; + } + } else { + scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr); + ptr += count; + pos += count; + } + } + const l2 = scanline_width; + for (let i = 0; i < l2; i++) { + let off = 0; + data_rgba[offset] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 1] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 2] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 3] = scanline_buffer[i + off]; + offset += 4; + } + num_scanlines--; + } + return data_rgba; + }; + const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale2 = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale2; + destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale2; + destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale2; + destArray[destOffset + 3] = 1; + }; + const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale2 = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale2, 65504)); + destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale2, 65504)); + destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale2, 65504)); + destArray[destOffset + 3] = DataUtils.toHalfFloat(1); + }; + const byteArray = new Uint8Array(buffer); + byteArray.pos = 0; + const rgbe_header_info = RGBE_ReadHeader(byteArray); + const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h); + let data2, type; + let numElements; + switch (this.type) { + case FloatType: + numElements = image_rgba_data.length / 4; + const floatArray = new Float32Array(numElements * 4); + for (let j = 0; j < numElements; j++) { + RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4); + } + data2 = floatArray; + type = FloatType; + break; + case HalfFloatType: + numElements = image_rgba_data.length / 4; + const halfArray = new Uint16Array(numElements * 4); + for (let j = 0; j < numElements; j++) { + RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4); + } + data2 = halfArray; + type = HalfFloatType; + break; + default: + throw new Error("THREE.RGBELoader: Unsupported type: " + this.type); + break; + } + return { + width: w, + height: h, + data: data2, + header: rgbe_header_info.string, + gamma: rgbe_header_info.gamma, + exposure: rgbe_header_info.exposure, + type + }; + } + setDataType(value2) { + this.type = value2; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + switch (texture.type) { + case FloatType: + case HalfFloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = true; + break; + } + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; + +// node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js +var HDRCubeTextureLoader = class extends Loader { + constructor(manager) { + super(manager); + this.hdrLoader = new RGBELoader(); + this.type = HalfFloatType; + } + load(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + texture.type = this.type; + switch (texture.type) { + case FloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + break; + case HalfFloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + break; + } + const scope = this; + let loaded = 0; + function loadHDRData(i, onLoad2, onProgress2, onError2) { + new FileLoader(scope.manager).setPath(scope.path).setResponseType("arraybuffer").setWithCredentials(scope.withCredentials).load(urls[i], function(buffer) { + loaded++; + const texData = scope.hdrLoader.parse(buffer); + if (!texData) return; + if (texData.data !== void 0) { + const dataTexture = new DataTexture(texData.data, texData.width, texData.height); + dataTexture.type = texture.type; + dataTexture.colorSpace = texture.colorSpace; + dataTexture.format = texture.format; + dataTexture.minFilter = texture.minFilter; + dataTexture.magFilter = texture.magFilter; + dataTexture.generateMipmaps = texture.generateMipmaps; + texture.images[i] = dataTexture; + } + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad2) onLoad2(texture); + } + }, onProgress2, onError2); + } + for (let i = 0; i < urls.length; i++) { + loadHDRData(i, onLoad, onProgress, onError); + } + return texture; + } + setDataType(value2) { + this.type = value2; + this.hdrLoader.setDataType(value2); + return this; + } +}; + +// node_modules/three/examples/jsm/loaders/IESLoader.js +var IESLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + _getIESValues(iesLamp, type) { + const width2 = 360; + const height2 = 180; + const size2 = width2 * height2; + const data2 = new Array(size2); + function interpolateCandelaValues(phi, theta) { + let phiIndex = 0, thetaIndex = 0; + let startTheta2 = 0, endTheta2 = 0, startPhi = 0, endPhi = 0; + for (let i = 0; i < iesLamp.numHorAngles - 1; ++i) { + if (theta < iesLamp.horAngles[i + 1] || i == iesLamp.numHorAngles - 2) { + thetaIndex = i; + startTheta2 = iesLamp.horAngles[i]; + endTheta2 = iesLamp.horAngles[i + 1]; + break; + } + } + for (let i = 0; i < iesLamp.numVerAngles - 1; ++i) { + if (phi < iesLamp.verAngles[i + 1] || i == iesLamp.numVerAngles - 2) { + phiIndex = i; + startPhi = iesLamp.verAngles[i]; + endPhi = iesLamp.verAngles[i + 1]; + break; + } + } + const deltaTheta = endTheta2 - startTheta2; + const deltaPhi = endPhi - startPhi; + if (deltaPhi === 0) + return 0; + const t1 = deltaTheta === 0 ? 0 : (theta - startTheta2) / deltaTheta; + const t22 = (phi - startPhi) / deltaPhi; + const nextThetaIndex = deltaTheta === 0 ? thetaIndex : thetaIndex + 1; + const v12 = MathUtils.lerp(iesLamp.candelaValues[thetaIndex][phiIndex], iesLamp.candelaValues[nextThetaIndex][phiIndex], t1); + const v2 = MathUtils.lerp(iesLamp.candelaValues[thetaIndex][phiIndex + 1], iesLamp.candelaValues[nextThetaIndex][phiIndex + 1], t1); + const v = MathUtils.lerp(v12, v2, t22); + return v; + } + const startTheta = iesLamp.horAngles[0], endTheta = iesLamp.horAngles[iesLamp.numHorAngles - 1]; + for (let i = 0; i < size2; ++i) { + let theta = i % width2; + const phi = Math.floor(i / width2); + if (endTheta - startTheta !== 0 && (theta < startTheta || theta >= endTheta)) { + theta %= endTheta * 2; + if (theta > endTheta) + theta = endTheta * 2 - theta; + } + data2[phi + theta * height2] = interpolateCandelaValues(phi, theta); + } + let result = null; + if (type === UnsignedByteType) result = Uint8Array.from(data2.map((v) => Math.min(v * 255, 255))); + else if (type === HalfFloatType) result = Uint16Array.from(data2.map((v) => DataUtils.toHalfFloat(v))); + else if (type === FloatType) result = Float32Array.from(data2); + else console.error("IESLoader: Unsupported type:", type); + return result; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setResponseType("text"); + loader.setCrossOrigin(this.crossOrigin); + loader.setWithCredentials(this.withCredentials); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.load(url, (text2) => { + onLoad(this.parse(text2)); + }, onProgress, onError); + } + parse(text2) { + const type = this.type; + const iesLamp = new IESLamp(text2); + const data2 = this._getIESValues(iesLamp, type); + const texture = new DataTexture(data2, 180, 1, RedFormat, type); + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.needsUpdate = true; + return texture; + } +}; +function IESLamp(text2) { + const _self = this; + const textArray = text2.split("\n"); + let lineNumber = 0; + let line2; + _self.verAngles = []; + _self.horAngles = []; + _self.candelaValues = []; + _self.tiltData = {}; + _self.tiltData.angles = []; + _self.tiltData.mulFactors = []; + function textToArray(text3) { + text3 = text3.replace(/^\s+|\s+$/g, ""); + text3 = text3.replace(/,/g, " "); + text3 = text3.replace(/\s\s+/g, " "); + const array = text3.split(" "); + return array; + } + function readArray(count, array) { + while (true) { + const line3 = textArray[lineNumber++]; + const lineData = textToArray(line3); + for (let i = 0; i < lineData.length; ++i) { + array.push(Number(lineData[i])); + } + if (array.length === count) + break; + } + } + function readTilt() { + let line3 = textArray[lineNumber++]; + let lineData = textToArray(line3); + _self.tiltData.lampToLumGeometry = Number(lineData[0]); + line3 = textArray[lineNumber++]; + lineData = textToArray(line3); + _self.tiltData.numAngles = Number(lineData[0]); + readArray(_self.tiltData.numAngles, _self.tiltData.angles); + readArray(_self.tiltData.numAngles, _self.tiltData.mulFactors); + } + function readLampValues() { + const values2 = []; + readArray(10, values2); + _self.count = Number(values2[0]); + _self.lumens = Number(values2[1]); + _self.multiplier = Number(values2[2]); + _self.numVerAngles = Number(values2[3]); + _self.numHorAngles = Number(values2[4]); + _self.gonioType = Number(values2[5]); + _self.units = Number(values2[6]); + _self.width = Number(values2[7]); + _self.length = Number(values2[8]); + _self.height = Number(values2[9]); + } + function readLampFactors() { + const values2 = []; + readArray(3, values2); + _self.ballFactor = Number(values2[0]); + _self.blpFactor = Number(values2[1]); + _self.inputWatts = Number(values2[2]); + } + while (true) { + line2 = textArray[lineNumber++]; + if (line2.includes("TILT")) { + break; + } + } + if (!line2.includes("NONE")) { + if (line2.includes("INCLUDE")) { + readTilt(); + } else { + } + } + readLampValues(); + readLampFactors(); + for (let i = 0; i < _self.numHorAngles; ++i) { + _self.candelaValues.push([]); + } + readArray(_self.numVerAngles, _self.verAngles); + readArray(_self.numHorAngles, _self.horAngles); + for (let i = 0; i < _self.numHorAngles; ++i) { + readArray(_self.numVerAngles, _self.candelaValues[i]); + } + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + _self.candelaValues[i][j] *= _self.candelaValues[i][j] * _self.multiplier * _self.ballFactor * _self.blpFactor; + } + } + let maxVal = -1; + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + const value2 = _self.candelaValues[i][j]; + maxVal = maxVal < value2 ? value2 : maxVal; + } + } + const bNormalize = true; + if (bNormalize && maxVal > 0) { + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + _self.candelaValues[i][j] /= maxVal; + } + } + } +} + +// node_modules/three/examples/jsm/loaders/KMZLoader.js +var KMZLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function findFile(url) { + for (const path in zip) { + if (path.slice(-url.length) === url) { + return zip[path]; + } + } + } + const manager = new LoadingManager(); + manager.setURLModifier(function(url) { + const image = findFile(url); + if (image) { + console.log("Loading", url); + const blob = new Blob([image.buffer], { type: "application/octet-stream" }); + return URL.createObjectURL(blob); + } + return url; + }); + const zip = unzipSync(new Uint8Array(data2)); + if (zip["doc.kml"]) { + const xml = new DOMParser().parseFromString(strFromU8(zip["doc.kml"]), "application/xml"); + const model = xml.querySelector("Placemark Model Link href"); + if (model) { + const loader = new ColladaLoader(manager); + return loader.parse(strFromU8(zip[model.textContent])); + } + } else { + console.warn("KMZLoader: Missing doc.kml file."); + for (const path in zip) { + const extension = path.split(".").pop().toLowerCase(); + if (extension === "dae") { + const loader = new ColladaLoader(manager); + return loader.parse(strFromU8(zip[path])); + } + } + } + console.error("KMZLoader: Couldn't find .dae file."); + return { scene: new Group() }; + } +}; + +// node_modules/three/examples/jsm/utils/WorkerPool.js +var WorkerPool = class { + constructor(pool = 4) { + this.pool = pool; + this.queue = []; + this.workers = []; + this.workersResolve = []; + this.workerStatus = 0; + } + _initWorker(workerId) { + if (!this.workers[workerId]) { + const worker = this.workerCreator(); + worker.addEventListener("message", this._onMessage.bind(this, workerId)); + this.workers[workerId] = worker; + } + } + _getIdleWorker() { + for (let i = 0; i < this.pool; i++) + if (!(this.workerStatus & 1 << i)) return i; + return -1; + } + _onMessage(workerId, msg) { + const resolve = this.workersResolve[workerId]; + resolve && resolve(msg); + if (this.queue.length) { + const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift(); + this.workersResolve[workerId] = resolve2; + this.workers[workerId].postMessage(msg2, transfer); + } else { + this.workerStatus ^= 1 << workerId; + } + } + setWorkerCreator(workerCreator) { + this.workerCreator = workerCreator; + } + setWorkerLimit(pool) { + this.pool = pool; + } + postMessage(msg, transfer) { + return new Promise((resolve) => { + const workerId = this._getIdleWorker(); + if (workerId !== -1) { + this._initWorker(workerId); + this.workerStatus |= 1 << workerId; + this.workersResolve[workerId] = resolve; + this.workers[workerId].postMessage(msg, transfer); + } else { + this.queue.push({ resolve, msg, transfer }); + } + }); + } + dispose() { + this.workers.forEach((worker) => worker.terminate()); + this.workersResolve.length = 0; + this.workers.length = 0; + this.queue.length = 0; + this.workerStatus = 0; + } +}; + +// node_modules/three/examples/jsm/libs/zstddec.module.js +var A; +var I; +var B; +var g = { env: { emscripten_notify_memory_growth: function(A2) { + B = new Uint8Array(I.exports.memory.buffer); +} } }; +var Q2 = class { + init() { + return A || (A = "undefined" != typeof fetch ? fetch("data:application/wasm;base64," + C).then((A2) => A2.arrayBuffer()).then((A2) => WebAssembly.instantiate(A2, g)).then(this._init) : WebAssembly.instantiate(Buffer.from(C, "base64"), g).then(this._init), A); + } + _init(A2) { + I = A2.instance, g.env.emscripten_notify_memory_growth(0); + } + decode(A2, g2 = 0) { + if (!I) throw new Error("ZSTDDecoder: Await .init() before decoding."); + const Q3 = A2.byteLength, C2 = I.exports.malloc(Q3); + B.set(A2, C2), g2 = g2 || Number(I.exports.ZSTD_findDecompressedSize(C2, Q3)); + const E2 = I.exports.malloc(g2), i = I.exports.ZSTD_decompress(E2, g2, C2, Q3), D = B.slice(E2, E2 + i); + return I.exports.free(C2), I.exports.free(E2), D; + } +}; +var C = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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"; + +// node_modules/three/examples/jsm/loaders/KTX2Loader.js +var _taskCache3 = /* @__PURE__ */ new WeakMap(); +var _activeLoaders = 0; +var _zstd; +var KTX2Loader = class _KTX2Loader extends Loader { + constructor(manager) { + super(manager); + this.transcoderPath = ""; + this.transcoderBinary = null; + this.transcoderPending = null; + this.workerPool = new WorkerPool(); + this.workerSourceURL = ""; + this.workerConfig = null; + if (typeof MSC_TRANSCODER !== "undefined") { + console.warn( + 'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.' + ); + } + } + setTranscoderPath(path) { + this.transcoderPath = path; + return this; + } + setWorkerLimit(num) { + this.workerPool.setWorkerLimit(num); + return this; + } + async detectSupportAsync(renderer2) { + this.workerConfig = { + astcSupported: await renderer2.hasFeatureAsync("texture-compression-astc"), + etc1Supported: await renderer2.hasFeatureAsync("texture-compression-etc1"), + etc2Supported: await renderer2.hasFeatureAsync("texture-compression-etc2"), + dxtSupported: await renderer2.hasFeatureAsync("texture-compression-bc"), + bptcSupported: await renderer2.hasFeatureAsync("texture-compression-bptc"), + pvrtcSupported: await renderer2.hasFeatureAsync("texture-compression-pvrtc") + }; + return this; + } + detectSupport(renderer2) { + if (renderer2.isWebGPURenderer === true) { + this.workerConfig = { + astcSupported: renderer2.hasFeature("texture-compression-astc"), + etc1Supported: renderer2.hasFeature("texture-compression-etc1"), + etc2Supported: renderer2.hasFeature("texture-compression-etc2"), + dxtSupported: renderer2.hasFeature("texture-compression-bc"), + bptcSupported: renderer2.hasFeature("texture-compression-bptc"), + pvrtcSupported: renderer2.hasFeature("texture-compression-pvrtc") + }; + } else { + this.workerConfig = { + astcSupported: renderer2.extensions.has("WEBGL_compressed_texture_astc"), + etc1Supported: renderer2.extensions.has("WEBGL_compressed_texture_etc1"), + etc2Supported: renderer2.extensions.has("WEBGL_compressed_texture_etc"), + dxtSupported: renderer2.extensions.has("WEBGL_compressed_texture_s3tc"), + bptcSupported: renderer2.extensions.has("EXT_texture_compression_bptc"), + pvrtcSupported: renderer2.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer2.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") + }; + } + return this; + } + init() { + if (!this.transcoderPending) { + const jsLoader = new FileLoader(this.manager); + jsLoader.setPath(this.transcoderPath); + jsLoader.setWithCredentials(this.withCredentials); + const jsContent = jsLoader.loadAsync("basis_transcoder.js"); + const binaryLoader = new FileLoader(this.manager); + binaryLoader.setPath(this.transcoderPath); + binaryLoader.setResponseType("arraybuffer"); + binaryLoader.setWithCredentials(this.withCredentials); + const binaryContent = binaryLoader.loadAsync("basis_transcoder.wasm"); + this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { + const fn = _KTX2Loader.BasisWorker.toString(); + const body = [ + "/* constants */", + "let _EngineFormat = " + JSON.stringify(_KTX2Loader.EngineFormat), + "let _TranscoderFormat = " + JSON.stringify(_KTX2Loader.TranscoderFormat), + "let _BasisFormat = " + JSON.stringify(_KTX2Loader.BasisFormat), + "/* basis_transcoder.js */", + jsContent2, + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + this.transcoderBinary = binaryContent2; + this.workerPool.setWorkerCreator(() => { + const worker = new Worker(this.workerSourceURL); + const transcoderBinary = this.transcoderBinary.slice(0); + worker.postMessage({ type: "init", config: this.workerConfig, transcoderBinary }, [transcoderBinary]); + return worker; + }); + }); + if (_activeLoaders > 0) { + console.warn( + "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances." + ); + } + _activeLoaders++; + } + return this.transcoderPending; + } + load(url, onLoad, onProgress, onError) { + if (this.workerConfig === null) { + throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`."); + } + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + if (_taskCache3.has(buffer)) { + const cachedTask = _taskCache3.get(buffer); + return cachedTask.promise.then(onLoad).catch(onError); + } + this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError); + }, onProgress, onError); + } + _createTextureFrom(transcodeResult, container) { + const { faces, width: width2, height: height2, format, type, error, dfdFlags } = transcodeResult; + if (type === "error") return Promise.reject(error); + let texture; + if (container.faceCount === 6) { + texture = new CompressedCubeTexture(faces, format, UnsignedByteType); + } else { + const mipmaps = faces[0].mipmaps; + texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width2, height2, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width2, height2, format, UnsignedByteType); + } + texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.needsUpdate = true; + texture.colorSpace = parseColorSpace(container); + texture.premultiplyAlpha = !!(dfdFlags & p); + return texture; + } + /** + * @param {ArrayBuffer} buffer + * @param {object?} config + * @return {Promise} + */ + async _createTexture(buffer, config = {}) { + const container = Pi(new Uint8Array(buffer)); + if (container.vkFormat !== nt) { + return createRawTexture(container); + } + const taskConfig = config; + const texturePending = this.init().then(() => { + return this.workerPool.postMessage({ type: "transcode", buffer, taskConfig }, [buffer]); + }).then((e) => this._createTextureFrom(e.data, container)); + _taskCache3.set(buffer, { promise: texturePending }); + return texturePending; + } + dispose() { + this.workerPool.dispose(); + if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL); + _activeLoaders--; + return this; + } +}; +KTX2Loader.BasisFormat = { + ETC1S: 0, + UASTC_4x4: 1 +}; +KTX2Loader.TranscoderFormat = { + ETC1: 0, + ETC2: 1, + BC1: 2, + BC3: 3, + BC4: 4, + BC5: 5, + BC7_M6_OPAQUE_ONLY: 6, + BC7_M5: 7, + PVRTC1_4_RGB: 8, + PVRTC1_4_RGBA: 9, + ASTC_4x4: 10, + ATC_RGB: 11, + ATC_RGBA_INTERPOLATED_ALPHA: 12, + RGBA32: 13, + RGB565: 14, + BGR565: 15, + RGBA4444: 16 +}; +KTX2Loader.EngineFormat = { + RGBAFormat, + RGBA_ASTC_4x4_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT5_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT1_Format +}; +KTX2Loader.BasisWorker = function() { + let config; + let transcoderPending; + let BasisModule; + const EngineFormat = _EngineFormat; + const TranscoderFormat = _TranscoderFormat; + const BasisFormat = _BasisFormat; + self.addEventListener("message", function(e) { + const message = e.data; + switch (message.type) { + case "init": + config = message.config; + init(message.transcoderBinary); + break; + case "transcode": + transcoderPending.then(() => { + try { + const { faces, buffers, width: width2, height: height2, hasAlpha, format, dfdFlags } = transcode(message.buffer); + self.postMessage({ type: "transcode", id: message.id, faces, width: width2, height: height2, hasAlpha, format, dfdFlags }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ type: "error", id: message.id, error: error.message }); + } + }); + break; + } + }); + function init(wasmBinary) { + transcoderPending = new Promise((resolve) => { + BasisModule = { wasmBinary, onRuntimeInitialized: resolve }; + BASIS(BasisModule); + }).then(() => { + BasisModule.initializeBasis(); + if (BasisModule.KTX2File === void 0) { + console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder."); + } + }); + } + function transcode(buffer) { + const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer)); + function cleanup() { + ktx2File.close(); + ktx2File.delete(); + } + if (!ktx2File.isValid()) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file"); + } + const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S; + const width2 = ktx2File.getWidth(); + const height2 = ktx2File.getHeight(); + const layerCount = ktx2File.getLayers() || 1; + const levelCount = ktx2File.getLevels(); + const faceCount = ktx2File.getFaces(); + const hasAlpha = ktx2File.getHasAlpha(); + const dfdFlags = ktx2File.getDFDFlags(); + const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width2, height2, hasAlpha); + if (!width2 || !height2 || !levelCount) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid texture"); + } + if (!ktx2File.startTranscoding()) { + cleanup(); + throw new Error("THREE.KTX2Loader: .startTranscoding failed"); + } + const faces = []; + const buffers = []; + for (let face = 0; face < faceCount; face++) { + const mipmaps = []; + for (let mip = 0; mip < levelCount; mip++) { + const layerMips = []; + let mipWidth, mipHeight; + for (let layer = 0; layer < layerCount; layer++) { + const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face); + if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) { + console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."); + } + if (levelCount > 1) { + mipWidth = levelInfo.origWidth; + mipHeight = levelInfo.origHeight; + } else { + mipWidth = levelInfo.width; + mipHeight = levelInfo.height; + } + const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat)); + const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1); + if (!status) { + cleanup(); + throw new Error("THREE.KTX2Loader: .transcodeImage failed."); + } + layerMips.push(dst); + } + const mipData = concat(layerMips); + mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight }); + buffers.push(mipData.buffer); + } + faces.push({ mipmaps, width: width2, height: height2, format: engineFormat }); + } + cleanup(); + return { faces, buffers, width: width2, height: height2, hasAlpha, format: engineFormat, dfdFlags }; + } + const FORMAT_OPTIONS = [ + { + if: "astcSupported", + basisFormat: [BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4], + engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format], + priorityETC1S: Infinity, + priorityUASTC: 1, + needsPowerOfTwo: false + }, + { + if: "bptcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5], + engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format], + priorityETC1S: 3, + priorityUASTC: 2, + needsPowerOfTwo: false + }, + { + if: "dxtSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3], + engineFormat: [EngineFormat.RGBA_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format], + priorityETC1S: 4, + priorityUASTC: 5, + needsPowerOfTwo: false + }, + { + if: "etc2Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2], + engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format], + priorityETC1S: 1, + priorityUASTC: 3, + needsPowerOfTwo: false + }, + { + if: "etc1Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1], + engineFormat: [EngineFormat.RGB_ETC1_Format], + priorityETC1S: 2, + priorityUASTC: 4, + needsPowerOfTwo: false + }, + { + if: "pvrtcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA], + engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format], + priorityETC1S: 5, + priorityUASTC: 6, + needsPowerOfTwo: true + } + ]; + const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a2, b3) { + return a2.priorityETC1S - b3.priorityETC1S; + }); + const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a2, b3) { + return a2.priorityUASTC - b3.priorityUASTC; + }); + function getTranscoderFormat(basisFormat, width2, height2, hasAlpha) { + let transcoderFormat; + let engineFormat; + const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS; + for (let i = 0; i < options.length; i++) { + const opt = options[i]; + if (!config[opt.if]) continue; + if (!opt.basisFormat.includes(basisFormat)) continue; + if (hasAlpha && opt.transcoderFormat.length < 2) continue; + if (opt.needsPowerOfTwo && !(isPowerOfTwo(width2) && isPowerOfTwo(height2))) continue; + transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]; + engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]; + return { transcoderFormat, engineFormat }; + } + console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."); + transcoderFormat = TranscoderFormat.RGBA32; + engineFormat = EngineFormat.RGBAFormat; + return { transcoderFormat, engineFormat }; + } + function isPowerOfTwo(value2) { + if (value2 <= 2) return true; + return (value2 & value2 - 1) === 0 && value2 !== 0; + } + function concat(arrays) { + if (arrays.length === 1) return arrays[0]; + let totalByteLength = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + totalByteLength += array.byteLength; + } + const result = new Uint8Array(totalByteLength); + let byteOffset = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + result.set(array, byteOffset); + byteOffset += array.byteLength; + } + return result; + } +}; +var UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([RGBAFormat, RGFormat, RedFormat]); +var FORMAT_MAP = { + [Ae]: RGBAFormat, + [pe]: RGBAFormat, + [Ot]: RGBAFormat, + [Ft]: RGBAFormat, + [de]: RGFormat, + [se]: RGFormat, + [yt]: RGFormat, + [dt]: RGFormat, + [xe]: RedFormat, + [$t]: RedFormat, + [gt]: RedFormat, + [ct]: RedFormat, + [In]: RGBA_ASTC_6x6_Format, + [Sn]: RGBA_ASTC_6x6_Format +}; +var TYPE_MAP = { + [Ae]: FloatType, + [pe]: HalfFloatType, + [Ot]: UnsignedByteType, + [Ft]: UnsignedByteType, + [de]: FloatType, + [se]: HalfFloatType, + [yt]: UnsignedByteType, + [dt]: UnsignedByteType, + [xe]: FloatType, + [$t]: HalfFloatType, + [gt]: UnsignedByteType, + [ct]: UnsignedByteType, + [In]: UnsignedByteType, + [Sn]: UnsignedByteType +}; +async function createRawTexture(container) { + const { vkFormat } = container; + if (FORMAT_MAP[vkFormat] === void 0) { + throw new Error("THREE.KTX2Loader: Unsupported vkFormat."); + } + let zstd; + if (container.supercompressionScheme === n) { + if (!_zstd) { + _zstd = new Promise(async (resolve) => { + const zstd2 = new Q2(); + await zstd2.init(); + resolve(zstd2); + }); + } + zstd = await _zstd; + } + const mipmaps = []; + for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) { + const levelWidth = Math.max(1, container.pixelWidth >> levelIndex); + const levelHeight = Math.max(1, container.pixelHeight >> levelIndex); + const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0; + const level = container.levels[levelIndex]; + let levelData; + if (container.supercompressionScheme === t) { + levelData = level.levelData; + } else if (container.supercompressionScheme === n) { + levelData = zstd.decode(level.levelData, level.uncompressedByteLength); + } else { + throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme."); + } + let data2; + if (TYPE_MAP[vkFormat] === FloatType) { + data2 = new Float32Array( + levelData.buffer, + levelData.byteOffset, + levelData.byteLength / Float32Array.BYTES_PER_ELEMENT + ); + } else if (TYPE_MAP[vkFormat] === HalfFloatType) { + data2 = new Uint16Array( + levelData.buffer, + levelData.byteOffset, + levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT + ); + } else { + data2 = levelData; + } + mipmaps.push({ + data: data2, + width: levelWidth, + height: levelHeight, + depth: levelDepth + }); + } + let texture; + if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) { + texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth); + } else { + if (container.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth."); + texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight); + } + texture.mipmaps = mipmaps; + texture.type = TYPE_MAP[vkFormat]; + texture.format = FORMAT_MAP[vkFormat]; + texture.colorSpace = parseColorSpace(container); + texture.needsUpdate = true; + return Promise.resolve(texture); +} +function parseColorSpace(container) { + const dfd = container.dataFormatDescriptor[0]; + if (dfd.colorPrimaries === F) { + return dfd.transferFunction === x ? SRGBColorSpace : LinearSRGBColorSpace; + } else if (dfd.colorPrimaries === X) { + return dfd.transferFunction === x ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace; + } else if (dfd.colorPrimaries === E) { + return NoColorSpace; + } else { + console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`); + return NoColorSpace; + } +} + +// node_modules/three/examples/jsm/loaders/KTXLoader.js +var KTXLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const ktx = new KhronosTextureContainer(buffer, 1); + return { + mipmaps: ktx.mipmaps(loadMipmaps), + width: ktx.pixelWidth, + height: ktx.pixelHeight, + format: ktx.glInternalFormat, + isCubemap: ktx.numberOfFaces === 6, + mipmapCount: ktx.numberOfMipmapLevels + }; + } +}; +var HEADER_LEN = 12 + 13 * 4; +var COMPRESSED_2D = 0; +var KhronosTextureContainer = class { + /** + * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file + * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or + * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented + * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented + */ + constructor(arrayBuffer, facesExpected) { + this.arrayBuffer = arrayBuffer; + const identifier = new Uint8Array(this.arrayBuffer, 0, 12); + if (identifier[0] !== 171 || identifier[1] !== 75 || identifier[2] !== 84 || identifier[3] !== 88 || identifier[4] !== 32 || identifier[5] !== 49 || identifier[6] !== 49 || identifier[7] !== 187 || identifier[8] !== 13 || identifier[9] !== 10 || identifier[10] !== 26 || identifier[11] !== 10) { + console.error("texture missing KTX identifier"); + return; + } + const dataSize = Uint32Array.BYTES_PER_ELEMENT; + const headerDataView = new DataView(this.arrayBuffer, 12, 13 * dataSize); + const endianness = headerDataView.getUint32(0, true); + const littleEndian = endianness === 67305985; + this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); + this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); + this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); + this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); + this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); + this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); + this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); + this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); + this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); + this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); + this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); + this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); + if (this.glType !== 0) { + console.warn("only compressed formats currently supported"); + return; + } else { + this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels); + } + if (this.pixelHeight === 0 || this.pixelDepth !== 0) { + console.warn("only 2D textures currently supported"); + return; + } + if (this.numberOfArrayElements !== 0) { + console.warn("texture arrays not currently supported"); + return; + } + if (this.numberOfFaces !== facesExpected) { + console.warn("number of faces expected" + facesExpected + ", but found " + this.numberOfFaces); + return; + } + this.loadType = COMPRESSED_2D; + } + mipmaps(loadMipmaps) { + const mipmaps = []; + let dataOffset = HEADER_LEN + this.bytesOfKeyValueData; + let width2 = this.pixelWidth; + let height2 = this.pixelHeight; + const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1; + for (let level = 0; level < mipmapCount; level++) { + const imageSize = new Int32Array(this.arrayBuffer, dataOffset, 1)[0]; + dataOffset += 4; + for (let face = 0; face < this.numberOfFaces; face++) { + const byteArray = new Uint8Array(this.arrayBuffer, dataOffset, imageSize); + mipmaps.push({ "data": byteArray, "width": width2, "height": height2 }); + dataOffset += imageSize; + dataOffset += 3 - (imageSize + 3) % 4; + } + width2 = Math.max(1, width2 * 0.5); + height2 = Math.max(1, height2 * 0.5); + } + return mipmaps; + } +}; + +// node_modules/three/examples/jsm/loaders/LDrawLoader.js +var FINISH_TYPE_DEFAULT = 0; +var FINISH_TYPE_CHROME = 1; +var FINISH_TYPE_PEARLESCENT = 2; +var FINISH_TYPE_RUBBER = 3; +var FINISH_TYPE_MATTE_METALLIC = 4; +var FINISH_TYPE_METAL = 5; +var FILE_LOCATION_TRY_PARTS = 0; +var FILE_LOCATION_TRY_P = 1; +var FILE_LOCATION_TRY_MODELS = 2; +var FILE_LOCATION_AS_IS = 3; +var FILE_LOCATION_TRY_RELATIVE = 4; +var FILE_LOCATION_TRY_ABSOLUTE = 5; +var FILE_LOCATION_NOT_FOUND = 6; +var MAIN_COLOUR_CODE = "16"; +var MAIN_EDGE_COLOUR_CODE = "24"; +var COLOR_SPACE_LDRAW = SRGBColorSpace; +var _tempVec0 = new Vector3(); +var _tempVec1 = new Vector3(); +var LDrawConditionalLineMaterial = class extends ShaderMaterial { + constructor(parameters) { + super({ + uniforms: UniformsUtils.merge([ + UniformsLib.fog, + { + diffuse: { + value: new Color() + }, + opacity: { + value: 1 + } + } + ]), + vertexShader: ( + /* glsl */ + ` + attribute vec3 control0; + attribute vec3 control1; + attribute vec3 direction; + varying float discardFlag; + + #include + #include + #include + #include + #include + void main() { + #include + + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + gl_Position = projectionMatrix * mvPosition; + + // Transform the line segment ends and control points into camera clip space + vec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 ); + vec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 ); + vec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + vec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 ); + + c0.xy /= c0.w; + c1.xy /= c1.w; + p0.xy /= p0.w; + p1.xy /= p1.w; + + // Get the direction of the segment and an orthogonal vector + vec2 dir = p1.xy - p0.xy; + vec2 norm = vec2( -dir.y, dir.x ); + + // Get control point directions from the line + vec2 c0dir = c0.xy - p1.xy; + vec2 c1dir = c1.xy - p1.xy; + + // If the vectors to the controls points are pointed in different directions away + // from the line segment then the line should not be drawn. + float d0 = dot( normalize( norm ), normalize( c0dir ) ); + float d1 = dot( normalize( norm ), normalize( c1dir ) ); + discardFlag = float( sign( d0 ) != sign( d1 ) ); + + #include + #include + #include + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + uniform vec3 diffuse; + uniform float opacity; + varying float discardFlag; + + #include + #include + #include + #include + #include + void main() { + + if ( discardFlag > 0.5 ) discard; + + #include + vec3 outgoingLight = vec3( 0.0 ); + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + #include + outgoingLight = diffuseColor.rgb; // simple shader + gl_FragColor = vec4( outgoingLight, diffuseColor.a ); + #include + #include + #include + #include + } + ` + ) + }); + Object.defineProperties(this, { + opacity: { + get: function() { + return this.uniforms.opacity.value; + }, + set: function(value2) { + this.uniforms.opacity.value = value2; + } + }, + color: { + get: function() { + return this.uniforms.diffuse.value; + } + } + }); + this.setValues(parameters); + this.isLDrawConditionalLineMaterial = true; + } +}; +var ConditionalLineSegments = class extends LineSegments { + constructor(geometry, material) { + super(geometry, material); + this.isConditionalLine = true; + } +}; +function generateFaceNormals(faces) { + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + const vertices = face.vertices; + const v0 = vertices[0]; + const v12 = vertices[1]; + const v2 = vertices[2]; + _tempVec0.subVectors(v12, v0); + _tempVec1.subVectors(v2, v12); + face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); + } +} +var _ray3 = new Ray(); +function smoothNormals(faces, lineSegments, checkSubSegments = false) { + const hashMultiplier = (1 + 1e-10) * 100; + function hashVertex(v) { + const x2 = ~~(v.x * hashMultiplier); + const y2 = ~~(v.y * hashMultiplier); + const z = ~~(v.z * hashMultiplier); + return `${x2},${y2},${z}`; + } + function hashEdge(v0, v12) { + return `${hashVertex(v0)}_${hashVertex(v12)}`; + } + function toNormalizedRay(v0, v12, targetRay) { + targetRay.direction.subVectors(v12, v0).normalize(); + const scalar = v0.dot(targetRay.direction); + targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar); + return targetRay; + } + function hashRay(ray) { + return hashEdge(ray.origin, ray.direction); + } + const hardEdges = /* @__PURE__ */ new Set(); + const hardEdgeRays = /* @__PURE__ */ new Map(); + const halfEdgeList = {}; + const normals = []; + for (let i = 0, l2 = lineSegments.length; i < l2; i++) { + const ls = lineSegments[i]; + const vertices = ls.vertices; + const v0 = vertices[0]; + const v12 = vertices[1]; + hardEdges.add(hashEdge(v0, v12)); + hardEdges.add(hashEdge(v12, v0)); + if (checkSubSegments) { + const ray = toNormalizedRay(v0, v12, new Ray()); + const rh1 = hashRay(ray); + if (!hardEdgeRays.has(rh1)) { + toNormalizedRay(v12, v0, ray); + const rh2 = hashRay(ray); + const info2 = { + ray, + distances: [] + }; + hardEdgeRays.set(rh1, info2); + hardEdgeRays.set(rh2, info2); + } + const info = hardEdgeRays.get(rh1); + let d0 = info.ray.direction.dot(v0); + let d1 = info.ray.direction.dot(v12); + if (d0 > d1) { + [d0, d1] = [d1, d0]; + } + info.distances.push(d0, d1); + } + } + for (let i = 0, l2 = faces.length; i < l2; i++) { + const tri = faces[i]; + const vertices = tri.vertices; + const vertCount = vertices.length; + for (let i2 = 0; i2 < vertCount; i2++) { + const index2 = i2; + const next = (i2 + 1) % vertCount; + const v0 = vertices[index2]; + const v12 = vertices[next]; + const hash = hashEdge(v0, v12); + if (hardEdges.has(hash)) { + continue; + } + if (checkSubSegments) { + toNormalizedRay(v0, v12, _ray3); + const rayHash = hashRay(_ray3); + if (hardEdgeRays.has(rayHash)) { + const info2 = hardEdgeRays.get(rayHash); + const { ray, distances } = info2; + let d0 = ray.direction.dot(v0); + let d1 = ray.direction.dot(v12); + if (d0 > d1) { + [d0, d1] = [d1, d0]; + } + let found = false; + for (let i3 = 0, l3 = distances.length; i3 < l3; i3 += 2) { + if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) { + found = true; + break; + } + } + if (found) { + continue; + } + } + } + const info = { + index: index2, + tri + }; + halfEdgeList[hash] = info; + } + } + while (true) { + let halfEdge = null; + for (const key2 in halfEdgeList) { + halfEdge = halfEdgeList[key2]; + break; + } + if (halfEdge === null) { + break; + } + const queue = [halfEdge]; + while (queue.length > 0) { + const tri = queue.pop().tri; + const vertices = tri.vertices; + const vertNormals = tri.normals; + const faceNormal = tri.faceNormal; + const vertCount = vertices.length; + for (let i2 = 0; i2 < vertCount; i2++) { + const index2 = i2; + const next = (i2 + 1) % vertCount; + const v0 = vertices[index2]; + const v12 = vertices[next]; + const hash = hashEdge(v0, v12); + delete halfEdgeList[hash]; + const reverseHash = hashEdge(v12, v0); + const otherInfo = halfEdgeList[reverseHash]; + if (otherInfo) { + const otherTri = otherInfo.tri; + const otherIndex = otherInfo.index; + const otherNormals = otherTri.normals; + const otherVertCount = otherNormals.length; + const otherFaceNormal = otherTri.faceNormal; + if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < 0.25) { + continue; + } + if (reverseHash in halfEdgeList) { + queue.push(otherInfo); + delete halfEdgeList[reverseHash]; + } + const otherNext = (otherIndex + 1) % otherVertCount; + if (vertNormals[index2] && otherNormals[otherNext] && vertNormals[index2] !== otherNormals[otherNext]) { + otherNormals[otherNext].norm.add(vertNormals[index2].norm); + vertNormals[index2].norm = otherNormals[otherNext].norm; + } + let sharedNormal1 = vertNormals[index2] || otherNormals[otherNext]; + if (sharedNormal1 === null) { + sharedNormal1 = { norm: new Vector3() }; + normals.push(sharedNormal1.norm); + } + if (vertNormals[index2] === null) { + vertNormals[index2] = sharedNormal1; + sharedNormal1.norm.add(faceNormal); + } + if (otherNormals[otherNext] === null) { + otherNormals[otherNext] = sharedNormal1; + sharedNormal1.norm.add(otherFaceNormal); + } + if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) { + otherNormals[otherIndex].norm.add(vertNormals[next].norm); + vertNormals[next].norm = otherNormals[otherIndex].norm; + } + let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex]; + if (sharedNormal2 === null) { + sharedNormal2 = { norm: new Vector3() }; + normals.push(sharedNormal2.norm); + } + if (vertNormals[next] === null) { + vertNormals[next] = sharedNormal2; + sharedNormal2.norm.add(faceNormal); + } + if (otherNormals[otherIndex] === null) { + otherNormals[otherIndex] = sharedNormal2; + sharedNormal2.norm.add(otherFaceNormal); + } + } + } + } + } + for (let i = 0, l2 = normals.length; i < l2; i++) { + normals[i].normalize(); + } +} +function isPartType(type) { + return type === "Part" || type === "Unofficial_Part"; +} +function isPrimitiveType(type) { + return /primitive/i.test(type) || type === "Subpart"; +} +var LineParser = class { + constructor(line2, lineNumber) { + this.line = line2; + this.lineLength = line2.length; + this.currentCharIndex = 0; + this.currentChar = " "; + this.lineNumber = lineNumber; + } + seekNonSpace() { + while (this.currentCharIndex < this.lineLength) { + this.currentChar = this.line.charAt(this.currentCharIndex); + if (this.currentChar !== " " && this.currentChar !== " ") { + return; + } + this.currentCharIndex++; + } + } + getToken() { + const pos0 = this.currentCharIndex++; + while (this.currentCharIndex < this.lineLength) { + this.currentChar = this.line.charAt(this.currentCharIndex); + if (this.currentChar === " " || this.currentChar === " ") { + break; + } + this.currentCharIndex++; + } + const pos1 = this.currentCharIndex; + this.seekNonSpace(); + return this.line.substring(pos0, pos1); + } + getVector() { + return new Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken())); + } + getRemainingString() { + return this.line.substring(this.currentCharIndex, this.lineLength); + } + isAtTheEnd() { + return this.currentCharIndex >= this.lineLength; + } + setToEnd() { + this.currentCharIndex = this.lineLength; + } + getLineNumberString() { + return this.lineNumber >= 0 ? " at line " + this.lineNumber : ""; + } +}; +var LDrawParsedCache = class { + constructor(loader) { + this.loader = loader; + this._cache = {}; + } + cloneResult(original) { + const result = {}; + result.faces = original.faces.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()), + normals: face.normals.map(() => null), + faceNormal: null + }; + }); + result.conditionalSegments = original.conditionalSegments.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()), + controlPoints: face.controlPoints.map((v) => v.clone()) + }; + }); + result.lineSegments = original.lineSegments.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()) + }; + }); + result.type = original.type; + result.category = original.category; + result.keywords = original.keywords; + result.author = original.author; + result.subobjects = original.subobjects; + result.fileName = original.fileName; + result.totalFaces = original.totalFaces; + result.startingBuildingStep = original.startingBuildingStep; + result.materials = original.materials; + result.group = null; + return result; + } + async fetchData(fileName) { + let triedLowerCase = false; + let locationState = FILE_LOCATION_TRY_PARTS; + while (locationState !== FILE_LOCATION_NOT_FOUND) { + let subobjectURL = fileName; + switch (locationState) { + case FILE_LOCATION_AS_IS: + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_PARTS: + subobjectURL = "parts/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_P: + subobjectURL = "p/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_MODELS: + subobjectURL = "models/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_RELATIVE: + subobjectURL = fileName.substring(0, fileName.lastIndexOf("/") + 1) + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_ABSOLUTE: + if (triedLowerCase) { + locationState = FILE_LOCATION_NOT_FOUND; + } else { + fileName = fileName.toLowerCase(); + subobjectURL = fileName; + triedLowerCase = true; + locationState = FILE_LOCATION_TRY_PARTS; + } + break; + } + const loader = this.loader; + const fileLoader = new FileLoader(loader.manager); + fileLoader.setPath(loader.partsLibraryPath); + fileLoader.setRequestHeader(loader.requestHeader); + fileLoader.setWithCredentials(loader.withCredentials); + try { + const text2 = await fileLoader.loadAsync(subobjectURL); + return text2; + } catch (_) { + continue; + } + } + throw new Error('LDrawLoader: Subobject "' + fileName + '" could not be loaded.'); + } + parse(text2, fileName = null) { + const loader = this.loader; + const faces = []; + const lineSegments = []; + const conditionalSegments = []; + const subobjects = []; + const materials = {}; + const getLocalMaterial = (colorCode) => { + return materials[colorCode] || null; + }; + let type = "Model"; + let category = null; + let keywords = null; + let author = null; + let totalFaces = 0; + if (text2.indexOf("\r\n") !== -1) { + text2 = text2.replace(/\r\n/g, "\n"); + } + const lines = text2.split("\n"); + const numLines = lines.length; + let parsingEmbeddedFiles = false; + let currentEmbeddedFileName = null; + let currentEmbeddedText = null; + let bfcCertified = false; + let bfcCCW = true; + let bfcInverted = false; + let bfcCull = true; + let startingBuildingStep = false; + for (let lineIndex = 0; lineIndex < numLines; lineIndex++) { + const line2 = lines[lineIndex]; + if (line2.length === 0) continue; + if (parsingEmbeddedFiles) { + if (line2.startsWith("0 FILE ")) { + this.setData(currentEmbeddedFileName, currentEmbeddedText); + currentEmbeddedFileName = line2.substring(7); + currentEmbeddedText = ""; + } else { + currentEmbeddedText += line2 + "\n"; + } + continue; + } + const lp = new LineParser(line2, lineIndex + 1); + lp.seekNonSpace(); + if (lp.isAtTheEnd()) { + continue; + } + const lineType = lp.getToken(); + let material; + let colorCode; + let segment; + let ccw; + let doubleSided; + let v0, v12, v2, v3, c0, c1; + switch (lineType) { + case "0": + const meta2 = lp.getToken(); + if (meta2) { + switch (meta2) { + case "!LDRAW_ORG": + type = lp.getToken(); + break; + case "!COLOUR": + material = loader.parseColorMetaDirective(lp); + if (material) { + materials[material.userData.code] = material; + } else { + console.warn("LDrawLoader: Error parsing material" + lp.getLineNumberString()); + } + break; + case "!CATEGORY": + category = lp.getToken(); + break; + case "!KEYWORDS": + const newKeywords = lp.getRemainingString().split(","); + if (newKeywords.length > 0) { + if (!keywords) { + keywords = []; + } + newKeywords.forEach(function(keyword) { + keywords.push(keyword.trim()); + }); + } + break; + case "FILE": + if (lineIndex > 0) { + parsingEmbeddedFiles = true; + currentEmbeddedFileName = lp.getRemainingString(); + currentEmbeddedText = ""; + bfcCertified = false; + bfcCCW = true; + } + break; + case "BFC": + while (!lp.isAtTheEnd()) { + const token = lp.getToken(); + switch (token) { + case "CERTIFY": + case "NOCERTIFY": + bfcCertified = token === "CERTIFY"; + bfcCCW = true; + break; + case "CW": + case "CCW": + bfcCCW = token === "CCW"; + break; + case "INVERTNEXT": + bfcInverted = true; + break; + case "CLIP": + case "NOCLIP": + bfcCull = token === "CLIP"; + break; + default: + console.warn('THREE.LDrawLoader: BFC directive "' + token + '" is unknown.'); + break; + } + } + break; + case "STEP": + startingBuildingStep = true; + break; + case "Author:": + author = lp.getToken(); + break; + default: + break; + } + } + break; + case "1": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + const posX = parseFloat(lp.getToken()); + const posY = parseFloat(lp.getToken()); + const posZ = parseFloat(lp.getToken()); + const m0 = parseFloat(lp.getToken()); + const m1 = parseFloat(lp.getToken()); + const m2 = parseFloat(lp.getToken()); + const m3 = parseFloat(lp.getToken()); + const m4 = parseFloat(lp.getToken()); + const m5 = parseFloat(lp.getToken()); + const m6 = parseFloat(lp.getToken()); + const m7 = parseFloat(lp.getToken()); + const m8 = parseFloat(lp.getToken()); + const matrix3 = new Matrix4().set( + m0, + m1, + m2, + posX, + m3, + m4, + m5, + posY, + m6, + m7, + m8, + posZ, + 0, + 0, + 0, + 1 + ); + let fileName2 = lp.getRemainingString().trim().replace(/\\/g, "/"); + if (loader.fileMap[fileName2]) { + fileName2 = loader.fileMap[fileName2]; + } else { + if (fileName2.startsWith("s/")) { + fileName2 = "parts/" + fileName2; + } else if (fileName2.startsWith("48/")) { + fileName2 = "p/" + fileName2; + } + } + subobjects.push({ + material, + colorCode, + matrix: matrix3, + fileName: fileName2, + inverted: bfcInverted, + startingBuildingStep + }); + startingBuildingStep = false; + bfcInverted = false; + break; + case "2": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + v0 = lp.getVector(); + v12 = lp.getVector(); + segment = { + material, + colorCode, + vertices: [v0, v12] + }; + lineSegments.push(segment); + break; + case "5": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + v0 = lp.getVector(); + v12 = lp.getVector(); + c0 = lp.getVector(); + c1 = lp.getVector(); + segment = { + material, + colorCode, + vertices: [v0, v12], + controlPoints: [c0, c1] + }; + conditionalSegments.push(segment); + break; + case "3": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + ccw = bfcCCW; + doubleSided = !bfcCertified || !bfcCull; + if (ccw === true) { + v0 = lp.getVector(); + v12 = lp.getVector(); + v2 = lp.getVector(); + } else { + v2 = lp.getVector(); + v12 = lp.getVector(); + v0 = lp.getVector(); + } + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v0, v12, v2], + normals: [null, null, null] + }); + totalFaces++; + if (doubleSided === true) { + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v2, v12, v0], + normals: [null, null, null] + }); + totalFaces++; + } + break; + case "4": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + ccw = bfcCCW; + doubleSided = !bfcCertified || !bfcCull; + if (ccw === true) { + v0 = lp.getVector(); + v12 = lp.getVector(); + v2 = lp.getVector(); + v3 = lp.getVector(); + } else { + v3 = lp.getVector(); + v2 = lp.getVector(); + v12 = lp.getVector(); + v0 = lp.getVector(); + } + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v0, v12, v2, v3], + normals: [null, null, null, null] + }); + totalFaces += 2; + if (doubleSided === true) { + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v3, v2, v12, v0], + normals: [null, null, null, null] + }); + totalFaces += 2; + } + break; + default: + throw new Error('LDrawLoader: Unknown line type "' + lineType + '"' + lp.getLineNumberString() + "."); + } + } + if (parsingEmbeddedFiles) { + this.setData(currentEmbeddedFileName, currentEmbeddedText); + } + return { + faces, + conditionalSegments, + lineSegments, + type, + category, + keywords, + author, + subobjects, + totalFaces, + startingBuildingStep, + materials, + fileName, + group: null + }; + } + // returns an (optionally cloned) instance of the data + getData(fileName, clone2 = true) { + const key2 = fileName.toLowerCase(); + const result = this._cache[key2]; + if (result === null || result instanceof Promise) { + return null; + } + if (clone2) { + return this.cloneResult(result); + } else { + return result; + } + } + // kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when + // the data is ready to use and can be retrieved synchronously with "getData". + async ensureDataLoaded(fileName) { + const key2 = fileName.toLowerCase(); + if (!(key2 in this._cache)) { + this._cache[key2] = this.fetchData(fileName).then((text2) => { + const info = this.parse(text2, fileName); + this._cache[key2] = info; + return info; + }); + } + await this._cache[key2]; + } + // sets the data in the cache from parsed data + setData(fileName, text2) { + const key2 = fileName.toLowerCase(); + this._cache[key2] = this.parse(text2, fileName); + } +}; +function getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) { + const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE; + if (isPassthrough) { + colorCode = parentColorCode; + } + return materialHierarchy[colorCode] || null; +} +var LDrawPartsGeometryCache = class { + constructor(loader) { + this.loader = loader; + this.parseCache = new LDrawParsedCache(loader); + this._cache = {}; + } + // Convert the given file information into a mesh by processing subobjects. + async processIntoMesh(info) { + const loader = this.loader; + const parseCache = this.parseCache; + const faceMaterials = /* @__PURE__ */ new Set(); + const processInfoSubobjects = async (info2, subobject = null) => { + const subobjects = info2.subobjects; + const promises = []; + for (let i = 0, l2 = subobjects.length; i < l2; i++) { + const subobject2 = subobjects[i]; + const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => { + const subobjectInfo = parseCache.getData(subobject2.fileName, false); + if (!isPrimitiveType(subobjectInfo.type)) { + return this.loadModel(subobject2.fileName).catch((error) => { + console.warn(error); + return null; + }); + } + return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2); + }); + promises.push(promise); + } + const group2 = new Group(); + group2.userData.category = info2.category; + group2.userData.keywords = info2.keywords; + group2.userData.author = info2.author; + group2.userData.type = info2.type; + group2.userData.fileName = info2.fileName; + info2.group = group2; + const subobjectInfos = await Promise.all(promises); + for (let i = 0, l2 = subobjectInfos.length; i < l2; i++) { + const subobject2 = info2.subobjects[i]; + const subobjectInfo = subobjectInfos[i]; + if (subobjectInfo === null) { + continue; + } + if (subobjectInfo.isGroup) { + const subobjectGroup = subobjectInfo; + subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale); + subobjectGroup.userData.startingBuildingStep = subobject2.startingBuildingStep; + subobjectGroup.name = subobject2.fileName; + loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials); + subobjectGroup.userData.colorCode = subobject2.colorCode; + group2.add(subobjectGroup); + continue; + } + if (subobjectInfo.group.children.length) { + group2.add(subobjectInfo.group); + } + const parentLineSegments = info2.lineSegments; + const parentConditionalSegments = info2.conditionalSegments; + const parentFaces = info2.faces; + const lineSegments = subobjectInfo.lineSegments; + const conditionalSegments = subobjectInfo.conditionalSegments; + const faces = subobjectInfo.faces; + const matrix3 = subobject2.matrix; + const inverted = subobject2.inverted; + const matrixScaleInverted = matrix3.determinant() < 0; + const colorCode = subobject2.colorCode; + const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode; + for (let i2 = 0, l3 = lineSegments.length; i2 < l3; i2++) { + const ls = lineSegments[i2]; + const vertices = ls.vertices; + vertices[0].applyMatrix4(matrix3); + vertices[1].applyMatrix4(matrix3); + ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode; + ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true); + parentLineSegments.push(ls); + } + for (let i2 = 0, l3 = conditionalSegments.length; i2 < l3; i2++) { + const os = conditionalSegments[i2]; + const vertices = os.vertices; + const controlPoints = os.controlPoints; + vertices[0].applyMatrix4(matrix3); + vertices[1].applyMatrix4(matrix3); + controlPoints[0].applyMatrix4(matrix3); + controlPoints[1].applyMatrix4(matrix3); + os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode; + os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true); + parentConditionalSegments.push(os); + } + for (let i2 = 0, l3 = faces.length; i2 < l3; i2++) { + const tri = faces[i2]; + const vertices = tri.vertices; + for (let i3 = 0, l4 = vertices.length; i3 < l4; i3++) { + vertices[i3].applyMatrix4(matrix3); + } + tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode; + tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false); + faceMaterials.add(tri.colorCode); + if (matrixScaleInverted !== inverted) { + vertices.reverse(); + } + parentFaces.push(tri); + } + info2.totalFaces += subobjectInfo.totalFaces; + } + if (subobject) { + loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials); + group2.userData.colorCode = subobject.colorCode; + } + return info2; + }; + for (let i = 0, l2 = info.faces; i < l2; i++) { + faceMaterials.add(info.faces[i].colorCode); + } + await processInfoSubobjects(info); + if (loader.smoothNormals) { + const checkSubSegments = faceMaterials.size > 1; + generateFaceNormals(info.faces); + smoothNormals(info.faces, info.lineSegments, checkSubSegments); + } + const group = info.group; + if (info.faces.length > 0) { + group.add(createObject(this.loader, info.faces, 3, false, info.totalFaces)); + } + if (info.lineSegments.length > 0) { + group.add(createObject(this.loader, info.lineSegments, 2)); + } + if (info.conditionalSegments.length > 0) { + group.add(createObject(this.loader, info.conditionalSegments, 2, true)); + } + return group; + } + hasCachedModel(fileName) { + return fileName !== null && fileName.toLowerCase() in this._cache; + } + async getCachedModel(fileName) { + if (fileName !== null && this.hasCachedModel(fileName)) { + const key2 = fileName.toLowerCase(); + const group = await this._cache[key2]; + return group.clone(); + } else { + return null; + } + } + // Loads and parses the model with the given file name. Returns a cached copy if available. + async loadModel(fileName) { + const parseCache = this.parseCache; + const key2 = fileName.toLowerCase(); + if (this.hasCachedModel(fileName)) { + return this.getCachedModel(fileName); + } else { + await parseCache.ensureDataLoaded(fileName); + const info = parseCache.getData(fileName); + const promise = this.processIntoMesh(info); + if (this.hasCachedModel(fileName)) { + return this.getCachedModel(fileName); + } + if (isPartType(info.type)) { + this._cache[key2] = promise; + } + const group = await promise; + return group.clone(); + } + } + // parses the given model text into a renderable object. Returns cached copy if available. + async parseModel(text2) { + const parseCache = this.parseCache; + const info = parseCache.parse(text2); + if (isPartType(info.type) && this.hasCachedModel(info.fileName)) { + return this.getCachedModel(info.fileName); + } + return this.processIntoMesh(info); + } +}; +function sortByMaterial(a2, b3) { + if (a2.colorCode === b3.colorCode) { + return 0; + } + if (a2.colorCode < b3.colorCode) { + return -1; + } + return 1; +} +function createObject(loader, elements, elementSize, isConditionalSegments = false, totalElements = null) { + elements.sort(sortByMaterial); + if (totalElements === null) { + totalElements = elements.length; + } + const positions = new Float32Array(elementSize * totalElements * 3); + const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null; + const materials = []; + const quadArray = new Array(6); + const bufferGeometry = new BufferGeometry(); + let prevMaterial = null; + let index0 = 0; + let numGroupVerts = 0; + let offset = 0; + for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) { + const elem2 = elements[iElem]; + let vertices = elem2.vertices; + if (vertices.length === 4) { + quadArray[0] = vertices[0]; + quadArray[1] = vertices[1]; + quadArray[2] = vertices[2]; + quadArray[3] = vertices[0]; + quadArray[4] = vertices[2]; + quadArray[5] = vertices[3]; + vertices = quadArray; + } + for (let j = 0, l2 = vertices.length; j < l2; j++) { + const v = vertices[j]; + const index2 = offset + j * 3; + positions[index2 + 0] = v.x; + positions[index2 + 1] = v.y; + positions[index2 + 2] = v.z; + } + if (elementSize === 3) { + if (!elem2.faceNormal) { + const v0 = vertices[0]; + const v12 = vertices[1]; + const v2 = vertices[2]; + _tempVec0.subVectors(v12, v0); + _tempVec1.subVectors(v2, v12); + elem2.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); + } + let elemNormals = elem2.normals; + if (elemNormals.length === 4) { + quadArray[0] = elemNormals[0]; + quadArray[1] = elemNormals[1]; + quadArray[2] = elemNormals[2]; + quadArray[3] = elemNormals[0]; + quadArray[4] = elemNormals[2]; + quadArray[5] = elemNormals[3]; + elemNormals = quadArray; + } + for (let j = 0, l2 = elemNormals.length; j < l2; j++) { + let n2 = elem2.faceNormal; + if (elemNormals[j]) { + n2 = elemNormals[j].norm; + } + const index2 = offset + j * 3; + normals[index2 + 0] = n2.x; + normals[index2 + 1] = n2.y; + normals[index2 + 2] = n2.z; + } + } + if (prevMaterial !== elem2.colorCode) { + if (prevMaterial !== null) { + bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1); + } + const material = elem2.material; + if (material !== null) { + if (elementSize === 3) { + materials.push(material); + } else if (elementSize === 2) { + if (isConditionalSegments) { + const edgeMaterial = loader.edgeMaterialCache.get(material); + materials.push(loader.conditionalEdgeMaterialCache.get(edgeMaterial)); + } else { + materials.push(loader.edgeMaterialCache.get(material)); + } + } + } else { + materials.push(elem2.colorCode); + } + prevMaterial = elem2.colorCode; + index0 = offset / 3; + numGroupVerts = vertices.length; + } else { + numGroupVerts += vertices.length; + } + offset += 3 * vertices.length; + } + if (numGroupVerts > 0) { + bufferGeometry.addGroup(index0, Infinity, materials.length - 1); + } + bufferGeometry.setAttribute("position", new BufferAttribute(positions, 3)); + if (normals !== null) { + bufferGeometry.setAttribute("normal", new BufferAttribute(normals, 3)); + } + let object3d = null; + if (elementSize === 2) { + if (isConditionalSegments) { + object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } else { + object3d = new LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } + } else if (elementSize === 3) { + object3d = new Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } + if (isConditionalSegments) { + object3d.isConditionalLine = true; + const controlArray0 = new Float32Array(elements.length * 3 * 2); + const controlArray1 = new Float32Array(elements.length * 3 * 2); + const directionArray = new Float32Array(elements.length * 3 * 2); + for (let i = 0, l2 = elements.length; i < l2; i++) { + const os = elements[i]; + const vertices = os.vertices; + const controlPoints = os.controlPoints; + const c0 = controlPoints[0]; + const c1 = controlPoints[1]; + const v0 = vertices[0]; + const v12 = vertices[1]; + const index2 = i * 3 * 2; + controlArray0[index2 + 0] = c0.x; + controlArray0[index2 + 1] = c0.y; + controlArray0[index2 + 2] = c0.z; + controlArray0[index2 + 3] = c0.x; + controlArray0[index2 + 4] = c0.y; + controlArray0[index2 + 5] = c0.z; + controlArray1[index2 + 0] = c1.x; + controlArray1[index2 + 1] = c1.y; + controlArray1[index2 + 2] = c1.z; + controlArray1[index2 + 3] = c1.x; + controlArray1[index2 + 4] = c1.y; + controlArray1[index2 + 5] = c1.z; + directionArray[index2 + 0] = v12.x - v0.x; + directionArray[index2 + 1] = v12.y - v0.y; + directionArray[index2 + 2] = v12.z - v0.z; + directionArray[index2 + 3] = v12.x - v0.x; + directionArray[index2 + 4] = v12.y - v0.y; + directionArray[index2 + 5] = v12.z - v0.z; + } + bufferGeometry.setAttribute("control0", new BufferAttribute(controlArray0, 3, false)); + bufferGeometry.setAttribute("control1", new BufferAttribute(controlArray1, 3, false)); + bufferGeometry.setAttribute("direction", new BufferAttribute(directionArray, 3, false)); + } + return object3d; +} +var LDrawLoader = class extends Loader { + constructor(manager) { + super(manager); + this.materials = []; + this.materialLibrary = {}; + this.edgeMaterialCache = /* @__PURE__ */ new WeakMap(); + this.conditionalEdgeMaterialCache = /* @__PURE__ */ new WeakMap(); + this.partsCache = new LDrawPartsGeometryCache(this); + this.fileMap = {}; + this.setMaterials([]); + this.smoothNormals = true; + this.partsLibraryPath = ""; + this.missingColorMaterial = new MeshStandardMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935, roughness: 0.3, metalness: 0 }); + this.missingEdgeColorMaterial = new LineBasicMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935 }); + this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 16711935 }); + this.edgeMaterialCache.set(this.missingColorMaterial, this.missingEdgeColorMaterial); + this.conditionalEdgeMaterialCache.set(this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial); + } + setPartsLibraryPath(path) { + this.partsLibraryPath = path; + return this; + } + async preloadMaterials(url) { + const fileLoader = new FileLoader(this.manager); + fileLoader.setPath(this.path); + fileLoader.setRequestHeader(this.requestHeader); + fileLoader.setWithCredentials(this.withCredentials); + const text2 = await fileLoader.loadAsync(url); + const colorLineRegex = /^0 !COLOUR/; + const lines = text2.split(/[\n\r]/g); + const materials = []; + for (let i = 0, l2 = lines.length; i < l2; i++) { + const line2 = lines[i]; + if (colorLineRegex.test(line2)) { + const directive = line2.replace(colorLineRegex, ""); + const material = this.parseColorMetaDirective(new LineParser(directive)); + materials.push(material); + } + } + this.setMaterials(materials); + } + load(url, onLoad, onProgress, onError) { + const fileLoader = new FileLoader(this.manager); + fileLoader.setPath(this.path); + fileLoader.setRequestHeader(this.requestHeader); + fileLoader.setWithCredentials(this.withCredentials); + fileLoader.load(url, (text2) => { + this.partsCache.parseModel(text2, this.materialLibrary).then((group) => { + this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true); + this.computeBuildingSteps(group); + group.userData.fileName = url; + onLoad(group); + }).catch(onError); + }, onProgress, onError); + } + parse(text2, onLoad, onError) { + this.partsCache.parseModel(text2, this.materialLibrary).then((group) => { + this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true); + this.computeBuildingSteps(group); + group.userData.fileName = ""; + onLoad(group); + }).catch(onError); + } + setMaterials(materials) { + this.materialLibrary = {}; + this.materials = []; + for (let i = 0, l2 = materials.length; i < l2; i++) { + this.addMaterial(materials[i]); + } + this.addMaterial(this.parseColorMetaDirective(new LineParser("Main_Colour CODE 16 VALUE #FF8080 EDGE #333333"))); + this.addMaterial(this.parseColorMetaDirective(new LineParser("Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333"))); + return this; + } + setFileMap(fileMap) { + this.fileMap = fileMap; + return this; + } + addMaterial(material) { + const matLib = this.materialLibrary; + if (!matLib[material.userData.code]) { + this.materials.push(material); + matLib[material.userData.code] = material; + } + return this; + } + getMaterial(colorCode) { + if (colorCode.startsWith("0x2")) { + const color = colorCode.substring(3); + return this.parseColorMetaDirective(new LineParser("Direct_Color_" + color + " CODE -1 VALUE #" + color + " EDGE #" + color)); + } + return this.materialLibrary[colorCode] || null; + } + // Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present + // in the material array if they need to be filled in. + applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) { + const loader = this; + const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE; + group.traverse((c2) => { + if (c2.isMesh || c2.isLineSegments) { + if (Array.isArray(c2.material)) { + for (let i = 0, l2 = c2.material.length; i < l2; i++) { + if (!c2.material[i].isMaterial) { + c2.material[i] = getMaterial2(c2, c2.material[i]); + } + } + } else if (!c2.material.isMaterial) { + c2.material = getMaterial2(c2, c2.material); + } + } + }); + function getMaterial2(c2, colorCode) { + if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) { + return colorCode; + } + const forEdge = c2.isLineSegments || c2.isConditionalLine; + const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE; + if (isPassthrough) { + colorCode = parentColorCode; + } + let material = null; + if (colorCode in materialHierarchy) { + material = materialHierarchy[colorCode]; + } else if (finalMaterialPass) { + material = loader.getMaterial(colorCode); + if (material === null) { + console.warn(`LDrawLoader: Material properties for code ${colorCode} not available.`); + material = loader.missingColorMaterial; + } + } else { + return colorCode; + } + if (c2.isLineSegments) { + material = loader.edgeMaterialCache.get(material); + if (c2.isConditionalLine) { + material = loader.conditionalEdgeMaterialCache.get(material); + } + } + return material; + } + } + getMainMaterial() { + return this.getMaterial(MAIN_COLOUR_CODE); + } + getMainEdgeMaterial() { + const mat = this.getMaterial(MAIN_EDGE_COLOUR_CODE); + return mat ? this.edgeMaterialCache.get(mat) : null; + } + parseColorMetaDirective(lineParser) { + let code = null; + let fillColor = "#FF00FF"; + let edgeColor = "#FF00FF"; + let alpha = 1; + let isTransparent = false; + let luminance = 0; + let finishType = FINISH_TYPE_DEFAULT; + let edgeMaterial = null; + const name2 = lineParser.getToken(); + if (!name2) { + throw new Error('LDrawLoader: Material name was expected after "!COLOUR tag' + lineParser.getLineNumberString() + "."); + } + let token = null; + while (true) { + token = lineParser.getToken(); + if (!token) { + break; + } + if (!parseLuminance(token)) { + switch (token.toUpperCase()) { + case "CODE": + code = lineParser.getToken(); + break; + case "VALUE": + fillColor = lineParser.getToken(); + if (fillColor.startsWith("0x")) { + fillColor = "#" + fillColor.substring(2); + } else if (!fillColor.startsWith("#")) { + throw new Error("LDrawLoader: Invalid color while parsing material" + lineParser.getLineNumberString() + "."); + } + break; + case "EDGE": + edgeColor = lineParser.getToken(); + if (edgeColor.startsWith("0x")) { + edgeColor = "#" + edgeColor.substring(2); + } else if (!edgeColor.startsWith("#")) { + edgeMaterial = this.getMaterial(edgeColor); + if (!edgeMaterial) { + throw new Error("LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + "."); + } + edgeMaterial = this.edgeMaterialCache.get(edgeMaterial); + } + break; + case "ALPHA": + alpha = parseInt(lineParser.getToken()); + if (isNaN(alpha)) { + throw new Error("LDrawLoader: Invalid alpha value in material definition" + lineParser.getLineNumberString() + "."); + } + alpha = Math.max(0, Math.min(1, alpha / 255)); + if (alpha < 1) { + isTransparent = true; + } + break; + case "LUMINANCE": + if (!parseLuminance(lineParser.getToken())) { + throw new Error("LDrawLoader: Invalid luminance value in material definition" + LineParser.getLineNumberString() + "."); + } + break; + case "CHROME": + finishType = FINISH_TYPE_CHROME; + break; + case "PEARLESCENT": + finishType = FINISH_TYPE_PEARLESCENT; + break; + case "RUBBER": + finishType = FINISH_TYPE_RUBBER; + break; + case "MATTE_METALLIC": + finishType = FINISH_TYPE_MATTE_METALLIC; + break; + case "METAL": + finishType = FINISH_TYPE_METAL; + break; + case "MATERIAL": + lineParser.setToEnd(); + break; + default: + throw new Error('LDrawLoader: Unknown token "' + token + '" while parsing material' + lineParser.getLineNumberString() + "."); + } + } + } + let material = null; + switch (finishType) { + case FINISH_TYPE_DEFAULT: + material = new MeshStandardMaterial({ roughness: 0.3, metalness: 0 }); + break; + case FINISH_TYPE_PEARLESCENT: + material = new MeshStandardMaterial({ roughness: 0.3, metalness: 0.25 }); + break; + case FINISH_TYPE_CHROME: + material = new MeshStandardMaterial({ roughness: 0, metalness: 1 }); + break; + case FINISH_TYPE_RUBBER: + material = new MeshStandardMaterial({ roughness: 0.9, metalness: 0 }); + break; + case FINISH_TYPE_MATTE_METALLIC: + material = new MeshStandardMaterial({ roughness: 0.8, metalness: 0.4 }); + break; + case FINISH_TYPE_METAL: + material = new MeshStandardMaterial({ roughness: 0.2, metalness: 0.85 }); + break; + default: + break; + } + material.color.setStyle(fillColor, COLOR_SPACE_LDRAW); + material.transparent = isTransparent; + material.premultipliedAlpha = true; + material.opacity = alpha; + material.depthWrite = !isTransparent; + material.polygonOffset = true; + material.polygonOffsetFactor = 1; + if (luminance !== 0) { + material.emissive.setStyle(fillColor, COLOR_SPACE_LDRAW).multiplyScalar(luminance); + } + if (!edgeMaterial) { + edgeMaterial = new LineBasicMaterial({ + color: new Color().setStyle(edgeColor, COLOR_SPACE_LDRAW), + transparent: isTransparent, + opacity: alpha, + depthWrite: !isTransparent + }); + edgeMaterial.color; + edgeMaterial.userData.code = code; + edgeMaterial.name = name2 + " - Edge"; + const conditionalEdgeMaterial = new LDrawConditionalLineMaterial({ + fog: true, + transparent: isTransparent, + depthWrite: !isTransparent, + color: new Color().setStyle(edgeColor, COLOR_SPACE_LDRAW), + opacity: alpha + }); + conditionalEdgeMaterial.userData.code = code; + conditionalEdgeMaterial.name = name2 + " - Conditional Edge"; + this.conditionalEdgeMaterialCache.set(edgeMaterial, conditionalEdgeMaterial); + } + material.userData.code = code; + material.name = name2; + this.edgeMaterialCache.set(material, edgeMaterial); + this.addMaterial(material); + return material; + function parseLuminance(token2) { + let lum; + if (token2.startsWith("LUMINANCE")) { + lum = parseInt(token2.substring(9)); + } else { + lum = parseInt(token2); + } + if (isNaN(lum)) { + return false; + } + luminance = Math.max(0, Math.min(1, lum / 255)); + return true; + } + } + computeBuildingSteps(model) { + let stepNumber = 0; + model.traverse((c2) => { + if (c2.isGroup) { + if (c2.userData.startingBuildingStep) { + stepNumber++; + } + c2.userData.buildingStep = stepNumber; + } + }); + model.userData.numBuildingSteps = stepNumber + 1; + } +}; + +// node_modules/three/examples/jsm/loaders/LUT3dlLoader.js +var LUT3dlLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = UnsignedByteType; + } + setType(type) { + if (type !== UnsignedByteType && type !== FloatType) { + throw new Error("LUT3dlLoader: Unsupported type"); + } + this.type = type; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("text"); + loader.load(url, (text2) => { + try { + onLoad(this.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + this.manager.itemError(url); + } + }, onProgress, onError); + } + parse(input) { + const regExpGridInfo = /^[\d ]+$/m; + const regExpDataPoints = /^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm; + let result = regExpGridInfo.exec(input); + if (result === null) { + throw new Error("LUT3dlLoader: Missing grid information"); + } + const gridLines = result[0].trim().split(/\s+/g).map(Number); + const gridStep = gridLines[1] - gridLines[0]; + const size2 = gridLines.length; + const sizeSq = size2 ** 2; + for (let i = 1, l2 = gridLines.length; i < l2; ++i) { + if (gridStep !== gridLines[i] - gridLines[i - 1]) { + throw new Error("LUT3dlLoader: Inconsistent grid size"); + } + } + const dataFloat = new Float32Array(size2 ** 3 * 4); + let maxValue = 0; + let index2 = 0; + while ((result = regExpDataPoints.exec(input)) !== null) { + const r = Number(result[1]); + const g2 = Number(result[2]); + const b3 = Number(result[3]); + maxValue = Math.max(maxValue, r, g2, b3); + const bLayer = index2 % size2; + const gLayer = Math.floor(index2 / size2) % size2; + const rLayer = Math.floor(index2 / sizeSq) % size2; + const d4 = (bLayer * sizeSq + gLayer * size2 + rLayer) * 4; + dataFloat[d4 + 0] = r; + dataFloat[d4 + 1] = g2; + dataFloat[d4 + 2] = b3; + ++index2; + } + const bits2 = Math.ceil(Math.log2(maxValue)); + const maxBitValue = Math.pow(2, bits2); + const data2 = this.type === UnsignedByteType ? new Uint8Array(dataFloat.length) : dataFloat; + const scale2 = this.type === UnsignedByteType ? 255 : 1; + for (let i = 0, l2 = data2.length; i < l2; i += 4) { + const i1 = i + 1; + const i2 = i + 2; + const i3 = i + 3; + data2[i] = dataFloat[i] / maxBitValue * scale2; + data2[i1] = dataFloat[i1] / maxBitValue * scale2; + data2[i2] = dataFloat[i2] / maxBitValue * scale2; + data2[i3] = scale2; + } + const texture3D = new Data3DTexture(); + texture3D.image.data = data2; + texture3D.image.width = size2; + texture3D.image.height = size2; + texture3D.image.depth = size2; + texture3D.format = RGBAFormat; + texture3D.type = this.type; + texture3D.magFilter = LinearFilter; + texture3D.minFilter = LinearFilter; + texture3D.wrapS = ClampToEdgeWrapping; + texture3D.wrapT = ClampToEdgeWrapping; + texture3D.wrapR = ClampToEdgeWrapping; + texture3D.generateMipmaps = false; + texture3D.needsUpdate = true; + return { + size: size2, + texture3D + }; + } +}; + +// node_modules/three/examples/jsm/loaders/LUTCubeLoader.js +var LUTCubeLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = UnsignedByteType; + } + setType(type) { + if (type !== UnsignedByteType && type !== FloatType) { + throw new Error("LUTCubeLoader: Unsupported type"); + } + this.type = type; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("text"); + loader.load(url, (text2) => { + try { + onLoad(this.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + this.manager.itemError(url); + } + }, onProgress, onError); + } + parse(input) { + const regExpTitle = /TITLE +"([^"]*)"/; + const regExpSize = /LUT_3D_SIZE +(\d+)/; + const regExpDomainMin = /DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/; + const regExpDomainMax = /DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/; + const regExpDataPoints = /^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm; + let result = regExpTitle.exec(input); + const title = result !== null ? result[1] : null; + result = regExpSize.exec(input); + if (result === null) { + throw new Error("LUTCubeLoader: Missing LUT_3D_SIZE information"); + } + const size2 = Number(result[1]); + const length2 = size2 ** 3 * 4; + const data2 = this.type === UnsignedByteType ? new Uint8Array(length2) : new Float32Array(length2); + const domainMin = new Vector3(0, 0, 0); + const domainMax = new Vector3(1, 1, 1); + result = regExpDomainMin.exec(input); + if (result !== null) { + domainMin.set(Number(result[1]), Number(result[2]), Number(result[3])); + } + result = regExpDomainMax.exec(input); + if (result !== null) { + domainMax.set(Number(result[1]), Number(result[2]), Number(result[3])); + } + if (domainMin.x > domainMax.x || domainMin.y > domainMax.y || domainMin.z > domainMax.z) { + throw new Error("LUTCubeLoader: Invalid input domain"); + } + const scale2 = this.type === UnsignedByteType ? 255 : 1; + let i = 0; + while ((result = regExpDataPoints.exec(input)) !== null) { + data2[i++] = Number(result[1]) * scale2; + data2[i++] = Number(result[2]) * scale2; + data2[i++] = Number(result[3]) * scale2; + data2[i++] = scale2; + } + const texture3D = new Data3DTexture(); + texture3D.image.data = data2; + texture3D.image.width = size2; + texture3D.image.height = size2; + texture3D.image.depth = size2; + texture3D.type = this.type; + texture3D.magFilter = LinearFilter; + texture3D.minFilter = LinearFilter; + texture3D.wrapS = ClampToEdgeWrapping; + texture3D.wrapT = ClampToEdgeWrapping; + texture3D.wrapR = ClampToEdgeWrapping; + texture3D.generateMipmaps = false; + texture3D.needsUpdate = true; + return { + title, + size: size2, + domainMin, + domainMax, + texture3D + }; + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js +var LWO2Parser = class { + constructor(IFFParser2) { + this.IFF = IFFParser2; + } + parseBlock() { + this.IFF.debugger.offset = this.IFF.reader.offset; + this.IFF.debugger.closeForms(); + const blockID = this.IFF.reader.getIDTag(); + let length2 = this.IFF.reader.getUint32(); + if (length2 > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) { + this.IFF.reader.offset -= 4; + length2 = this.IFF.reader.getUint16(); + } + this.IFF.debugger.dataOffset = this.IFF.reader.offset; + this.IFF.debugger.length = length2; + switch (blockID) { + case "FORM": + this.IFF.parseForm(length2); + break; + case "ICON": + case "VMPA": + case "BBOX": + case "NORM": + case "PRE ": + case "POST": + case "KEY ": + case "SPAN": + case "TIME": + case "CLRS": + case "CLRA": + case "FILT": + case "DITH": + case "CONT": + case "BRIT": + case "SATR": + case "HUE ": + case "GAMM": + case "NEGA": + case "IFLT": + case "PFLT": + case "PROJ": + case "AXIS": + case "AAST": + case "PIXB": + case "AUVO": + case "STCK": + case "PROC": + case "VALU": + case "FUNC": + case "PNAM": + case "INAM": + case "GRST": + case "GREN": + case "GRPT": + case "FKEY": + case "IKEY": + case "CSYS": + case "OPAQ": + case "CMAP": + case "NLOC": + case "NZOM": + case "NVER": + case "NSRV": + case "NVSK": + case "NCRD": + case "WRPW": + case "WRPH": + case "NMOD": + case "NSEL": + case "NPRW": + case "NPLA": + case "NODS": + case "VERS": + case "ENUM": + case "TAG ": + case "OPAC": + case "CGMD": + case "CGTY": + case "CGST": + case "CGEN": + case "CGTS": + case "CGTE": + case "OSMP": + case "OMDE": + case "OUTR": + case "FLAG": + case "TRNL": + case "GLOW": + case "GVAL": + case "SHRP": + case "RFOP": + case "RSAN": + case "TROP": + case "RBLR": + case "TBLR": + case "CLRH": + case "CLRF": + case "ADTR": + case "LINE": + case "ALPH": + case "VCOL": + case "ENAB": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "SURF": + this.IFF.parseSurfaceLwo2(length2); + break; + case "CLIP": + this.IFF.parseClipLwo2(length2); + break; + case "IPIX": + case "IMIP": + case "IMOD": + case "AMOD": + case "IINV": + case "INCR": + case "IAXS": + case "IFOT": + case "ITIM": + case "IWRL": + case "IUTI": + case "IINX": + case "IINY": + case "IINZ": + case "IREF": + if (length2 === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); + else this.IFF.reader.skip(length2); + break; + case "OTAG": + this.IFF.parseObjectTag(); + break; + case "LAYR": + this.IFF.parseLayer(length2); + break; + case "PNTS": + this.IFF.parsePoints(length2); + break; + case "VMAP": + this.IFF.parseVertexMapping(length2); + break; + case "AUVU": + case "AUVN": + this.IFF.reader.skip(length2 - 1); + this.IFF.reader.getVariableLengthIndex(); + break; + case "POLS": + this.IFF.parsePolygonList(length2); + break; + case "TAGS": + this.IFF.parseTagStrings(length2); + break; + case "PTAG": + this.IFF.parsePolygonTagMapping(length2); + break; + case "VMAD": + this.IFF.parseVertexMapping(length2, true); + break; + case "DESC": + this.IFF.currentForm.description = this.IFF.reader.getString(); + break; + case "TEXT": + case "CMNT": + case "NCOM": + this.IFF.currentForm.comment = this.IFF.reader.getString(); + break; + case "NAME": + this.IFF.currentForm.channelName = this.IFF.reader.getString(); + break; + case "WRAP": + this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() }; + break; + case "IMAG": + const index2 = this.IFF.reader.getVariableLengthIndex(); + this.IFF.currentForm.imageIndex = index2; + break; + case "OREF": + this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); + break; + case "ROID": + this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); + break; + case "SSHN": + this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); + break; + case "AOVN": + this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); + break; + case "NSTA": + this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); + break; + case "NRNM": + this.IFF.currentForm.realName = this.IFF.reader.getString(); + break; + case "NNME": + this.IFF.currentForm.refName = this.IFF.reader.getString(); + this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; + break; + case "INME": + if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; + this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); + break; + case "IINN": + if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; + this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); + break; + case "IINM": + if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; + this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); + break; + case "IONM": + if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; + this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); + break; + case "FNAM": + this.IFF.currentForm.fileName = this.IFF.reader.getString(); + break; + case "CHAN": + if (length2 === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); + else this.IFF.reader.skip(length2); + break; + case "SMAN": + const maxSmoothingAngle = this.IFF.reader.getFloat32(); + this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; + break; + case "COLR": + this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; + this.IFF.reader.skip(2); + break; + case "LUMI": + this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "SPEC": + this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "DIFF": + this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "REFL": + this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "GLOS": + this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "TRAN": + this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "BUMP": + this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "SIDE": + this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); + break; + case "RIMG": + this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "RIND": + this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "TIMG": + this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "IMAP": + this.IFF.reader.skip(2); + break; + case "TMAP": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "IUVI": + this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length2); + break; + case "IUTL": + this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); + break; + case "IVTL": + this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); + break; + case "BLOK": + break; + default: + this.IFF.parseUnknownCHUNK(blockID, length2); + } + if (blockID != "FORM") { + this.IFF.debugger.node = 1; + this.IFF.debugger.nodeID = blockID; + this.IFF.debugger.log(); + } + if (this.IFF.reader.offset >= this.IFF.currentFormEnd) { + this.IFF.currentForm = this.IFF.parentForm; + } + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js +var LWO3Parser = class { + constructor(IFFParser2) { + this.IFF = IFFParser2; + } + parseBlock() { + this.IFF.debugger.offset = this.IFF.reader.offset; + this.IFF.debugger.closeForms(); + const blockID = this.IFF.reader.getIDTag(); + const length2 = this.IFF.reader.getUint32(); + this.IFF.debugger.dataOffset = this.IFF.reader.offset; + this.IFF.debugger.length = length2; + switch (blockID) { + case "FORM": + this.IFF.parseForm(length2); + break; + case "ICON": + case "VMPA": + case "BBOX": + case "NORM": + case "PRE ": + case "POST": + case "KEY ": + case "SPAN": + case "TIME": + case "CLRS": + case "CLRA": + case "FILT": + case "DITH": + case "CONT": + case "BRIT": + case "SATR": + case "HUE ": + case "GAMM": + case "NEGA": + case "IFLT": + case "PFLT": + case "PROJ": + case "AXIS": + case "AAST": + case "PIXB": + case "STCK": + case "VALU": + case "PNAM": + case "INAM": + case "GRST": + case "GREN": + case "GRPT": + case "FKEY": + case "IKEY": + case "CSYS": + case "OPAQ": + case "CMAP": + case "NLOC": + case "NZOM": + case "NVER": + case "NSRV": + case "NCRD": + case "NMOD": + case "NSEL": + case "NPRW": + case "NPLA": + case "VERS": + case "ENUM": + case "TAG ": + case "CGMD": + case "CGTY": + case "CGST": + case "CGEN": + case "CGTS": + case "CGTE": + case "OSMP": + case "OMDE": + case "OUTR": + case "FLAG": + case "TRNL": + case "SHRP": + case "RFOP": + case "RSAN": + case "TROP": + case "RBLR": + case "TBLR": + case "CLRH": + case "CLRF": + case "ADTR": + case "GLOW": + case "LINE": + case "ALPH": + case "VCOL": + case "ENAB": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "IPIX": + case "IMIP": + case "IMOD": + case "AMOD": + case "IINV": + case "INCR": + case "IAXS": + case "IFOT": + case "ITIM": + case "IWRL": + case "IUTI": + case "IINX": + case "IINY": + case "IINZ": + case "IREF": + if (length2 === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); + else this.IFF.reader.skip(length2); + break; + case "OTAG": + this.IFF.parseObjectTag(); + break; + case "LAYR": + this.IFF.parseLayer(length2); + break; + case "PNTS": + this.IFF.parsePoints(length2); + break; + case "VMAP": + this.IFF.parseVertexMapping(length2); + break; + case "POLS": + this.IFF.parsePolygonList(length2); + break; + case "TAGS": + this.IFF.parseTagStrings(length2); + break; + case "PTAG": + this.IFF.parsePolygonTagMapping(length2); + break; + case "VMAD": + this.IFF.parseVertexMapping(length2, true); + break; + case "DESC": + this.IFF.currentForm.description = this.IFF.reader.getString(); + break; + case "TEXT": + case "CMNT": + case "NCOM": + this.IFF.currentForm.comment = this.IFF.reader.getString(); + break; + case "NAME": + this.IFF.currentForm.channelName = this.IFF.reader.getString(); + break; + case "WRAP": + this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() }; + break; + case "IMAG": + const index2 = this.IFF.reader.getVariableLengthIndex(); + this.IFF.currentForm.imageIndex = index2; + break; + case "OREF": + this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); + break; + case "ROID": + this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); + break; + case "SSHN": + this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); + break; + case "AOVN": + this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); + break; + case "NSTA": + this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); + break; + case "NRNM": + this.IFF.currentForm.realName = this.IFF.reader.getString(); + break; + case "NNME": + this.IFF.currentForm.refName = this.IFF.reader.getString(); + this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; + break; + case "INME": + if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; + this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); + break; + case "IINN": + if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; + this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); + break; + case "IINM": + if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; + this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); + break; + case "IONM": + if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; + this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); + break; + case "FNAM": + this.IFF.currentForm.fileName = this.IFF.reader.getString(); + break; + case "CHAN": + if (length2 === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); + else this.IFF.reader.skip(length2); + break; + case "SMAN": + const maxSmoothingAngle = this.IFF.reader.getFloat32(); + this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; + break; + case "COLR": + this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; + this.IFF.reader.skip(2); + break; + case "LUMI": + this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "SPEC": + this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "DIFF": + this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "REFL": + this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "GLOS": + this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "TRAN": + this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "BUMP": + this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "SIDE": + this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); + break; + case "RIMG": + this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "RIND": + this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "TIMG": + this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "IMAP": + this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32(); + break; + case "IUVI": + this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length2); + break; + case "IUTL": + this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); + break; + case "IVTL": + this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); + break; + default: + this.IFF.parseUnknownCHUNK(blockID, length2); + } + if (blockID != "FORM") { + this.IFF.debugger.node = 1; + this.IFF.debugger.nodeID = blockID; + this.IFF.debugger.log(); + } + if (this.IFF.reader.offset >= this.IFF.currentFormEnd) { + this.IFF.currentForm = this.IFF.parentForm; + } + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/IFFParser.js +var IFFParser = class { + constructor() { + this.debugger = new Debugger(); + } + parse(buffer) { + this.reader = new DataViewReader(buffer); + this.tree = { + materials: {}, + layers: [], + tags: [], + textures: [] + }; + this.currentLayer = this.tree; + this.currentForm = this.tree; + this.parseTopForm(); + if (this.tree.format === void 0) return; + if (this.tree.format === "LWO2") { + this.parser = new LWO2Parser(this); + while (!this.reader.endOfFile()) this.parser.parseBlock(); + } else if (this.tree.format === "LWO3") { + this.parser = new LWO3Parser(this); + while (!this.reader.endOfFile()) this.parser.parseBlock(); + } + this.debugger.offset = this.reader.offset; + this.debugger.closeForms(); + return this.tree; + } + parseTopForm() { + this.debugger.offset = this.reader.offset; + var topForm = this.reader.getIDTag(); + if (topForm !== "FORM") { + console.warn("LWOLoader: Top-level FORM missing."); + return; + } + var length2 = this.reader.getUint32(); + this.debugger.dataOffset = this.reader.offset; + this.debugger.length = length2; + var type = this.reader.getIDTag(); + if (type === "LWO2") { + this.tree.format = type; + } else if (type === "LWO3") { + this.tree.format = type; + } + this.debugger.node = 0; + this.debugger.nodeID = type; + this.debugger.log(); + return; + } + /// + // FORM PARSING METHODS + /// + // Forms are organisational and can contain any number of sub chunks and sub forms + // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * } + parseForm(length2) { + var type = this.reader.getIDTag(); + switch (type) { + case "ISEQ": + case "ANIM": + case "STCC": + case "VPVL": + case "VPRM": + case "NROT": + case "WRPW": + case "WRPH": + case "FUNC": + case "FALL": + case "OPAC": + case "GRAD": + case "ENVS": + case "VMOP": + case "VMBG": + case "OMAX": + case "STEX": + case "CKBG": + case "CKEY": + case "VMLA": + case "VMLB": + this.debugger.skipped = true; + this.skipForm(length2); + break; + case "META": + case "NNDS": + case "NODS": + case "NDTA": + case "ADAT": + case "AOVS": + case "BLOK": + case "IBGC": + case "IOPC": + case "IIMG": + case "TXTR": + this.debugger.length = 4; + this.debugger.skipped = true; + break; + case "IFAL": + case "ISCL": + case "IPOS": + case "IROT": + case "IBMP": + case "IUTD": + case "IVTD": + this.parseTextureNodeAttribute(type); + break; + case "ENVL": + this.parseEnvelope(length2); + break; + case "CLIP": + if (this.tree.format === "LWO2") { + this.parseForm(length2); + } else { + this.parseClip(length2); + } + break; + case "STIL": + this.parseImage(); + break; + case "XREF": + this.reader.skip(8); + this.currentForm.referenceTexture = { + index: this.reader.getUint32(), + refName: this.reader.getString() + // internal unique ref + }; + break; + case "IMST": + this.parseImageStateForm(length2); + break; + case "SURF": + this.parseSurfaceForm(length2); + break; + case "VALU": + this.parseValueForm(length2); + break; + case "NTAG": + this.parseSubNode(length2); + break; + case "ATTR": + case "SATR": + this.setupForm("attributes", length2); + break; + case "NCON": + this.parseConnections(length2); + break; + case "SSHA": + this.parentForm = this.currentForm; + this.currentForm = this.currentSurface; + this.setupForm("surfaceShader", length2); + break; + case "SSHD": + this.setupForm("surfaceShaderData", length2); + break; + case "ENTR": + this.parseEntryForm(length2); + break; + case "IMAP": + this.parseImageMap(length2); + break; + case "TAMP": + this.parseXVAL("amplitude", length2); + break; + case "TMAP": + this.setupForm("textureMap", length2); + break; + case "CNTR": + this.parseXVAL3("center", length2); + break; + case "SIZE": + this.parseXVAL3("scale", length2); + break; + case "ROTA": + this.parseXVAL3("rotation", length2); + break; + default: + this.parseUnknownForm(type, length2); + } + this.debugger.node = 0; + this.debugger.nodeID = type; + this.debugger.log(); + } + setupForm(type, length2) { + if (!this.currentForm) this.currentForm = this.currentNode; + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + if (!this.currentForm[type]) { + this.currentForm[type] = {}; + this.currentForm = this.currentForm[type]; + } else { + console.warn("LWOLoader: form already exists on parent: ", type, this.currentForm); + this.currentForm = this.currentForm[type]; + } + } + skipForm(length2) { + this.reader.skip(length2 - 4); + } + parseUnknownForm(type, length2) { + console.warn("LWOLoader: unknown FORM encountered: " + type, length2); + printBuffer(this.reader.dv.buffer, this.reader.offset, length2 - 4); + this.reader.skip(length2 - 4); + } + parseSurfaceForm(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + var surface = { + attributes: {}, + // LWO2 style non-node attributes will go here + connections: {}, + name: name2, + inputName: name2, + nodes: {}, + source: this.reader.getString() + }; + this.tree.materials[name2] = surface; + this.currentSurface = surface; + this.parentForm = this.tree.materials; + this.currentForm = surface; + this.currentFormEnd = this.reader.offset + length2; + } + parseSurfaceLwo2(length2) { + var name2 = this.reader.getString(); + var surface = { + attributes: {}, + // LWO2 style non-node attributes will go here + connections: {}, + name: name2, + nodes: {}, + source: this.reader.getString() + }; + this.tree.materials[name2] = surface; + this.currentSurface = surface; + this.parentForm = this.tree.materials; + this.currentForm = surface; + this.currentFormEnd = this.reader.offset + length2; + } + parseSubNode(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + var node = { + name: name2 + }; + this.currentForm = node; + this.currentNode = node; + this.currentFormEnd = this.reader.offset + length2; + } + // collect attributes from all nodes at the top level of a surface + parseConnections(length2) { + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + this.currentForm = this.currentSurface.connections; + } + // surface node attribute data, e.g. specular, roughness etc + parseEntryForm(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + this.currentForm = this.currentNode.attributes; + this.setupForm(name2, length2); + } + // parse values from material - doesn't match up to other LWO3 data types + // sub form of entry form + parseValueForm() { + this.reader.skip(8); + var valueType = this.reader.getString(); + if (valueType === "double") { + this.currentForm.value = this.reader.getUint64(); + } else if (valueType === "int") { + this.currentForm.value = this.reader.getUint32(); + } else if (valueType === "vparam") { + this.reader.skip(24); + this.currentForm.value = this.reader.getFloat64(); + } else if (valueType === "vparam3") { + this.reader.skip(24); + this.currentForm.value = this.reader.getFloat64Array(3); + } + } + // holds various data about texture node image state + // Data other thanmipMapLevel unknown + parseImageStateForm() { + this.reader.skip(8); + this.currentForm.mipMapLevel = this.reader.getFloat32(); + } + // LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node) + parseImageMap(length2) { + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + if (!this.currentForm.maps) this.currentForm.maps = []; + var map2 = {}; + this.currentForm.maps.push(map2); + this.currentForm = map2; + this.reader.skip(10); + } + parseTextureNodeAttribute(type) { + this.reader.skip(28); + this.reader.skip(20); + switch (type) { + case "ISCL": + this.currentNode.scale = this.reader.getFloat32Array(3); + break; + case "IPOS": + this.currentNode.position = this.reader.getFloat32Array(3); + break; + case "IROT": + this.currentNode.rotation = this.reader.getFloat32Array(3); + break; + case "IFAL": + this.currentNode.falloff = this.reader.getFloat32Array(3); + break; + case "IBMP": + this.currentNode.amplitude = this.reader.getFloat32(); + break; + case "IUTD": + this.currentNode.uTiles = this.reader.getFloat32(); + break; + case "IVTD": + this.currentNode.vTiles = this.reader.getFloat32(); + break; + } + this.reader.skip(2); + } + // ENVL forms are currently ignored + parseEnvelope(length2) { + this.reader.skip(length2 - 4); + } + /// + // CHUNK PARSING METHODS + /// + // clips can either be defined inside a surface node, or at the top + // level and they have a different format in each case + parseClip(length2) { + var tag = this.reader.getIDTag(); + if (tag === "FORM") { + this.reader.skip(16); + this.currentNode.fileName = this.reader.getString(); + return; + } + this.reader.setOffset(this.reader.offset - 4); + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + this.reader.skip(8); + var texture = { + index: this.reader.getUint32() + }; + this.tree.textures.push(texture); + this.currentForm = texture; + } + parseClipLwo2(length2) { + var texture = { + index: this.reader.getUint32(), + fileName: "" + }; + while (true) { + var tag = this.reader.getIDTag(); + var n_length = this.reader.getUint16(); + if (tag === "STIL") { + texture.fileName = this.reader.getString(); + break; + } + if (n_length >= length2) { + break; + } + } + this.tree.textures.push(texture); + this.currentForm = texture; + } + parseImage() { + this.reader.skip(8); + this.currentForm.fileName = this.reader.getString(); + } + parseXVAL(type, length2) { + var endOffset = this.reader.offset + length2 - 4; + this.reader.skip(8); + this.currentForm[type] = this.reader.getFloat32(); + this.reader.setOffset(endOffset); + } + parseXVAL3(type, length2) { + var endOffset = this.reader.offset + length2 - 4; + this.reader.skip(8); + this.currentForm[type] = { + x: this.reader.getFloat32(), + y: this.reader.getFloat32(), + z: this.reader.getFloat32() + }; + this.reader.setOffset(endOffset); + } + // Tags associated with an object + // OTAG { type[ID4], tag-string[S0] } + parseObjectTag() { + if (!this.tree.objectTags) this.tree.objectTags = {}; + this.tree.objectTags[this.reader.getIDTag()] = { + tagString: this.reader.getString() + }; + } + // Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered. + // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2] + parseLayer(length2) { + var number = this.reader.getUint16(); + var flags = this.reader.getUint16(); + var pivot = this.reader.getFloat32Array(3); + var layer = { + number, + flags, + // If the least significant bit of flags is set, the layer is hidden. + pivot: [-pivot[0], pivot[1], pivot[2]], + // Note: this seems to be superflous, as the geometry is translated when pivot is present + name: this.reader.getString() + }; + this.tree.layers.push(layer); + this.currentLayer = layer; + var parsedLength = 16 + stringOffset(this.currentLayer.name); + this.currentLayer.parent = parsedLength < length2 ? this.reader.getUint16() : -1; + } + // VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors + // Converting from left to right handed coordinate system: + // x -> -x and switch material FrontSide -> BackSide + parsePoints(length2) { + this.currentPoints = []; + for (var i = 0; i < length2 / 4; i += 3) { + this.currentPoints.push(-this.reader.getFloat32(), this.reader.getFloat32(), this.reader.getFloat32()); + } + } + // parse VMAP or VMAD + // Associates a set of floating-point vectors with a set of points. + // VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * } + // VMAD Associates a set of floating-point vectors with the vertices of specific polygons. + // Similar to VMAP UVs, but associates with polygon vertices rather than points + // to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name, + // if they exist. The vector values in the VMAD will then replace those in the + // corresponding VMAP, but only for calculations involving the specified polygons. + // VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * } + parseVertexMapping(length2, discontinuous) { + var finalOffset = this.reader.offset + length2; + var channelName = this.reader.getString(); + if (this.reader.offset === finalOffset) { + this.currentForm.UVChannel = channelName; + return; + } + this.reader.setOffset(this.reader.offset - stringOffset(channelName)); + var type = this.reader.getIDTag(); + this.reader.getUint16(); + var name2 = this.reader.getString(); + var remainingLength = length2 - 6 - stringOffset(name2); + switch (type) { + case "TXUV": + this.parseUVMapping(name2, finalOffset, discontinuous); + break; + case "MORF": + case "SPOT": + this.parseMorphTargets(name2, finalOffset, type); + break; + case "APSL": + case "NORM": + case "WGHT": + case "MNVW": + case "PICK": + case "RGB ": + case "RGBA": + this.reader.skip(remainingLength); + break; + default: + console.warn("LWOLoader: unknown vertex map type: " + type); + this.reader.skip(remainingLength); + } + } + parseUVMapping(name2, finalOffset, discontinuous) { + var uvIndices = []; + var polyIndices = []; + var uvs = []; + while (this.reader.offset < finalOffset) { + uvIndices.push(this.reader.getVariableLengthIndex()); + if (discontinuous) polyIndices.push(this.reader.getVariableLengthIndex()); + uvs.push(this.reader.getFloat32(), this.reader.getFloat32()); + } + if (discontinuous) { + if (!this.currentLayer.discontinuousUVs) this.currentLayer.discontinuousUVs = {}; + this.currentLayer.discontinuousUVs[name2] = { + uvIndices, + polyIndices, + uvs + }; + } else { + if (!this.currentLayer.uvs) this.currentLayer.uvs = {}; + this.currentLayer.uvs[name2] = { + uvIndices, + uvs + }; + } + } + parseMorphTargets(name2, finalOffset, type) { + var indices = []; + var points = []; + type = type === "MORF" ? "relative" : "absolute"; + while (this.reader.offset < finalOffset) { + indices.push(this.reader.getVariableLengthIndex()); + points.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32()); + } + if (!this.currentLayer.morphTargets) this.currentLayer.morphTargets = {}; + this.currentLayer.morphTargets[name2] = { + indices, + points, + type + }; + } + // A list of polygons for the current layer. + // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * } + parsePolygonList(length2) { + var finalOffset = this.reader.offset + length2; + var type = this.reader.getIDTag(); + var indices = []; + var polygonDimensions = []; + while (this.reader.offset < finalOffset) { + var numverts = this.reader.getUint16(); + numverts = numverts & 1023; + polygonDimensions.push(numverts); + for (var j = 0; j < numverts; j++) indices.push(this.reader.getVariableLengthIndex()); + } + var geometryData = { + type, + vertexIndices: indices, + polygonDimensions, + points: this.currentPoints + }; + if (polygonDimensions[0] === 1) geometryData.type = "points"; + else if (polygonDimensions[0] === 2) geometryData.type = "lines"; + this.currentLayer.geometry = geometryData; + } + // Lists the tag strings that can be associated with polygons by the PTAG chunk. + // TAGS { tag-string[S0] * } + parseTagStrings(length2) { + this.tree.tags = this.reader.getStringArray(length2); + } + // Associates tags of a given type with polygons in the most recent POLS chunk. + // PTAG { type[ID4], ( poly[VX], tag[U2] ) * } + parsePolygonTagMapping(length2) { + var finalOffset = this.reader.offset + length2; + var type = this.reader.getIDTag(); + if (type === "SURF") this.parseMaterialIndices(finalOffset); + else { + this.reader.skip(length2 - 4); + } + } + parseMaterialIndices(finalOffset) { + this.currentLayer.geometry.materialIndices = []; + while (this.reader.offset < finalOffset) { + var polygonIndex = this.reader.getVariableLengthIndex(); + var materialIndex = this.reader.getUint16(); + this.currentLayer.geometry.materialIndices.push(polygonIndex, materialIndex); + } + } + parseUnknownCHUNK(blockID, length2) { + console.warn("LWOLoader: unknown chunk type: " + blockID + " length: " + length2); + var data2 = this.reader.getString(length2); + this.currentForm[blockID] = data2; + } +}; +var DataViewReader = class { + constructor(buffer) { + this.dv = new DataView(buffer); + this.offset = 0; + this._textDecoder = new TextDecoder(); + this._bytes = new Uint8Array(buffer); + } + size() { + return this.dv.buffer.byteLength; + } + setOffset(offset) { + if (offset > 0 && offset < this.dv.buffer.byteLength) { + this.offset = offset; + } else { + console.error("LWOLoader: invalid buffer offset"); + } + } + endOfFile() { + if (this.offset >= this.size()) return true; + return false; + } + skip(length2) { + this.offset += length2; + } + getUint8() { + var value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + } + getUint16() { + var value2 = this.dv.getUint16(this.offset); + this.offset += 2; + return value2; + } + getInt32() { + var value2 = this.dv.getInt32(this.offset, false); + this.offset += 4; + return value2; + } + getUint32() { + var value2 = this.dv.getUint32(this.offset, false); + this.offset += 4; + return value2; + } + getUint64() { + var low, high; + high = this.getUint32(); + low = this.getUint32(); + return high * 4294967296 + low; + } + getFloat32() { + var value2 = this.dv.getFloat32(this.offset, false); + this.offset += 4; + return value2; + } + getFloat32Array(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + } + getFloat64() { + var value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + } + getFloat64Array(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + } + // get variable-length index data type + // VX ::= index[U2] | (index + 0xFF000000)[U4] + // If the index value is less than 65,280 (0xFF00),then VX === U2 + // otherwise VX === U4 with bits 24-31 set + // When reading an index, if the first byte encountered is 255 (0xFF), then + // the four-byte form is being used and the first byte should be discarded or masked out. + getVariableLengthIndex() { + var firstByte = this.getUint8(); + if (firstByte === 255) { + return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8(); + } + return firstByte * 256 + this.getUint8(); + } + // An ID tag is a sequence of 4 bytes containing 7-bit ASCII values + getIDTag() { + return this.getString(4); + } + getString(size2) { + if (size2 === 0) return; + const start = this.offset; + let result; + let length2; + if (size2) { + length2 = size2; + result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, size2)); + } else { + length2 = this._bytes.indexOf(0, start) - start; + result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, length2)); + length2++; + length2 += length2 % 2; + } + this.skip(length2); + return result; + } + getStringArray(size2) { + var a2 = this.getString(size2); + a2 = a2.split("\0"); + return a2.filter(Boolean); + } +}; +var Debugger = class { + constructor() { + this.active = false; + this.depth = 0; + this.formList = []; + } + enable() { + this.active = true; + } + log() { + if (!this.active) return; + var nodeType; + switch (this.node) { + case 0: + nodeType = "FORM"; + break; + case 1: + nodeType = "CHK"; + break; + case 2: + nodeType = "S-CHK"; + break; + } + console.log( + "| ".repeat(this.depth) + nodeType, + this.nodeID, + `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`, + this.node == 0 ? " {" : "", + this.skipped ? "SKIPPED" : "", + this.node == 0 && this.skipped ? "}" : "" + ); + if (this.node == 0 && !this.skipped) { + this.depth += 1; + this.formList.push(this.dataOffset + this.length); + } + this.skipped = false; + } + closeForms() { + if (!this.active) return; + for (var i = this.formList.length - 1; i >= 0; i--) { + if (this.offset >= this.formList[i]) { + this.depth -= 1; + console.log("| ".repeat(this.depth) + "}"); + this.formList.splice(-1, 1); + } + } + } +}; +function isEven(num) { + return num % 2; +} +function stringOffset(string) { + return string.length + 1 + (isEven(string.length + 1) ? 1 : 0); +} +function printBuffer(buffer, from, to) { + console.log(new TextDecoder().decode(new Uint8Array(buffer, from, to))); +} + +// node_modules/three/examples/jsm/loaders/LWOLoader.js +var _lwoTree; +var LWOLoader = class extends Loader { + constructor(manager, parameters = {}) { + super(manager); + this.resourcePath = parameters.resourcePath !== void 0 ? parameters.resourcePath : ""; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? extractParentUrl(url, "Objects") : scope.path; + const modelName = url.split(path).pop().split(".")[0]; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path, modelName)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(iffBuffer, path, modelName) { + _lwoTree = new IFFParser().parse(iffBuffer); + const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + return new LWOTreeParser(textureLoader).parse(modelName); + } +}; +var LWOTreeParser = class { + constructor(textureLoader) { + this.textureLoader = textureLoader; + } + parse(modelName) { + this.materials = new MaterialParser(this.textureLoader).parse(); + this.defaultLayerName = modelName; + this.meshes = this.parseLayers(); + return { + materials: this.materials, + meshes: this.meshes + }; + } + parseLayers() { + const meshes = []; + const finalMeshes = []; + const geometryParser = new GeometryParser2(); + const scope = this; + _lwoTree.layers.forEach(function(layer) { + const geometry = geometryParser.parse(layer.geometry, layer); + const mesh = scope.parseMesh(geometry, layer); + meshes[layer.number] = mesh; + if (layer.parent === -1) finalMeshes.push(mesh); + else meshes[layer.parent].add(mesh); + }); + this.applyPivots(finalMeshes); + return finalMeshes; + } + parseMesh(geometry, layer) { + let mesh; + const materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type); + if (layer.geometry.type === "points") mesh = new Points(geometry, materials); + else if (layer.geometry.type === "lines") mesh = new LineSegments(geometry, materials); + else mesh = new Mesh(geometry, materials); + if (layer.name) mesh.name = layer.name; + else mesh.name = this.defaultLayerName + "_layer_" + layer.number; + mesh.userData.pivot = layer.pivot; + return mesh; + } + // TODO: may need to be reversed in z to convert LWO to three.js coordinates + applyPivots(meshes) { + meshes.forEach(function(mesh) { + mesh.traverse(function(child) { + const pivot = child.userData.pivot; + child.position.x += pivot[0]; + child.position.y += pivot[1]; + child.position.z += pivot[2]; + if (child.parent) { + const parentPivot = child.parent.userData.pivot; + child.position.x -= parentPivot[0]; + child.position.y -= parentPivot[1]; + child.position.z -= parentPivot[2]; + } + }); + }); + } + getMaterials(namesArray, type) { + const materials = []; + const scope = this; + namesArray.forEach(function(name2, i) { + materials[i] = scope.getMaterialByName(name2); + }); + if (type === "points" || type === "lines") { + materials.forEach(function(mat, i) { + const spec = { + color: mat.color + }; + if (type === "points") { + spec.size = 0.1; + spec.map = mat.map; + materials[i] = new PointsMaterial(spec); + } else if (type === "lines") { + materials[i] = new LineBasicMaterial(spec); + } + }); + } + const filtered = materials.filter(Boolean); + if (filtered.length === 1) return filtered[0]; + return materials; + } + getMaterialByName(name2) { + return this.materials.filter(function(m) { + return m.name === name2; + })[0]; + } +}; +var MaterialParser = class { + constructor(textureLoader) { + this.textureLoader = textureLoader; + } + parse() { + const materials = []; + this.textures = {}; + for (const name2 in _lwoTree.materials) { + if (_lwoTree.format === "LWO3") { + materials.push(this.parseMaterial(_lwoTree.materials[name2], name2, _lwoTree.textures)); + } else if (_lwoTree.format === "LWO2") { + materials.push(this.parseMaterialLwo2(_lwoTree.materials[name2], name2, _lwoTree.textures)); + } + } + return materials; + } + parseMaterial(materialData, name2, textures) { + let params = { + name: name2, + side: this.getSide(materialData.attributes), + flatShading: this.getSmooth(materialData.attributes) + }; + const connections2 = this.parseConnections(materialData.connections, materialData.nodes); + const maps = this.parseTextureNodes(connections2.maps); + this.parseAttributeImageMaps(connections2.attributes, textures, maps, materialData.maps); + const attributes = this.parseAttributes(connections2.attributes, maps); + this.parseEnvMap(connections2, maps, attributes); + params = Object.assign(maps, params); + params = Object.assign(params, attributes); + const materialType = this.getMaterialType(connections2.attributes); + if (materialType !== MeshPhongMaterial) delete params.refractionRatio; + return new materialType(params); + } + parseMaterialLwo2(materialData, name2) { + let params = { + name: name2, + side: this.getSide(materialData.attributes), + flatShading: this.getSmooth(materialData.attributes) + }; + const attributes = this.parseAttributes(materialData.attributes, {}); + params = Object.assign(params, attributes); + return new MeshPhongMaterial(params); + } + // Note: converting from left to right handed coords by switching x -> -x in vertices, and + // then switching mat FrontSide -> BackSide + // NB: this means that FrontSide and BackSide have been switched! + getSide(attributes) { + if (!attributes.side) return BackSide; + switch (attributes.side) { + case 0: + case 1: + return BackSide; + case 2: + return FrontSide; + case 3: + return DoubleSide; + } + } + getSmooth(attributes) { + if (!attributes.smooth) return true; + return !attributes.smooth; + } + parseConnections(connections2, nodes) { + const materialConnections = { + maps: {} + }; + const inputName = connections2.inputName; + const inputNodeName = connections2.inputNodeName; + const nodeName = connections2.nodeName; + const scope = this; + inputName.forEach(function(name2, index2) { + if (name2 === "Material") { + const matNode = scope.getNodeByRefName(inputNodeName[index2], nodes); + materialConnections.attributes = matNode.attributes; + materialConnections.envMap = matNode.fileName; + materialConnections.name = inputNodeName[index2]; + } + }); + nodeName.forEach(function(name2, index2) { + if (name2 === materialConnections.name) { + materialConnections.maps[inputName[index2]] = scope.getNodeByRefName(inputNodeName[index2], nodes); + } + }); + return materialConnections; + } + getNodeByRefName(refName, nodes) { + for (const name2 in nodes) { + if (nodes[name2].refName === refName) return nodes[name2]; + } + } + parseTextureNodes(textureNodes) { + const maps = {}; + for (const name2 in textureNodes) { + const node = textureNodes[name2]; + const path = node.fileName; + if (!path) return; + const texture = this.loadTexture(path); + if (node.widthWrappingMode !== void 0) texture.wrapS = this.getWrappingType(node.widthWrappingMode); + if (node.heightWrappingMode !== void 0) texture.wrapT = this.getWrappingType(node.heightWrappingMode); + switch (name2) { + case "Color": + maps.map = texture; + maps.map.colorSpace = SRGBColorSpace; + break; + case "Roughness": + maps.roughnessMap = texture; + maps.roughness = 1; + break; + case "Specular": + maps.specularMap = texture; + maps.specularMap.colorSpace = SRGBColorSpace; + maps.specular = 16777215; + break; + case "Luminous": + maps.emissiveMap = texture; + maps.emissiveMap.colorSpace = SRGBColorSpace; + maps.emissive = 8421504; + break; + case "Luminous Color": + maps.emissive = 8421504; + break; + case "Metallic": + maps.metalnessMap = texture; + maps.metalness = 1; + break; + case "Transparency": + case "Alpha": + maps.alphaMap = texture; + maps.transparent = true; + break; + case "Normal": + maps.normalMap = texture; + if (node.amplitude !== void 0) maps.normalScale = new Vector2(node.amplitude, node.amplitude); + break; + case "Bump": + maps.bumpMap = texture; + break; + } + } + if (maps.roughnessMap && maps.specularMap) delete maps.specularMap; + return maps; + } + // maps can also be defined on individual material attributes, parse those here + // This occurs on Standard (Phong) surfaces + parseAttributeImageMaps(attributes, textures, maps) { + for (const name2 in attributes) { + const attribute = attributes[name2]; + if (attribute.maps) { + const mapData = attribute.maps[0]; + const path = this.getTexturePathByIndex(mapData.imageIndex, textures); + if (!path) return; + const texture = this.loadTexture(path); + if (mapData.wrap !== void 0) texture.wrapS = this.getWrappingType(mapData.wrap.w); + if (mapData.wrap !== void 0) texture.wrapT = this.getWrappingType(mapData.wrap.h); + switch (name2) { + case "Color": + maps.map = texture; + maps.map.colorSpace = SRGBColorSpace; + break; + case "Diffuse": + maps.aoMap = texture; + break; + case "Roughness": + maps.roughnessMap = texture; + maps.roughness = 1; + break; + case "Specular": + maps.specularMap = texture; + maps.specularMap.colorSpace = SRGBColorSpace; + maps.specular = 16777215; + break; + case "Luminosity": + maps.emissiveMap = texture; + maps.emissiveMap.colorSpace = SRGBColorSpace; + maps.emissive = 8421504; + break; + case "Metallic": + maps.metalnessMap = texture; + maps.metalness = 1; + break; + case "Transparency": + case "Alpha": + maps.alphaMap = texture; + maps.transparent = true; + break; + case "Normal": + maps.normalMap = texture; + break; + case "Bump": + maps.bumpMap = texture; + break; + } + } + } + } + parseAttributes(attributes, maps) { + const params = {}; + if (attributes.Color && !maps.map) { + params.color = new Color().fromArray(attributes.Color.value); + } else { + params.color = new Color(); + } + if (attributes.Transparency && attributes.Transparency.value !== 0) { + params.opacity = 1 - attributes.Transparency.value; + params.transparent = true; + } + if (attributes["Bump Height"]) params.bumpScale = attributes["Bump Height"].value * 0.1; + this.parsePhysicalAttributes(params, attributes, maps); + this.parseStandardAttributes(params, attributes, maps); + this.parsePhongAttributes(params, attributes, maps); + return params; + } + parsePhysicalAttributes(params, attributes) { + if (attributes.Clearcoat && attributes.Clearcoat.value > 0) { + params.clearcoat = attributes.Clearcoat.value; + if (attributes["Clearcoat Gloss"]) { + params.clearcoatRoughness = 0.5 * (1 - attributes["Clearcoat Gloss"].value); + } + } + } + parseStandardAttributes(params, attributes, maps) { + if (attributes.Luminous) { + params.emissiveIntensity = attributes.Luminous.value; + if (attributes["Luminous Color"] && !maps.emissive) { + params.emissive = new Color().fromArray(attributes["Luminous Color"].value); + } else { + params.emissive = new Color(8421504); + } + } + if (attributes.Roughness && !maps.roughnessMap) params.roughness = attributes.Roughness.value; + if (attributes.Metallic && !maps.metalnessMap) params.metalness = attributes.Metallic.value; + } + parsePhongAttributes(params, attributes, maps) { + if (attributes["Refraction Index"]) params.refractionRatio = 0.98 / attributes["Refraction Index"].value; + if (attributes.Diffuse) params.color.multiplyScalar(attributes.Diffuse.value); + if (attributes.Reflection) { + params.reflectivity = attributes.Reflection.value; + params.combine = AddOperation; + } + if (attributes.Luminosity) { + params.emissiveIntensity = attributes.Luminosity.value; + if (!maps.emissiveMap && !maps.map) { + params.emissive = params.color; + } else { + params.emissive = new Color(8421504); + } + } + if (!attributes.Roughness && attributes.Specular && !maps.specularMap) { + if (attributes["Color Highlight"]) { + params.specular = new Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes["Color Highlight"].value); + } else { + params.specular = new Color().setScalar(attributes.Specular.value); + } + } + if (params.specular && attributes.Glossiness) params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2); + } + parseEnvMap(connections2, maps, attributes) { + if (connections2.envMap) { + const envMap = this.loadTexture(connections2.envMap); + if (attributes.transparent && attributes.opacity < 0.999) { + envMap.mapping = EquirectangularRefractionMapping; + if (attributes.reflectivity !== void 0) { + delete attributes.reflectivity; + delete attributes.combine; + } + if (attributes.metalness !== void 0) { + attributes.metalness = 1; + } + attributes.opacity = 1; + } else envMap.mapping = EquirectangularReflectionMapping; + maps.envMap = envMap; + } + } + // get texture defined at top level by its index + getTexturePathByIndex(index2) { + let fileName = ""; + if (!_lwoTree.textures) return fileName; + _lwoTree.textures.forEach(function(texture) { + if (texture.index === index2) fileName = texture.fileName; + }); + return fileName; + } + loadTexture(path) { + if (!path) return null; + const texture = this.textureLoader.load( + path, + void 0, + void 0, + function() { + console.warn("LWOLoader: non-standard resource hierarchy. Use `resourcePath` parameter to specify root content directory."); + } + ); + return texture; + } + // 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge + getWrappingType(num) { + switch (num) { + case 0: + console.warn('LWOLoader: "Reset" texture wrapping type is not supported in three.js'); + return ClampToEdgeWrapping; + case 1: + return RepeatWrapping; + case 2: + return MirroredRepeatWrapping; + case 3: + return ClampToEdgeWrapping; + } + } + getMaterialType(nodeData) { + if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0) return MeshPhysicalMaterial; + if (nodeData.Roughness) return MeshStandardMaterial; + return MeshPhongMaterial; + } +}; +var GeometryParser2 = class { + parse(geoData, layer) { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(geoData.points, 3)); + const indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions); + geometry.setIndex(indices); + this.parseGroups(geometry, geoData); + geometry.computeVertexNormals(); + this.parseUVs(geometry, layer, indices); + this.parseMorphTargets(geometry, layer, indices); + geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]); + return geometry; + } + // split quads into tris + splitIndices(indices, polygonDimensions) { + const remappedIndices = []; + let i = 0; + polygonDimensions.forEach(function(dim) { + if (dim < 4) { + for (let k2 = 0; k2 < dim; k2++) remappedIndices.push(indices[i + k2]); + } else if (dim === 4) { + remappedIndices.push( + indices[i], + indices[i + 1], + indices[i + 2], + indices[i], + indices[i + 2], + indices[i + 3] + ); + } else if (dim > 4) { + for (let k2 = 1; k2 < dim - 1; k2++) { + remappedIndices.push(indices[i], indices[i + k2], indices[i + k2 + 1]); + } + console.warn("LWOLoader: polygons with greater than 4 sides are not supported"); + } + i += dim; + }); + return remappedIndices; + } + // NOTE: currently ignoring poly indices and assuming that they are intelligently ordered + parseGroups(geometry, geoData) { + const tags = _lwoTree.tags; + const matNames = []; + let elemSize = 3; + if (geoData.type === "lines") elemSize = 2; + if (geoData.type === "points") elemSize = 1; + const remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices); + let indexNum = 0; + const indexPairs = {}; + let prevMaterialIndex; + let materialIndex; + let prevStart = 0; + let currentCount = 0; + for (let i = 0; i < remappedIndices.length; i += 2) { + materialIndex = remappedIndices[i + 1]; + if (i === 0) matNames[indexNum] = tags[materialIndex]; + if (prevMaterialIndex === void 0) prevMaterialIndex = materialIndex; + if (materialIndex !== prevMaterialIndex) { + let currentIndex; + if (indexPairs[tags[prevMaterialIndex]]) { + currentIndex = indexPairs[tags[prevMaterialIndex]]; + } else { + currentIndex = indexNum; + indexPairs[tags[prevMaterialIndex]] = indexNum; + matNames[indexNum] = tags[prevMaterialIndex]; + indexNum++; + } + geometry.addGroup(prevStart, currentCount, currentIndex); + prevStart += currentCount; + prevMaterialIndex = materialIndex; + currentCount = 0; + } + currentCount += elemSize; + } + if (geometry.groups.length > 0) { + let currentIndex; + if (indexPairs[tags[materialIndex]]) { + currentIndex = indexPairs[tags[materialIndex]]; + } else { + currentIndex = indexNum; + indexPairs[tags[materialIndex]] = indexNum; + matNames[indexNum] = tags[materialIndex]; + } + geometry.addGroup(prevStart, currentCount, currentIndex); + } + geometry.userData.matNames = matNames; + } + splitMaterialIndices(polygonDimensions, indices) { + const remappedIndices = []; + polygonDimensions.forEach(function(dim, i) { + if (dim <= 3) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); + } else if (dim === 4) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]); + } else { + for (let k2 = 0; k2 < dim - 2; k2++) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); + } + } + }); + return remappedIndices; + } + // UV maps: + // 1: are defined via index into an array of points, not into a geometry + // - the geometry is also defined by an index into this array, but the indexes may not match + // 2: there can be any number of UV maps for a single geometry. Here these are combined, + // with preference given to the first map encountered + // 3: UV maps can be partial - that is, defined for only a part of the geometry + // 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most + // UV maps are defined as partially VMAP and partially VMAD + // VMADs are currently not supported + parseUVs(geometry, layer) { + const remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function() { + return 0; + }); + for (const name2 in layer.uvs) { + const uvs = layer.uvs[name2].uvs; + const uvIndices = layer.uvs[name2].uvIndices; + uvIndices.forEach(function(i, j) { + remappedUVs[i * 2] = uvs[j * 2]; + remappedUVs[i * 2 + 1] = uvs[j * 2 + 1]; + }); + } + geometry.setAttribute("uv", new Float32BufferAttribute(remappedUVs, 2)); + } + parseMorphTargets(geometry, layer) { + let num = 0; + for (const name2 in layer.morphTargets) { + const remappedPoints = geometry.attributes.position.array.slice(); + if (!geometry.morphAttributes.position) geometry.morphAttributes.position = []; + const morphPoints = layer.morphTargets[name2].points; + const morphIndices = layer.morphTargets[name2].indices; + const type = layer.morphTargets[name2].type; + morphIndices.forEach(function(i, j) { + if (type === "relative") { + remappedPoints[i * 3] += morphPoints[j * 3]; + remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1]; + remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2]; + } else { + remappedPoints[i * 3] = morphPoints[j * 3]; + remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1]; + remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2]; + } + }); + geometry.morphAttributes.position[num] = new Float32BufferAttribute(remappedPoints, 3); + geometry.morphAttributes.position[num].name = name2; + num++; + } + geometry.morphTargetsRelative = false; + } +}; +function extractParentUrl(url, dir) { + const index2 = url.indexOf(dir); + if (index2 === -1) return "./"; + return url.slice(0, index2); +} + +// node_modules/three/examples/jsm/loaders/LogLuvLoader.js +var LogLuvLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const ifds = UTIF.decode(buffer); + UTIF.decodeImage(buffer, ifds[0]); + const rgba = UTIF.toRGBA(ifds[0], this.type); + return { + width: ifds[0].width, + height: ifds[0].height, + data: rgba, + format: RGBAFormat, + type: this.type, + flipY: true + }; + } + setDataType(value2) { + this.type = value2; + return this; + } +}; +var UTIF = {}; +UTIF.decode = function(buff, prm) { + if (prm == null) prm = { parseMN: true, debug: false }; + var data2 = new Uint8Array(buff), offset = 0; + var id = UTIF._binBE.readASCII(data2, offset, 2); + offset += 2; + var bin = id == "II" ? UTIF._binLE : UTIF._binBE; + bin.readUshort(data2, offset); + offset += 2; + var ifdo = bin.readUint(data2, offset); + var ifds = []; + while (true) { + var cnt = bin.readUshort(data2, ifdo), typ = bin.readUshort(data2, ifdo + 4); + if (cnt != 0) { + if (typ < 1 || 13 < typ) { + console.log("error in TIFF"); + break; + } + } + UTIF._readIFD(bin, data2, ifdo, ifds, 0, prm); + ifdo = bin.readUint(data2, ifdo + 2 + cnt * 12); + if (ifdo == 0) break; + } + return ifds; +}; +UTIF.decodeImage = function(buff, img, ifds) { + if (img.data) return; + var data2 = new Uint8Array(buff); + var id = UTIF._binBE.readASCII(data2, 0, 2); + if (img["t256"] == null) return; + img.isLE = id == "II"; + img.width = img["t256"][0]; + img.height = img["t257"][0]; + var cmpr = img["t259"] ? img["t259"][0] : 1; + var fo = img["t266"] ? img["t266"][0] : 1; + if (img["t284"] && img["t284"][0] == 2) console.log("PlanarConfiguration 2 should not be used!"); + if (cmpr == 7 && img["t258"] && img["t258"].length > 3) img["t258"] = img["t258"].slice(0, 3); + var bipp; + if (img["t258"]) bipp = Math.min(32, img["t258"][0]) * img["t258"].length; + else bipp = img["t277"] ? img["t277"][0] : 1; + if (cmpr == 1 && img["t279"] != null && img["t278"] && img["t262"][0] == 32803) { + bipp = Math.round(img["t279"][0] * 8 / (img.width * img["t278"][0])); + } + var bipl = Math.ceil(img.width * bipp / 8) * 8; + var soff = img["t273"]; + if (soff == null) soff = img["t324"]; + var bcnt = img["t279"]; + if (cmpr == 1 && soff.length == 1) bcnt = [img.height * (bipl >>> 3)]; + if (bcnt == null) bcnt = img["t325"]; + var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0; + if (img["t322"] != null) { + var tw = img["t322"][0], th = img["t323"][0]; + var tx = Math.floor((img.width + tw - 1) / tw); + var ty = Math.floor((img.height + th - 1) / th); + var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0); + for (var y2 = 0; y2 < ty; y2++) + for (var x2 = 0; x2 < tx; x2++) { + var i = y2 * tx + x2; + for (var j = 0; j < tbuff.length; j++) tbuff[j] = 0; + UTIF.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, tbuff, 0, fo); + if (cmpr == 6) bytes = tbuff; + else UTIF._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x2 * tw * bipp / 8) | 0, y2 * th); + } + bilen = bytes.length * 8; + } else { + var rps = img["t278"] ? img["t278"][0] : img.height; + rps = Math.min(rps, img.height); + for (var i = 0; i < soff.length; i++) { + UTIF.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo); + bilen += bipl * rps; + } + bilen = Math.min(bilen, bytes.length * 8); + } + img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0); +}; +UTIF.decode._decompress = function(img, ifds, data2, off, len, cmpr, tgt, toff) { + if (cmpr == 34676) UTIF.decode._decodeLogLuv32(img, data2, off, len, tgt, toff); + else console.log("Unsupported compression", cmpr); + var bps = img["t258"] ? Math.min(32, img["t258"][0]) : 1; + var noc = img["t277"] ? img["t277"][0] : 1, bpp = bps * noc >>> 3, h = img["t278"] ? img["t278"][0] : img.height, bpl = Math.ceil(bps * noc * img.width / 8); + if (bps == 16 && !img.isLE && img["t33422"] == null) + for (var y2 = 0; y2 < h; y2++) { + var roff = toff + y2 * bpl; + for (var x2 = 1; x2 < bpl; x2 += 2) { + var t3 = tgt[roff + x2]; + tgt[roff + x2] = tgt[roff + x2 - 1]; + tgt[roff + x2 - 1] = t3; + } + } + if (img["t317"] && img["t317"][0] == 2) { + for (var y2 = 0; y2 < h; y2++) { + var ntoff = toff + y2 * bpl; + if (bps == 16) for (var j = bpp; j < bpl; j += 2) { + var nv = (tgt[ntoff + j + 1] << 8 | tgt[ntoff + j]) + (tgt[ntoff + j - bpp + 1] << 8 | tgt[ntoff + j - bpp]); + tgt[ntoff + j] = nv & 255; + tgt[ntoff + j + 1] = nv >>> 8 & 255; + } + else if (noc == 3) for (var j = 3; j < bpl; j += 3) { + tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - 3] & 255; + tgt[ntoff + j + 1] = tgt[ntoff + j + 1] + tgt[ntoff + j - 2] & 255; + tgt[ntoff + j + 2] = tgt[ntoff + j + 2] + tgt[ntoff + j - 1] & 255; + } + else for (var j = bpp; j < bpl; j++) tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - bpp] & 255; + } + } +}; +UTIF.decode._decodeLogLuv32 = function(img, data2, off, len, tgt, toff) { + var w = img.width, qw = w * 4; + var io = 0, out = new Uint8Array(qw); + while (io < len) { + var oo = 0; + while (oo < qw) { + var c2 = data2[off + io]; + io++; + if (c2 < 128) { + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io + j]; + oo += c2; + io += c2; + } else { + c2 = c2 - 126; + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io]; + oo += c2; + io++; + } + } + for (var x2 = 0; x2 < w; x2++) { + tgt[toff + 0] = out[x2]; + tgt[toff + 1] = out[x2 + w]; + tgt[toff + 2] = out[x2 + w * 2]; + tgt[toff + 4] = out[x2 + w * 3]; + toff += 6; + } + } +}; +UTIF.tags = {}; +UTIF._types = function() { + var main = new Array(250); + main.fill(0); + main = main.concat([0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + var rest = { 33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7 }; + return { + basic: { + main, + rest + }, + gps: { + main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9], + rest: { 18: 2, 29: 2 } + } + }; +}(); +UTIF._readIFD = function(bin, data2, offset, ifds, depth, prm) { + var cnt = bin.readUshort(data2, offset); + offset += 2; + var ifd = {}; + if (prm.debug) console.log(" ".repeat(depth), ifds.length - 1, ">>>----------------"); + for (var i = 0; i < cnt; i++) { + var tag = bin.readUshort(data2, offset); + offset += 2; + var type = bin.readUshort(data2, offset); + offset += 2; + var num = bin.readUint(data2, offset); + offset += 4; + var voff = bin.readUint(data2, offset); + offset += 4; + var arr = []; + if (type == 1 || type == 7) { + arr = new Uint8Array(data2.buffer, num < 5 ? offset - 4 : voff, num); + } + if (type == 2) { + var o0 = num < 5 ? offset - 4 : voff, c2 = data2[o0], len = Math.max(0, Math.min(num - 1, data2.length - o0)); + if (c2 < 128 || len == 0) arr.push(bin.readASCII(data2, o0, len)); + else arr = new Uint8Array(data2.buffer, o0, len); + } + if (type == 3) { + for (var j = 0; j < num; j++) arr.push(bin.readUshort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 4 || type == 13) { + for (var j = 0; j < num; j++) arr.push(bin.readUint(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 5 || type == 10) { + var ri = type == 5 ? bin.readUint : bin.readInt; + for (var j = 0; j < num; j++) arr.push([ri(data2, voff + j * 8), ri(data2, voff + j * 8 + 4)]); + } + if (type == 8) { + for (var j = 0; j < num; j++) arr.push(bin.readShort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 9) { + for (var j = 0; j < num; j++) arr.push(bin.readInt(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 11) { + for (var j = 0; j < num; j++) arr.push(bin.readFloat(data2, voff + j * 4)); + } + if (type == 12) { + for (var j = 0; j < num; j++) arr.push(bin.readDouble(data2, voff + j * 8)); + } + if (num != 0 && arr.length == 0) { + console.log(tag, "unknown TIFF tag type: ", type, "num:", num); + if (i == 0) return; + continue; + } + if (prm.debug) console.log(" ".repeat(depth), tag, type, UTIF.tags[tag], arr); + ifd["t" + tag] = arr; + if (tag == 330 || tag == 34665 || tag == 34853 || tag == 50740 && bin.readUshort(data2, bin.readUint(arr, 0)) < 300 || tag == 61440) { + var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr; + var subfd = []; + for (var j = 0; j < oarr.length; j++) UTIF._readIFD(bin, data2, oarr[j], subfd, depth + 1, prm); + if (tag == 330) ifd.subIFD = subfd; + if (tag == 34665) ifd.exifIFD = subfd[0]; + if (tag == 34853) ifd.gpsiIFD = subfd[0]; + if (tag == 50740) ifd.dngPrvt = subfd[0]; + if (tag == 61440) ifd.fujiIFD = subfd[0]; + } + if (tag == 37500 && prm.parseMN) { + var mn = arr; + if (bin.readASCII(mn, 0, 5) == "Nikon") ifd.makerNote = UTIF["decode"](mn.slice(10).buffer)[0]; + else if (bin.readUshort(data2, voff) < 300 && bin.readUshort(data2, voff + 4) <= 12) { + var subsub = []; + UTIF._readIFD(bin, data2, voff, subsub, depth + 1, prm); + ifd.makerNote = subsub[0]; + } + } + } + ifds.push(ifd); + if (prm.debug) console.log(" ".repeat(depth), "<<<---------------"); + return offset; +}; +UTIF.toRGBA = function(out, type) { + const w = out.width, h = out.height, area = w * h, data2 = out.data; + let img; + switch (type) { + case HalfFloatType: + img = new Uint16Array(area * 4); + break; + case FloatType: + img = new Float32Array(area * 4); + break; + default: + throw new Error("THREE.LogLuvLoader: Unsupported texture data type: " + type); + } + let intp = out["t262"] ? out["t262"][0] : 2; + const bps = out["t258"] ? Math.min(32, out["t258"][0]) : 1; + if (out["t262"] == null && bps == 1) intp = 0; + if (intp == 32845) { + for (let y2 = 0; y2 < h; y2++) { + for (let x2 = 0; x2 < w; x2++) { + const si = (y2 * w + x2) * 6, qi = (y2 * w + x2) * 4; + let L = data2[si + 1] << 8 | data2[si]; + L = Math.pow(2, (L + 0.5) / 256 - 64); + const u = (data2[si + 3] + 0.5) / 410; + const v = (data2[si + 5] + 0.5) / 410; + const sX = 9 * u / (6 * u - 16 * v + 12); + const sY = 4 * v / (6 * u - 16 * v + 12); + const bY = L; + const X2 = sX * bY / sY, Y2 = bY, Z2 = (1 - sX - sY) * bY / sY; + const r = 2.69 * X2 - 1.276 * Y2 - 0.414 * Z2; + const g2 = -1.022 * X2 + 1.978 * Y2 + 0.044 * Z2; + const b3 = 0.061 * X2 - 0.224 * Y2 + 1.163 * Z2; + if (type === HalfFloatType) { + img[qi] = DataUtils.toHalfFloat(Math.min(r, 65504)); + img[qi + 1] = DataUtils.toHalfFloat(Math.min(g2, 65504)); + img[qi + 2] = DataUtils.toHalfFloat(Math.min(b3, 65504)); + img[qi + 3] = DataUtils.toHalfFloat(1); + } else { + img[qi] = r; + img[qi + 1] = g2; + img[qi + 2] = b3; + img[qi + 3] = 1; + } + } + } + } else { + throw new Error("THREE.LogLuvLoader: Unsupported Photometric interpretation: " + intp); + } + return img; +}; +UTIF._binBE = { + nextZero: function(data2, o) { + while (data2[o] != 0) o++; + return o; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + readShort: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 1]; + a2[1] = buff[p2 + 0]; + return UTIF._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF._binBE.ui32[0]; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + readFloat: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + 3 - i]; + return UTIF._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + 7 - i]; + return UTIF._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF._binBE.ui8; + UTIF._binBE.i32[0] = n2; + buff[p2 + 3] = a2[0]; + buff[p2 + 2] = a2[1]; + buff[p2 + 1] = a2[2]; + buff[p2 + 0] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 >> 0 & 255; + }, + writeASCII: function(buff, p2, s) { + for (var i = 0; i < s.length; i++) buff[p2 + i] = s.charCodeAt(i); + }, + writeDouble: function(buff, p2, n2) { + UTIF._binBE.fl64[0] = n2; + for (var i = 0; i < 8; i++) buff[p2 + i] = UTIF._binBE.ui8[7 - i]; + } +}; +UTIF._binBE.ui8 = new Uint8Array(8); +UTIF._binBE.i16 = new Int16Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.i32 = new Int32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.ui32 = new Uint32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer); +UTIF._binLE = { + nextZero: UTIF._binBE.nextZero, + readUshort: function(buff, p2) { + return buff[p2 + 1] << 8 | buff[p2]; + }, + readShort: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + return UTIF._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF._binBE.ui32[0]; + }, + readASCII: UTIF._binBE.readASCII, + readFloat: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + i]; + return UTIF._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + i]; + return UTIF._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 & 255; + buff[p2 + 1] = n2 >> 8 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF._binBE.ui8; + UTIF._binBE.i32[0] = n2; + buff[p2 + 0] = a2[0]; + buff[p2 + 1] = a2[1]; + buff[p2 + 2] = a2[2]; + buff[p2 + 3] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >>> 0 & 255; + buff[p2 + 1] = n2 >>> 8 & 255; + buff[p2 + 2] = n2 >>> 16 & 255; + buff[p2 + 3] = n2 >>> 24 & 255; + }, + writeASCII: UTIF._binBE.writeASCII +}; +UTIF._copyTile = function(tb, tw, th, b3, w, h, xoff, yoff) { + var xlim = Math.min(tw, w - xoff); + var ylim = Math.min(th, h - yoff); + for (var y2 = 0; y2 < ylim; y2++) { + var tof = (yoff + y2) * w + xoff; + var sof = y2 * tw; + for (var x2 = 0; x2 < xlim; x2++) b3[tof + x2] = tb[sof + x2]; + } +}; + +// node_modules/three/examples/jsm/libs/lottie_canvas.module.js +var lottie = {}; +if (typeof document !== "undefined") { + function createTag(type) { + return document.createElement(type); + } + function extendPrototype(sources, destination) { + var i; + var len = sources.length; + var sourcePrototype; + for (i = 0; i < len; i += 1) { + sourcePrototype = sources[i].prototype; + for (var attr in sourcePrototype) { + if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; + } + } + } + function getDescriptor(object, prop) { + return Object.getOwnPropertyDescriptor(object, prop); + } + function createProxyFunction(prototype) { + function ProxyFunction() { + } + ProxyFunction.prototype = prototype; + return ProxyFunction; + } + function createSizedArray(len) { + return Array.apply(null, { length: len }); + } + function ProjectInterface$1() { + return {}; + } + function roundValues(flag) { + _shouldRoundValues = !!flag; + } + function bmRnd(value2) { + if (_shouldRoundValues) { + return Math.round(value2); + } + return value2; + } + function styleDiv(element) { + element.style.position = "absolute"; + element.style.top = 0; + element.style.left = 0; + element.style.display = "block"; + element.style.transformOrigin = "0 0"; + element.style.webkitTransformOrigin = "0 0"; + element.style.backfaceVisibility = "visible"; + element.style.webkitBackfaceVisibility = "visible"; + element.style.transformStyle = "preserve-3d"; + element.style.webkitTransformStyle = "preserve-3d"; + element.style.mozTransformStyle = "preserve-3d"; + } + function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { + this.type = type; + this.currentTime = currentTime; + this.totalTime = totalTime; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMCompleteEvent(type, frameMultiplier) { + this.type = type; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { + this.type = type; + this.currentLoop = currentLoop; + this.totalLoops = totalLoops; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMSegmentStartEvent(type, firstFrame, totalFrames) { + this.type = type; + this.firstFrame = firstFrame; + this.totalFrames = totalFrames; + } + function BMDestroyEvent(type, target) { + this.type = type; + this.target = target; + } + function BMRenderFrameErrorEvent(nativeError, currentTime) { + this.type = "renderFrameError"; + this.nativeError = nativeError; + this.currentTime = currentTime; + } + function BMConfigErrorEvent(nativeError) { + this.type = "configError"; + this.nativeError = nativeError; + } + function BMAnimationConfigErrorEvent(type, nativeError) { + this.type = type; + this.nativeError = nativeError; + } + function HSVtoRGB(h, s, v) { + var r; + var g2; + var b3; + var i; + var f; + var p2; + var q2; + var t3; + i = Math.floor(h * 6); + f = h * 6 - i; + p2 = v * (1 - s); + q2 = v * (1 - f * s); + t3 = v * (1 - (1 - f) * s); + switch (i % 6) { + case 0: + r = v; + g2 = t3; + b3 = p2; + break; + case 1: + r = q2; + g2 = v; + b3 = p2; + break; + case 2: + r = p2; + g2 = v; + b3 = t3; + break; + case 3: + r = p2; + g2 = q2; + b3 = v; + break; + case 4: + r = t3; + g2 = p2; + b3 = v; + break; + case 5: + r = v; + g2 = p2; + b3 = q2; + break; + default: + break; + } + return [ + r, + g2, + b3 + ]; + } + function RGBtoHSV(r, g2, b3) { + var max2 = Math.max(r, g2, b3); + var min = Math.min(r, g2, b3); + var d = max2 - min; + var h; + var s = max2 === 0 ? 0 : d / max2; + var v = max2 / 255; + switch (max2) { + case min: + h = 0; + break; + case r: + h = g2 - b3 + d * (g2 < b3 ? 6 : 0); + h /= 6 * d; + break; + case g2: + h = b3 - r + d * 2; + h /= 6 * d; + break; + case b3: + h = r - g2 + d * 4; + h /= 6 * d; + break; + default: + break; + } + return [ + h, + s, + v + ]; + } + function addSaturationToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[1] += offset; + if (hsv[1] > 1) { + hsv[1] = 1; + } else if (hsv[1] <= 0) { + hsv[1] = 0; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function addBrightnessToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[2] += offset; + if (hsv[2] > 1) { + hsv[2] = 1; + } else if (hsv[2] < 0) { + hsv[2] = 0; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function addHueToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[0] += offset / 360; + if (hsv[0] > 1) { + hsv[0] -= 1; + } else if (hsv[0] < 0) { + hsv[0] += 1; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function createNS(type) { + return document.createElementNS(svgNS, type); + } + function BaseEvent() { + } + function getRenderer(key2) { + return renderers[key2]; + } + function bezFunction() { + var math = Math; + function pointOnLine2D(x1, y1, x2, y2, x3, y3) { + var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; + return det1 > -1e-3 && det1 < 1e-3; + } + function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { + if (z1 === 0 && z2 === 0 && z3 === 0) { + return pointOnLine2D(x1, y1, x2, y2, x3, y3); + } + var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); + var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); + var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); + var diffDist; + if (dist1 > dist2) { + if (dist1 > dist3) { + diffDist = dist1 - dist2 - dist3; + } else { + diffDist = dist3 - dist2 - dist1; + } + } else if (dist3 > dist2) { + diffDist = dist3 - dist2 - dist1; + } else { + diffDist = dist2 - dist1 - dist3; + } + return diffDist > -1e-4 && diffDist < 1e-4; + } + var getBezierLength = /* @__PURE__ */ function() { + return function(pt1, pt2, pt3, pt4) { + var curveSegments = getDefaultCurveSegments(); + var k2; + var i; + var len; + var ptCoord; + var perc; + var addedLength = 0; + var ptDistance; + var point = []; + var lastPoint = []; + var lengthData = bezierLengthPool.newElement(); + len = pt3.length; + for (k2 = 0; k2 < curveSegments; k2 += 1) { + perc = k2 / (curveSegments - 1); + ptDistance = 0; + for (i = 0; i < len; i += 1) { + ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i]; + point[i] = ptCoord; + if (lastPoint[i] !== null) { + ptDistance += bmPow(point[i] - lastPoint[i], 2); + } + lastPoint[i] = point[i]; + } + if (ptDistance) { + ptDistance = bmSqrt(ptDistance); + addedLength += ptDistance; + } + lengthData.percents[k2] = perc; + lengthData.lengths[k2] = addedLength; + } + lengthData.addedLength = addedLength; + return lengthData; + }; + }(); + function getSegmentsLength(shapeData) { + var segmentsLength = segmentsLengthPool.newElement(); + var closed = shapeData.c; + var pathV = shapeData.v; + var pathO = shapeData.o; + var pathI = shapeData.i; + var i; + var len = shapeData._length; + var lengths2 = segmentsLength.lengths; + var totalLength = 0; + for (i = 0; i < len - 1; i += 1) { + lengths2[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); + totalLength += lengths2[i].addedLength; + } + if (closed && len) { + lengths2[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); + totalLength += lengths2[i].addedLength; + } + segmentsLength.totalLength = totalLength; + return segmentsLength; + } + function BezierData(length2) { + this.segmentLength = 0; + this.points = new Array(length2); + } + function PointData(partial2, point) { + this.partialLength = partial2; + this.point = point; + } + var buildBezierData = /* @__PURE__ */ function() { + var storedData = {}; + return function(pt1, pt2, pt3, pt4) { + var bezierName = (pt1[0] + "_" + pt1[1] + "_" + pt2[0] + "_" + pt2[1] + "_" + pt3[0] + "_" + pt3[1] + "_" + pt4[0] + "_" + pt4[1]).replace(/\./g, "p"); + if (!storedData[bezierName]) { + var curveSegments = getDefaultCurveSegments(); + var k2; + var i; + var len; + var ptCoord; + var perc; + var addedLength = 0; + var ptDistance; + var point; + var lastPoint = null; + if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) { + curveSegments = 2; + } + var bezierData = new BezierData(curveSegments); + len = pt3.length; + for (k2 = 0; k2 < curveSegments; k2 += 1) { + point = createSizedArray(len); + perc = k2 / (curveSegments - 1); + ptDistance = 0; + for (i = 0; i < len; i += 1) { + ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i]; + point[i] = ptCoord; + if (lastPoint !== null) { + ptDistance += bmPow(point[i] - lastPoint[i], 2); + } + } + ptDistance = bmSqrt(ptDistance); + addedLength += ptDistance; + bezierData.points[k2] = new PointData(ptDistance, point); + lastPoint = point; + } + bezierData.segmentLength = addedLength; + storedData[bezierName] = bezierData; + } + return storedData[bezierName]; + }; + }(); + function getDistancePerc(perc, bezierData) { + var percents = bezierData.percents; + var lengths2 = bezierData.lengths; + var len = percents.length; + var initPos = bmFloor((len - 1) * perc); + var lengthPos = perc * bezierData.addedLength; + var lPerc = 0; + if (initPos === len - 1 || initPos === 0 || lengthPos === lengths2[initPos]) { + return percents[initPos]; + } + var dir = lengths2[initPos] > lengthPos ? -1 : 1; + var flag = true; + while (flag) { + if (lengths2[initPos] <= lengthPos && lengths2[initPos + 1] > lengthPos) { + lPerc = (lengthPos - lengths2[initPos]) / (lengths2[initPos + 1] - lengths2[initPos]); + flag = false; + } else { + initPos += dir; + } + if (initPos < 0 || initPos >= len - 1) { + if (initPos === len - 1) { + return percents[initPos]; + } + flag = false; + } + } + return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; + } + function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { + var t1 = getDistancePerc(percent, bezierData); + var u1 = 1 - t1; + var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1e3) / 1e3; + var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1e3) / 1e3; + return [ptX, ptY]; + } + var bezierSegmentPoints = createTypedArray("float32", 8); + function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { + if (startPerc < 0) { + startPerc = 0; + } else if (startPerc > 1) { + startPerc = 1; + } + var t0 = getDistancePerc(startPerc, bezierData); + endPerc = endPerc > 1 ? 1 : endPerc; + var t1 = getDistancePerc(endPerc, bezierData); + var i; + var len = pt1.length; + var u0 = 1 - t0; + var u1 = 1 - t1; + var u0u0u0 = u0 * u0 * u0; + var t0u0u0_3 = t0 * u0 * u0 * 3; + var t0t0u0_3 = t0 * t0 * u0 * 3; + var t0t0t0 = t0 * t0 * t0; + var u0u0u1 = u0 * u0 * u1; + var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; + var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; + var t0t0t1 = t0 * t0 * t1; + var u0u1u1 = u0 * u1 * u1; + var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; + var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; + var t0t1t1 = t0 * t1 * t1; + var u1u1u1 = u1 * u1 * u1; + var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; + var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; + var t1t1t1 = t1 * t1 * t1; + for (i = 0; i < len; i += 1) { + bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1e3) / 1e3; + } + return bezierSegmentPoints; + } + return { + getSegmentsLength, + getNewSegment, + getPointInSegment, + buildBezierData, + pointOnLine2D, + pointOnLine3D + }; + } + function DynamicPropertyContainer() { + } + function ShapePath() { + this.c = false; + this._length = 0; + this._maxLength = 8; + this.v = createSizedArray(this._maxLength); + this.o = createSizedArray(this._maxLength); + this.i = createSizedArray(this._maxLength); + } + function ShapeCollection() { + this._length = 0; + this._maxLength = 4; + this.shapes = createSizedArray(this._maxLength); + } + function setLocation(href) { + setLocationHref(href); + } + function searchAnimations() { + if (standalone === true) { + animationManager.searchAnimations(animationData, standalone, renderer); + } else { + animationManager.searchAnimations(); + } + } + function setSubframeRendering(flag) { + setSubframeEnabled(flag); + } + function setPrefix(prefix) { + setIdPrefix(prefix); + } + function loadAnimation(params) { + if (standalone === true) { + params.animationData = JSON.parse(animationData); + } + return animationManager.loadAnimation(params); + } + function setQuality(value2) { + if (typeof value2 === "string") { + switch (value2) { + case "high": + setDefaultCurveSegments(200); + break; + default: + case "medium": + setDefaultCurveSegments(50); + break; + case "low": + setDefaultCurveSegments(10); + break; + } + } else if (!isNaN(value2) && value2 > 1) { + setDefaultCurveSegments(value2); + } + if (getDefaultCurveSegments() >= 50) { + roundValues(false); + } else { + roundValues(true); + } + } + function inBrowser() { + return typeof navigator !== "undefined"; + } + function installPlugin(type, plugin) { + if (type === "expressions") { + setExpressionsPlugin(plugin); + } + } + function getFactory(name2) { + switch (name2) { + case "propertyFactory": + return PropertyFactory; + case "shapePropertyFactory": + return ShapePropertyFactory; + case "matrix": + return Matrix; + default: + return null; + } + } + function checkReady() { + if (document.readyState === "complete") { + clearInterval(readyStateCheckInterval); + searchAnimations(); + } + } + function getQueryVariable(variable) { + var vars = queryString.split("&"); + for (var i = 0; i < vars.length; i += 1) { + var pair = vars[i].split("="); + if (decodeURIComponent(pair[0]) == variable) { + return decodeURIComponent(pair[1]); + } + } + return null; + } + function ShapeModifier() { + } + function TrimModifier() { + } + function PuckerAndBloatModifier() { + } + function RepeaterModifier() { + } + function RoundCornersModifier() { + } + function getFontProperties(fontData) { + var styles = fontData.fStyle ? fontData.fStyle.split(" ") : []; + var fWeight = "normal"; + var fStyle = "normal"; + var len = styles.length; + var styleName; + for (var i = 0; i < len; i += 1) { + styleName = styles[i].toLowerCase(); + switch (styleName) { + case "italic": + fStyle = "italic"; + break; + case "bold": + fWeight = "700"; + break; + case "black": + fWeight = "900"; + break; + case "medium": + fWeight = "500"; + break; + case "regular": + case "normal": + fWeight = "400"; + break; + case "light": + case "thin": + fWeight = "200"; + break; + default: + break; + } + } + return { + style: fStyle, + weight: fontData.fWeight || fWeight + }; + } + function RenderableElement() { + } + function SliderEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function AngleEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function ColorEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 1, 0, container); + } + function PointEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 1, 0, container); + } + function LayerIndexEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function MaskIndexEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function CheckboxEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function NoValueEffect() { + this.p = {}; + } + function EffectsManager(data2, element) { + var effects = data2.ef || []; + this.effectElements = []; + var i; + var len = effects.length; + var effectItem; + for (i = 0; i < len; i += 1) { + effectItem = new GroupEffect(effects[i], element); + this.effectElements.push(effectItem); + } + } + function GroupEffect(data2, element) { + this.init(data2, element); + } + function BaseElement() { + } + function FrameElement() { + } + function FootageElement(data2, globalData2, comp2) { + this.initFrame(); + this.initRenderable(); + this.assetData = globalData2.getAssetData(data2.refId); + this.footageData = globalData2.imageLoader.getAsset(this.assetData); + this.initBaseData(data2, globalData2, comp2); + } + function AudioElement(data2, globalData2, comp2) { + this.initFrame(); + this.initRenderable(); + this.assetData = globalData2.getAssetData(data2.refId); + this.initBaseData(data2, globalData2, comp2); + this._isPlaying = false; + this._canPlay = false; + var assetPath = this.globalData.getAssetsPath(this.assetData); + this.audio = this.globalData.audioController.createAudio(assetPath); + this._currentTime = 0; + this.globalData.audioController.addAudio(this); + this._volumeMultiplier = 1; + this._volume = 1; + this._previousVolume = null; + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + this.lv = PropertyFactory.getProp(this, data2.au && data2.au.lv ? data2.au.lv : { k: [100] }, 1, 0.01, this); + } + function BaseRenderer() { + } + function TransformElement() { + } + function MaskElement(data2, element, globalData2) { + this.data = data2; + this.element = element; + this.globalData = globalData2; + this.storedData = []; + this.masksProperties = this.data.masksProperties || []; + this.maskElement = null; + var defs = this.globalData.defs; + var i; + var len = this.masksProperties ? this.masksProperties.length : 0; + this.viewData = createSizedArray(len); + this.solidPath = ""; + var path; + var properties = this.masksProperties; + var count = 0; + var currentMasks = []; + var j; + var jLen; + var layerId = createElementID(); + var rect; + var expansor; + var feMorph; + var x2; + var maskType = "clipPath"; + var maskRef = "clip-path"; + for (i = 0; i < len; i += 1) { + if (properties[i].mode !== "a" && properties[i].mode !== "n" || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { + maskType = "mask"; + maskRef = "mask"; + } + if ((properties[i].mode === "s" || properties[i].mode === "i") && count === 0) { + rect = createNS("rect"); + rect.setAttribute("fill", "#ffffff"); + rect.setAttribute("width", this.element.comp.data.w || 0); + rect.setAttribute("height", this.element.comp.data.h || 0); + currentMasks.push(rect); + } else { + rect = null; + } + path = createNS("path"); + if (properties[i].mode === "n") { + this.viewData[i] = { + op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), + elem: path, + lastPath: "" + }; + defs.appendChild(path); + } else { + count += 1; + path.setAttribute("fill", properties[i].mode === "s" ? "#000000" : "#ffffff"); + path.setAttribute("clip-rule", "nonzero"); + var filterID; + if (properties[i].x.k !== 0) { + maskType = "mask"; + maskRef = "mask"; + x2 = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); + filterID = createElementID(); + expansor = createNS("filter"); + expansor.setAttribute("id", filterID); + feMorph = createNS("feMorphology"); + feMorph.setAttribute("operator", "erode"); + feMorph.setAttribute("in", "SourceGraphic"); + feMorph.setAttribute("radius", "0"); + expansor.appendChild(feMorph); + defs.appendChild(expansor); + path.setAttribute("stroke", properties[i].mode === "s" ? "#000000" : "#ffffff"); + } else { + feMorph = null; + x2 = null; + } + this.storedData[i] = { + elem: path, + x: x2, + expan: feMorph, + lastPath: "", + lastOperator: "", + filterId: filterID, + lastRadius: 0 + }; + if (properties[i].mode === "i") { + jLen = currentMasks.length; + var g2 = createNS("g"); + for (j = 0; j < jLen; j += 1) { + g2.appendChild(currentMasks[j]); + } + var mask2 = createNS("mask"); + mask2.setAttribute("mask-type", "alpha"); + mask2.setAttribute("id", layerId + "_" + count); + mask2.appendChild(path); + defs.appendChild(mask2); + g2.setAttribute("mask", "url(" + getLocationHref() + "#" + layerId + "_" + count + ")"); + currentMasks.length = 0; + currentMasks.push(g2); + } else { + currentMasks.push(path); + } + if (properties[i].inv && !this.solidPath) { + this.solidPath = this.createLayerSolidPath(); + } + this.viewData[i] = { + elem: path, + lastPath: "", + op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), + invRect: rect + }; + if (!this.viewData[i].prop.k) { + this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); + } + } + } + this.maskElement = createNS(maskType); + len = currentMasks.length; + for (i = 0; i < len; i += 1) { + this.maskElement.appendChild(currentMasks[i]); + } + if (count > 0) { + this.maskElement.setAttribute("id", layerId); + this.element.maskedElement.setAttribute(maskRef, "url(" + getLocationHref() + "#" + layerId + ")"); + defs.appendChild(this.maskElement); + } + if (this.viewData.length) { + this.element.addRenderableComponent(this); + } + } + function SVGEffects(elem2) { + var i; + var source = "SourceGraphic"; + var len = elem2.data.ef ? elem2.data.ef.length : 0; + var filId = createElementID(); + var fil = filtersFactory.createFilter(filId, true); + var count = 0; + this.filters = []; + var filterManager; + for (i = 0; i < len; i += 1) { + filterManager = null; + var type = elem2.data.ef[i].ty; + if (registeredEffects[type]) { + var Effect = registeredEffects[type].effect; + filterManager = new Effect(fil, elem2.effectsManager.effectElements[i], elem2, idPrefix + count, source); + source = idPrefix + count; + if (registeredEffects[type].countsAsEffect) { + count += 1; + } + } + if (filterManager) { + this.filters.push(filterManager); + } + } + if (count) { + elem2.globalData.defs.appendChild(fil); + elem2.layerElement.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + } + if (this.filters.length) { + elem2.addRenderableComponent(this); + } + } + function registerEffect(id, effect2, countsAsEffect) { + registeredEffects[id] = { + effect: effect2, + countsAsEffect + }; + } + function SVGBaseElement() { + } + function HierarchyElement() { + } + function RenderableDOMElement() { + } + function IImageElement(data2, globalData2, comp2) { + this.assetData = globalData2.getAssetData(data2.refId); + this.initElement(data2, globalData2, comp2); + this.sourceRect = { + top: 0, + left: 0, + width: this.assetData.w, + height: this.assetData.h + }; + } + function ProcessedElement(element, position2) { + this.elem = element; + this.pos = position2; + } + function IShapeElement() { + } + function SVGShapeData(transformers, level, shape) { + this.caches = []; + this.styles = []; + this.transformers = transformers; + this.lStr = ""; + this.sh = shape; + this.lvl = level; + this._isAnimated = !!shape.k; + var i = 0; + var len = transformers.length; + while (i < len) { + if (transformers[i].mProps.dynamicProperties.length) { + this._isAnimated = true; + break; + } + i += 1; + } + } + function SVGStyleData(data2, level) { + this.data = data2; + this.type = data2.ty; + this.d = ""; + this.lvl = level; + this._mdf = false; + this.closed = data2.hd === true; + this.pElem = createNS("path"); + this.msElem = null; + } + function DashProperty(elem2, data2, renderer2, container) { + this.elem = elem2; + this.frameId = -1; + this.dataProps = createSizedArray(data2.length); + this.renderer = renderer2; + this.k = false; + this.dashStr = ""; + this.dashArray = createTypedArray("float32", data2.length ? data2.length - 1 : 0); + this.dashoffset = createTypedArray("float32", 1); + this.initDynamicPropertyContainer(container); + var i; + var len = data2.length || 0; + var prop; + for (i = 0; i < len; i += 1) { + prop = PropertyFactory.getProp(elem2, data2[i].v, 0, 0, this); + this.k = prop.k || this.k; + this.dataProps[i] = { n: data2[i].n, p: prop }; + } + if (!this.k) { + this.getValue(true); + } + this._isAnimated = this.k; + } + function SVGStrokeStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.w = PropertyFactory.getProp(elem2, data2.w, 0, null, this); + this.d = new DashProperty(elem2, data2.d || {}, "svg", this); + this.c = PropertyFactory.getProp(elem2, data2.c, 1, 255, this); + this.style = styleOb; + this._isAnimated = !!this._isAnimated; + } + function SVGFillStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.c = PropertyFactory.getProp(elem2, data2.c, 1, 255, this); + this.style = styleOb; + } + function SVGNoStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.style = styleOb; + } + function GradientProperty(elem2, data2, container) { + this.data = data2; + this.c = createTypedArray("uint8c", data2.p * 4); + var cLength = data2.k.k[0].s ? data2.k.k[0].s.length - data2.p * 4 : data2.k.k.length - data2.p * 4; + this.o = createTypedArray("float32", cLength); + this._cmdf = false; + this._omdf = false; + this._collapsable = this.checkCollapsable(); + this._hasOpacity = cLength; + this.initDynamicPropertyContainer(container); + this.prop = PropertyFactory.getProp(elem2, data2.k, 1, null, this); + this.k = this.prop.k; + this.getValue(true); + } + function SVGGradientFillStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.initGradientData(elem2, data2, styleOb); + } + function SVGGradientStrokeStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.w = PropertyFactory.getProp(elem2, data2.w, 0, null, this); + this.d = new DashProperty(elem2, data2.d || {}, "svg", this); + this.initGradientData(elem2, data2, styleOb); + this._isAnimated = !!this._isAnimated; + } + function ShapeGroupData() { + this.it = []; + this.prevViewData = []; + this.gr = createNS("g"); + } + function SVGTransformData(mProps, op, container) { + this.transform = { + mProps, + op, + container + }; + this.elements = []; + this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; + } + function SVGShapeElement(data2, globalData2, comp2) { + this.shapes = []; + this.shapesData = data2.shapes; + this.stylesList = []; + this.shapeModifiers = []; + this.itemsData = []; + this.processedElements = []; + this.animatedContents = []; + this.initElement(data2, globalData2, comp2); + this.prevViewData = []; + } + function LetterProps(o, sw, sc, fc, m, p2) { + this.o = o; + this.sw = sw; + this.sc = sc; + this.fc = fc; + this.m = m; + this.p = p2; + this._mdf = { + o: true, + sw: !!sw, + sc: !!sc, + fc: !!fc, + m: true, + p: true + }; + } + function TextProperty(elem2, data2) { + this._frameId = initialDefaultFrame; + this.pv = ""; + this.v = ""; + this.kf = false; + this._isFirstFrame = true; + this._mdf = false; + this.data = data2; + this.elem = elem2; + this.comp = this.elem.comp; + this.keysIndex = 0; + this.canResize = false; + this.minimumFontSize = 1; + this.effectsSequence = []; + this.currentData = { + ascent: 0, + boxWidth: this.defaultBoxWidth, + f: "", + fStyle: "", + fWeight: "", + fc: "", + j: "", + justifyOffset: "", + l: [], + lh: 0, + lineWidths: [], + ls: "", + of: "", + s: "", + sc: "", + sw: 0, + t: 0, + tr: 0, + sz: 0, + ps: null, + fillColorAnim: false, + strokeColorAnim: false, + strokeWidthAnim: false, + yOffset: 0, + finalSize: 0, + finalText: [], + finalLineHeight: 0, + __complete: false + }; + this.copyData(this.currentData, this.data.d.k[0].s); + if (!this.searchProperty()) { + this.completeTextData(this.currentData); + } + } + function TextAnimatorDataProperty(elem2, animatorProps, container) { + var defaultData = { propType: false }; + var getProp = PropertyFactory.getProp; + var textAnimatorAnimatables = animatorProps.a; + this.a = { + r: textAnimatorAnimatables.r ? getProp(elem2, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, + rx: textAnimatorAnimatables.rx ? getProp(elem2, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, + ry: textAnimatorAnimatables.ry ? getProp(elem2, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, + sk: textAnimatorAnimatables.sk ? getProp(elem2, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, + sa: textAnimatorAnimatables.sa ? getProp(elem2, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, + s: textAnimatorAnimatables.s ? getProp(elem2, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData, + a: textAnimatorAnimatables.a ? getProp(elem2, textAnimatorAnimatables.a, 1, 0, container) : defaultData, + o: textAnimatorAnimatables.o ? getProp(elem2, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData, + p: textAnimatorAnimatables.p ? getProp(elem2, textAnimatorAnimatables.p, 1, 0, container) : defaultData, + sw: textAnimatorAnimatables.sw ? getProp(elem2, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, + sc: textAnimatorAnimatables.sc ? getProp(elem2, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, + fc: textAnimatorAnimatables.fc ? getProp(elem2, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, + fh: textAnimatorAnimatables.fh ? getProp(elem2, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, + fs: textAnimatorAnimatables.fs ? getProp(elem2, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData, + fb: textAnimatorAnimatables.fb ? getProp(elem2, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData, + t: textAnimatorAnimatables.t ? getProp(elem2, textAnimatorAnimatables.t, 0, 0, container) : defaultData + }; + this.s = TextSelectorProp.getTextSelectorProp(elem2, animatorProps.s, container); + this.s.t = animatorProps.s.t; + } + function TextAnimatorProperty(textData, renderType, elem2) { + this._isFirstFrame = true; + this._hasMaskedPath = false; + this._frameId = -1; + this._textData = textData; + this._renderType = renderType; + this._elem = elem2; + this._animatorsData = createSizedArray(this._textData.a.length); + this._pathData = {}; + this._moreOptions = { + alignment: {} + }; + this.renderedLetters = []; + this.lettersChangedFlag = false; + this.initDynamicPropertyContainer(elem2); + } + function ITextElement() { + } + function SVGTextLottieElement(data2, globalData2, comp2) { + this.textSpans = []; + this.renderType = "svg"; + this.initElement(data2, globalData2, comp2); + } + function ISolidElement(data2, globalData2, comp2) { + this.initElement(data2, globalData2, comp2); + } + function NullElement(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initFrame(); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + } + function SVGRendererBase() { + } + function ICompElement() { + } + function SVGCompElement(data2, globalData2, comp2) { + this.layers = data2.layers; + this.supports3d = true; + this.completeLayers = false; + this.pendingElements = []; + this.elements = this.layers ? createSizedArray(this.layers.length) : []; + this.initElement(data2, globalData2, comp2); + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + } + function SVGRenderer(animationItem, config) { + this.animationItem = animationItem; + this.layers = null; + this.renderedFrame = -1; + this.svgElement = createNS("svg"); + var ariaLabel = ""; + if (config && config.title) { + var titleElement = createNS("title"); + var titleId = createElementID(); + titleElement.setAttribute("id", titleId); + titleElement.textContent = config.title; + this.svgElement.appendChild(titleElement); + ariaLabel += titleId; + } + if (config && config.description) { + var descElement = createNS("desc"); + var descId = createElementID(); + descElement.setAttribute("id", descId); + descElement.textContent = config.description; + this.svgElement.appendChild(descElement); + ariaLabel += " " + descId; + } + if (ariaLabel) { + this.svgElement.setAttribute("aria-labelledby", ariaLabel); + } + var defs = createNS("defs"); + this.svgElement.appendChild(defs); + var maskElement = createNS("g"); + this.svgElement.appendChild(maskElement); + this.layerElement = maskElement; + this.renderConfig = { + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + progressiveLoad: config && config.progressiveLoad || false, + hideOnTransparent: !(config && config.hideOnTransparent === false), + viewBoxOnly: config && config.viewBoxOnly || false, + viewBoxSize: config && config.viewBoxSize || false, + className: config && config.className || "", + id: config && config.id || "", + focusable: config && config.focusable, + filterSize: { + width: config && config.filterSize && config.filterSize.width || "100%", + height: config && config.filterSize && config.filterSize.height || "100%", + x: config && config.filterSize && config.filterSize.x || "0%", + y: config && config.filterSize && config.filterSize.y || "0%" + }, + width: config && config.width, + height: config && config.height + }; + this.globalData = { + _mdf: false, + frameNum: -1, + defs, + renderConfig: this.renderConfig + }; + this.elements = []; + this.pendingElements = []; + this.destroyed = false; + this.rendererType = "svg"; + } + function CVContextData() { + this.saved = []; + this.cArrPos = 0; + this.cTr = new Matrix(); + this.cO = 1; + var i; + var len = 15; + this.savedOp = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + this.saved[i] = createTypedArray("float32", 16); + } + this._length = len; + } + function ShapeTransformManager() { + this.sequences = {}; + this.sequenceList = []; + this.transform_key_count = 0; + } + function CVEffects() { + } + function CVMaskElement(data2, element) { + this.data = data2; + this.element = element; + this.masksProperties = this.data.masksProperties || []; + this.viewData = createSizedArray(this.masksProperties.length); + var i; + var len = this.masksProperties.length; + var hasMasks = false; + for (i = 0; i < len; i += 1) { + if (this.masksProperties[i].mode !== "n") { + hasMasks = true; + } + this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); + } + this.hasMasks = hasMasks; + if (hasMasks) { + this.element.addRenderableComponent(this); + } + } + function CVBaseElement() { + } + function CVShapeData(element, data2, styles, transformsManager) { + this.styledShapes = []; + this.tr = [0, 0, 0, 0, 0, 0]; + var ty = 4; + if (data2.ty === "rc") { + ty = 5; + } else if (data2.ty === "el") { + ty = 6; + } else if (data2.ty === "sr") { + ty = 7; + } + this.sh = ShapePropertyFactory.getShapeProp(element, data2, ty, element); + var i; + var len = styles.length; + var styledShape; + for (i = 0; i < len; i += 1) { + if (!styles[i].closed) { + styledShape = { + transforms: transformsManager.addTransformSequence(styles[i].transforms), + trNodes: [] + }; + this.styledShapes.push(styledShape); + styles[i].elements.push(styledShape); + } + } + } + function CVShapeElement(data2, globalData2, comp2) { + this.shapes = []; + this.shapesData = data2.shapes; + this.stylesList = []; + this.itemsData = []; + this.prevViewData = []; + this.shapeModifiers = []; + this.processedElements = []; + this.transformsManager = new ShapeTransformManager(); + this.initElement(data2, globalData2, comp2); + } + function CVTextElement(data2, globalData2, comp2) { + this.textSpans = []; + this.yOffset = 0; + this.fillColorAnim = false; + this.strokeColorAnim = false; + this.strokeWidthAnim = false; + this.stroke = false; + this.fill = false; + this.justifyOffset = 0; + this.currentRender = null; + this.renderType = "canvas"; + this.values = { + fill: "rgba(0,0,0,0)", + stroke: "rgba(0,0,0,0)", + sWidth: 0, + fValue: "" + }; + this.initElement(data2, globalData2, comp2); + } + function CVImageElement(data2, globalData2, comp2) { + this.assetData = globalData2.getAssetData(data2.refId); + this.img = globalData2.imageLoader.getAsset(this.assetData); + this.initElement(data2, globalData2, comp2); + } + function CVSolidElement(data2, globalData2, comp2) { + this.initElement(data2, globalData2, comp2); + } + function CanvasRendererBase(animationItem, config) { + this.animationItem = animationItem; + this.renderConfig = { + clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, + context: config && config.context || null, + progressiveLoad: config && config.progressiveLoad || false, + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + className: config && config.className || "", + id: config && config.id || "" + }; + this.renderConfig.dpr = config && config.dpr || 1; + if (this.animationItem.wrapper) { + this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; + } + this.renderedFrame = -1; + this.globalData = { + frameNum: -1, + _mdf: false, + renderConfig: this.renderConfig, + currentGlobalAlpha: -1 + }; + this.contextData = new CVContextData(); + this.elements = []; + this.pendingElements = []; + this.transformMat = new Matrix(); + this.completeLayers = false; + this.rendererType = "canvas"; + } + function CVCompElement(data2, globalData2, comp2) { + this.completeLayers = false; + this.layers = data2.layers; + this.pendingElements = []; + this.elements = createSizedArray(this.layers.length); + this.initElement(data2, globalData2, comp2); + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + } + function CanvasRenderer(animationItem, config) { + this.animationItem = animationItem; + this.renderConfig = { + clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, + context: config && config.context || null, + progressiveLoad: config && config.progressiveLoad || false, + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + className: config && config.className || "", + id: config && config.id || "" + }; + this.renderConfig.dpr = config && config.dpr || 1; + if (this.animationItem.wrapper) { + this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; + } + this.renderedFrame = -1; + this.globalData = { + frameNum: -1, + _mdf: false, + renderConfig: this.renderConfig, + currentGlobalAlpha: -1 + }; + this.contextData = new CVContextData(); + this.elements = []; + this.pendingElements = []; + this.transformMat = new Matrix(); + this.completeLayers = false; + this.rendererType = "canvas"; + } + function seedRandom(pool, math) { + var global = this, width2 = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width2, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask2 = width2 - 1, nodecrypto; + function seedrandom(seed, options, callback) { + var key2 = []; + options = options === true ? { entropy: true } : options || {}; + var shortseed = mixkey(flatten2( + options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, + 3 + ), key2); + var arc4 = new ARC4(key2); + var prng = function() { + var n2 = arc4.g(chunks), d = startdenom, x2 = 0; + while (n2 < significance) { + n2 = (n2 + x2) * width2; + d *= width2; + x2 = arc4.g(1); + } + while (n2 >= overflow) { + n2 /= 2; + d /= 2; + x2 >>>= 1; + } + return (n2 + x2) / d; + }; + prng.int32 = function() { + return arc4.g(4) | 0; + }; + prng.quick = function() { + return arc4.g(4) / 4294967296; + }; + prng.double = prng; + mixkey(tostring(arc4.S), pool); + return (options.pass || callback || function(prng2, seed2, is_math_call, state) { + if (state) { + if (state.S) { + copy(state, arc4); + } + prng2.state = function() { + return copy(arc4, {}); + }; + } + if (is_math_call) { + math[rngname] = prng2; + return seed2; + } else return prng2; + })( + prng, + shortseed, + "global" in options ? options.global : this == math, + options.state + ); + } + math["seed" + rngname] = seedrandom; + function ARC4(key2) { + var t3, keylen = key2.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; + if (!keylen) { + key2 = [keylen++]; + } + while (i < width2) { + s[i] = i++; + } + for (i = 0; i < width2; i++) { + s[i] = s[j = mask2 & j + key2[i % keylen] + (t3 = s[i])]; + s[j] = t3; + } + me.g = function(count) { + var t4, r = 0, i2 = me.i, j2 = me.j, s2 = me.S; + while (count--) { + t4 = s2[i2 = mask2 & i2 + 1]; + r = r * width2 + s2[mask2 & (s2[i2] = s2[j2 = mask2 & j2 + t4]) + (s2[j2] = t4)]; + } + me.i = i2; + me.j = j2; + return r; + }; + } + function copy(f, t3) { + t3.i = f.i; + t3.j = f.j; + t3.S = f.S.slice(); + return t3; + } + function flatten2(obj, depth) { + var result = [], typ = typeof obj, prop; + if (depth && typ == "object") { + for (prop in obj) { + try { + result.push(flatten2(obj[prop], depth - 1)); + } catch (e) { + } + } + } + return result.length ? result : typ == "string" ? obj : obj + "\0"; + } + function mixkey(seed, key2) { + var stringseed = seed + "", smear, j = 0; + while (j < stringseed.length) { + key2[mask2 & j] = mask2 & (smear ^= key2[mask2 & j] * 19) + stringseed.charCodeAt(j++); + } + return tostring(key2); + } + function autoseed() { + try { + if (nodecrypto) { + return tostring(nodecrypto.randomBytes(width2)); + } + var out = new Uint8Array(width2); + (global.crypto || global.msCrypto).getRandomValues(out); + return tostring(out); + } catch (e) { + var browser = global.navigator, plugins = browser && browser.plugins; + return [+/* @__PURE__ */ new Date(), global, plugins, global.screen, tostring(pool)]; + } + } + function tostring(a2) { + return String.fromCharCode.apply(0, a2); + } + mixkey(math.random(), pool); + } + function initialize$2(BMMath2) { + seedRandom([], BMMath2); + } + function addPropertyDecorator() { + function loopOut2(type, duration, durationFlag) { + if (!this.k || !this.keyframes) { + return this.pv; + } + type = type ? type.toLowerCase() : ""; + var currentFrame = this.comp.renderedFrame; + var keyframes = this.keyframes; + var lastKeyFrame = keyframes[keyframes.length - 1].t; + if (currentFrame <= lastKeyFrame) { + return this.pv; + } + var cycleDuration; + var firstKeyFrame; + if (!durationFlag) { + if (!duration || duration > keyframes.length - 1) { + duration = keyframes.length - 1; + } + firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; + cycleDuration = lastKeyFrame - firstKeyFrame; + } else { + if (!duration) { + cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); + } else { + cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); + } + firstKeyFrame = lastKeyFrame - cycleDuration; + } + var i; + var len; + var ret; + if (type === "pingpong") { + var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); + if (iterations % 2 !== 0) { + return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + } else if (type === "offset") { + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); + if (this.pv.length) { + ret = new Array(initV.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = (endV[i] - initV[i]) * repeats + current[i]; + } + return ret; + } + return (endV - initV) * repeats + current; + } else if (type === "continue") { + var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var nextLastValue = this.getValueAtTime((lastKeyFrame - 1e-3) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + ret = new Array(lastValue.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 5e-4; + } + return ret; + } + return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 1e-3); + } + return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + function loopIn2(type, duration, durationFlag) { + if (!this.k) { + return this.pv; + } + type = type ? type.toLowerCase() : ""; + var currentFrame = this.comp.renderedFrame; + var keyframes = this.keyframes; + var firstKeyFrame = keyframes[0].t; + if (currentFrame >= firstKeyFrame) { + return this.pv; + } + var cycleDuration; + var lastKeyFrame; + if (!durationFlag) { + if (!duration || duration > keyframes.length - 1) { + duration = keyframes.length - 1; + } + lastKeyFrame = keyframes[duration].t; + cycleDuration = lastKeyFrame - firstKeyFrame; + } else { + if (!duration) { + cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); + } else { + cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); + } + lastKeyFrame = firstKeyFrame + cycleDuration; + } + var i; + var len; + var ret; + if (type === "pingpong") { + var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration); + if (iterations % 2 === 0) { + return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + } else if (type === "offset") { + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; + if (this.pv.length) { + ret = new Array(initV.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = current[i] - (endV[i] - initV[i]) * repeats; + } + return ret; + } + return current - (endV - initV) * repeats; + } else if (type === "continue") { + var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var nextFirstValue = this.getValueAtTime((firstKeyFrame + 1e-3) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + ret = new Array(firstValue.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 1e-3; + } + return ret; + } + return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 1e-3; + } + return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); + } + function smooth2(width2, samples) { + if (!this.k) { + return this.pv; + } + width2 = (width2 || 0.4) * 0.5; + samples = Math.floor(samples || 5); + if (samples <= 1) { + return this.pv; + } + var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; + var initFrame = currentTime - width2; + var endFrame = currentTime + width2; + var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; + var i = 0; + var j = 0; + var value2; + if (this.pv.length) { + value2 = createTypedArray("float32", this.pv.length); + } else { + value2 = 0; + } + var sampleValue; + while (i < samples) { + sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); + if (this.pv.length) { + for (j = 0; j < this.pv.length; j += 1) { + value2[j] += sampleValue[j]; + } + } else { + value2 += sampleValue; + } + i += 1; + } + if (this.pv.length) { + for (j = 0; j < this.pv.length; j += 1) { + value2[j] /= samples; + } + } else { + value2 /= samples; + } + return value2; + } + function getTransformValueAtTime(time2) { + if (!this._transformCachingAtTime) { + this._transformCachingAtTime = { + v: new Matrix() + }; + } + var matrix3 = this._transformCachingAtTime.v; + matrix3.cloneFromProps(this.pre.props); + if (this.appliedTransformations < 1) { + var anchor = this.a.getValueAtTime(time2); + matrix3.translate( + -anchor[0] * this.a.mult, + -anchor[1] * this.a.mult, + anchor[2] * this.a.mult + ); + } + if (this.appliedTransformations < 2) { + var scale2 = this.s.getValueAtTime(time2); + matrix3.scale( + scale2[0] * this.s.mult, + scale2[1] * this.s.mult, + scale2[2] * this.s.mult + ); + } + if (this.sk && this.appliedTransformations < 3) { + var skew = this.sk.getValueAtTime(time2); + var skewAxis = this.sa.getValueAtTime(time2); + matrix3.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); + } + if (this.r && this.appliedTransformations < 4) { + var rotation2 = this.r.getValueAtTime(time2); + matrix3.rotate(-rotation2 * this.r.mult); + } else if (!this.r && this.appliedTransformations < 4) { + var rotationZ = this.rz.getValueAtTime(time2); + var rotationY = this.ry.getValueAtTime(time2); + var rotationX = this.rx.getValueAtTime(time2); + var orientation = this.or.getValueAtTime(time2); + matrix3.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult); + } + if (this.data.p && this.data.p.s) { + var positionX = this.px.getValueAtTime(time2); + var positionY = this.py.getValueAtTime(time2); + if (this.data.p.z) { + var positionZ = this.pz.getValueAtTime(time2); + matrix3.translate( + positionX * this.px.mult, + positionY * this.py.mult, + -positionZ * this.pz.mult + ); + } else { + matrix3.translate(positionX * this.px.mult, positionY * this.py.mult, 0); + } + } else { + var position2 = this.p.getValueAtTime(time2); + matrix3.translate( + position2[0] * this.p.mult, + position2[1] * this.p.mult, + -position2[2] * this.p.mult + ); + } + return matrix3; + } + function getTransformStaticValueAtTime() { + return this.v.clone(new Matrix()); + } + var getTransformProperty = TransformPropertyFactory.getTransformProperty; + TransformPropertyFactory.getTransformProperty = function(elem2, data2, container) { + var prop = getTransformProperty(elem2, data2, container); + if (prop.dynamicProperties.length) { + prop.getValueAtTime = getTransformValueAtTime.bind(prop); + } else { + prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); + } + prop.setGroupProperty = expressionHelpers.setGroupProperty; + return prop; + }; + var propertyGetProp = PropertyFactory.getProp; + PropertyFactory.getProp = function(elem2, data2, type, mult, container) { + var prop = propertyGetProp(elem2, data2, type, mult, container); + if (prop.kf) { + prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); + } else { + prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); + } + prop.setGroupProperty = expressionHelpers.setGroupProperty; + prop.loopOut = loopOut2; + prop.loopIn = loopIn2; + prop.smooth = smooth2; + prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); + prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); + prop.numKeys = data2.a === 1 ? data2.k.length : 0; + prop.propertyIndex = data2.ix; + var value2 = 0; + if (type !== 0) { + value2 = createTypedArray("float32", data2.a === 1 ? data2.k[0].s.length : data2.k.length); + } + prop._cachingAtTime = { + lastFrame: initialDefaultFrame, + lastIndex: 0, + value: value2 + }; + expressionHelpers.searchExpressions(elem2, data2, prop); + if (prop.k) { + container.addDynamicProperty(prop); + } + return prop; + }; + function getShapeValueAtTime(frameNum) { + if (!this._cachingAtTime) { + this._cachingAtTime = { + shapeValue: shapePool.clone(this.pv), + lastIndex: 0, + lastTime: initialDefaultFrame + }; + } + frameNum *= this.elem.globalData.frameRate; + frameNum -= this.offsetTime; + if (frameNum !== this._cachingAtTime.lastTime) { + this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; + this._cachingAtTime.lastTime = frameNum; + this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); + } + return this._cachingAtTime.shapeValue; + } + var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); + var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); + function ShapeExpressions() { + } + ShapeExpressions.prototype = { + vertices: function(prop, time2) { + if (this.k) { + this.getValue(); + } + var shapePath = this.v; + if (time2 !== void 0) { + shapePath = this.getValueAtTime(time2, 0); + } + var i; + var len = shapePath._length; + var vertices = shapePath[prop]; + var points = shapePath.v; + var arr = createSizedArray(len); + for (i = 0; i < len; i += 1) { + if (prop === "i" || prop === "o") { + arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; + } else { + arr[i] = [vertices[i][0], vertices[i][1]]; + } + } + return arr; + }, + points: function(time2) { + return this.vertices("v", time2); + }, + inTangents: function(time2) { + return this.vertices("i", time2); + }, + outTangents: function(time2) { + return this.vertices("o", time2); + }, + isClosed: function() { + return this.v.c; + }, + pointOnPath: function(perc, time2) { + var shapePath = this.v; + if (time2 !== void 0) { + shapePath = this.getValueAtTime(time2, 0); + } + if (!this._segmentsLength) { + this._segmentsLength = bez.getSegmentsLength(shapePath); + } + var segmentsLength = this._segmentsLength; + var lengths2 = segmentsLength.lengths; + var lengthPos = segmentsLength.totalLength * perc; + var i = 0; + var len = lengths2.length; + var accumulatedLength = 0; + var pt; + while (i < len) { + if (accumulatedLength + lengths2[i].addedLength > lengthPos) { + var initIndex = i; + var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; + var segmentPerc = (lengthPos - accumulatedLength) / lengths2[i].addedLength; + pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths2[i]); + break; + } else { + accumulatedLength += lengths2[i].addedLength; + } + i += 1; + } + if (!pt) { + pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; + } + return pt; + }, + vectorOnPath: function(perc, time2, vectorType) { + if (perc == 1) { + perc = this.v.c; + } else if (perc == 0) { + perc = 0.999; + } + var pt1 = this.pointOnPath(perc, time2); + var pt2 = this.pointOnPath(perc + 1e-3, time2); + var xLength = pt2[0] - pt1[0]; + var yLength = pt2[1] - pt1[1]; + var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); + if (magnitude === 0) { + return [0, 0]; + } + var unitVector = vectorType === "tangent" ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; + return unitVector; + }, + tangentOnPath: function(perc, time2) { + return this.vectorOnPath(perc, time2, "tangent"); + }, + normalOnPath: function(perc, time2) { + return this.vectorOnPath(perc, time2, "normal"); + }, + setGroupProperty: expressionHelpers.setGroupProperty, + getValueAtTime: expressionHelpers.getStaticValueAtTime + }; + extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); + extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); + KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; + KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; + var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; + ShapePropertyFactory.getShapeProp = function(elem2, data2, type, arr, trims) { + var prop = propertyGetShapeProp(elem2, data2, type, arr, trims); + prop.propertyIndex = data2.ix; + prop.lock = false; + if (type === 3) { + expressionHelpers.searchExpressions(elem2, data2.pt, prop); + } else if (type === 4) { + expressionHelpers.searchExpressions(elem2, data2.ks, prop); + } + if (prop.k) { + elem2.addDynamicProperty(prop); + } + return prop; + }; + } + function initialize$1() { + addPropertyDecorator(); + } + function addDecorator() { + function searchExpressions() { + if (this.data.d.x) { + this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); + this.addEffect(this.getExpressionValue.bind(this)); + return true; + } + return null; + } + TextProperty.prototype.getExpressionValue = function(currentValue, text2) { + var newValue = this.calculateExpression(text2); + if (currentValue.t !== newValue) { + var newData = {}; + this.copyData(newData, currentValue); + newData.t = newValue.toString(); + newData.__complete = false; + return newData; + } + return currentValue; + }; + TextProperty.prototype.searchProperty = function() { + var isKeyframed = this.searchKeyframes(); + var hasExpressions = this.searchExpressions(); + this.kf = isKeyframed || hasExpressions; + return this.kf; + }; + TextProperty.prototype.searchExpressions = searchExpressions; + } + function initialize() { + addDecorator(); + } + const svgNS = "http://www.w3.org/2000/svg"; + let locationHref = ""; + let _useWebWorker = false; + const initialDefaultFrame = -999999; + const setWebWorker = (flag) => { + _useWebWorker = !!flag; + }; + const getWebWorker = () => _useWebWorker; + const setLocationHref = (value2) => { + locationHref = value2; + }; + const getLocationHref = () => locationHref; + const audioControllerFactory = function() { + function AudioController(audioFactory) { + this.audios = []; + this.audioFactory = audioFactory; + this._volume = 1; + this._isMuted = false; + } + AudioController.prototype = { + addAudio: function(audio) { + this.audios.push(audio); + }, + pause: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].pause(); + } + }, + resume: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].resume(); + } + }, + setRate: function(rateValue) { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].setRate(rateValue); + } + }, + createAudio: function(assetPath) { + if (this.audioFactory) { + return this.audioFactory(assetPath); + } + if (window.Howl) { + return new window.Howl({ + src: [assetPath] + }); + } + return { + isPlaying: false, + play: function() { + this.isPlaying = true; + }, + seek: function() { + this.isPlaying = false; + }, + playing: function() { + }, + rate: function() { + }, + setVolume: function() { + } + }; + }, + setAudioFactory: function(audioFactory) { + this.audioFactory = audioFactory; + }, + setVolume: function(value2) { + this._volume = value2; + this._updateVolume(); + }, + mute: function() { + this._isMuted = true; + this._updateVolume(); + }, + unmute: function() { + this._isMuted = false; + this._updateVolume(); + }, + getVolume: function() { + return this._volume; + }, + _updateVolume: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); + } + } + }; + return function() { + return new AudioController(); + }; + }(); + const createTypedArray = function() { + function createRegularArray(type, len) { + var i = 0; + var arr = []; + var value2; + switch (type) { + case "int16": + case "uint8c": + value2 = 1; + break; + default: + value2 = 1.1; + break; + } + for (i = 0; i < len; i += 1) { + arr.push(value2); + } + return arr; + } + function createTypedArrayFactory(type, len) { + if (type === "float32") { + return new Float32Array(len); + } + if (type === "int16") { + return new Int16Array(len); + } + if (type === "uint8c") { + return new Uint8ClampedArray(len); + } + return createRegularArray(type, len); + } + if (typeof Uint8ClampedArray === "function" && typeof Float32Array === "function") { + return createTypedArrayFactory; + } + return createRegularArray; + }(); + let subframeEnabled = true; + let expressionsPlugin = null; + let idPrefix$1 = ""; + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + let _shouldRoundValues = false; + const bmPow = Math.pow; + const bmSqrt = Math.sqrt; + const bmFloor = Math.floor; + const bmMax = Math.max; + const bmMin = Math.min; + const BMMath = {}; + (function() { + var propertyNames = ["abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", "atan2", "ceil", "cbrt", "expm1", "clz32", "cos", "cosh", "exp", "floor", "fround", "hypot", "imul", "log", "log1p", "log2", "log10", "max", "min", "pow", "random", "round", "sign", "sin", "sinh", "sqrt", "tan", "tanh", "trunc", "E", "LN10", "LN2", "LOG10E", "LOG2E", "PI", "SQRT1_2", "SQRT2"]; + var i; + var len = propertyNames.length; + for (i = 0; i < len; i += 1) { + BMMath[propertyNames[i]] = Math[propertyNames[i]]; + } + })(); + BMMath.random = Math.random; + BMMath.abs = function(val2) { + var tOfVal = typeof val2; + if (tOfVal === "object" && val2.length) { + var absArr = createSizedArray(val2.length); + var i; + var len = val2.length; + for (i = 0; i < len; i += 1) { + absArr[i] = Math.abs(val2[i]); + } + return absArr; + } + return Math.abs(val2); + }; + let defaultCurveSegments = 150; + const degToRads = Math.PI / 180; + const roundCorner = 0.5519; + const createElementID = /* @__PURE__ */ function() { + var _count = 0; + return function createID() { + _count += 1; + return idPrefix$1 + "__lottie_element_" + _count; + }; + }(); + const rgbToHex = function() { + var colorMap = []; + var i; + var hex; + for (i = 0; i < 256; i += 1) { + hex = i.toString(16); + colorMap[i] = hex.length === 1 ? "0" + hex : hex; + } + return function(r, g2, b3) { + if (r < 0) { + r = 0; + } + if (g2 < 0) { + g2 = 0; + } + if (b3 < 0) { + b3 = 0; + } + return "#" + colorMap[r] + colorMap[g2] + colorMap[b3]; + }; + }(); + const setSubframeEnabled = (flag) => { + subframeEnabled = !!flag; + }; + const getSubframeEnabled = () => subframeEnabled; + const setExpressionsPlugin = (value2) => { + expressionsPlugin = value2; + }; + const getExpressionsPlugin = () => expressionsPlugin; + const setDefaultCurveSegments = (value2) => { + defaultCurveSegments = value2; + }; + const getDefaultCurveSegments = () => defaultCurveSegments; + const setIdPrefix = (value2) => { + idPrefix$1 = value2; + }; + const getIdPrefix = () => idPrefix$1; + const dataManager = /* @__PURE__ */ function() { + var _counterId = 1; + var processes = []; + var workerFn; + var workerInstance; + var workerProxy = { + onmessage: function() { + }, + postMessage: function(path) { + workerFn({ + data: path + }); + } + }; + var _workerSelf = { + postMessage: function(data2) { + workerProxy.onmessage({ + data: data2 + }); + } + }; + function createWorker(fn) { + if (window.Worker && window.Blob && getWebWorker()) { + var blob = new Blob(["var _workerSelf = self; self.onmessage = ", fn.toString()], { type: "text/javascript" }); + var url = URL.createObjectURL(blob); + return new Worker(url); + } + workerFn = fn; + return workerProxy; + } + function setupWorker() { + if (!workerInstance) { + workerInstance = createWorker(function workerStart(e) { + function dataFunctionManager() { + function completeLayers(layers, comps) { + var layerData; + var i; + var len = layers.length; + var j; + var jLen; + var k2; + var kLen; + for (i = 0; i < len; i += 1) { + layerData = layers[i]; + if ("ks" in layerData && !layerData.completed) { + layerData.completed = true; + if (layerData.tt) { + layers[i - 1].td = layerData.tt; + } + if (layerData.hasMask) { + var maskProps = layerData.masksProperties; + jLen = maskProps.length; + for (j = 0; j < jLen; j += 1) { + if (maskProps[j].pt.k.i) { + convertPathsToAbsoluteValues(maskProps[j].pt.k); + } else { + kLen = maskProps[j].pt.k.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (maskProps[j].pt.k[k2].s) { + convertPathsToAbsoluteValues(maskProps[j].pt.k[k2].s[0]); + } + if (maskProps[j].pt.k[k2].e) { + convertPathsToAbsoluteValues(maskProps[j].pt.k[k2].e[0]); + } + } + } + } + } + if (layerData.ty === 0) { + layerData.layers = findCompLayers(layerData.refId, comps); + completeLayers(layerData.layers, comps); + } else if (layerData.ty === 4) { + completeShapes(layerData.shapes); + } else if (layerData.ty === 5) { + completeText(layerData); + } + } + } + } + function completeChars(chars, assets) { + if (chars) { + var i = 0; + var len = chars.length; + for (i = 0; i < len; i += 1) { + if (chars[i].t === 1) { + chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); + completeLayers(chars[i].data.layers, assets); + } + } + } + } + function findComp(id, comps) { + var i = 0; + var len = comps.length; + while (i < len) { + if (comps[i].id === id) { + return comps[i]; + } + i += 1; + } + return null; + } + function findCompLayers(id, comps) { + var comp2 = findComp(id, comps); + if (comp2) { + if (!comp2.layers.__used) { + comp2.layers.__used = true; + return comp2.layers; + } + return JSON.parse(JSON.stringify(comp2.layers)); + } + return null; + } + function completeShapes(arr) { + var i; + var len = arr.length; + var j; + var jLen; + for (i = len - 1; i >= 0; i -= 1) { + if (arr[i].ty === "sh") { + if (arr[i].ks.k.i) { + convertPathsToAbsoluteValues(arr[i].ks.k); + } else { + jLen = arr[i].ks.k.length; + for (j = 0; j < jLen; j += 1) { + if (arr[i].ks.k[j].s) { + convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); + } + if (arr[i].ks.k[j].e) { + convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); + } + } + } + } else if (arr[i].ty === "gr") { + completeShapes(arr[i].it); + } + } + } + function convertPathsToAbsoluteValues(path) { + var i; + var len = path.i.length; + for (i = 0; i < len; i += 1) { + path.i[i][0] += path.v[i][0]; + path.i[i][1] += path.v[i][1]; + path.o[i][0] += path.v[i][0]; + path.o[i][1] += path.v[i][1]; + } + } + function checkVersion(minimum, animVersionString) { + var animVersion = animVersionString ? animVersionString.split(".") : [100, 100, 100]; + if (minimum[0] > animVersion[0]) { + return true; + } + if (animVersion[0] > minimum[0]) { + return false; + } + if (minimum[1] > animVersion[1]) { + return true; + } + if (animVersion[1] > minimum[1]) { + return false; + } + if (minimum[2] > animVersion[2]) { + return true; + } + if (animVersion[2] > minimum[2]) { + return false; + } + return null; + } + var checkText = /* @__PURE__ */ function() { + var minimumVersion = [4, 4, 14]; + function updateTextLayer(textLayer) { + var documentData = textLayer.t.d; + textLayer.t.d = { + k: [ + { + s: documentData, + t: 0 + } + ] + }; + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 5) { + updateTextLayer(layers[i]); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkChars = /* @__PURE__ */ function() { + var minimumVersion = [4, 7, 99]; + return function(animationData2) { + if (animationData2.chars && !checkVersion(minimumVersion, animationData2.v)) { + var i; + var len = animationData2.chars.length; + for (i = 0; i < len; i += 1) { + var charData = animationData2.chars[i]; + if (charData.data && charData.data.shapes) { + completeShapes(charData.data.shapes); + charData.data.ip = 0; + charData.data.op = 99999; + charData.data.st = 0; + charData.data.sr = 1; + charData.data.ks = { + p: { k: [0, 0], a: 0 }, + s: { k: [100, 100], a: 0 }, + a: { k: [0, 0], a: 0 }, + r: { k: 0, a: 0 }, + o: { k: 100, a: 0 } + }; + if (!animationData2.chars[i].t) { + charData.data.shapes.push( + { + ty: "no" + } + ); + charData.data.shapes[0].it.push( + { + p: { k: [0, 0], a: 0 }, + s: { k: [100, 100], a: 0 }, + a: { k: [0, 0], a: 0 }, + r: { k: 0, a: 0 }, + o: { k: 100, a: 0 }, + sk: { k: 0, a: 0 }, + sa: { k: 0, a: 0 }, + ty: "tr" + } + ); + } + } + } + } + }; + }(); + var checkPathProperties = /* @__PURE__ */ function() { + var minimumVersion = [5, 7, 15]; + function updateTextLayer(textLayer) { + var pathData = textLayer.t.p; + if (typeof pathData.a === "number") { + pathData.a = { + a: 0, + k: pathData.a + }; + } + if (typeof pathData.p === "number") { + pathData.p = { + a: 0, + k: pathData.p + }; + } + if (typeof pathData.r === "number") { + pathData.r = { + a: 0, + k: pathData.r + }; + } + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 5) { + updateTextLayer(layers[i]); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkColors = /* @__PURE__ */ function() { + var minimumVersion = [4, 1, 9]; + function iterateShapes(shapes) { + var i; + var len = shapes.length; + var j; + var jLen; + for (i = 0; i < len; i += 1) { + if (shapes[i].ty === "gr") { + iterateShapes(shapes[i].it); + } else if (shapes[i].ty === "fl" || shapes[i].ty === "st") { + if (shapes[i].c.k && shapes[i].c.k[0].i) { + jLen = shapes[i].c.k.length; + for (j = 0; j < jLen; j += 1) { + if (shapes[i].c.k[j].s) { + shapes[i].c.k[j].s[0] /= 255; + shapes[i].c.k[j].s[1] /= 255; + shapes[i].c.k[j].s[2] /= 255; + shapes[i].c.k[j].s[3] /= 255; + } + if (shapes[i].c.k[j].e) { + shapes[i].c.k[j].e[0] /= 255; + shapes[i].c.k[j].e[1] /= 255; + shapes[i].c.k[j].e[2] /= 255; + shapes[i].c.k[j].e[3] /= 255; + } + } + } else { + shapes[i].c.k[0] /= 255; + shapes[i].c.k[1] /= 255; + shapes[i].c.k[2] /= 255; + shapes[i].c.k[3] /= 255; + } + } + } + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 4) { + iterateShapes(layers[i].shapes); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkShapes = /* @__PURE__ */ function() { + var minimumVersion = [4, 4, 18]; + function completeClosingShapes(arr) { + var i; + var len = arr.length; + var j; + var jLen; + for (i = len - 1; i >= 0; i -= 1) { + if (arr[i].ty === "sh") { + if (arr[i].ks.k.i) { + arr[i].ks.k.c = arr[i].closed; + } else { + jLen = arr[i].ks.k.length; + for (j = 0; j < jLen; j += 1) { + if (arr[i].ks.k[j].s) { + arr[i].ks.k[j].s[0].c = arr[i].closed; + } + if (arr[i].ks.k[j].e) { + arr[i].ks.k[j].e[0].c = arr[i].closed; + } + } + } + } else if (arr[i].ty === "gr") { + completeClosingShapes(arr[i].it); + } + } + } + function iterateLayers(layers) { + var layerData; + var i; + var len = layers.length; + var j; + var jLen; + var k2; + var kLen; + for (i = 0; i < len; i += 1) { + layerData = layers[i]; + if (layerData.hasMask) { + var maskProps = layerData.masksProperties; + jLen = maskProps.length; + for (j = 0; j < jLen; j += 1) { + if (maskProps[j].pt.k.i) { + maskProps[j].pt.k.c = maskProps[j].cl; + } else { + kLen = maskProps[j].pt.k.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (maskProps[j].pt.k[k2].s) { + maskProps[j].pt.k[k2].s[0].c = maskProps[j].cl; + } + if (maskProps[j].pt.k[k2].e) { + maskProps[j].pt.k[k2].e[0].c = maskProps[j].cl; + } + } + } + } + } + if (layerData.ty === 4) { + completeClosingShapes(layerData.shapes); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + function completeData(animationData2) { + if (animationData2.__complete) { + return; + } + checkColors(animationData2); + checkText(animationData2); + checkChars(animationData2); + checkPathProperties(animationData2); + checkShapes(animationData2); + completeLayers(animationData2.layers, animationData2.assets); + completeChars(animationData2.chars, animationData2.assets); + animationData2.__complete = true; + } + function completeText(data2) { + if (data2.t.a.length === 0 && !("m" in data2.t.p)) { + } + } + var moduleOb = {}; + moduleOb.completeData = completeData; + moduleOb.checkColors = checkColors; + moduleOb.checkChars = checkChars; + moduleOb.checkPathProperties = checkPathProperties; + moduleOb.checkShapes = checkShapes; + moduleOb.completeLayers = completeLayers; + return moduleOb; + } + if (!_workerSelf.dataManager) { + _workerSelf.dataManager = dataFunctionManager(); + } + if (!_workerSelf.assetLoader) { + _workerSelf.assetLoader = /* @__PURE__ */ function() { + function formatResponse(xhr) { + var contentTypeHeader = xhr.getResponseHeader("content-type"); + if (contentTypeHeader && xhr.responseType === "json" && contentTypeHeader.indexOf("json") !== -1) { + return xhr.response; + } + if (xhr.response && typeof xhr.response === "object") { + return xhr.response; + } + if (xhr.response && typeof xhr.response === "string") { + return JSON.parse(xhr.response); + } + if (xhr.responseText) { + return JSON.parse(xhr.responseText); + } + return null; + } + function loadAsset(path, fullPath, callback, errorCallback) { + var response; + var xhr = new XMLHttpRequest(); + try { + xhr.responseType = "json"; + } catch (err2) { + } + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + response = formatResponse(xhr); + callback(response); + } else { + try { + response = formatResponse(xhr); + callback(response); + } catch (err2) { + if (errorCallback) { + errorCallback(err2); + } + } + } + } + }; + try { + xhr.open("GET", path, true); + } catch (error) { + xhr.open("GET", fullPath + "/" + path, true); + } + xhr.send(); + } + return { + load: loadAsset + }; + }(); + } + if (e.data.type === "loadAnimation") { + _workerSelf.assetLoader.load( + e.data.path, + e.data.fullPath, + function(data2) { + _workerSelf.dataManager.completeData(data2); + _workerSelf.postMessage({ + id: e.data.id, + payload: data2, + status: "success" + }); + }, + function() { + _workerSelf.postMessage({ + id: e.data.id, + status: "error" + }); + } + ); + } else if (e.data.type === "complete") { + var animation = e.data.animation; + _workerSelf.dataManager.completeData(animation); + _workerSelf.postMessage({ + id: e.data.id, + payload: animation, + status: "success" + }); + } else if (e.data.type === "loadData") { + _workerSelf.assetLoader.load( + e.data.path, + e.data.fullPath, + function(data2) { + _workerSelf.postMessage({ + id: e.data.id, + payload: data2, + status: "success" + }); + }, + function() { + _workerSelf.postMessage({ + id: e.data.id, + status: "error" + }); + } + ); + } + }); + workerInstance.onmessage = function(event) { + var data2 = event.data; + var id = data2.id; + var process = processes[id]; + processes[id] = null; + if (data2.status === "success") { + process.onComplete(data2.payload); + } else if (process.onError) { + process.onError(); + } + }; + } + } + function createProcess(onComplete, onError) { + _counterId += 1; + var id = "processId_" + _counterId; + processes[id] = { + onComplete, + onError + }; + return id; + } + function loadAnimation2(path, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "loadAnimation", + path, + fullPath: window.location.origin + window.location.pathname, + id: processId + }); + } + function loadData(path, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "loadData", + path, + fullPath: window.location.origin + window.location.pathname, + id: processId + }); + } + function completeAnimation(anim, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "complete", + animation: anim, + id: processId + }); + } + return { + loadAnimation: loadAnimation2, + loadData, + completeAnimation + }; + }(); + const ImagePreloader = function() { + var proxyImage = function() { + var canvas = createTag("canvas"); + canvas.width = 1; + canvas.height = 1; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "rgba(0,0,0,0)"; + ctx.fillRect(0, 0, 1, 1); + return canvas; + }(); + function imageLoaded() { + this.loadedAssets += 1; + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { + if (this.imagesLoadedCb) { + this.imagesLoadedCb(null); + } + } + } + function footageLoaded() { + this.loadedFootagesCount += 1; + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { + if (this.imagesLoadedCb) { + this.imagesLoadedCb(null); + } + } + } + function getAssetsPath(assetData, assetsPath, originalPath) { + var path = ""; + if (assetData.e) { + path = assetData.p; + } else if (assetsPath) { + var imagePath = assetData.p; + if (imagePath.indexOf("images/") !== -1) { + imagePath = imagePath.split("/")[1]; + } + path = assetsPath + imagePath; + } else { + path = originalPath; + path += assetData.u ? assetData.u : ""; + path += assetData.p; + } + return path; + } + function testImageLoaded(img) { + var _count = 0; + var intervalId = setInterval((function() { + var box = img.getBBox(); + if (box.width || _count > 500) { + this._imageLoaded(); + clearInterval(intervalId); + } + _count += 1; + }).bind(this), 50); + } + function createImageData(assetData) { + var path = getAssetsPath(assetData, this.assetsPath, this.path); + var img = createNS("image"); + if (isSafari) { + this.testImageLoaded(img); + } else { + img.addEventListener("load", this._imageLoaded, false); + } + img.addEventListener("error", (function() { + ob2.img = proxyImage; + this._imageLoaded(); + }).bind(this), false); + img.setAttributeNS("http://www.w3.org/1999/xlink", "href", path); + if (this._elementHelper.append) { + this._elementHelper.append(img); + } else { + this._elementHelper.appendChild(img); + } + var ob2 = { + img, + assetData + }; + return ob2; + } + function createImgData(assetData) { + var path = getAssetsPath(assetData, this.assetsPath, this.path); + var img = createTag("img"); + img.crossOrigin = "anonymous"; + img.addEventListener("load", this._imageLoaded, false); + img.addEventListener("error", (function() { + ob2.img = proxyImage; + this._imageLoaded(); + }).bind(this), false); + img.src = path; + var ob2 = { + img, + assetData + }; + return ob2; + } + function createFootageData(data2) { + var ob2 = { + assetData: data2 + }; + var path = getAssetsPath(data2, this.assetsPath, this.path); + dataManager.loadData(path, (function(footageData) { + ob2.img = footageData; + this._footageLoaded(); + }).bind(this), (function() { + ob2.img = {}; + this._footageLoaded(); + }).bind(this)); + return ob2; + } + function loadAssets(assets, cb) { + this.imagesLoadedCb = cb; + var i; + var len = assets.length; + for (i = 0; i < len; i += 1) { + if (!assets[i].layers) { + if (!assets[i].t || assets[i].t === "seq") { + this.totalImages += 1; + this.images.push(this._createImageData(assets[i])); + } else if (assets[i].t === 3) { + this.totalFootages += 1; + this.images.push(this.createFootageData(assets[i])); + } + } + } + } + function setPath(path) { + this.path = path || ""; + } + function setAssetsPath(path) { + this.assetsPath = path || ""; + } + function getAsset(assetData) { + var i = 0; + var len = this.images.length; + while (i < len) { + if (this.images[i].assetData === assetData) { + return this.images[i].img; + } + i += 1; + } + return null; + } + function destroy() { + this.imagesLoadedCb = null; + this.images.length = 0; + } + function loadedImages() { + return this.totalImages === this.loadedAssets; + } + function loadedFootages() { + return this.totalFootages === this.loadedFootagesCount; + } + function setCacheType(type, elementHelper) { + if (type === "svg") { + this._elementHelper = elementHelper; + this._createImageData = this.createImageData.bind(this); + } else { + this._createImageData = this.createImgData.bind(this); + } + } + function ImagePreloaderFactory() { + this._imageLoaded = imageLoaded.bind(this); + this._footageLoaded = footageLoaded.bind(this); + this.testImageLoaded = testImageLoaded.bind(this); + this.createFootageData = createFootageData.bind(this); + this.assetsPath = ""; + this.path = ""; + this.totalImages = 0; + this.totalFootages = 0; + this.loadedAssets = 0; + this.loadedFootagesCount = 0; + this.imagesLoadedCb = null; + this.images = []; + } + ImagePreloaderFactory.prototype = { + loadAssets, + setAssetsPath, + setPath, + loadedImages, + loadedFootages, + destroy, + getAsset, + createImgData, + createImageData, + imageLoaded, + footageLoaded, + setCacheType + }; + return ImagePreloaderFactory; + }(); + BaseEvent.prototype = { + triggerEvent: function(eventName, args) { + if (this._cbs[eventName]) { + var callbacks = this._cbs[eventName]; + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i](args); + } + } + }, + addEventListener: function(eventName, callback) { + if (!this._cbs[eventName]) { + this._cbs[eventName] = []; + } + this._cbs[eventName].push(callback); + return (function() { + this.removeEventListener(eventName, callback); + }).bind(this); + }, + removeEventListener: function(eventName, callback) { + if (!callback) { + this._cbs[eventName] = null; + } else if (this._cbs[eventName]) { + var i = 0; + var len = this._cbs[eventName].length; + while (i < len) { + if (this._cbs[eventName][i] === callback) { + this._cbs[eventName].splice(i, 1); + i -= 1; + len -= 1; + } + i += 1; + } + if (!this._cbs[eventName].length) { + this._cbs[eventName] = null; + } + } + } + }; + const markerParser = /* @__PURE__ */ function() { + function parsePayloadLines(payload) { + var lines = payload.split("\r\n"); + var keys2 = {}; + var line2; + var keysCount = 0; + for (var i = 0; i < lines.length; i += 1) { + line2 = lines[i].split(":"); + if (line2.length === 2) { + keys2[line2[0]] = line2[1].trim(); + keysCount += 1; + } + } + if (keysCount === 0) { + throw new Error(); + } + return keys2; + } + return function(_markers) { + var markers = []; + for (var i = 0; i < _markers.length; i += 1) { + var _marker = _markers[i]; + var markerData = { + time: _marker.tm, + duration: _marker.dr + }; + try { + markerData.payload = JSON.parse(_markers[i].cm); + } catch (_) { + try { + markerData.payload = parsePayloadLines(_markers[i].cm); + } catch (__) { + markerData.payload = { + name: _markers[i].cm + }; + } + } + markers.push(markerData); + } + return markers; + }; + }(); + const ProjectInterface = /* @__PURE__ */ function() { + function registerComposition(comp2) { + this.compositions.push(comp2); + } + return function() { + function _thisProjectFunction(name2) { + var i = 0; + var len = this.compositions.length; + while (i < len) { + if (this.compositions[i].data && this.compositions[i].data.nm === name2) { + if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) { + this.compositions[i].prepareFrame(this.currentFrame); + } + return this.compositions[i].compInterface; + } + i += 1; + } + return null; + } + _thisProjectFunction.compositions = []; + _thisProjectFunction.currentFrame = 0; + _thisProjectFunction.registerComposition = registerComposition; + return _thisProjectFunction; + }; + }(); + const renderers = {}; + const registerRenderer = (key2, value2) => { + renderers[key2] = value2; + }; + const AnimationItem = function() { + this._cbs = []; + this.name = ""; + this.path = ""; + this.isLoaded = false; + this.currentFrame = 0; + this.currentRawFrame = 0; + this.firstFrame = 0; + this.totalFrames = 0; + this.frameRate = 0; + this.frameMult = 0; + this.playSpeed = 1; + this.playDirection = 1; + this.playCount = 0; + this.animationData = {}; + this.assets = []; + this.isPaused = true; + this.autoplay = false; + this.loop = true; + this.renderer = null; + this.animationID = createElementID(); + this.assetsPath = ""; + this.timeCompleted = 0; + this.segmentPos = 0; + this.isSubframeEnabled = getSubframeEnabled(); + this.segments = []; + this._idle = true; + this._completedLoop = false; + this.projectInterface = ProjectInterface(); + this.imagePreloader = new ImagePreloader(); + this.audioController = audioControllerFactory(); + this.markers = []; + this.configAnimation = this.configAnimation.bind(this); + this.onSetupError = this.onSetupError.bind(this); + this.onSegmentComplete = this.onSegmentComplete.bind(this); + this.drawnFrameEvent = new BMEnterFrameEvent("drawnFrame", 0, 0, 0); + }; + extendPrototype([BaseEvent], AnimationItem); + AnimationItem.prototype.setParams = function(params) { + if (params.wrapper || params.container) { + this.wrapper = params.wrapper || params.container; + } + var animType = "svg"; + if (params.animType) { + animType = params.animType; + } else if (params.renderer) { + animType = params.renderer; + } + const RendererClass = getRenderer(animType); + this.renderer = new RendererClass(this, params.rendererSettings); + this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); + this.renderer.setProjectInterface(this.projectInterface); + this.animType = animType; + if (params.loop === "" || params.loop === null || params.loop === void 0 || params.loop === true) { + this.loop = true; + } else if (params.loop === false) { + this.loop = false; + } else { + this.loop = parseInt(params.loop, 10); + } + this.autoplay = "autoplay" in params ? params.autoplay : true; + this.name = params.name ? params.name : ""; + this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, "autoloadSegments") ? params.autoloadSegments : true; + this.assetsPath = params.assetsPath; + this.initialSegment = params.initialSegment; + if (params.audioFactory) { + this.audioController.setAudioFactory(params.audioFactory); + } + if (params.animationData) { + this.setupAnimation(params.animationData); + } else if (params.path) { + if (params.path.lastIndexOf("\\") !== -1) { + this.path = params.path.substr(0, params.path.lastIndexOf("\\") + 1); + } else { + this.path = params.path.substr(0, params.path.lastIndexOf("/") + 1); + } + this.fileName = params.path.substr(params.path.lastIndexOf("/") + 1); + this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf(".json")); + dataManager.loadAnimation( + params.path, + this.configAnimation, + this.onSetupError + ); + } + }; + AnimationItem.prototype.onSetupError = function() { + this.trigger("data_failed"); + }; + AnimationItem.prototype.setupAnimation = function(data2) { + dataManager.completeAnimation( + data2, + this.configAnimation + ); + }; + AnimationItem.prototype.setData = function(wrapper, animationData2) { + if (animationData2) { + if (typeof animationData2 !== "object") { + animationData2 = JSON.parse(animationData2); + } + } + var params = { + wrapper, + animationData: animationData2 + }; + var wrapperAttributes = wrapper.attributes; + params.path = wrapperAttributes.getNamedItem("data-animation-path") ? wrapperAttributes.getNamedItem("data-animation-path").value : wrapperAttributes.getNamedItem("data-bm-path") ? wrapperAttributes.getNamedItem("data-bm-path").value : wrapperAttributes.getNamedItem("bm-path") ? wrapperAttributes.getNamedItem("bm-path").value : ""; + params.animType = wrapperAttributes.getNamedItem("data-anim-type") ? wrapperAttributes.getNamedItem("data-anim-type").value : wrapperAttributes.getNamedItem("data-bm-type") ? wrapperAttributes.getNamedItem("data-bm-type").value : wrapperAttributes.getNamedItem("bm-type") ? wrapperAttributes.getNamedItem("bm-type").value : wrapperAttributes.getNamedItem("data-bm-renderer") ? wrapperAttributes.getNamedItem("data-bm-renderer").value : wrapperAttributes.getNamedItem("bm-renderer") ? wrapperAttributes.getNamedItem("bm-renderer").value : "canvas"; + var loop = wrapperAttributes.getNamedItem("data-anim-loop") ? wrapperAttributes.getNamedItem("data-anim-loop").value : wrapperAttributes.getNamedItem("data-bm-loop") ? wrapperAttributes.getNamedItem("data-bm-loop").value : wrapperAttributes.getNamedItem("bm-loop") ? wrapperAttributes.getNamedItem("bm-loop").value : ""; + if (loop === "false") { + params.loop = false; + } else if (loop === "true") { + params.loop = true; + } else if (loop !== "") { + params.loop = parseInt(loop, 10); + } + var autoplay = wrapperAttributes.getNamedItem("data-anim-autoplay") ? wrapperAttributes.getNamedItem("data-anim-autoplay").value : wrapperAttributes.getNamedItem("data-bm-autoplay") ? wrapperAttributes.getNamedItem("data-bm-autoplay").value : wrapperAttributes.getNamedItem("bm-autoplay") ? wrapperAttributes.getNamedItem("bm-autoplay").value : true; + params.autoplay = autoplay !== "false"; + params.name = wrapperAttributes.getNamedItem("data-name") ? wrapperAttributes.getNamedItem("data-name").value : wrapperAttributes.getNamedItem("data-bm-name") ? wrapperAttributes.getNamedItem("data-bm-name").value : wrapperAttributes.getNamedItem("bm-name") ? wrapperAttributes.getNamedItem("bm-name").value : ""; + var prerender = wrapperAttributes.getNamedItem("data-anim-prerender") ? wrapperAttributes.getNamedItem("data-anim-prerender").value : wrapperAttributes.getNamedItem("data-bm-prerender") ? wrapperAttributes.getNamedItem("data-bm-prerender").value : wrapperAttributes.getNamedItem("bm-prerender") ? wrapperAttributes.getNamedItem("bm-prerender").value : ""; + if (prerender === "false") { + params.prerender = false; + } + this.setParams(params); + }; + AnimationItem.prototype.includeLayers = function(data2) { + if (data2.op > this.animationData.op) { + this.animationData.op = data2.op; + this.totalFrames = Math.floor(data2.op - this.animationData.ip); + } + var layers = this.animationData.layers; + var i; + var len = layers.length; + var newLayers = data2.layers; + var j; + var jLen = newLayers.length; + for (j = 0; j < jLen; j += 1) { + i = 0; + while (i < len) { + if (layers[i].id === newLayers[j].id) { + layers[i] = newLayers[j]; + break; + } + i += 1; + } + } + if (data2.chars || data2.fonts) { + this.renderer.globalData.fontManager.addChars(data2.chars); + this.renderer.globalData.fontManager.addFonts(data2.fonts, this.renderer.globalData.defs); + } + if (data2.assets) { + len = data2.assets.length; + for (i = 0; i < len; i += 1) { + this.animationData.assets.push(data2.assets[i]); + } + } + this.animationData.__complete = false; + dataManager.completeAnimation( + this.animationData, + this.onSegmentComplete + ); + }; + AnimationItem.prototype.onSegmentComplete = function(data2) { + this.animationData = data2; + var expressionsPlugin2 = getExpressionsPlugin(); + if (expressionsPlugin2) { + expressionsPlugin2.initExpressions(this); + } + this.loadNextSegment(); + }; + AnimationItem.prototype.loadNextSegment = function() { + var segments = this.animationData.segments; + if (!segments || segments.length === 0 || !this.autoloadSegments) { + this.trigger("data_ready"); + this.timeCompleted = this.totalFrames; + return; + } + var segment = segments.shift(); + this.timeCompleted = segment.time * this.frameRate; + var segmentPath = this.path + this.fileName + "_" + this.segmentPos + ".json"; + this.segmentPos += 1; + dataManager.loadData(segmentPath, this.includeLayers.bind(this), (function() { + this.trigger("data_failed"); + }).bind(this)); + }; + AnimationItem.prototype.loadSegments = function() { + var segments = this.animationData.segments; + if (!segments) { + this.timeCompleted = this.totalFrames; + } + this.loadNextSegment(); + }; + AnimationItem.prototype.imagesLoaded = function() { + this.trigger("loaded_images"); + this.checkLoaded(); + }; + AnimationItem.prototype.preloadImages = function() { + this.imagePreloader.setAssetsPath(this.assetsPath); + this.imagePreloader.setPath(this.path); + this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); + }; + AnimationItem.prototype.configAnimation = function(animData) { + if (!this.renderer) { + return; + } + try { + this.animationData = animData; + if (this.initialSegment) { + this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); + this.firstFrame = Math.round(this.initialSegment[0]); + } else { + this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); + this.firstFrame = Math.round(this.animationData.ip); + } + this.renderer.configAnimation(animData); + if (!animData.assets) { + animData.assets = []; + } + this.assets = this.animationData.assets; + this.frameRate = this.animationData.fr; + this.frameMult = this.animationData.fr / 1e3; + this.renderer.searchExtraCompositions(animData.assets); + this.markers = markerParser(animData.markers || []); + this.trigger("config_ready"); + this.preloadImages(); + this.loadSegments(); + this.updaFrameModifier(); + this.waitForFontsLoaded(); + if (this.isPaused) { + this.audioController.pause(); + } + } catch (error) { + this.triggerConfigError(error); + } + }; + AnimationItem.prototype.waitForFontsLoaded = function() { + if (!this.renderer) { + return; + } + if (this.renderer.globalData.fontManager.isLoaded) { + this.checkLoaded(); + } else { + setTimeout(this.waitForFontsLoaded.bind(this), 20); + } + }; + AnimationItem.prototype.checkLoaded = function() { + if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== "canvas") && this.imagePreloader.loadedFootages()) { + this.isLoaded = true; + var expressionsPlugin2 = getExpressionsPlugin(); + if (expressionsPlugin2) { + expressionsPlugin2.initExpressions(this); + } + this.renderer.initItems(); + setTimeout((function() { + this.trigger("DOMLoaded"); + }).bind(this), 0); + this.gotoFrame(); + if (this.autoplay) { + this.play(); + } + } + }; + AnimationItem.prototype.resize = function() { + this.renderer.updateContainerSize(); + }; + AnimationItem.prototype.setSubframe = function(flag) { + this.isSubframeEnabled = !!flag; + }; + AnimationItem.prototype.gotoFrame = function() { + this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; + if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) { + this.currentFrame = this.timeCompleted; + } + this.trigger("enterFrame"); + this.renderFrame(); + this.trigger("drawnFrame"); + }; + AnimationItem.prototype.renderFrame = function() { + if (this.isLoaded === false || !this.renderer) { + return; + } + try { + this.renderer.renderFrame(this.currentFrame + this.firstFrame); + } catch (error) { + this.triggerRenderFrameError(error); + } + }; + AnimationItem.prototype.play = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === true) { + this.isPaused = false; + this.trigger("_pause"); + this.audioController.resume(); + if (this._idle) { + this._idle = false; + this.trigger("_active"); + } + } + }; + AnimationItem.prototype.pause = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === false) { + this.isPaused = true; + this.trigger("_play"); + this._idle = true; + this.trigger("_idle"); + this.audioController.pause(); + } + }; + AnimationItem.prototype.togglePause = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === true) { + this.play(); + } else { + this.pause(); + } + }; + AnimationItem.prototype.stop = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.pause(); + this.playCount = 0; + this._completedLoop = false; + this.setCurrentRawFrameValue(0); + }; + AnimationItem.prototype.getMarkerData = function(markerName) { + var marker; + for (var i = 0; i < this.markers.length; i += 1) { + marker = this.markers[i]; + if (marker.payload && marker.payload.name === markerName) { + return marker; + } + } + return null; + }; + AnimationItem.prototype.goToAndStop = function(value2, isFrame, name2) { + if (name2 && this.name !== name2) { + return; + } + var numValue = Number(value2); + if (isNaN(numValue)) { + var marker = this.getMarkerData(value2); + if (marker) { + this.goToAndStop(marker.time, true); + } + } else if (isFrame) { + this.setCurrentRawFrameValue(value2); + } else { + this.setCurrentRawFrameValue(value2 * this.frameModifier); + } + this.pause(); + }; + AnimationItem.prototype.goToAndPlay = function(value2, isFrame, name2) { + if (name2 && this.name !== name2) { + return; + } + var numValue = Number(value2); + if (isNaN(numValue)) { + var marker = this.getMarkerData(value2); + if (marker) { + if (!marker.duration) { + this.goToAndStop(marker.time, true); + } else { + this.playSegments([marker.time, marker.time + marker.duration], true); + } + } + } else { + this.goToAndStop(numValue, isFrame, name2); + } + this.play(); + }; + AnimationItem.prototype.advanceTime = function(value2) { + if (this.isPaused === true || this.isLoaded === false) { + return; + } + var nextValue = this.currentRawFrame + value2 * this.frameModifier; + var _isComplete = false; + if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) { + if (!this.loop || this.playCount === this.loop) { + if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { + _isComplete = true; + nextValue = this.totalFrames - 1; + } + } else if (nextValue >= this.totalFrames) { + this.playCount += 1; + if (!this.checkSegments(nextValue % this.totalFrames)) { + this.setCurrentRawFrameValue(nextValue % this.totalFrames); + this._completedLoop = true; + this.trigger("loopComplete"); + } + } else { + this.setCurrentRawFrameValue(nextValue); + } + } else if (nextValue < 0) { + if (!this.checkSegments(nextValue % this.totalFrames)) { + if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { + this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); + if (!this._completedLoop) { + this._completedLoop = true; + } else { + this.trigger("loopComplete"); + } + } else { + _isComplete = true; + nextValue = 0; + } + } + } else { + this.setCurrentRawFrameValue(nextValue); + } + if (_isComplete) { + this.setCurrentRawFrameValue(nextValue); + this.pause(); + this.trigger("complete"); + } + }; + AnimationItem.prototype.adjustSegment = function(arr, offset) { + this.playCount = 0; + if (arr[1] < arr[0]) { + if (this.frameModifier > 0) { + if (this.playSpeed < 0) { + this.setSpeed(-this.playSpeed); + } else { + this.setDirection(-1); + } + } + this.totalFrames = arr[0] - arr[1]; + this.timeCompleted = this.totalFrames; + this.firstFrame = arr[1]; + this.setCurrentRawFrameValue(this.totalFrames - 1e-3 - offset); + } else if (arr[1] > arr[0]) { + if (this.frameModifier < 0) { + if (this.playSpeed < 0) { + this.setSpeed(-this.playSpeed); + } else { + this.setDirection(1); + } + } + this.totalFrames = arr[1] - arr[0]; + this.timeCompleted = this.totalFrames; + this.firstFrame = arr[0]; + this.setCurrentRawFrameValue(1e-3 + offset); + } + this.trigger("segmentStart"); + }; + AnimationItem.prototype.setSegment = function(init, end) { + var pendingFrame = -1; + if (this.isPaused) { + if (this.currentRawFrame + this.firstFrame < init) { + pendingFrame = init; + } else if (this.currentRawFrame + this.firstFrame > end) { + pendingFrame = end - init; + } + } + this.firstFrame = init; + this.totalFrames = end - init; + this.timeCompleted = this.totalFrames; + if (pendingFrame !== -1) { + this.goToAndStop(pendingFrame, true); + } + }; + AnimationItem.prototype.playSegments = function(arr, forceFlag) { + if (forceFlag) { + this.segments.length = 0; + } + if (typeof arr[0] === "object") { + var i; + var len = arr.length; + for (i = 0; i < len; i += 1) { + this.segments.push(arr[i]); + } + } else { + this.segments.push(arr); + } + if (this.segments.length && forceFlag) { + this.adjustSegment(this.segments.shift(), 0); + } + if (this.isPaused) { + this.play(); + } + }; + AnimationItem.prototype.resetSegments = function(forceFlag) { + this.segments.length = 0; + this.segments.push([this.animationData.ip, this.animationData.op]); + if (forceFlag) { + this.checkSegments(0); + } + }; + AnimationItem.prototype.checkSegments = function(offset) { + if (this.segments.length) { + this.adjustSegment(this.segments.shift(), offset); + return true; + } + return false; + }; + AnimationItem.prototype.destroy = function(name2) { + if (name2 && this.name !== name2 || !this.renderer) { + return; + } + this.renderer.destroy(); + this.imagePreloader.destroy(); + this.trigger("destroy"); + this._cbs = null; + this.onEnterFrame = null; + this.onLoopComplete = null; + this.onComplete = null; + this.onSegmentStart = null; + this.onDestroy = null; + this.renderer = null; + this.renderer = null; + this.imagePreloader = null; + this.projectInterface = null; + }; + AnimationItem.prototype.setCurrentRawFrameValue = function(value2) { + this.currentRawFrame = value2; + this.gotoFrame(); + }; + AnimationItem.prototype.setSpeed = function(val2) { + this.playSpeed = val2; + this.updaFrameModifier(); + }; + AnimationItem.prototype.setDirection = function(val2) { + this.playDirection = val2 < 0 ? -1 : 1; + this.updaFrameModifier(); + }; + AnimationItem.prototype.setVolume = function(val2, name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.setVolume(val2); + }; + AnimationItem.prototype.getVolume = function() { + return this.audioController.getVolume(); + }; + AnimationItem.prototype.mute = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.mute(); + }; + AnimationItem.prototype.unmute = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.unmute(); + }; + AnimationItem.prototype.updaFrameModifier = function() { + this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; + this.audioController.setRate(this.playSpeed * this.playDirection); + }; + AnimationItem.prototype.getPath = function() { + return this.path; + }; + AnimationItem.prototype.getAssetsPath = function(assetData) { + var path = ""; + if (assetData.e) { + path = assetData.p; + } else if (this.assetsPath) { + var imagePath = assetData.p; + if (imagePath.indexOf("images/") !== -1) { + imagePath = imagePath.split("/")[1]; + } + path = this.assetsPath + imagePath; + } else { + path = this.path; + path += assetData.u ? assetData.u : ""; + path += assetData.p; + } + return path; + }; + AnimationItem.prototype.getAssetData = function(id) { + var i = 0; + var len = this.assets.length; + while (i < len) { + if (id === this.assets[i].id) { + return this.assets[i]; + } + i += 1; + } + return null; + }; + AnimationItem.prototype.hide = function() { + this.renderer.hide(); + }; + AnimationItem.prototype.show = function() { + this.renderer.show(); + }; + AnimationItem.prototype.getDuration = function(isFrame) { + return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; + }; + AnimationItem.prototype.updateDocumentData = function(path, documentData, index2) { + try { + var element = this.renderer.getElementByPath(path); + element.updateDocumentData(documentData, index2); + } catch (error) { + } + }; + AnimationItem.prototype.trigger = function(name2) { + if (this._cbs && this._cbs[name2]) { + switch (name2) { + case "enterFrame": + this.triggerEvent(name2, new BMEnterFrameEvent(name2, this.currentFrame, this.totalFrames, this.frameModifier)); + break; + case "drawnFrame": + this.drawnFrameEvent.currentTime = this.currentFrame; + this.drawnFrameEvent.totalTime = this.totalFrames; + this.drawnFrameEvent.direction = this.frameModifier; + this.triggerEvent(name2, this.drawnFrameEvent); + break; + case "loopComplete": + this.triggerEvent(name2, new BMCompleteLoopEvent(name2, this.loop, this.playCount, this.frameMult)); + break; + case "complete": + this.triggerEvent(name2, new BMCompleteEvent(name2, this.frameMult)); + break; + case "segmentStart": + this.triggerEvent(name2, new BMSegmentStartEvent(name2, this.firstFrame, this.totalFrames)); + break; + case "destroy": + this.triggerEvent(name2, new BMDestroyEvent(name2, this)); + break; + default: + this.triggerEvent(name2); + } + } + if (name2 === "enterFrame" && this.onEnterFrame) { + this.onEnterFrame.call(this, new BMEnterFrameEvent(name2, this.currentFrame, this.totalFrames, this.frameMult)); + } + if (name2 === "loopComplete" && this.onLoopComplete) { + this.onLoopComplete.call(this, new BMCompleteLoopEvent(name2, this.loop, this.playCount, this.frameMult)); + } + if (name2 === "complete" && this.onComplete) { + this.onComplete.call(this, new BMCompleteEvent(name2, this.frameMult)); + } + if (name2 === "segmentStart" && this.onSegmentStart) { + this.onSegmentStart.call(this, new BMSegmentStartEvent(name2, this.firstFrame, this.totalFrames)); + } + if (name2 === "destroy" && this.onDestroy) { + this.onDestroy.call(this, new BMDestroyEvent(name2, this)); + } + }; + AnimationItem.prototype.triggerRenderFrameError = function(nativeError) { + var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); + this.triggerEvent("error", error); + if (this.onError) { + this.onError.call(this, error); + } + }; + AnimationItem.prototype.triggerConfigError = function(nativeError) { + var error = new BMConfigErrorEvent(nativeError, this.currentFrame); + this.triggerEvent("error", error); + if (this.onError) { + this.onError.call(this, error); + } + }; + const animationManager = function() { + var moduleOb = {}; + var registeredAnimations = []; + var initTime = 0; + var len = 0; + var playingAnimationsNum = 0; + var _stopped = true; + var _isFrozen = false; + function removeElement(ev) { + var i = 0; + var animItem = ev.target; + while (i < len) { + if (registeredAnimations[i].animation === animItem) { + registeredAnimations.splice(i, 1); + i -= 1; + len -= 1; + if (!animItem.isPaused) { + subtractPlayingCount(); + } + } + i += 1; + } + } + function registerAnimation(element, animationData2) { + if (!element) { + return null; + } + var i = 0; + while (i < len) { + if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) { + return registeredAnimations[i].animation; + } + i += 1; + } + var animItem = new AnimationItem(); + setupAnimation(animItem, element); + animItem.setData(element, animationData2); + return animItem; + } + function getRegisteredAnimations() { + var i; + var lenAnims = registeredAnimations.length; + var animations = []; + for (i = 0; i < lenAnims; i += 1) { + animations.push(registeredAnimations[i].animation); + } + return animations; + } + function addPlayingCount() { + playingAnimationsNum += 1; + activate(); + } + function subtractPlayingCount() { + playingAnimationsNum -= 1; + } + function setupAnimation(animItem, element) { + animItem.addEventListener("destroy", removeElement); + animItem.addEventListener("_active", addPlayingCount); + animItem.addEventListener("_idle", subtractPlayingCount); + registeredAnimations.push({ elem: element, animation: animItem }); + len += 1; + } + function loadAnimation2(params) { + var animItem = new AnimationItem(); + setupAnimation(animItem, null); + animItem.setParams(params); + return animItem; + } + function setSpeed(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setSpeed(val2, animation); + } + } + function setDirection(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setDirection(val2, animation); + } + } + function play(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.play(animation); + } + } + function resume(nowTime) { + var elapsedTime = nowTime - initTime; + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.advanceTime(elapsedTime); + } + initTime = nowTime; + if (playingAnimationsNum && !_isFrozen) { + window.requestAnimationFrame(resume); + } else { + _stopped = true; + } + } + function first2(nowTime) { + initTime = nowTime; + window.requestAnimationFrame(resume); + } + function pause(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.pause(animation); + } + } + function goToAndStop(value2, isFrame, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.goToAndStop(value2, isFrame, animation); + } + } + function stop(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.stop(animation); + } + } + function togglePause(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.togglePause(animation); + } + } + function destroy(animation) { + var i; + for (i = len - 1; i >= 0; i -= 1) { + registeredAnimations[i].animation.destroy(animation); + } + } + function searchAnimations2(animationData2, standalone2, renderer2) { + var animElements = [].concat( + [].slice.call(document.getElementsByClassName("lottie")), + [].slice.call(document.getElementsByClassName("bodymovin")) + ); + var i; + var lenAnims = animElements.length; + for (i = 0; i < lenAnims; i += 1) { + if (renderer2) { + animElements[i].setAttribute("data-bm-type", renderer2); + } + registerAnimation(animElements[i], animationData2); + } + if (standalone2 && lenAnims === 0) { + if (!renderer2) { + renderer2 = "svg"; + } + var body = document.getElementsByTagName("body")[0]; + body.innerText = ""; + var div2 = createTag("div"); + div2.style.width = "100%"; + div2.style.height = "100%"; + div2.setAttribute("data-bm-type", renderer2); + body.appendChild(div2); + registerAnimation(div2, animationData2); + } + } + function resize() { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.resize(); + } + } + function activate() { + if (!_isFrozen && playingAnimationsNum) { + if (_stopped) { + window.requestAnimationFrame(first2); + _stopped = false; + } + } + } + function freeze() { + _isFrozen = true; + } + function unfreeze() { + _isFrozen = false; + activate(); + } + function setVolume(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setVolume(val2, animation); + } + } + function mute(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.mute(animation); + } + } + function unmute(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.unmute(animation); + } + } + moduleOb.registerAnimation = registerAnimation; + moduleOb.loadAnimation = loadAnimation2; + moduleOb.setSpeed = setSpeed; + moduleOb.setDirection = setDirection; + moduleOb.play = play; + moduleOb.pause = pause; + moduleOb.stop = stop; + moduleOb.togglePause = togglePause; + moduleOb.searchAnimations = searchAnimations2; + moduleOb.resize = resize; + moduleOb.goToAndStop = goToAndStop; + moduleOb.destroy = destroy; + moduleOb.freeze = freeze; + moduleOb.unfreeze = unfreeze; + moduleOb.setVolume = setVolume; + moduleOb.mute = mute; + moduleOb.unmute = unmute; + moduleOb.getRegisteredAnimations = getRegisteredAnimations; + return moduleOb; + }(); + const BezierFactory = function() { + var ob2 = {}; + ob2.getBezierEasing = getBezierEasing; + var beziers = {}; + function getBezierEasing(a2, b3, c2, d, nm) { + var str = nm || ("bez_" + a2 + "_" + b3 + "_" + c2 + "_" + d).replace(/\./g, "p"); + if (beziers[str]) { + return beziers[str]; + } + var bezEasing = new BezierEasing([a2, b3, c2, d]); + beziers[str] = bezEasing; + return bezEasing; + } + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 1e-3; + var SUBDIVISION_PRECISION = 1e-7; + var SUBDIVISION_MAX_ITERATIONS = 10; + var kSplineTableSize = 11; + var kSampleStepSize = 1 / (kSplineTableSize - 1); + var float32ArraySupported = typeof Float32Array === "function"; + function A2(aA1, aA2) { + return 1 - 3 * aA2 + 3 * aA1; + } + function B2(aA1, aA2) { + return 3 * aA2 - 6 * aA1; + } + function C2(aA1) { + return 3 * aA1; + } + function calcBezier(aT, aA1, aA2) { + return ((A2(aA1, aA2) * aT + B2(aA1, aA2)) * aT + C2(aA1)) * aT; + } + function getSlope(aT, aA1, aA2) { + return 3 * A2(aA1, aA2) * aT * aT + 2 * B2(aA1, aA2) * aT + C2(aA1); + } + function binarySubdivide(aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0) return aGuessT; + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + function BezierEasing(points) { + this._p = points; + this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + this._precomputed = false; + this.get = this.get.bind(this); + } + BezierEasing.prototype = { + get: function(x2) { + var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; + if (!this._precomputed) this._precompute(); + if (mX1 === mY1 && mX2 === mY2) return x2; + if (x2 === 0) return 0; + if (x2 === 1) return 1; + return calcBezier(this._getTForX(x2), mY1, mY2); + }, + // Private part + _precompute: function() { + var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; + this._precomputed = true; + if (mX1 !== mY1 || mX2 !== mY2) { + this._calcSampleValues(); + } + }, + _calcSampleValues: function() { + var mX1 = this._p[0], mX2 = this._p[2]; + for (var i = 0; i < kSplineTableSize; ++i) { + this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + }, + /** + * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. + */ + _getTForX: function(aX) { + var mX1 = this._p[0], mX2 = this._p[2], mSampleValues = this._mSampleValues; + var intervalStart = 0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } + if (initialSlope === 0) { + return guessForT; + } + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + }; + return ob2; + }(); + const pooling = /* @__PURE__ */ function() { + function double(arr) { + return arr.concat(createSizedArray(arr.length)); + } + return { + double + }; + }(); + const poolFactory = /* @__PURE__ */ function() { + return function(initialLength, _create, _release) { + var _length = 0; + var _maxLength = initialLength; + var pool = createSizedArray(_maxLength); + var ob2 = { + newElement, + release + }; + function newElement() { + var element; + if (_length) { + _length -= 1; + element = pool[_length]; + } else { + element = _create(); + } + return element; + } + function release(element) { + if (_length === _maxLength) { + pool = pooling.double(pool); + _maxLength *= 2; + } + if (_release) { + _release(element); + } + pool[_length] = element; + _length += 1; + } + return ob2; + }; + }(); + const bezierLengthPool = function() { + function create() { + return { + addedLength: 0, + percents: createTypedArray("float32", getDefaultCurveSegments()), + lengths: createTypedArray("float32", getDefaultCurveSegments()) + }; + } + return poolFactory(8, create); + }(); + const segmentsLengthPool = function() { + function create() { + return { + lengths: [], + totalLength: 0 + }; + } + function release(element) { + var i; + var len = element.lengths.length; + for (i = 0; i < len; i += 1) { + bezierLengthPool.release(element.lengths[i]); + } + element.lengths.length = 0; + } + return poolFactory(8, create, release); + }(); + const bez = bezFunction(); + const PropertyFactory = /* @__PURE__ */ function() { + var initFrame = initialDefaultFrame; + var mathAbs = Math.abs; + function interpolateValue(frameNum, caching) { + var offsetTime = this.offsetTime; + var newValue; + if (this.propType === "multidimensional") { + newValue = createTypedArray("float32", this.pv.length); + } + var iterationIndex = caching.lastIndex; + var i = iterationIndex; + var len = this.keyframes.length - 1; + var flag = true; + var keyData; + var nextKeyData; + var keyframeMetadata; + while (flag) { + keyData = this.keyframes[i]; + nextKeyData = this.keyframes[i + 1]; + if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { + if (keyData.h) { + keyData = nextKeyData; + } + iterationIndex = 0; + break; + } + if (nextKeyData.t - offsetTime > frameNum) { + iterationIndex = i; + break; + } + if (i < len - 1) { + i += 1; + } else { + iterationIndex = 0; + flag = false; + } + } + keyframeMetadata = this.keyframesMetadata[i] || {}; + var k2; + var kLen; + var perc; + var jLen; + var j; + var fnc; + var nextKeyTime = nextKeyData.t - offsetTime; + var keyTime = keyData.t - offsetTime; + var endValue; + if (keyData.to) { + if (!keyframeMetadata.bezierData) { + keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); + } + var bezierData = keyframeMetadata.bezierData; + if (frameNum >= nextKeyTime || frameNum < keyTime) { + var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; + kLen = bezierData.points[ind].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[ind].point[k2]; + } + } else { + if (keyframeMetadata.__fnct) { + fnc = keyframeMetadata.__fnct; + } else { + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; + keyframeMetadata.__fnct = fnc; + } + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); + var distanceInLine = bezierData.segmentLength * perc; + var segmentPerc; + var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; + j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; + flag = true; + jLen = bezierData.points.length; + while (flag) { + addedLength += bezierData.points[j].partialLength; + if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { + kLen = bezierData.points[j].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[j].point[k2]; + } + break; + } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { + segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; + kLen = bezierData.points[j].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[j].point[k2] + (bezierData.points[j + 1].point[k2] - bezierData.points[j].point[k2]) * segmentPerc; + } + break; + } + if (j < jLen - 1) { + j += 1; + } else { + flag = false; + } + } + caching._lastPoint = j; + caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; + caching._lastKeyframeIndex = i; + } + } else { + var outX; + var outY; + var inX; + var inY; + var keyValue; + len = keyData.s.length; + endValue = nextKeyData.s || keyData.e; + if (this.sh && keyData.h !== 1) { + if (frameNum >= nextKeyTime) { + newValue[0] = endValue[0]; + newValue[1] = endValue[1]; + newValue[2] = endValue[2]; + } else if (frameNum <= keyTime) { + newValue[0] = keyData.s[0]; + newValue[1] = keyData.s[1]; + newValue[2] = keyData.s[2]; + } else { + var quatStart = createQuaternion(keyData.s); + var quatEnd = createQuaternion(endValue); + var time2 = (frameNum - keyTime) / (nextKeyTime - keyTime); + quaternionToEuler(newValue, slerp(quatStart, quatEnd, time2)); + } + } else { + for (i = 0; i < len; i += 1) { + if (keyData.h !== 1) { + if (frameNum >= nextKeyTime) { + perc = 1; + } else if (frameNum < keyTime) { + perc = 0; + } else { + if (keyData.o.x.constructor === Array) { + if (!keyframeMetadata.__fnct) { + keyframeMetadata.__fnct = []; + } + if (!keyframeMetadata.__fnct[i]) { + outX = keyData.o.x[i] === void 0 ? keyData.o.x[0] : keyData.o.x[i]; + outY = keyData.o.y[i] === void 0 ? keyData.o.y[0] : keyData.o.y[i]; + inX = keyData.i.x[i] === void 0 ? keyData.i.x[0] : keyData.i.x[i]; + inY = keyData.i.y[i] === void 0 ? keyData.i.y[0] : keyData.i.y[i]; + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; + keyframeMetadata.__fnct[i] = fnc; + } else { + fnc = keyframeMetadata.__fnct[i]; + } + } else if (!keyframeMetadata.__fnct) { + outX = keyData.o.x; + outY = keyData.o.y; + inX = keyData.i.x; + inY = keyData.i.y; + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; + keyData.keyframeMetadata = fnc; + } else { + fnc = keyframeMetadata.__fnct; + } + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); + } + } + endValue = nextKeyData.s || keyData.e; + keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; + if (this.propType === "multidimensional") { + newValue[i] = keyValue; + } else { + newValue = keyValue; + } + } + } + } + caching.lastIndex = iterationIndex; + return newValue; + } + function slerp(a2, b3, t3) { + var out = []; + var ax = a2[0]; + var ay = a2[1]; + var az = a2[2]; + var aw = a2[3]; + var bx = b3[0]; + var by = b3[1]; + var bz = b3[2]; + var bw = b3[3]; + var omega; + var cosom; + var sinom; + var scale0; + var scale1; + cosom = ax * bx + ay * by + az * bz + aw * bw; + if (cosom < 0) { + cosom = -cosom; + bx = -bx; + by = -by; + bz = -bz; + bw = -bw; + } + if (1 - cosom > 1e-6) { + omega = Math.acos(cosom); + sinom = Math.sin(omega); + scale0 = Math.sin((1 - t3) * omega) / sinom; + scale1 = Math.sin(t3 * omega) / sinom; + } else { + scale0 = 1 - t3; + scale1 = t3; + } + out[0] = scale0 * ax + scale1 * bx; + out[1] = scale0 * ay + scale1 * by; + out[2] = scale0 * az + scale1 * bz; + out[3] = scale0 * aw + scale1 * bw; + return out; + } + function quaternionToEuler(out, quat) { + var qx = quat[0]; + var qy = quat[1]; + var qz = quat[2]; + var qw = quat[3]; + var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); + var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); + var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); + out[0] = heading / degToRads; + out[1] = attitude / degToRads; + out[2] = bank / degToRads; + } + function createQuaternion(values2) { + var heading = values2[0] * degToRads; + var attitude = values2[1] * degToRads; + var bank = values2[2] * degToRads; + var c1 = Math.cos(heading / 2); + var c2 = Math.cos(attitude / 2); + var c3 = Math.cos(bank / 2); + var s1 = Math.sin(heading / 2); + var s2 = Math.sin(attitude / 2); + var s3 = Math.sin(bank / 2); + var w = c1 * c2 * c3 - s1 * s2 * s3; + var x2 = s1 * s2 * c3 + c1 * c2 * s3; + var y2 = s1 * c2 * c3 + c1 * s2 * s3; + var z = c1 * s2 * c3 - s1 * c2 * s3; + return [x2, y2, z, w]; + } + function getValueAtCurrentTime() { + var frameNum = this.comp.renderedFrame - this.offsetTime; + var initTime = this.keyframes[0].t - this.offsetTime; + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; + if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { + if (this._caching.lastFrame >= frameNum) { + this._caching._lastKeyframeIndex = -1; + this._caching.lastIndex = 0; + } + var renderResult = this.interpolateValue(frameNum, this._caching); + this.pv = renderResult; + } + this._caching.lastFrame = frameNum; + return this.pv; + } + function setVValue(val2) { + var multipliedValue; + if (this.propType === "unidimensional") { + multipliedValue = val2 * this.mult; + if (mathAbs(this.v - multipliedValue) > 1e-5) { + this.v = multipliedValue; + this._mdf = true; + } + } else { + var i = 0; + var len = this.v.length; + while (i < len) { + multipliedValue = val2[i] * this.mult; + if (mathAbs(this.v[i] - multipliedValue) > 1e-5) { + this.v[i] = multipliedValue; + this._mdf = true; + } + i += 1; + } + } + } + function processEffectsSequence() { + if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) { + return; + } + if (this.lock) { + this.setVValue(this.pv); + return; + } + this.lock = true; + this._mdf = this._isFirstFrame; + var i; + var len = this.effectsSequence.length; + var finalValue = this.kf ? this.pv : this.data.k; + for (i = 0; i < len; i += 1) { + finalValue = this.effectsSequence[i](finalValue); + } + this.setVValue(finalValue); + this._isFirstFrame = false; + this.lock = false; + this.frameId = this.elem.globalData.frameId; + } + function addEffect(effectFunction) { + this.effectsSequence.push(effectFunction); + this.container.addDynamicProperty(this); + } + function ValueProperty(elem2, data2, mult, container) { + this.propType = "unidimensional"; + this.mult = mult || 1; + this.data = data2; + this.v = mult ? data2.k * mult : data2.k; + this.pv = data2.k; + this._mdf = false; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.k = false; + this.kf = false; + this.vel = 0; + this.effectsSequence = []; + this._isFirstFrame = true; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.addEffect = addEffect; + } + function MultiDimensionalProperty(elem2, data2, mult, container) { + this.propType = "multidimensional"; + this.mult = mult || 1; + this.data = data2; + this._mdf = false; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.k = false; + this.kf = false; + this.frameId = -1; + var i; + var len = data2.k.length; + this.v = createTypedArray("float32", len); + this.pv = createTypedArray("float32", len); + this.vel = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + this.v[i] = data2.k[i] * this.mult; + this.pv[i] = data2.k[i]; + } + this._isFirstFrame = true; + this.effectsSequence = []; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.addEffect = addEffect; + } + function KeyframedValueProperty(elem2, data2, mult, container) { + this.propType = "unidimensional"; + this.keyframes = data2.k; + this.keyframesMetadata = []; + this.offsetTime = elem2.data.st; + this.frameId = -1; + this._caching = { + lastFrame: initFrame, + lastIndex: 0, + value: 0, + _lastKeyframeIndex: -1 + }; + this.k = true; + this.kf = true; + this.data = data2; + this.mult = mult || 1; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.v = initFrame; + this.pv = initFrame; + this._isFirstFrame = true; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.interpolateValue = interpolateValue; + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; + this.addEffect = addEffect; + } + function KeyframedMultidimensionalProperty(elem2, data2, mult, container) { + this.propType = "multidimensional"; + var i; + var len = data2.k.length; + var s; + var e; + var to; + var ti; + for (i = 0; i < len - 1; i += 1) { + if (data2.k[i].to && data2.k[i].s && data2.k[i + 1] && data2.k[i + 1].s) { + s = data2.k[i].s; + e = data2.k[i + 1].s; + to = data2.k[i].to; + ti = data2.k[i].ti; + if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) { + data2.k[i].to = null; + data2.k[i].ti = null; + } + if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { + if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { + data2.k[i].to = null; + data2.k[i].ti = null; + } + } + } + } + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; + this.data = data2; + this.keyframes = data2.k; + this.keyframesMetadata = []; + this.offsetTime = elem2.data.st; + this.k = true; + this.kf = true; + this._isFirstFrame = true; + this.mult = mult || 1; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.interpolateValue = interpolateValue; + this.frameId = -1; + var arrLen = data2.k[0].s.length; + this.v = createTypedArray("float32", arrLen); + this.pv = createTypedArray("float32", arrLen); + for (i = 0; i < arrLen; i += 1) { + this.v[i] = initFrame; + this.pv[i] = initFrame; + } + this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray("float32", arrLen) }; + this.addEffect = addEffect; + } + function getProp(elem2, data2, type, mult, container) { + var p2; + if (!data2.k.length) { + p2 = new ValueProperty(elem2, data2, mult, container); + } else if (typeof data2.k[0] === "number") { + p2 = new MultiDimensionalProperty(elem2, data2, mult, container); + } else { + switch (type) { + case 0: + p2 = new KeyframedValueProperty(elem2, data2, mult, container); + break; + case 1: + p2 = new KeyframedMultidimensionalProperty(elem2, data2, mult, container); + break; + default: + break; + } + } + if (p2.effectsSequence.length) { + container.addDynamicProperty(p2); + } + return p2; + } + var ob2 = { + getProp + }; + return ob2; + }(); + DynamicPropertyContainer.prototype = { + addDynamicProperty: function(prop) { + if (this.dynamicProperties.indexOf(prop) === -1) { + this.dynamicProperties.push(prop); + this.container.addDynamicProperty(this); + this._isAnimated = true; + } + }, + iterateDynamicProperties: function() { + this._mdf = false; + var i; + var len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + if (this.dynamicProperties[i]._mdf) { + this._mdf = true; + } + } + }, + initDynamicPropertyContainer: function(container) { + this.container = container; + this.dynamicProperties = []; + this._mdf = false; + this._isAnimated = false; + } + }; + const pointPool = function() { + function create() { + return createTypedArray("float32", 2); + } + return poolFactory(8, create); + }(); + ShapePath.prototype.setPathData = function(closed, len) { + this.c = closed; + this.setLength(len); + var i = 0; + while (i < len) { + this.v[i] = pointPool.newElement(); + this.o[i] = pointPool.newElement(); + this.i[i] = pointPool.newElement(); + i += 1; + } + }; + ShapePath.prototype.setLength = function(len) { + while (this._maxLength < len) { + this.doubleArrayLength(); + } + this._length = len; + }; + ShapePath.prototype.doubleArrayLength = function() { + this.v = this.v.concat(createSizedArray(this._maxLength)); + this.i = this.i.concat(createSizedArray(this._maxLength)); + this.o = this.o.concat(createSizedArray(this._maxLength)); + this._maxLength *= 2; + }; + ShapePath.prototype.setXYAt = function(x2, y2, type, pos, replace) { + var arr; + this._length = Math.max(this._length, pos + 1); + if (this._length >= this._maxLength) { + this.doubleArrayLength(); + } + switch (type) { + case "v": + arr = this.v; + break; + case "i": + arr = this.i; + break; + case "o": + arr = this.o; + break; + default: + arr = []; + break; + } + if (!arr[pos] || arr[pos] && !replace) { + arr[pos] = pointPool.newElement(); + } + arr[pos][0] = x2; + arr[pos][1] = y2; + }; + ShapePath.prototype.setTripleAt = function(vX, vY, oX, oY, iX, iY, pos, replace) { + this.setXYAt(vX, vY, "v", pos, replace); + this.setXYAt(oX, oY, "o", pos, replace); + this.setXYAt(iX, iY, "i", pos, replace); + }; + ShapePath.prototype.reverse = function() { + var newPath = new ShapePath(); + newPath.setPathData(this.c, this._length); + var vertices = this.v; + var outPoints = this.o; + var inPoints = this.i; + var init = 0; + if (this.c) { + newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); + init = 1; + } + var cnt = this._length - 1; + var len = this._length; + var i; + for (i = init; i < len; i += 1) { + newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); + cnt -= 1; + } + return newPath; + }; + const shapePool = function() { + function create() { + return new ShapePath(); + } + function release(shapePath) { + var len = shapePath._length; + var i; + for (i = 0; i < len; i += 1) { + pointPool.release(shapePath.v[i]); + pointPool.release(shapePath.i[i]); + pointPool.release(shapePath.o[i]); + shapePath.v[i] = null; + shapePath.i[i] = null; + shapePath.o[i] = null; + } + shapePath._length = 0; + shapePath.c = false; + } + function clone2(shape) { + var cloned = factory.newElement(); + var i; + var len = shape._length === void 0 ? shape.v.length : shape._length; + cloned.setLength(len); + cloned.c = shape.c; + for (i = 0; i < len; i += 1) { + cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i); + } + return cloned; + } + var factory = poolFactory(4, create, release); + factory.clone = clone2; + return factory; + }(); + ShapeCollection.prototype.addShape = function(shapeData) { + if (this._length === this._maxLength) { + this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); + this._maxLength *= 2; + } + this.shapes[this._length] = shapeData; + this._length += 1; + }; + ShapeCollection.prototype.releaseShapes = function() { + var i; + for (i = 0; i < this._length; i += 1) { + shapePool.release(this.shapes[i]); + } + this._length = 0; + }; + const shapeCollectionPool = function() { + var ob2 = { + newShapeCollection, + release + }; + var _length = 0; + var _maxLength = 4; + var pool = createSizedArray(_maxLength); + function newShapeCollection() { + var shapeCollection; + if (_length) { + _length -= 1; + shapeCollection = pool[_length]; + } else { + shapeCollection = new ShapeCollection(); + } + return shapeCollection; + } + function release(shapeCollection) { + var i; + var len = shapeCollection._length; + for (i = 0; i < len; i += 1) { + shapePool.release(shapeCollection.shapes[i]); + } + shapeCollection._length = 0; + if (_length === _maxLength) { + pool = pooling.double(pool); + _maxLength *= 2; + } + pool[_length] = shapeCollection; + _length += 1; + } + return ob2; + }(); + const ShapePropertyFactory = function() { + var initFrame = -999999; + function interpolateShape(frameNum, previousValue, caching) { + var iterationIndex = caching.lastIndex; + var keyPropS; + var keyPropE; + var isHold; + var j; + var k2; + var jLen; + var kLen; + var perc; + var vertexValue; + var kf = this.keyframes; + if (frameNum < kf[0].t - this.offsetTime) { + keyPropS = kf[0].s[0]; + isHold = true; + iterationIndex = 0; + } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { + keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; + isHold = true; + } else { + var i = iterationIndex; + var len = kf.length - 1; + var flag = true; + var keyData; + var nextKeyData; + var keyframeMetadata; + while (flag) { + keyData = kf[i]; + nextKeyData = kf[i + 1]; + if (nextKeyData.t - this.offsetTime > frameNum) { + break; + } + if (i < len - 1) { + i += 1; + } else { + flag = false; + } + } + keyframeMetadata = this.keyframesMetadata[i] || {}; + isHold = keyData.h === 1; + iterationIndex = i; + if (!isHold) { + if (frameNum >= nextKeyData.t - this.offsetTime) { + perc = 1; + } else if (frameNum < keyData.t - this.offsetTime) { + perc = 0; + } else { + var fnc; + if (keyframeMetadata.__fnct) { + fnc = keyframeMetadata.__fnct; + } else { + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; + keyframeMetadata.__fnct = fnc; + } + perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); + } + keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; + } + keyPropS = keyData.s[0]; + } + jLen = previousValue._length; + kLen = keyPropS.i[0].length; + caching.lastIndex = iterationIndex; + for (j = 0; j < jLen; j += 1) { + for (k2 = 0; k2 < kLen; k2 += 1) { + vertexValue = isHold ? keyPropS.i[j][k2] : keyPropS.i[j][k2] + (keyPropE.i[j][k2] - keyPropS.i[j][k2]) * perc; + previousValue.i[j][k2] = vertexValue; + vertexValue = isHold ? keyPropS.o[j][k2] : keyPropS.o[j][k2] + (keyPropE.o[j][k2] - keyPropS.o[j][k2]) * perc; + previousValue.o[j][k2] = vertexValue; + vertexValue = isHold ? keyPropS.v[j][k2] : keyPropS.v[j][k2] + (keyPropE.v[j][k2] - keyPropS.v[j][k2]) * perc; + previousValue.v[j][k2] = vertexValue; + } + } + } + function interpolateShapeCurrentTime() { + var frameNum = this.comp.renderedFrame - this.offsetTime; + var initTime = this.keyframes[0].t - this.offsetTime; + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; + var lastFrame = this._caching.lastFrame; + if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { + this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; + this.interpolateShape(frameNum, this.pv, this._caching); + } + this._caching.lastFrame = frameNum; + return this.pv; + } + function resetShape() { + this.paths = this.localShapeCollection; + } + function shapesEqual(shape1, shape2) { + if (shape1._length !== shape2._length || shape1.c !== shape2.c) { + return false; + } + var i; + var len = shape1._length; + for (i = 0; i < len; i += 1) { + if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) { + return false; + } + } + return true; + } + function setVValue(newPath) { + if (!shapesEqual(this.v, newPath)) { + this.v = shapePool.clone(newPath); + this.localShapeCollection.releaseShapes(); + this.localShapeCollection.addShape(this.v); + this._mdf = true; + this.paths = this.localShapeCollection; + } + } + function processEffectsSequence() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + if (!this.effectsSequence.length) { + this._mdf = false; + return; + } + if (this.lock) { + this.setVValue(this.pv); + return; + } + this.lock = true; + this._mdf = false; + var finalValue; + if (this.kf) { + finalValue = this.pv; + } else if (this.data.ks) { + finalValue = this.data.ks.k; + } else { + finalValue = this.data.pt.k; + } + var i; + var len = this.effectsSequence.length; + for (i = 0; i < len; i += 1) { + finalValue = this.effectsSequence[i](finalValue); + } + this.setVValue(finalValue); + this.lock = false; + this.frameId = this.elem.globalData.frameId; + } + function ShapeProperty(elem2, data2, type) { + this.propType = "shape"; + this.comp = elem2.comp; + this.container = elem2; + this.elem = elem2; + this.data = data2; + this.k = false; + this.kf = false; + this._mdf = false; + var pathData = type === 3 ? data2.pt.k : data2.ks.k; + this.v = shapePool.clone(pathData); + this.pv = shapePool.clone(this.v); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.paths.addShape(this.v); + this.reset = resetShape; + this.effectsSequence = []; + } + function addEffect(effectFunction) { + this.effectsSequence.push(effectFunction); + this.container.addDynamicProperty(this); + } + ShapeProperty.prototype.interpolateShape = interpolateShape; + ShapeProperty.prototype.getValue = processEffectsSequence; + ShapeProperty.prototype.setVValue = setVValue; + ShapeProperty.prototype.addEffect = addEffect; + function KeyframedShapeProperty(elem2, data2, type) { + this.propType = "shape"; + this.comp = elem2.comp; + this.elem = elem2; + this.container = elem2; + this.offsetTime = elem2.data.st; + this.keyframes = type === 3 ? data2.pt.k : data2.ks.k; + this.keyframesMetadata = []; + this.k = true; + this.kf = true; + var len = this.keyframes[0].s[0].i.length; + this.v = shapePool.newElement(); + this.v.setPathData(this.keyframes[0].s[0].c, len); + this.pv = shapePool.clone(this.v); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.paths.addShape(this.v); + this.lastFrame = initFrame; + this.reset = resetShape; + this._caching = { lastFrame: initFrame, lastIndex: 0 }; + this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; + } + KeyframedShapeProperty.prototype.getValue = processEffectsSequence; + KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; + KeyframedShapeProperty.prototype.setVValue = setVValue; + KeyframedShapeProperty.prototype.addEffect = addEffect; + var EllShapeProperty = function() { + var cPoint = roundCorner; + function EllShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.setPathData(true, 4); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.localShapeCollection.addShape(this.v); + this.d = data2.d; + this.elem = elem2; + this.comp = elem2.comp; + this.frameId = -1; + this.initDynamicPropertyContainer(elem2); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, 0, this); + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertEllToPath(); + } + } + EllShapePropertyFactory.prototype = { + reset: resetShape, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertEllToPath(); + } + }, + convertEllToPath: function() { + var p0 = this.p.v[0]; + var p1 = this.p.v[1]; + var s0 = this.s.v[0] / 2; + var s1 = this.s.v[1] / 2; + var _cw = this.d !== 3; + var _v = this.v; + _v.v[0][0] = p0; + _v.v[0][1] = p1 - s1; + _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.v[1][1] = p1; + _v.v[2][0] = p0; + _v.v[2][1] = p1 + s1; + _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.v[3][1] = p1; + _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; + _v.i[0][1] = p1 - s1; + _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.i[1][1] = p1 - s1 * cPoint; + _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; + _v.i[2][1] = p1 + s1; + _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.i[3][1] = p1 + s1 * cPoint; + _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; + _v.o[0][1] = p1 - s1; + _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.o[1][1] = p1 + s1 * cPoint; + _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; + _v.o[2][1] = p1 + s1; + _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.o[3][1] = p1 - s1 * cPoint; + } + }; + extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); + return EllShapePropertyFactory; + }(); + var StarShapeProperty = function() { + function StarShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.setPathData(true, 0); + this.elem = elem2; + this.comp = elem2.comp; + this.data = data2; + this.frameId = -1; + this.d = data2.d; + this.initDynamicPropertyContainer(elem2); + if (data2.sy === 1) { + this.ir = PropertyFactory.getProp(elem2, data2.ir, 0, 0, this); + this.is = PropertyFactory.getProp(elem2, data2.is, 0, 0.01, this); + this.convertToPath = this.convertStarToPath; + } else { + this.convertToPath = this.convertPolygonToPath; + } + this.pt = PropertyFactory.getProp(elem2, data2.pt, 0, 0, this); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.r = PropertyFactory.getProp(elem2, data2.r, 0, degToRads, this); + this.or = PropertyFactory.getProp(elem2, data2.or, 0, 0, this); + this.os = PropertyFactory.getProp(elem2, data2.os, 0, 0.01, this); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.localShapeCollection.addShape(this.v); + this.paths = this.localShapeCollection; + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertToPath(); + } + } + StarShapePropertyFactory.prototype = { + reset: resetShape, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertToPath(); + } + }, + convertStarToPath: function() { + var numPts = Math.floor(this.pt.v) * 2; + var angle = Math.PI * 2 / numPts; + var longFlag = true; + var longRad = this.or.v; + var shortRad = this.ir.v; + var longRound = this.os.v; + var shortRound = this.is.v; + var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); + var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); + var i; + var rad; + var roundness; + var perimSegment; + var currentAng = -Math.PI / 2; + currentAng += this.r.v; + var dir = this.data.d === 3 ? -1 : 1; + this.v._length = 0; + for (i = 0; i < numPts; i += 1) { + rad = longFlag ? longRad : shortRad; + roundness = longFlag ? longRound : shortRound; + perimSegment = longFlag ? longPerimSegment : shortPerimSegment; + var x2 = rad * Math.cos(currentAng); + var y2 = rad * Math.sin(currentAng); + var ox = x2 === 0 && y2 === 0 ? 0 : y2 / Math.sqrt(x2 * x2 + y2 * y2); + var oy = x2 === 0 && y2 === 0 ? 0 : -x2 / Math.sqrt(x2 * x2 + y2 * y2); + x2 += +this.p.v[0]; + y2 += +this.p.v[1]; + this.v.setTripleAt(x2, y2, x2 - ox * perimSegment * roundness * dir, y2 - oy * perimSegment * roundness * dir, x2 + ox * perimSegment * roundness * dir, y2 + oy * perimSegment * roundness * dir, i, true); + longFlag = !longFlag; + currentAng += angle * dir; + } + }, + convertPolygonToPath: function() { + var numPts = Math.floor(this.pt.v); + var angle = Math.PI * 2 / numPts; + var rad = this.or.v; + var roundness = this.os.v; + var perimSegment = 2 * Math.PI * rad / (numPts * 4); + var i; + var currentAng = -Math.PI * 0.5; + var dir = this.data.d === 3 ? -1 : 1; + currentAng += this.r.v; + this.v._length = 0; + for (i = 0; i < numPts; i += 1) { + var x2 = rad * Math.cos(currentAng); + var y2 = rad * Math.sin(currentAng); + var ox = x2 === 0 && y2 === 0 ? 0 : y2 / Math.sqrt(x2 * x2 + y2 * y2); + var oy = x2 === 0 && y2 === 0 ? 0 : -x2 / Math.sqrt(x2 * x2 + y2 * y2); + x2 += +this.p.v[0]; + y2 += +this.p.v[1]; + this.v.setTripleAt(x2, y2, x2 - ox * perimSegment * roundness * dir, y2 - oy * perimSegment * roundness * dir, x2 + ox * perimSegment * roundness * dir, y2 + oy * perimSegment * roundness * dir, i, true); + currentAng += angle * dir; + } + this.paths.length = 0; + this.paths[0] = this.v; + } + }; + extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); + return StarShapePropertyFactory; + }(); + var RectShapeProperty = function() { + function RectShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.c = true; + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.localShapeCollection.addShape(this.v); + this.paths = this.localShapeCollection; + this.elem = elem2; + this.comp = elem2.comp; + this.frameId = -1; + this.d = data2.d; + this.initDynamicPropertyContainer(elem2); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, 0, this); + this.r = PropertyFactory.getProp(elem2, data2.r, 0, 0, this); + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertRectToPath(); + } + } + RectShapePropertyFactory.prototype = { + convertRectToPath: function() { + var p0 = this.p.v[0]; + var p1 = this.p.v[1]; + var v0 = this.s.v[0] / 2; + var v12 = this.s.v[1] / 2; + var round = bmMin(v0, v12, this.r.v); + var cPoint = round * (1 - roundCorner); + this.v._length = 0; + if (this.d === 2 || this.d === 1) { + this.v.setTripleAt(p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + cPoint, 0, true); + this.v.setTripleAt(p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - cPoint, p0 + v0, p1 + v12 - round, 1, true); + if (round !== 0) { + this.v.setTripleAt(p0 + v0 - round, p1 + v12, p0 + v0 - round, p1 + v12, p0 + v0 - cPoint, p1 + v12, 2, true); + this.v.setTripleAt(p0 - v0 + round, p1 + v12, p0 - v0 + cPoint, p1 + v12, p0 - v0 + round, p1 + v12, 3, true); + this.v.setTripleAt(p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - cPoint, 4, true); + this.v.setTripleAt(p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + cPoint, p0 - v0, p1 - v12 + round, 5, true); + this.v.setTripleAt(p0 - v0 + round, p1 - v12, p0 - v0 + round, p1 - v12, p0 - v0 + cPoint, p1 - v12, 6, true); + this.v.setTripleAt(p0 + v0 - round, p1 - v12, p0 + v0 - cPoint, p1 - v12, p0 + v0 - round, p1 - v12, 7, true); + } else { + this.v.setTripleAt(p0 - v0, p1 + v12, p0 - v0 + cPoint, p1 + v12, p0 - v0, p1 + v12, 2); + this.v.setTripleAt(p0 - v0, p1 - v12, p0 - v0, p1 - v12 + cPoint, p0 - v0, p1 - v12, 3); + } + } else { + this.v.setTripleAt(p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + cPoint, p0 + v0, p1 - v12 + round, 0, true); + if (round !== 0) { + this.v.setTripleAt(p0 + v0 - round, p1 - v12, p0 + v0 - round, p1 - v12, p0 + v0 - cPoint, p1 - v12, 1, true); + this.v.setTripleAt(p0 - v0 + round, p1 - v12, p0 - v0 + cPoint, p1 - v12, p0 - v0 + round, p1 - v12, 2, true); + this.v.setTripleAt(p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + cPoint, 3, true); + this.v.setTripleAt(p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - cPoint, p0 - v0, p1 + v12 - round, 4, true); + this.v.setTripleAt(p0 - v0 + round, p1 + v12, p0 - v0 + round, p1 + v12, p0 - v0 + cPoint, p1 + v12, 5, true); + this.v.setTripleAt(p0 + v0 - round, p1 + v12, p0 + v0 - cPoint, p1 + v12, p0 + v0 - round, p1 + v12, 6, true); + this.v.setTripleAt(p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - cPoint, 7, true); + } else { + this.v.setTripleAt(p0 - v0, p1 - v12, p0 - v0 + cPoint, p1 - v12, p0 - v0, p1 - v12, 1, true); + this.v.setTripleAt(p0 - v0, p1 + v12, p0 - v0, p1 + v12 - cPoint, p0 - v0, p1 + v12, 2, true); + this.v.setTripleAt(p0 + v0, p1 + v12, p0 + v0 - cPoint, p1 + v12, p0 + v0, p1 + v12, 3, true); + } + } + }, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertRectToPath(); + } + }, + reset: resetShape + }; + extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); + return RectShapePropertyFactory; + }(); + function getShapeProp(elem2, data2, type) { + var prop; + if (type === 3 || type === 4) { + var dataProp = type === 3 ? data2.pt : data2.ks; + var keys2 = dataProp.k; + if (keys2.length) { + prop = new KeyframedShapeProperty(elem2, data2, type); + } else { + prop = new ShapeProperty(elem2, data2, type); + } + } else if (type === 5) { + prop = new RectShapeProperty(elem2, data2); + } else if (type === 6) { + prop = new EllShapeProperty(elem2, data2); + } else if (type === 7) { + prop = new StarShapeProperty(elem2, data2); + } + if (prop.k) { + elem2.addDynamicProperty(prop); + } + return prop; + } + function getConstructorFunction() { + return ShapeProperty; + } + function getKeyframedConstructorFunction() { + return KeyframedShapeProperty; + } + var ob2 = {}; + ob2.getShapeProp = getShapeProp; + ob2.getConstructorFunction = getConstructorFunction; + ob2.getKeyframedConstructorFunction = getKeyframedConstructorFunction; + return ob2; + }(); + const Matrix = /* @__PURE__ */ function() { + var _cos = Math.cos; + var _sin = Math.sin; + var _tan = Math.tan; + var _rnd = Math.round; + function reset() { + this.props[0] = 1; + this.props[1] = 0; + this.props[2] = 0; + this.props[3] = 0; + this.props[4] = 0; + this.props[5] = 1; + this.props[6] = 0; + this.props[7] = 0; + this.props[8] = 0; + this.props[9] = 0; + this.props[10] = 1; + this.props[11] = 0; + this.props[12] = 0; + this.props[13] = 0; + this.props[14] = 0; + this.props[15] = 1; + return this; + } + function rotate(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function rotateX(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); + } + function rotateY(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); + } + function rotateZ(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function shear(sx, sy) { + return this._t(1, sy, sx, 1, 0, 0); + } + function skew(ax, ay) { + return this.shear(_tan(ax), _tan(ay)); + } + function skewFromAxis(ax, angle) { + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function scale2(sx, sy, sz) { + if (!sz && sz !== 0) { + sz = 1; + } + if (sx === 1 && sy === 1 && sz === 1) { + return this; + } + return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); + } + function setTransform(a2, b3, c2, d, e, f, g2, h, i, j, k2, l2, m, n2, o, p2) { + this.props[0] = a2; + this.props[1] = b3; + this.props[2] = c2; + this.props[3] = d; + this.props[4] = e; + this.props[5] = f; + this.props[6] = g2; + this.props[7] = h; + this.props[8] = i; + this.props[9] = j; + this.props[10] = k2; + this.props[11] = l2; + this.props[12] = m; + this.props[13] = n2; + this.props[14] = o; + this.props[15] = p2; + return this; + } + function translate(tx, ty, tz) { + tz = tz || 0; + if (tx !== 0 || ty !== 0 || tz !== 0) { + return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); + } + return this; + } + function transform2(a2, b22, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { + var _p2 = this.props; + if (a2 === 1 && b22 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) { + _p2[12] = _p2[12] * a2 + _p2[15] * m2; + _p2[13] = _p2[13] * f2 + _p2[15] * n2; + _p2[14] = _p2[14] * k2 + _p2[15] * o2; + _p2[15] *= p2; + this._identityCalculated = false; + return this; + } + var a1 = _p2[0]; + var b1 = _p2[1]; + var c1 = _p2[2]; + var d1 = _p2[3]; + var e1 = _p2[4]; + var f1 = _p2[5]; + var g1 = _p2[6]; + var h1 = _p2[7]; + var i1 = _p2[8]; + var j1 = _p2[9]; + var k1 = _p2[10]; + var l1 = _p2[11]; + var m1 = _p2[12]; + var n1 = _p2[13]; + var o1 = _p2[14]; + var p1 = _p2[15]; + _p2[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; + _p2[1] = a1 * b22 + b1 * f2 + c1 * j2 + d1 * n2; + _p2[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; + _p2[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; + _p2[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; + _p2[5] = e1 * b22 + f1 * f2 + g1 * j2 + h1 * n2; + _p2[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; + _p2[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; + _p2[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; + _p2[9] = i1 * b22 + j1 * f2 + k1 * j2 + l1 * n2; + _p2[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; + _p2[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; + _p2[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; + _p2[13] = m1 * b22 + n1 * f2 + o1 * j2 + p1 * n2; + _p2[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; + _p2[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; + this._identityCalculated = false; + return this; + } + function isIdentity() { + if (!this._identityCalculated) { + this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1); + this._identityCalculated = true; + } + return this._identity; + } + function equals2(matr) { + var i = 0; + while (i < 16) { + if (matr.props[i] !== this.props[i]) { + return false; + } + i += 1; + } + return true; + } + function clone2(matr) { + var i; + for (i = 0; i < 16; i += 1) { + matr.props[i] = this.props[i]; + } + return matr; + } + function cloneFromProps(props) { + var i; + for (i = 0; i < 16; i += 1) { + this.props[i] = props[i]; + } + } + function applyToPoint(x2, y2, z) { + return { + x: x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12], + y: x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13], + z: x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14] + }; + } + function applyToX(x2, y2, z) { + return x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12]; + } + function applyToY(x2, y2, z) { + return x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13]; + } + function applyToZ(x2, y2, z) { + return x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14]; + } + function getInverseMatrix() { + var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; + var a2 = this.props[5] / determinant; + var b3 = -this.props[1] / determinant; + var c2 = -this.props[4] / determinant; + var d = this.props[0] / determinant; + var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; + var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; + var inverseMatrix = new Matrix(); + inverseMatrix.props[0] = a2; + inverseMatrix.props[1] = b3; + inverseMatrix.props[4] = c2; + inverseMatrix.props[5] = d; + inverseMatrix.props[12] = e; + inverseMatrix.props[13] = f; + return inverseMatrix; + } + function inversePoint(pt) { + var inverseMatrix = this.getInverseMatrix(); + return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0); + } + function inversePoints(pts) { + var i; + var len = pts.length; + var retPts = []; + for (i = 0; i < len; i += 1) { + retPts[i] = inversePoint(pts[i]); + } + return retPts; + } + function applyToTriplePoints(pt1, pt2, pt3) { + var arr = createTypedArray("float32", 6); + if (this.isIdentity()) { + arr[0] = pt1[0]; + arr[1] = pt1[1]; + arr[2] = pt2[0]; + arr[3] = pt2[1]; + arr[4] = pt3[0]; + arr[5] = pt3[1]; + } else { + var p0 = this.props[0]; + var p1 = this.props[1]; + var p4 = this.props[4]; + var p5 = this.props[5]; + var p12 = this.props[12]; + var p13 = this.props[13]; + arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; + arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; + arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; + arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; + arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; + arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; + } + return arr; + } + function applyToPointArray(x2, y2, z) { + var arr; + if (this.isIdentity()) { + arr = [x2, y2, z]; + } else { + arr = [ + x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12], + x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13], + x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14] + ]; + } + return arr; + } + function applyToPointStringified(x2, y2) { + if (this.isIdentity()) { + return x2 + "," + y2; + } + var _p2 = this.props; + return Math.round((x2 * _p2[0] + y2 * _p2[4] + _p2[12]) * 100) / 100 + "," + Math.round((x2 * _p2[1] + y2 * _p2[5] + _p2[13]) * 100) / 100; + } + function toCSS() { + var i = 0; + var props = this.props; + var cssValue = "matrix3d("; + var v = 1e4; + while (i < 16) { + cssValue += _rnd(props[i] * v) / v; + cssValue += i === 15 ? ")" : ","; + i += 1; + } + return cssValue; + } + function roundMatrixProperty(val2) { + var v = 1e4; + if (val2 < 1e-6 && val2 > 0 || val2 > -1e-6 && val2 < 0) { + return _rnd(val2 * v) / v; + } + return val2; + } + function to2dCSS() { + var props = this.props; + var _a3 = roundMatrixProperty(props[0]); + var _b3 = roundMatrixProperty(props[1]); + var _c = roundMatrixProperty(props[4]); + var _d = roundMatrixProperty(props[5]); + var _e = roundMatrixProperty(props[12]); + var _f = roundMatrixProperty(props[13]); + return "matrix(" + _a3 + "," + _b3 + "," + _c + "," + _d + "," + _e + "," + _f + ")"; + } + return function() { + this.reset = reset; + this.rotate = rotate; + this.rotateX = rotateX; + this.rotateY = rotateY; + this.rotateZ = rotateZ; + this.skew = skew; + this.skewFromAxis = skewFromAxis; + this.shear = shear; + this.scale = scale2; + this.setTransform = setTransform; + this.translate = translate; + this.transform = transform2; + this.applyToPoint = applyToPoint; + this.applyToX = applyToX; + this.applyToY = applyToY; + this.applyToZ = applyToZ; + this.applyToPointArray = applyToPointArray; + this.applyToTriplePoints = applyToTriplePoints; + this.applyToPointStringified = applyToPointStringified; + this.toCSS = toCSS; + this.to2dCSS = to2dCSS; + this.clone = clone2; + this.cloneFromProps = cloneFromProps; + this.equals = equals2; + this.inversePoints = inversePoints; + this.inversePoint = inversePoint; + this.getInverseMatrix = getInverseMatrix; + this._t = this.transform; + this.isIdentity = isIdentity; + this._identity = true; + this._identityCalculated = false; + this.props = createTypedArray("float32", 16); + this.reset(); + }; + }(); + standalone = "__[STANDALONE]__"; + animationData = "__[ANIMATIONDATA]__"; + renderer = ""; + lottie.play = animationManager.play; + lottie.pause = animationManager.pause; + lottie.setLocationHref = setLocation; + lottie.togglePause = animationManager.togglePause; + lottie.setSpeed = animationManager.setSpeed; + lottie.setDirection = animationManager.setDirection; + lottie.stop = animationManager.stop; + lottie.searchAnimations = searchAnimations; + lottie.registerAnimation = animationManager.registerAnimation; + lottie.loadAnimation = loadAnimation; + lottie.setSubframeRendering = setSubframeRendering; + lottie.resize = animationManager.resize; + lottie.goToAndStop = animationManager.goToAndStop; + lottie.destroy = animationManager.destroy; + lottie.setQuality = setQuality; + lottie.inBrowser = inBrowser; + lottie.installPlugin = installPlugin; + lottie.freeze = animationManager.freeze; + lottie.unfreeze = animationManager.unfreeze; + lottie.setVolume = animationManager.setVolume; + lottie.mute = animationManager.mute; + lottie.unmute = animationManager.unmute; + lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations; + lottie.useWebWorker = setWebWorker; + lottie.setIDPrefix = setPrefix; + lottie.__getFactory = getFactory; + lottie.version = "[[BM_VERSION]]"; + queryString = ""; + if (standalone) { + scripts = document.getElementsByTagName("script"); + index2 = scripts.length - 1; + myScript = scripts[index2] || { + src: "" + }; + queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, "") : ""; + renderer = getQueryVariable("renderer"); + } + readyStateCheckInterval = setInterval(checkReady, 100); + try { + if (!(typeof exports === "object" && typeof module !== "undefined") && !(typeof define === "function" && define.amd)) { + window.bodymovin = lottie; + } + } catch (err2) { + } + const ShapeModifiers = function() { + var ob2 = {}; + var modifiers = {}; + ob2.registerModifier = registerModifier; + ob2.getModifier = getModifier; + function registerModifier(nm, factory) { + if (!modifiers[nm]) { + modifiers[nm] = factory; + } + } + function getModifier(nm, elem2, data2) { + return new modifiers[nm](elem2, data2); + } + return ob2; + }(); + ShapeModifier.prototype.initModifierProperties = function() { + }; + ShapeModifier.prototype.addShapeToModifier = function() { + }; + ShapeModifier.prototype.addShape = function(data2) { + if (!this.closed) { + data2.sh.container.addDynamicProperty(data2.sh); + var shapeData = { shape: data2.sh, data: data2, localShapeCollection: shapeCollectionPool.newShapeCollection() }; + this.shapes.push(shapeData); + this.addShapeToModifier(shapeData); + if (this._isAnimated) { + data2.setAsAnimated(); + } + } + }; + ShapeModifier.prototype.init = function(elem2, data2) { + this.shapes = []; + this.elem = elem2; + this.initDynamicPropertyContainer(elem2); + this.initModifierProperties(elem2, data2); + this.frameId = initialDefaultFrame; + this.closed = false; + this.k = false; + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.getValue(true); + } + }; + ShapeModifier.prototype.processKeys = function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + }; + extendPrototype([DynamicPropertyContainer], ShapeModifier); + extendPrototype([ShapeModifier], TrimModifier); + TrimModifier.prototype.initModifierProperties = function(elem2, data2) { + this.s = PropertyFactory.getProp(elem2, data2.s, 0, 0.01, this); + this.e = PropertyFactory.getProp(elem2, data2.e, 0, 0.01, this); + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0, this); + this.sValue = 0; + this.eValue = 0; + this.getValue = this.processKeys; + this.m = data2.m; + this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; + }; + TrimModifier.prototype.addShapeToModifier = function(shapeData) { + shapeData.pathsData = []; + }; + TrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) { + var segments = []; + if (e <= 1) { + segments.push({ + s, + e + }); + } else if (s >= 1) { + segments.push({ + s: s - 1, + e: e - 1 + }); + } else { + segments.push({ + s, + e: 1 + }); + segments.push({ + s: 0, + e: e - 1 + }); + } + var shapeSegments = []; + var i; + var len = segments.length; + var segmentOb; + for (i = 0; i < len; i += 1) { + segmentOb = segments[i]; + if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { + var shapeS; + var shapeE; + if (segmentOb.s * totalModifierLength <= addedLength) { + shapeS = 0; + } else { + shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; + } + if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) { + shapeE = 1; + } else { + shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; + } + shapeSegments.push([shapeS, shapeE]); + } + } + if (!shapeSegments.length) { + shapeSegments.push([0, 0]); + } + return shapeSegments; + }; + TrimModifier.prototype.releasePathsData = function(pathsData) { + var i; + var len = pathsData.length; + for (i = 0; i < len; i += 1) { + segmentsLengthPool.release(pathsData[i]); + } + pathsData.length = 0; + return pathsData; + }; + TrimModifier.prototype.processShapes = function(_isFirstFrame) { + var s; + var e; + if (this._mdf || _isFirstFrame) { + var o = this.o.v % 360 / 360; + if (o < 0) { + o += 1; + } + if (this.s.v > 1) { + s = 1 + o; + } else if (this.s.v < 0) { + s = 0 + o; + } else { + s = this.s.v + o; + } + if (this.e.v > 1) { + e = 1 + o; + } else if (this.e.v < 0) { + e = 0 + o; + } else { + e = this.e.v + o; + } + if (s > e) { + var _s = s; + s = e; + e = _s; + } + s = Math.round(s * 1e4) * 1e-4; + e = Math.round(e * 1e4) * 1e-4; + this.sValue = s; + this.eValue = e; + } else { + s = this.sValue; + e = this.eValue; + } + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var pathsData; + var pathData; + var totalShapeLength; + var totalModifierLength = 0; + if (e === s) { + for (i = 0; i < len; i += 1) { + this.shapes[i].localShapeCollection.releaseShapes(); + this.shapes[i].shape._mdf = true; + this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; + if (this._mdf) { + this.shapes[i].pathsData.length = 0; + } + } + } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { + var segments = []; + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) { + shapeData.shape.paths = shapeData.localShapeCollection; + } else { + shapePaths = shapeData.shape.paths; + jLen = shapePaths._length; + totalShapeLength = 0; + if (!shapeData.shape._mdf && shapeData.pathsData.length) { + totalShapeLength = shapeData.totalShapeLength; + } else { + pathsData = this.releasePathsData(shapeData.pathsData); + for (j = 0; j < jLen; j += 1) { + pathData = bez.getSegmentsLength(shapePaths.shapes[j]); + pathsData.push(pathData); + totalShapeLength += pathData.totalLength; + } + shapeData.totalShapeLength = totalShapeLength; + shapeData.pathsData = pathsData; + } + totalModifierLength += totalShapeLength; + shapeData.shape._mdf = true; + } + } + var shapeS = s; + var shapeE = e; + var addedLength = 0; + var edges; + for (i = len - 1; i >= 0; i -= 1) { + shapeData = this.shapes[i]; + if (shapeData.shape._mdf) { + localShapeCollection = shapeData.localShapeCollection; + localShapeCollection.releaseShapes(); + if (this.m === 2 && len > 1) { + edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); + addedLength += shapeData.totalShapeLength; + } else { + edges = [[shapeS, shapeE]]; + } + jLen = edges.length; + for (j = 0; j < jLen; j += 1) { + shapeS = edges[j][0]; + shapeE = edges[j][1]; + segments.length = 0; + if (shapeE <= 1) { + segments.push({ + s: shapeData.totalShapeLength * shapeS, + e: shapeData.totalShapeLength * shapeE + }); + } else if (shapeS >= 1) { + segments.push({ + s: shapeData.totalShapeLength * (shapeS - 1), + e: shapeData.totalShapeLength * (shapeE - 1) + }); + } else { + segments.push({ + s: shapeData.totalShapeLength * shapeS, + e: shapeData.totalShapeLength + }); + segments.push({ + s: 0, + e: shapeData.totalShapeLength * (shapeE - 1) + }); + } + var newShapesData = this.addShapes(shapeData, segments[0]); + if (segments[0].s !== segments[0].e) { + if (segments.length > 1) { + var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1]; + if (lastShapeInCollection.c) { + var lastShape = newShapesData.pop(); + this.addPaths(newShapesData, localShapeCollection); + newShapesData = this.addShapes(shapeData, segments[1], lastShape); + } else { + this.addPaths(newShapesData, localShapeCollection); + newShapesData = this.addShapes(shapeData, segments[1]); + } + } + this.addPaths(newShapesData, localShapeCollection); + } + } + shapeData.shape.paths = localShapeCollection; + } + } + } else if (this._mdf) { + for (i = 0; i < len; i += 1) { + this.shapes[i].pathsData.length = 0; + this.shapes[i].shape._mdf = true; + } + } + }; + TrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) { + var i; + var len = newPaths.length; + for (i = 0; i < len; i += 1) { + localShapeCollection.addShape(newPaths[i]); + } + }; + TrimModifier.prototype.addSegment = function(pt1, pt2, pt3, pt4, shapePath, pos, newShape) { + shapePath.setXYAt(pt2[0], pt2[1], "o", pos); + shapePath.setXYAt(pt3[0], pt3[1], "i", pos + 1); + if (newShape) { + shapePath.setXYAt(pt1[0], pt1[1], "v", pos); + } + shapePath.setXYAt(pt4[0], pt4[1], "v", pos + 1); + }; + TrimModifier.prototype.addSegmentFromArray = function(points, shapePath, pos, newShape) { + shapePath.setXYAt(points[1], points[5], "o", pos); + shapePath.setXYAt(points[2], points[6], "i", pos + 1); + if (newShape) { + shapePath.setXYAt(points[0], points[4], "v", pos); + } + shapePath.setXYAt(points[3], points[7], "v", pos + 1); + }; + TrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath) { + var pathsData = shapeData.pathsData; + var shapePaths = shapeData.shape.paths.shapes; + var i; + var len = shapeData.shape.paths._length; + var j; + var jLen; + var addedLength = 0; + var currentLengthData; + var segmentCount; + var lengths2; + var segment; + var shapes = []; + var initPos; + var newShape = true; + if (!shapePath) { + shapePath = shapePool.newElement(); + segmentCount = 0; + initPos = 0; + } else { + segmentCount = shapePath._length; + initPos = shapePath._length; + } + shapes.push(shapePath); + for (i = 0; i < len; i += 1) { + lengths2 = pathsData[i].lengths; + shapePath.c = shapePaths[i].c; + jLen = shapePaths[i].c ? lengths2.length : lengths2.length + 1; + for (j = 1; j < jLen; j += 1) { + currentLengthData = lengths2[j - 1]; + if (addedLength + currentLengthData.addedLength < shapeSegment.s) { + addedLength += currentLengthData.addedLength; + shapePath.c = false; + } else if (addedLength > shapeSegment.e) { + shapePath.c = false; + break; + } else { + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); + newShape = false; + } else { + segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths2[j - 1]); + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); + newShape = false; + shapePath.c = false; + } + addedLength += currentLengthData.addedLength; + segmentCount += 1; + } + } + if (shapePaths[i].c && lengths2.length) { + currentLengthData = lengths2[j - 1]; + if (addedLength <= shapeSegment.e) { + var segmentLength = lengths2[j - 1].addedLength; + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); + newShape = false; + } else { + segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths2[j - 1]); + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); + newShape = false; + shapePath.c = false; + } + } else { + shapePath.c = false; + } + addedLength += currentLengthData.addedLength; + segmentCount += 1; + } + if (shapePath._length) { + shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], "i", initPos); + shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], "o", shapePath._length - 1); + } + if (addedLength > shapeSegment.e) { + break; + } + if (i < len - 1) { + shapePath = shapePool.newElement(); + newShape = true; + shapes.push(shapePath); + segmentCount = 0; + } + } + return shapes; + }; + extendPrototype([ShapeModifier], PuckerAndBloatModifier); + PuckerAndBloatModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.amount = PropertyFactory.getProp(elem2, data2.a, 0, null, this); + this._isAnimated = !!this.amount.effectsSequence.length; + }; + PuckerAndBloatModifier.prototype.processPath = function(path, amount) { + var percent = amount / 100; + var centerPoint = [0, 0]; + var pathLength = path._length; + var i = 0; + for (i = 0; i < pathLength; i += 1) { + centerPoint[0] += path.v[i][0]; + centerPoint[1] += path.v[i][1]; + } + centerPoint[0] /= pathLength; + centerPoint[1] /= pathLength; + var clonedPath = shapePool.newElement(); + clonedPath.c = path.c; + var vX; + var vY; + var oX; + var oY; + var iX; + var iY; + for (i = 0; i < pathLength; i += 1) { + vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; + vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; + oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; + oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; + iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; + iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); + } + return clonedPath; + }; + PuckerAndBloatModifier.prototype.processShapes = function(_isFirstFrame) { + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var amount = this.amount.v; + if (amount !== 0) { + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + localShapeCollection = shapeData.localShapeCollection; + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { + localShapeCollection.releaseShapes(); + shapeData.shape._mdf = true; + shapePaths = shapeData.shape.paths.shapes; + jLen = shapeData.shape.paths._length; + for (j = 0; j < jLen; j += 1) { + localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); + } + } + shapeData.shape.paths = shapeData.localShapeCollection; + } + } + if (!this.dynamicProperties.length) { + this._mdf = false; + } + }; + const TransformPropertyFactory = function() { + var defaultVector = [0, 0]; + function applyToMatrix(mat) { + var _mdf = this._mdf; + this.iterateDynamicProperties(); + this._mdf = this._mdf || _mdf; + if (this.a) { + mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + } + if (this.s) { + mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + } + if (this.sk) { + mat.skewFromAxis(-this.sk.v, this.sa.v); + } + if (this.r) { + mat.rotate(-this.r.v); + } else { + mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + } + if (this.data.p.s) { + if (this.data.p.z) { + mat.translate(this.px.v, this.py.v, -this.pz.v); + } else { + mat.translate(this.px.v, this.py.v, 0); + } + } else { + mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + } + } + function processKeys(forceRender) { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + if (this._isDirty) { + this.precalculateMatrix(); + this._isDirty = false; + } + this.iterateDynamicProperties(); + if (this._mdf || forceRender) { + var frameRate2; + this.v.cloneFromProps(this.pre.props); + if (this.appliedTransformations < 1) { + this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + } + if (this.appliedTransformations < 2) { + this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + } + if (this.sk && this.appliedTransformations < 3) { + this.v.skewFromAxis(-this.sk.v, this.sa.v); + } + if (this.r && this.appliedTransformations < 4) { + this.v.rotate(-this.r.v); + } else if (!this.r && this.appliedTransformations < 4) { + this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + } + if (this.autoOriented) { + var v12; + var v2; + frameRate2 = this.elem.globalData.frameRate; + if (this.p && this.p.keyframes && this.p.getValueAtTime) { + if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { + v12 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate2, 0); + v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate2, 0); + } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { + v12 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate2, 0); + v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate2, 0); + } else { + v12 = this.p.pv; + v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate2, this.p.offsetTime); + } + } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { + v12 = []; + v2 = []; + var px = this.px; + var py = this.py; + if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { + v12[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate2, 0); + v12[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate2, 0); + v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate2, 0); + v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate2, 0); + } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { + v12[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate2, 0); + v12[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate2, 0); + v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate2, 0); + v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate2, 0); + } else { + v12 = [px.pv, py.pv]; + v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate2, px.offsetTime); + v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate2, py.offsetTime); + } + } else { + v2 = defaultVector; + v12 = v2; + } + this.v.rotate(-Math.atan2(v12[1] - v2[1], v12[0] - v2[0])); + } + if (this.data.p && this.data.p.s) { + if (this.data.p.z) { + this.v.translate(this.px.v, this.py.v, -this.pz.v); + } else { + this.v.translate(this.px.v, this.py.v, 0); + } + } else { + this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + } + } + this.frameId = this.elem.globalData.frameId; + } + function precalculateMatrix() { + if (!this.a.k) { + this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + this.appliedTransformations = 1; + } else { + return; + } + if (!this.s.effectsSequence.length) { + this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + this.appliedTransformations = 2; + } else { + return; + } + if (this.sk) { + if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { + this.pre.skewFromAxis(-this.sk.v, this.sa.v); + this.appliedTransformations = 3; + } else { + return; + } + } + if (this.r) { + if (!this.r.effectsSequence.length) { + this.pre.rotate(-this.r.v); + this.appliedTransformations = 4; + } + } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { + this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + this.appliedTransformations = 4; + } + } + function autoOrient() { + } + function addDynamicProperty(prop) { + this._addDynamicProperty(prop); + this.elem.addDynamicProperty(prop); + this._isDirty = true; + } + function TransformProperty(elem2, data2, container) { + this.elem = elem2; + this.frameId = -1; + this.propType = "transform"; + this.data = data2; + this.v = new Matrix(); + this.pre = new Matrix(); + this.appliedTransformations = 0; + this.initDynamicPropertyContainer(container || elem2); + if (data2.p && data2.p.s) { + this.px = PropertyFactory.getProp(elem2, data2.p.x, 0, 0, this); + this.py = PropertyFactory.getProp(elem2, data2.p.y, 0, 0, this); + if (data2.p.z) { + this.pz = PropertyFactory.getProp(elem2, data2.p.z, 0, 0, this); + } + } else { + this.p = PropertyFactory.getProp(elem2, data2.p || { k: [0, 0, 0] }, 1, 0, this); + } + if (data2.rx) { + this.rx = PropertyFactory.getProp(elem2, data2.rx, 0, degToRads, this); + this.ry = PropertyFactory.getProp(elem2, data2.ry, 0, degToRads, this); + this.rz = PropertyFactory.getProp(elem2, data2.rz, 0, degToRads, this); + if (data2.or.k[0].ti) { + var i; + var len = data2.or.k.length; + for (i = 0; i < len; i += 1) { + data2.or.k[i].to = null; + data2.or.k[i].ti = null; + } + } + this.or = PropertyFactory.getProp(elem2, data2.or, 1, degToRads, this); + this.or.sh = true; + } else { + this.r = PropertyFactory.getProp(elem2, data2.r || { k: 0 }, 0, degToRads, this); + } + if (data2.sk) { + this.sk = PropertyFactory.getProp(elem2, data2.sk, 0, degToRads, this); + this.sa = PropertyFactory.getProp(elem2, data2.sa, 0, degToRads, this); + } + this.a = PropertyFactory.getProp(elem2, data2.a || { k: [0, 0, 0] }, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s || { k: [100, 100, 100] }, 1, 0.01, this); + if (data2.o) { + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, elem2); + } else { + this.o = { _mdf: false, v: 1 }; + } + this._isDirty = true; + if (!this.dynamicProperties.length) { + this.getValue(true); + } + } + TransformProperty.prototype = { + applyToMatrix, + getValue: processKeys, + precalculateMatrix, + autoOrient + }; + extendPrototype([DynamicPropertyContainer], TransformProperty); + TransformProperty.prototype.addDynamicProperty = addDynamicProperty; + TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; + function getTransformProperty(elem2, data2, container) { + return new TransformProperty(elem2, data2, container); + } + return { + getTransformProperty + }; + }(); + extendPrototype([ShapeModifier], RepeaterModifier); + RepeaterModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.c = PropertyFactory.getProp(elem2, data2.c, 0, null, this); + this.o = PropertyFactory.getProp(elem2, data2.o, 0, null, this); + this.tr = TransformPropertyFactory.getTransformProperty(elem2, data2.tr, this); + this.so = PropertyFactory.getProp(elem2, data2.tr.so, 0, 0.01, this); + this.eo = PropertyFactory.getProp(elem2, data2.tr.eo, 0, 0.01, this); + this.data = data2; + if (!this.dynamicProperties.length) { + this.getValue(true); + } + this._isAnimated = !!this.dynamicProperties.length; + this.pMatrix = new Matrix(); + this.rMatrix = new Matrix(); + this.sMatrix = new Matrix(); + this.tMatrix = new Matrix(); + this.matrix = new Matrix(); + }; + RepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform2, perc, inv) { + var dir = inv ? -1 : 1; + var scaleX = transform2.s.v[0] + (1 - transform2.s.v[0]) * (1 - perc); + var scaleY = transform2.s.v[1] + (1 - transform2.s.v[1]) * (1 - perc); + pMatrix.translate(transform2.p.v[0] * dir * perc, transform2.p.v[1] * dir * perc, transform2.p.v[2]); + rMatrix.translate(-transform2.a.v[0], -transform2.a.v[1], transform2.a.v[2]); + rMatrix.rotate(-transform2.r.v * dir * perc); + rMatrix.translate(transform2.a.v[0], transform2.a.v[1], transform2.a.v[2]); + sMatrix.translate(-transform2.a.v[0], -transform2.a.v[1], transform2.a.v[2]); + sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); + sMatrix.translate(transform2.a.v[0], transform2.a.v[1], transform2.a.v[2]); + }; + RepeaterModifier.prototype.init = function(elem2, arr, pos, elemsData) { + this.elem = elem2; + this.arr = arr; + this.pos = pos; + this.elemsData = elemsData; + this._currentCopies = 0; + this._elements = []; + this._groups = []; + this.frameId = -1; + this.initDynamicPropertyContainer(elem2); + this.initModifierProperties(elem2, arr[pos]); + while (pos > 0) { + pos -= 1; + this._elements.unshift(arr[pos]); + } + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.getValue(true); + } + }; + RepeaterModifier.prototype.resetElements = function(elements) { + var i; + var len = elements.length; + for (i = 0; i < len; i += 1) { + elements[i]._processed = false; + if (elements[i].ty === "gr") { + this.resetElements(elements[i].it); + } + } + }; + RepeaterModifier.prototype.cloneElements = function(elements) { + var newElements = JSON.parse(JSON.stringify(elements)); + this.resetElements(newElements); + return newElements; + }; + RepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) { + var i; + var len = elements.length; + for (i = 0; i < len; i += 1) { + elements[i]._render = renderFlag; + if (elements[i].ty === "gr") { + this.changeGroupRender(elements[i].it, renderFlag); + } + } + }; + RepeaterModifier.prototype.processShapes = function(_isFirstFrame) { + var items; + var itemsTransform; + var i; + var dir; + var cont; + var hasReloaded = false; + if (this._mdf || _isFirstFrame) { + var copies = Math.ceil(this.c.v); + if (this._groups.length < copies) { + while (this._groups.length < copies) { + var group = { + it: this.cloneElements(this._elements), + ty: "gr" + }; + group.it.push({ + a: { a: 0, ix: 1, k: [0, 0] }, + nm: "Transform", + o: { a: 0, ix: 7, k: 100 }, + p: { a: 0, ix: 2, k: [0, 0] }, + r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, + s: { a: 0, ix: 3, k: [100, 100] }, + sa: { a: 0, ix: 5, k: 0 }, + sk: { a: 0, ix: 4, k: 0 }, + ty: "tr" + }); + this.arr.splice(0, 0, group); + this._groups.splice(0, 0, group); + this._currentCopies += 1; + } + this.elem.reloadShapes(); + hasReloaded = true; + } + cont = 0; + var renderFlag; + for (i = 0; i <= this._groups.length - 1; i += 1) { + renderFlag = cont < copies; + this._groups[i]._render = renderFlag; + this.changeGroupRender(this._groups[i].it, renderFlag); + if (!renderFlag) { + var elems = this.elemsData[i].it; + var transformData = elems[elems.length - 1]; + if (transformData.transform.op.v !== 0) { + transformData.transform.op._mdf = true; + transformData.transform.op.v = 0; + } else { + transformData.transform.op._mdf = false; + } + } + cont += 1; + } + this._currentCopies = copies; + var offset = this.o.v; + var offsetModulo = offset % 1; + var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); + var pProps = this.pMatrix.props; + var rProps = this.rMatrix.props; + var sProps = this.sMatrix.props; + this.pMatrix.reset(); + this.rMatrix.reset(); + this.sMatrix.reset(); + this.tMatrix.reset(); + this.matrix.reset(); + var iteration = 0; + if (offset > 0) { + while (iteration < roundOffset) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); + iteration += 1; + } + if (offsetModulo) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); + iteration += offsetModulo; + } + } else if (offset < 0) { + while (iteration > roundOffset) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); + iteration -= 1; + } + if (offsetModulo) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); + iteration -= offsetModulo; + } + } + i = this.data.m === 1 ? 0 : this._currentCopies - 1; + dir = this.data.m === 1 ? 1 : -1; + cont = this._currentCopies; + var j; + var jLen; + while (cont) { + items = this.elemsData[i].it; + itemsTransform = items[items.length - 1].transform.mProps.v.props; + jLen = itemsTransform.length; + items[items.length - 1].transform.mProps._mdf = true; + items[items.length - 1].transform.op._mdf = true; + items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1)); + if (iteration !== 0) { + if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); + } + this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]); + this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]); + this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]); + for (j = 0; j < jLen; j += 1) { + itemsTransform[j] = this.matrix.props[j]; + } + this.matrix.reset(); + } else { + this.matrix.reset(); + for (j = 0; j < jLen; j += 1) { + itemsTransform[j] = this.matrix.props[j]; + } + } + iteration += 1; + cont -= 1; + i += dir; + } + } else { + cont = this._currentCopies; + i = 0; + dir = 1; + while (cont) { + items = this.elemsData[i].it; + itemsTransform = items[items.length - 1].transform.mProps.v.props; + items[items.length - 1].transform.mProps._mdf = false; + items[items.length - 1].transform.op._mdf = false; + cont -= 1; + i += dir; + } + } + return hasReloaded; + }; + RepeaterModifier.prototype.addShape = function() { + }; + extendPrototype([ShapeModifier], RoundCornersModifier); + RoundCornersModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.rd = PropertyFactory.getProp(elem2, data2.r, 0, null, this); + this._isAnimated = !!this.rd.effectsSequence.length; + }; + RoundCornersModifier.prototype.processPath = function(path, round) { + var clonedPath = shapePool.newElement(); + clonedPath.c = path.c; + var i; + var len = path._length; + var currentV; + var currentI; + var currentO; + var closerV; + var distance; + var newPosPerc; + var index2 = 0; + var vX; + var vY; + var oX; + var oY; + var iX; + var iY; + for (i = 0; i < len; i += 1) { + currentV = path.v[i]; + currentO = path.o[i]; + currentI = path.i[i]; + if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) { + if ((i === 0 || i === len - 1) && !path.c) { + clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index2); + index2 += 1; + } else { + if (i === 0) { + closerV = path.v[len - 1]; + } else { + closerV = path.v[i - 1]; + } + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; + iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; + vX = iX; + iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; + vY = iY; + oX = vX - (vX - currentV[0]) * roundCorner; + oY = vY - (vY - currentV[1]) * roundCorner; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); + index2 += 1; + if (i === len - 1) { + closerV = path.v[0]; + } else { + closerV = path.v[i + 1]; + } + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; + oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; + vX = oX; + oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; + vY = oY; + iX = vX - (vX - currentV[0]) * roundCorner; + iY = vY - (vY - currentV[1]) * roundCorner; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); + index2 += 1; + } + } else { + clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index2); + index2 += 1; + } + } + return clonedPath; + }; + RoundCornersModifier.prototype.processShapes = function(_isFirstFrame) { + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var rd = this.rd.v; + if (rd !== 0) { + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + localShapeCollection = shapeData.localShapeCollection; + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { + localShapeCollection.releaseShapes(); + shapeData.shape._mdf = true; + shapePaths = shapeData.shape.paths.shapes; + jLen = shapeData.shape.paths._length; + for (j = 0; j < jLen; j += 1) { + localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); + } + } + shapeData.shape.paths = shapeData.localShapeCollection; + } + } + if (!this.dynamicProperties.length) { + this._mdf = false; + } + }; + const FontManager = function() { + var maxWaitingTime = 5e3; + var emptyChar = { + w: 0, + size: 0, + shapes: [], + data: { + shapes: [] + } + }; + var combinedCharacters = []; + combinedCharacters = combinedCharacters.concat([ + 2304, + 2305, + 2306, + 2307, + 2362, + 2363, + 2364, + 2364, + 2366, + 2367, + 2368, + 2369, + 2370, + 2371, + 2372, + 2373, + 2374, + 2375, + 2376, + 2377, + 2378, + 2379, + 2380, + 2381, + 2382, + 2383, + 2387, + 2388, + 2389, + 2390, + 2391, + 2402, + 2403 + ]); + var surrogateModifiers = [ + "d83cdffb", + "d83cdffc", + "d83cdffd", + "d83cdffe", + "d83cdfff" + ]; + var zeroWidthJoiner = [65039, 8205]; + function trimFontOptions(font) { + var familyArray = font.split(","); + var i; + var len = familyArray.length; + var enabledFamilies = []; + for (i = 0; i < len; i += 1) { + if (familyArray[i] !== "sans-serif" && familyArray[i] !== "monospace") { + enabledFamilies.push(familyArray[i]); + } + } + return enabledFamilies.join(","); + } + function setUpNode(font, family) { + var parentNode = createTag("span"); + parentNode.setAttribute("aria-hidden", true); + parentNode.style.fontFamily = family; + var node = createTag("span"); + node.innerText = "giItT1WQy@!-/#"; + parentNode.style.position = "absolute"; + parentNode.style.left = "-10000px"; + parentNode.style.top = "-10000px"; + parentNode.style.fontSize = "300px"; + parentNode.style.fontVariant = "normal"; + parentNode.style.fontStyle = "normal"; + parentNode.style.fontWeight = "normal"; + parentNode.style.letterSpacing = "0"; + parentNode.appendChild(node); + document.body.appendChild(parentNode); + var width2 = node.offsetWidth; + node.style.fontFamily = trimFontOptions(font) + ", " + family; + return { node, w: width2, parent: parentNode }; + } + function checkLoadedFonts() { + var i; + var len = this.fonts.length; + var node; + var w; + var loadedCount = len; + for (i = 0; i < len; i += 1) { + if (this.fonts[i].loaded) { + loadedCount -= 1; + } else if (this.fonts[i].fOrigin === "n" || this.fonts[i].origin === 0) { + this.fonts[i].loaded = true; + } else { + node = this.fonts[i].monoCase.node; + w = this.fonts[i].monoCase.w; + if (node.offsetWidth !== w) { + loadedCount -= 1; + this.fonts[i].loaded = true; + } else { + node = this.fonts[i].sansCase.node; + w = this.fonts[i].sansCase.w; + if (node.offsetWidth !== w) { + loadedCount -= 1; + this.fonts[i].loaded = true; + } + } + if (this.fonts[i].loaded) { + this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); + this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); + } + } + } + if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) { + setTimeout(this.checkLoadedFontsBinded, 20); + } else { + setTimeout(this.setIsLoadedBinded, 10); + } + } + function createHelper(fontData, def) { + var engine = document.body && def ? "svg" : "canvas"; + var helper; + var fontProps = getFontProperties(fontData); + if (engine === "svg") { + var tHelper = createNS("text"); + tHelper.style.fontSize = "100px"; + tHelper.setAttribute("font-family", fontData.fFamily); + tHelper.setAttribute("font-style", fontProps.style); + tHelper.setAttribute("font-weight", fontProps.weight); + tHelper.textContent = "1"; + if (fontData.fClass) { + tHelper.style.fontFamily = "inherit"; + tHelper.setAttribute("class", fontData.fClass); + } else { + tHelper.style.fontFamily = fontData.fFamily; + } + def.appendChild(tHelper); + helper = tHelper; + } else { + var tCanvasHelper = new OffscreenCanvas(500, 500).getContext("2d"); + tCanvasHelper.font = fontProps.style + " " + fontProps.weight + " 100px " + fontData.fFamily; + helper = tCanvasHelper; + } + function measure(text2) { + if (engine === "svg") { + helper.textContent = text2; + return helper.getComputedTextLength(); + } + return helper.measureText(text2).width; + } + return { + measureText: measure + }; + } + function addFonts(fontData, defs) { + if (!fontData) { + this.isLoaded = true; + return; + } + if (this.chars) { + this.isLoaded = true; + this.fonts = fontData.list; + return; + } + if (!document.body) { + this.isLoaded = true; + fontData.list.forEach((data2) => { + data2.helper = createHelper(data2); + data2.cache = {}; + }); + this.fonts = fontData.list; + return; + } + var fontArr = fontData.list; + var i; + var len = fontArr.length; + var _pendingFonts = len; + for (i = 0; i < len; i += 1) { + var shouldLoadFont = true; + var loadedSelector; + var j; + fontArr[i].loaded = false; + fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, "monospace"); + fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, "sans-serif"); + if (!fontArr[i].fPath) { + fontArr[i].loaded = true; + _pendingFonts -= 1; + } else if (fontArr[i].fOrigin === "p" || fontArr[i].origin === 3) { + loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]'); + if (loadedSelector.length > 0) { + shouldLoadFont = false; + } + if (shouldLoadFont) { + var s = createTag("style"); + s.setAttribute("f-forigin", fontArr[i].fOrigin); + s.setAttribute("f-origin", fontArr[i].origin); + s.setAttribute("f-family", fontArr[i].fFamily); + s.type = "text/css"; + s.innerText = "@font-face {font-family: " + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; + defs.appendChild(s); + } + } else if (fontArr[i].fOrigin === "g" || fontArr[i].origin === 1) { + loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'); + for (j = 0; j < loadedSelector.length; j += 1) { + if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) { + shouldLoadFont = false; + } + } + if (shouldLoadFont) { + var l2 = createTag("link"); + l2.setAttribute("f-forigin", fontArr[i].fOrigin); + l2.setAttribute("f-origin", fontArr[i].origin); + l2.type = "text/css"; + l2.rel = "stylesheet"; + l2.href = fontArr[i].fPath; + document.body.appendChild(l2); + } + } else if (fontArr[i].fOrigin === "t" || fontArr[i].origin === 2) { + loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'); + for (j = 0; j < loadedSelector.length; j += 1) { + if (fontArr[i].fPath === loadedSelector[j].src) { + shouldLoadFont = false; + } + } + if (shouldLoadFont) { + var sc = createTag("link"); + sc.setAttribute("f-forigin", fontArr[i].fOrigin); + sc.setAttribute("f-origin", fontArr[i].origin); + sc.setAttribute("rel", "stylesheet"); + sc.setAttribute("href", fontArr[i].fPath); + defs.appendChild(sc); + } + } + fontArr[i].helper = createHelper(fontArr[i], defs); + fontArr[i].cache = {}; + this.fonts.push(fontArr[i]); + } + if (_pendingFonts === 0) { + this.isLoaded = true; + } else { + setTimeout(this.checkLoadedFonts.bind(this), 100); + } + } + function addChars(chars) { + if (!chars) { + return; + } + if (!this.chars) { + this.chars = []; + } + var i; + var len = chars.length; + var j; + var jLen = this.chars.length; + var found; + for (i = 0; i < len; i += 1) { + j = 0; + found = false; + while (j < jLen) { + if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) { + found = true; + } + j += 1; + } + if (!found) { + this.chars.push(chars[i]); + jLen += 1; + } + } + } + function getCharData(char, style, font) { + var i = 0; + var len = this.chars.length; + while (i < len) { + if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) { + return this.chars[i]; + } + i += 1; + } + if ((typeof char === "string" && char.charCodeAt(0) !== 13 || !char) && console && console.warn && !this._warned) { + this._warned = true; + console.warn("Missing character from exported characters list: ", char, style, font); + } + return emptyChar; + } + function measureText(char, fontName, size2) { + var fontData = this.getFontByName(fontName); + var index2 = char.charCodeAt(0); + if (!fontData.cache[index2 + 1]) { + var tHelper = fontData.helper; + if (char === " ") { + var doubleSize = tHelper.measureText("|" + char + "|"); + var singleSize = tHelper.measureText("||"); + fontData.cache[index2 + 1] = (doubleSize - singleSize) / 100; + } else { + fontData.cache[index2 + 1] = tHelper.measureText(char) / 100; + } + } + return fontData.cache[index2 + 1] * size2; + } + function getFontByName(name2) { + var i = 0; + var len = this.fonts.length; + while (i < len) { + if (this.fonts[i].fName === name2) { + return this.fonts[i]; + } + i += 1; + } + return this.fonts[0]; + } + function isModifier(firstCharCode, secondCharCode) { + var sum2 = firstCharCode.toString(16) + secondCharCode.toString(16); + return surrogateModifiers.indexOf(sum2) !== -1; + } + function isZeroWidthJoiner(firstCharCode, secondCharCode) { + if (!secondCharCode) { + return firstCharCode === zeroWidthJoiner[1]; + } + return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1]; + } + function isCombinedCharacter(char) { + return combinedCharacters.indexOf(char) !== -1; + } + function setIsLoaded() { + this.isLoaded = true; + } + var Font3 = function() { + this.fonts = []; + this.chars = null; + this.typekitLoaded = 0; + this.isLoaded = false; + this._warned = false; + this.initTime = Date.now(); + this.setIsLoadedBinded = this.setIsLoaded.bind(this); + this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); + }; + Font3.isModifier = isModifier; + Font3.isZeroWidthJoiner = isZeroWidthJoiner; + Font3.isCombinedCharacter = isCombinedCharacter; + var fontPrototype = { + addChars, + addFonts, + getCharData, + getFontByName, + measureText, + checkLoadedFonts, + setIsLoaded + }; + Font3.prototype = fontPrototype; + return Font3; + }(); + RenderableElement.prototype = { + initRenderable: function() { + this.isInRange = false; + this.hidden = false; + this.isTransparent = false; + this.renderableComponents = []; + }, + addRenderableComponent: function(component) { + if (this.renderableComponents.indexOf(component) === -1) { + this.renderableComponents.push(component); + } + }, + removeRenderableComponent: function(component) { + if (this.renderableComponents.indexOf(component) !== -1) { + this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); + } + }, + prepareRenderableFrame: function(num) { + this.checkLayerLimits(num); + }, + checkTransparency: function() { + if (this.finalTransform.mProp.o.v <= 0) { + if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { + this.isTransparent = true; + this.hide(); + } + } else if (this.isTransparent) { + this.isTransparent = false; + this.show(); + } + }, + /** + * @function + * Initializes frame related properties. + * + * @param {number} num + * current frame number in Layer's time + * + */ + checkLayerLimits: function(num) { + if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { + if (this.isInRange !== true) { + this.globalData._mdf = true; + this._mdf = true; + this.isInRange = true; + this.show(); + } + } else if (this.isInRange !== false) { + this.globalData._mdf = true; + this.isInRange = false; + this.hide(); + } + }, + renderRenderable: function() { + var i; + var len = this.renderableComponents.length; + for (i = 0; i < len; i += 1) { + this.renderableComponents[i].renderFrame(this._isFirstFrame); + } + }, + sourceRectAtTime: function() { + return { + top: 0, + left: 0, + width: 100, + height: 100 + }; + }, + getLayerSize: function() { + if (this.data.ty === 5) { + return { w: this.data.textData.width, h: this.data.textData.height }; + } + return { w: this.data.width, h: this.data.height }; + } + }; + const MaskManagerInterface = function() { + function MaskInterface(mask2, data2) { + this._mask = mask2; + this._data = data2; + } + Object.defineProperty(MaskInterface.prototype, "maskPath", { + get: function() { + if (this._mask.prop.k) { + this._mask.prop.getValue(); + } + return this._mask.prop; + } + }); + Object.defineProperty(MaskInterface.prototype, "maskOpacity", { + get: function() { + if (this._mask.op.k) { + this._mask.op.getValue(); + } + return this._mask.op.v * 100; + } + }); + var MaskManager = function(maskManager) { + var _masksInterfaces = createSizedArray(maskManager.viewData.length); + var i; + var len = maskManager.viewData.length; + for (i = 0; i < len; i += 1) { + _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); + } + var maskFunction = function(name2) { + i = 0; + while (i < len) { + if (maskManager.masksProperties[i].nm === name2) { + return _masksInterfaces[i]; + } + i += 1; + } + return null; + }; + return maskFunction; + }; + return MaskManager; + }(); + const ExpressionPropertyInterface = /* @__PURE__ */ function() { + var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 }; + var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 }; + function completeProperty(expressionValue, property2, type) { + Object.defineProperty(expressionValue, "velocity", { + get: function() { + return property2.getVelocityAtTime(property2.comp.currentFrame); + } + }); + expressionValue.numKeys = property2.keyframes ? property2.keyframes.length : 0; + expressionValue.key = function(pos) { + if (!expressionValue.numKeys) { + return 0; + } + var value2 = ""; + if ("s" in property2.keyframes[pos - 1]) { + value2 = property2.keyframes[pos - 1].s; + } else if ("e" in property2.keyframes[pos - 2]) { + value2 = property2.keyframes[pos - 2].e; + } else { + value2 = property2.keyframes[pos - 2].s; + } + var valueProp = type === "unidimensional" ? new Number(value2) : Object.assign({}, value2); + valueProp.time = property2.keyframes[pos - 1].t / property2.elem.comp.globalData.frameRate; + valueProp.value = type === "unidimensional" ? value2[0] : value2; + return valueProp; + }; + expressionValue.valueAtTime = property2.getValueAtTime; + expressionValue.speedAtTime = property2.getSpeedAtTime; + expressionValue.velocityAtTime = property2.getVelocityAtTime; + expressionValue.propertyGroup = property2.propertyGroup; + } + function UnidimensionalPropertyInterface(property2) { + if (!property2 || !("pv" in property2)) { + property2 = defaultUnidimensionalValue; + } + var mult = 1 / property2.mult; + var val2 = property2.pv * mult; + var expressionValue = new Number(val2); + expressionValue.value = val2; + completeProperty(expressionValue, property2, "unidimensional"); + return function() { + if (property2.k) { + property2.getValue(); + } + val2 = property2.v * mult; + if (expressionValue.value !== val2) { + expressionValue = new Number(val2); + expressionValue.value = val2; + completeProperty(expressionValue, property2, "unidimensional"); + } + return expressionValue; + }; + } + function MultidimensionalPropertyInterface(property2) { + if (!property2 || !("pv" in property2)) { + property2 = defaultMultidimensionalValue; + } + var mult = 1 / property2.mult; + var len = property2.data && property2.data.l || property2.pv.length; + var expressionValue = createTypedArray("float32", len); + var arrValue = createTypedArray("float32", len); + expressionValue.value = arrValue; + completeProperty(expressionValue, property2, "multidimensional"); + return function() { + if (property2.k) { + property2.getValue(); + } + for (var i = 0; i < len; i += 1) { + arrValue[i] = property2.v[i] * mult; + expressionValue[i] = arrValue[i]; + } + return expressionValue; + }; + } + function defaultGetter() { + return defaultUnidimensionalValue; + } + return function(property2) { + if (!property2) { + return defaultGetter; + } + if (property2.propType === "unidimensional") { + return UnidimensionalPropertyInterface(property2); + } + return MultidimensionalPropertyInterface(property2); + }; + }(); + const TransformExpressionInterface = /* @__PURE__ */ function() { + return function(transform2) { + function _thisFunction(name2) { + switch (name2) { + case "scale": + case "Scale": + case "ADBE Scale": + case 6: + return _thisFunction.scale; + case "rotation": + case "Rotation": + case "ADBE Rotation": + case "ADBE Rotate Z": + case 10: + return _thisFunction.rotation; + case "ADBE Rotate X": + return _thisFunction.xRotation; + case "ADBE Rotate Y": + return _thisFunction.yRotation; + case "position": + case "Position": + case "ADBE Position": + case 2: + return _thisFunction.position; + case "ADBE Position_0": + return _thisFunction.xPosition; + case "ADBE Position_1": + return _thisFunction.yPosition; + case "ADBE Position_2": + return _thisFunction.zPosition; + case "anchorPoint": + case "AnchorPoint": + case "Anchor Point": + case "ADBE AnchorPoint": + case 1: + return _thisFunction.anchorPoint; + case "opacity": + case "Opacity": + case 11: + return _thisFunction.opacity; + default: + return null; + } + } + Object.defineProperty(_thisFunction, "rotation", { + get: ExpressionPropertyInterface(transform2.r || transform2.rz) + }); + Object.defineProperty(_thisFunction, "zRotation", { + get: ExpressionPropertyInterface(transform2.rz || transform2.r) + }); + Object.defineProperty(_thisFunction, "xRotation", { + get: ExpressionPropertyInterface(transform2.rx) + }); + Object.defineProperty(_thisFunction, "yRotation", { + get: ExpressionPropertyInterface(transform2.ry) + }); + Object.defineProperty(_thisFunction, "scale", { + get: ExpressionPropertyInterface(transform2.s) + }); + var _px; + var _py; + var _pz; + var _transformFactory; + if (transform2.p) { + _transformFactory = ExpressionPropertyInterface(transform2.p); + } else { + _px = ExpressionPropertyInterface(transform2.px); + _py = ExpressionPropertyInterface(transform2.py); + if (transform2.pz) { + _pz = ExpressionPropertyInterface(transform2.pz); + } + } + Object.defineProperty(_thisFunction, "position", { + get: function() { + if (transform2.p) { + return _transformFactory(); + } + return [ + _px(), + _py(), + _pz ? _pz() : 0 + ]; + } + }); + Object.defineProperty(_thisFunction, "xPosition", { + get: ExpressionPropertyInterface(transform2.px) + }); + Object.defineProperty(_thisFunction, "yPosition", { + get: ExpressionPropertyInterface(transform2.py) + }); + Object.defineProperty(_thisFunction, "zPosition", { + get: ExpressionPropertyInterface(transform2.pz) + }); + Object.defineProperty(_thisFunction, "anchorPoint", { + get: ExpressionPropertyInterface(transform2.a) + }); + Object.defineProperty(_thisFunction, "opacity", { + get: ExpressionPropertyInterface(transform2.o) + }); + Object.defineProperty(_thisFunction, "skew", { + get: ExpressionPropertyInterface(transform2.sk) + }); + Object.defineProperty(_thisFunction, "skewAxis", { + get: ExpressionPropertyInterface(transform2.sa) + }); + Object.defineProperty(_thisFunction, "orientation", { + get: ExpressionPropertyInterface(transform2.or) + }); + return _thisFunction; + }; + }(); + const LayerExpressionInterface = /* @__PURE__ */ function() { + function getMatrix(time2) { + var toWorldMat = new Matrix(); + if (time2 !== void 0) { + var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time2); + propMatrix.clone(toWorldMat); + } else { + var transformMat = this._elem.finalTransform.mProp; + transformMat.applyToMatrix(toWorldMat); + } + return toWorldMat; + } + function toWorldVec(arr, time2) { + var toWorldMat = this.getMatrix(time2); + toWorldMat.props[12] = 0; + toWorldMat.props[13] = 0; + toWorldMat.props[14] = 0; + return this.applyPoint(toWorldMat, arr); + } + function toWorld2(arr, time2) { + var toWorldMat = this.getMatrix(time2); + return this.applyPoint(toWorldMat, arr); + } + function fromWorldVec(arr, time2) { + var toWorldMat = this.getMatrix(time2); + toWorldMat.props[12] = 0; + toWorldMat.props[13] = 0; + toWorldMat.props[14] = 0; + return this.invertPoint(toWorldMat, arr); + } + function fromWorld2(arr, time2) { + var toWorldMat = this.getMatrix(time2); + return this.invertPoint(toWorldMat, arr); + } + function applyPoint(matrix3, arr) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix3); + } + } + return matrix3.applyToPointArray(arr[0], arr[1], arr[2] || 0); + } + function invertPoint(matrix3, arr) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix3); + } + } + return matrix3.inversePoint(arr); + } + function fromComp2(arr) { + var toWorldMat = new Matrix(); + toWorldMat.reset(); + this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); + } + return toWorldMat.inversePoint(arr); + } + return toWorldMat.inversePoint(arr); + } + function sampleImage() { + return [1, 1, 1, 1]; + } + return function(elem2) { + var transformInterface; + function _registerMaskInterface(maskManager) { + _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem2); + } + function _registerEffectsInterface(effects) { + _thisLayerFunction.effect = effects; + } + function _thisLayerFunction(name2) { + switch (name2) { + case "ADBE Root Vectors Group": + case "Contents": + case 2: + return _thisLayerFunction.shapeInterface; + case 1: + case 6: + case "Transform": + case "transform": + case "ADBE Transform Group": + return transformInterface; + case 4: + case "ADBE Effect Parade": + case "effects": + case "Effects": + return _thisLayerFunction.effect; + case "ADBE Text Properties": + return _thisLayerFunction.textInterface; + default: + return null; + } + } + _thisLayerFunction.getMatrix = getMatrix; + _thisLayerFunction.invertPoint = invertPoint; + _thisLayerFunction.applyPoint = applyPoint; + _thisLayerFunction.toWorld = toWorld2; + _thisLayerFunction.toWorldVec = toWorldVec; + _thisLayerFunction.fromWorld = fromWorld2; + _thisLayerFunction.fromWorldVec = fromWorldVec; + _thisLayerFunction.toComp = toWorld2; + _thisLayerFunction.fromComp = fromComp2; + _thisLayerFunction.sampleImage = sampleImage; + _thisLayerFunction.sourceRectAtTime = elem2.sourceRectAtTime.bind(elem2); + _thisLayerFunction._elem = elem2; + transformInterface = TransformExpressionInterface(elem2.finalTransform.mProp); + var anchorPointDescriptor = getDescriptor(transformInterface, "anchorPoint"); + Object.defineProperties(_thisLayerFunction, { + hasParent: { + get: function() { + return elem2.hierarchy.length; + } + }, + parent: { + get: function() { + return elem2.hierarchy[0].layerInterface; + } + }, + rotation: getDescriptor(transformInterface, "rotation"), + scale: getDescriptor(transformInterface, "scale"), + position: getDescriptor(transformInterface, "position"), + opacity: getDescriptor(transformInterface, "opacity"), + anchorPoint: anchorPointDescriptor, + anchor_point: anchorPointDescriptor, + transform: { + get: function() { + return transformInterface; + } + }, + active: { + get: function() { + return elem2.isInRange; + } + } + }); + _thisLayerFunction.startTime = elem2.data.st; + _thisLayerFunction.index = elem2.data.ind; + _thisLayerFunction.source = elem2.data.refId; + _thisLayerFunction.height = elem2.data.ty === 0 ? elem2.data.h : 100; + _thisLayerFunction.width = elem2.data.ty === 0 ? elem2.data.w : 100; + _thisLayerFunction.inPoint = elem2.data.ip / elem2.comp.globalData.frameRate; + _thisLayerFunction.outPoint = elem2.data.op / elem2.comp.globalData.frameRate; + _thisLayerFunction._name = elem2.data.nm; + _thisLayerFunction.registerMaskInterface = _registerMaskInterface; + _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; + return _thisLayerFunction; + }; + }(); + const propertyGroupFactory = /* @__PURE__ */ function() { + return function(interfaceFunction, parentPropertyGroup) { + return function(val2) { + val2 = val2 === void 0 ? 1 : val2; + if (val2 <= 0) { + return interfaceFunction; + } + return parentPropertyGroup(val2 - 1); + }; + }; + }(); + const PropertyInterface = /* @__PURE__ */ function() { + return function(propertyName, propertyGroup) { + var interfaceFunction = { + _name: propertyName + }; + function _propertyGroup(val2) { + val2 = val2 === void 0 ? 1 : val2; + if (val2 <= 0) { + return interfaceFunction; + } + return propertyGroup(val2 - 1); + } + return _propertyGroup; + }; + }(); + const EffectsExpressionInterface = /* @__PURE__ */ function() { + var ob2 = { + createEffectsInterface + }; + function createEffectsInterface(elem2, propertyGroup) { + if (elem2.effectsManager) { + var effectElements = []; + var effectsData = elem2.data.ef; + var i; + var len = elem2.effectsManager.effectElements.length; + for (i = 0; i < len; i += 1) { + effectElements.push(createGroupInterface(effectsData[i], elem2.effectsManager.effectElements[i], propertyGroup, elem2)); + } + var effects = elem2.data.ef || []; + var groupInterface = function(name2) { + i = 0; + len = effects.length; + while (i < len) { + if (name2 === effects[i].nm || name2 === effects[i].mn || name2 === effects[i].ix) { + return effectElements[i]; + } + i += 1; + } + return null; + }; + Object.defineProperty(groupInterface, "numProperties", { + get: function() { + return effects.length; + } + }); + return groupInterface; + } + return null; + } + function createGroupInterface(data2, elements, propertyGroup, elem2) { + function groupInterface(name2) { + var effects = data2.ef; + var i2 = 0; + var len2 = effects.length; + while (i2 < len2) { + if (name2 === effects[i2].nm || name2 === effects[i2].mn || name2 === effects[i2].ix) { + if (effects[i2].ty === 5) { + return effectElements[i2]; + } + return effectElements[i2](); + } + i2 += 1; + } + throw new Error(); + } + var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); + var effectElements = []; + var i; + var len = data2.ef.length; + for (i = 0; i < len; i += 1) { + if (data2.ef[i].ty === 5) { + effectElements.push(createGroupInterface(data2.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem2)); + } else { + effectElements.push(createValueInterface(elements.effectElements[i], data2.ef[i].ty, elem2, _propertyGroup)); + } + } + if (data2.mn === "ADBE Color Control") { + Object.defineProperty(groupInterface, "color", { + get: function() { + return effectElements[0](); + } + }); + } + Object.defineProperties(groupInterface, { + numProperties: { + get: function() { + return data2.np; + } + }, + _name: { value: data2.nm }, + propertyGroup: { value: _propertyGroup } + }); + groupInterface.enabled = data2.en !== 0; + groupInterface.active = groupInterface.enabled; + return groupInterface; + } + function createValueInterface(element, type, elem2, propertyGroup) { + var expressionProperty = ExpressionPropertyInterface(element.p); + function interfaceFunction() { + if (type === 10) { + return elem2.comp.compInterface(element.p.v); + } + return expressionProperty(); + } + if (element.p.setGroupProperty) { + element.p.setGroupProperty(PropertyInterface("", propertyGroup)); + } + return interfaceFunction; + } + return ob2; + }(); + const CompExpressionInterface = /* @__PURE__ */ function() { + return function(comp2) { + function _thisLayerFunction(name2) { + var i = 0; + var len = comp2.layers.length; + while (i < len) { + if (comp2.layers[i].nm === name2 || comp2.layers[i].ind === name2) { + return comp2.elements[i].layerInterface; + } + i += 1; + } + return null; + } + Object.defineProperty(_thisLayerFunction, "_name", { value: comp2.data.nm }); + _thisLayerFunction.layer = _thisLayerFunction; + _thisLayerFunction.pixelAspect = 1; + _thisLayerFunction.height = comp2.data.h || comp2.globalData.compSize.h; + _thisLayerFunction.width = comp2.data.w || comp2.globalData.compSize.w; + _thisLayerFunction.pixelAspect = 1; + _thisLayerFunction.frameDuration = 1 / comp2.globalData.frameRate; + _thisLayerFunction.displayStartTime = 0; + _thisLayerFunction.numLayers = comp2.layers.length; + return _thisLayerFunction; + }; + }(); + const ShapePathInterface = /* @__PURE__ */ function() { + return function pathInterfaceFactory(shape, view, propertyGroup) { + var prop = view.sh; + function interfaceFunction(val2) { + if (val2 === "Shape" || val2 === "shape" || val2 === "Path" || val2 === "path" || val2 === "ADBE Vector Shape" || val2 === 2) { + return interfaceFunction.path; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + prop.setGroupProperty(PropertyInterface("Path", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + path: { + get: function() { + if (prop.k) { + prop.getValue(); + } + return prop; + } + }, + shape: { + get: function() { + if (prop.k) { + prop.getValue(); + } + return prop; + } + }, + _name: { value: shape.nm }, + ix: { value: shape.ix }, + propertyIndex: { value: shape.ix }, + mn: { value: shape.mn }, + propertyGroup: { value: propertyGroup } + }); + return interfaceFunction; + }; + }(); + const ShapeExpressionInterface = /* @__PURE__ */ function() { + function iterateElements(shapes, view, propertyGroup) { + var arr = []; + var i; + var len = shapes ? shapes.length : 0; + for (i = 0; i < len; i += 1) { + if (shapes[i].ty === "gr") { + arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "fl") { + arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "st") { + arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "tm") { + arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "tr") { + } else if (shapes[i].ty === "el") { + arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "sr") { + arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "sh") { + arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rc") { + arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rd") { + arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rp") { + arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "gf") { + arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else { + arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup)); + } + } + return arr; + } + function contentsInterfaceFactory(shape, view, propertyGroup) { + var interfaces; + var interfaceFunction = function _interfaceFunction(value2) { + var i = 0; + var len = interfaces.length; + while (i < len) { + if (interfaces[i]._name === value2 || interfaces[i].mn === value2 || interfaces[i].propertyIndex === value2 || interfaces[i].ix === value2 || interfaces[i].ind === value2) { + return interfaces[i]; + } + i += 1; + } + if (typeof value2 === "number") { + return interfaces[value2 - 1]; + } + return null; + }; + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); + interfaceFunction.numProperties = interfaces.length; + var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); + interfaceFunction.transform = transformInterface; + interfaceFunction.propertyIndex = shape.cix; + interfaceFunction._name = shape.nm; + return interfaceFunction; + } + function groupInterfaceFactory(shape, view, propertyGroup) { + var interfaceFunction = function _interfaceFunction(value2) { + switch (value2) { + case "ADBE Vectors Group": + case "Contents": + case 2: + return interfaceFunction.content; + default: + return interfaceFunction.transform; + } + }; + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var content2 = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); + var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); + interfaceFunction.content = content2; + interfaceFunction.transform = transformInterface; + Object.defineProperty(interfaceFunction, "_name", { + get: function() { + return shape.nm; + } + }); + interfaceFunction.numProperties = shape.np; + interfaceFunction.propertyIndex = shape.ix; + interfaceFunction.nm = shape.nm; + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function fillInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === "Color" || val2 === "color") { + return interfaceFunction.color; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + return null; + } + Object.defineProperties(interfaceFunction, { + color: { + get: ExpressionPropertyInterface(view.c) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.c.setGroupProperty(PropertyInterface("Color", propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); + return interfaceFunction; + } + function gradientFillInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === "Start Point" || val2 === "start point") { + return interfaceFunction.startPoint; + } + if (val2 === "End Point" || val2 === "end point") { + return interfaceFunction.endPoint; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + return null; + } + Object.defineProperties(interfaceFunction, { + startPoint: { + get: ExpressionPropertyInterface(view.s) + }, + endPoint: { + get: ExpressionPropertyInterface(view.e) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + type: { + get: function() { + return "a"; + } + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.s.setGroupProperty(PropertyInterface("Start Point", propertyGroup)); + view.e.setGroupProperty(PropertyInterface("End Point", propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); + return interfaceFunction; + } + function defaultInterfaceFactory() { + function interfaceFunction() { + return null; + } + return interfaceFunction; + } + function strokeInterfaceFactory(shape, view, propertyGroup) { + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); + function addPropertyToDashOb(i2) { + Object.defineProperty(dashOb, shape.d[i2].nm, { + get: ExpressionPropertyInterface(view.d.dataProps[i2].p) + }); + } + var i; + var len = shape.d ? shape.d.length : 0; + var dashOb = {}; + for (i = 0; i < len; i += 1) { + addPropertyToDashOb(i); + view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); + } + function interfaceFunction(val2) { + if (val2 === "Color" || val2 === "color") { + return interfaceFunction.color; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + if (val2 === "Stroke Width" || val2 === "stroke width") { + return interfaceFunction.strokeWidth; + } + return null; + } + Object.defineProperties(interfaceFunction, { + color: { + get: ExpressionPropertyInterface(view.c) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + strokeWidth: { + get: ExpressionPropertyInterface(view.w) + }, + dash: { + get: function() { + return dashOb; + } + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.c.setGroupProperty(PropertyInterface("Color", _propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + view.w.setGroupProperty(PropertyInterface("Stroke Width", _propertyGroup)); + return interfaceFunction; + } + function trimInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === shape.e.ix || val2 === "End" || val2 === "end") { + return interfaceFunction.end; + } + if (val2 === shape.s.ix) { + return interfaceFunction.start; + } + if (val2 === shape.o.ix) { + return interfaceFunction.offset; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaceFunction.propertyIndex = shape.ix; + view.s.setGroupProperty(PropertyInterface("Start", _propertyGroup)); + view.e.setGroupProperty(PropertyInterface("End", _propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); + interfaceFunction.propertyIndex = shape.ix; + interfaceFunction.propertyGroup = propertyGroup; + Object.defineProperties(interfaceFunction, { + start: { + get: ExpressionPropertyInterface(view.s) + }, + end: { + get: ExpressionPropertyInterface(view.e) + }, + offset: { + get: ExpressionPropertyInterface(view.o) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function transformInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.a.ix === value2 || value2 === "Anchor Point") { + return interfaceFunction.anchorPoint; + } + if (shape.o.ix === value2 || value2 === "Opacity") { + return interfaceFunction.opacity; + } + if (shape.p.ix === value2 || value2 === "Position") { + return interfaceFunction.position; + } + if (shape.r.ix === value2 || value2 === "Rotation" || value2 === "ADBE Vector Rotation") { + return interfaceFunction.rotation; + } + if (shape.s.ix === value2 || value2 === "Scale") { + return interfaceFunction.scale; + } + if (shape.sk && shape.sk.ix === value2 || value2 === "Skew") { + return interfaceFunction.skew; + } + if (shape.sa && shape.sa.ix === value2 || value2 === "Skew Axis") { + return interfaceFunction.skewAxis; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + view.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + view.transform.mProps.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + view.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point", _propertyGroup)); + view.transform.mProps.s.setGroupProperty(PropertyInterface("Scale", _propertyGroup)); + view.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + if (view.transform.mProps.sk) { + view.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew", _propertyGroup)); + view.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle", _propertyGroup)); + } + view.transform.op.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + opacity: { + get: ExpressionPropertyInterface(view.transform.mProps.o) + }, + position: { + get: ExpressionPropertyInterface(view.transform.mProps.p) + }, + anchorPoint: { + get: ExpressionPropertyInterface(view.transform.mProps.a) + }, + scale: { + get: ExpressionPropertyInterface(view.transform.mProps.s) + }, + rotation: { + get: ExpressionPropertyInterface(view.transform.mProps.r) + }, + skew: { + get: ExpressionPropertyInterface(view.transform.mProps.sk) + }, + skewAxis: { + get: ExpressionPropertyInterface(view.transform.mProps.sa) + }, + _name: { value: shape.nm } + }); + interfaceFunction.ty = "tr"; + interfaceFunction.mn = shape.mn; + interfaceFunction.propertyGroup = propertyGroup; + return interfaceFunction; + } + function ellipseInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.s.ix === value2) { + return interfaceFunction.size; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaceFunction.propertyIndex = shape.ix; + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + size: { + get: ExpressionPropertyInterface(prop.s) + }, + position: { + get: ExpressionPropertyInterface(prop.p) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function starInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.r.ix === value2) { + return interfaceFunction.rotation; + } + if (shape.pt.ix === value2) { + return interfaceFunction.points; + } + if (shape.or.ix === value2 || value2 === "ADBE Vector Star Outer Radius") { + return interfaceFunction.outerRadius; + } + if (shape.os.ix === value2) { + return interfaceFunction.outerRoundness; + } + if (shape.ir && (shape.ir.ix === value2 || value2 === "ADBE Vector Star Inner Radius")) { + return interfaceFunction.innerRadius; + } + if (shape.is && shape.is.ix === value2) { + return interfaceFunction.innerRoundness; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + interfaceFunction.propertyIndex = shape.ix; + prop.or.setGroupProperty(PropertyInterface("Outer Radius", _propertyGroup)); + prop.os.setGroupProperty(PropertyInterface("Outer Roundness", _propertyGroup)); + prop.pt.setGroupProperty(PropertyInterface("Points", _propertyGroup)); + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + if (shape.ir) { + prop.ir.setGroupProperty(PropertyInterface("Inner Radius", _propertyGroup)); + prop.is.setGroupProperty(PropertyInterface("Inner Roundness", _propertyGroup)); + } + Object.defineProperties(interfaceFunction, { + position: { + get: ExpressionPropertyInterface(prop.p) + }, + rotation: { + get: ExpressionPropertyInterface(prop.r) + }, + points: { + get: ExpressionPropertyInterface(prop.pt) + }, + outerRadius: { + get: ExpressionPropertyInterface(prop.or) + }, + outerRoundness: { + get: ExpressionPropertyInterface(prop.os) + }, + innerRadius: { + get: ExpressionPropertyInterface(prop.ir) + }, + innerRoundness: { + get: ExpressionPropertyInterface(prop.is) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function rectInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.r.ix === value2) { + return interfaceFunction.roundness; + } + if (shape.s.ix === value2 || value2 === "Size" || value2 === "ADBE Vector Rect Size") { + return interfaceFunction.size; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + interfaceFunction.propertyIndex = shape.ix; + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + position: { + get: ExpressionPropertyInterface(prop.p) + }, + roundness: { + get: ExpressionPropertyInterface(prop.r) + }, + size: { + get: ExpressionPropertyInterface(prop.s) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function roundedInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.r.ix === value2 || value2 === "Round Corners 1") { + return interfaceFunction.radius; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view; + interfaceFunction.propertyIndex = shape.ix; + prop.rd.setGroupProperty(PropertyInterface("Radius", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + radius: { + get: ExpressionPropertyInterface(prop.rd) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function repeaterInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.c.ix === value2 || value2 === "Copies") { + return interfaceFunction.copies; + } + if (shape.o.ix === value2 || value2 === "Offset") { + return interfaceFunction.offset; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view; + interfaceFunction.propertyIndex = shape.ix; + prop.c.setGroupProperty(PropertyInterface("Copies", _propertyGroup)); + prop.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + copies: { + get: ExpressionPropertyInterface(prop.c) + }, + offset: { + get: ExpressionPropertyInterface(prop.o) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + return function(shapes, view, propertyGroup) { + var interfaces; + function _interfaceFunction(value2) { + if (typeof value2 === "number") { + value2 = value2 === void 0 ? 1 : value2; + if (value2 === 0) { + return propertyGroup; + } + return interfaces[value2 - 1]; + } + var i = 0; + var len = interfaces.length; + while (i < len) { + if (interfaces[i]._name === value2) { + return interfaces[i]; + } + i += 1; + } + return null; + } + function parentGroupWrapper() { + return propertyGroup; + } + _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); + interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); + _interfaceFunction.numProperties = interfaces.length; + _interfaceFunction._name = "Contents"; + return _interfaceFunction; + }; + }(); + const TextExpressionInterface = /* @__PURE__ */ function() { + return function(elem2) { + var _prevValue; + var _sourceText; + function _thisLayerFunction(name2) { + switch (name2) { + case "ADBE Text Document": + return _thisLayerFunction.sourceText; + default: + return null; + } + } + Object.defineProperty(_thisLayerFunction, "sourceText", { + get: function() { + elem2.textProperty.getValue(); + var stringValue = elem2.textProperty.currentData.t; + if (stringValue !== _prevValue) { + elem2.textProperty.currentData.t = _prevValue; + _sourceText = new String(stringValue); + _sourceText.value = stringValue || new String(stringValue); + } + return _sourceText; + } + }); + return _thisLayerFunction; + }; + }(); + const getBlendMode = /* @__PURE__ */ function() { + var blendModeEnums = { + 0: "source-over", + 1: "multiply", + 2: "screen", + 3: "overlay", + 4: "darken", + 5: "lighten", + 6: "color-dodge", + 7: "color-burn", + 8: "hard-light", + 9: "soft-light", + 10: "difference", + 11: "exclusion", + 12: "hue", + 13: "saturation", + 14: "color", + 15: "luminosity" + }; + return function(mode) { + return blendModeEnums[mode] || ""; + }; + }(); + extendPrototype([DynamicPropertyContainer], GroupEffect); + GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; + GroupEffect.prototype.init = function(data2, element) { + this.data = data2; + this.effectElements = []; + this.initDynamicPropertyContainer(element); + var i; + var len = this.data.ef.length; + var eff; + var effects = this.data.ef; + for (i = 0; i < len; i += 1) { + eff = null; + switch (effects[i].ty) { + case 0: + eff = new SliderEffect(effects[i], element, this); + break; + case 1: + eff = new AngleEffect(effects[i], element, this); + break; + case 2: + eff = new ColorEffect(effects[i], element, this); + break; + case 3: + eff = new PointEffect(effects[i], element, this); + break; + case 4: + case 7: + eff = new CheckboxEffect(effects[i], element, this); + break; + case 10: + eff = new LayerIndexEffect(effects[i], element, this); + break; + case 11: + eff = new MaskIndexEffect(effects[i], element, this); + break; + case 5: + eff = new EffectsManager(effects[i], element, this); + break; + default: + eff = new NoValueEffect(effects[i], element, this); + break; + } + if (eff) { + this.effectElements.push(eff); + } + } + }; + BaseElement.prototype = { + checkMasks: function() { + if (!this.data.hasMask) { + return false; + } + var i = 0; + var len = this.data.masksProperties.length; + while (i < len) { + if (this.data.masksProperties[i].mode !== "n" && this.data.masksProperties[i].cl !== false) { + return true; + } + i += 1; + } + return false; + }, + initExpressions: function() { + this.layerInterface = LayerExpressionInterface(this); + if (this.data.hasMask && this.maskManager) { + this.layerInterface.registerMaskInterface(this.maskManager); + } + var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); + this.layerInterface.registerEffectsInterface(effectsInterface); + if (this.data.ty === 0 || this.data.xt) { + this.compInterface = CompExpressionInterface(this); + } else if (this.data.ty === 4) { + this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); + this.layerInterface.content = this.layerInterface.shapeInterface; + } else if (this.data.ty === 5) { + this.layerInterface.textInterface = TextExpressionInterface(this); + this.layerInterface.text = this.layerInterface.textInterface; + } + }, + setBlendMode: function() { + var blendModeValue = getBlendMode(this.data.bm); + var elem2 = this.baseElement || this.layerElement; + elem2.style["mix-blend-mode"] = blendModeValue; + }, + initBaseData: function(data2, globalData2, comp2) { + this.globalData = globalData2; + this.comp = comp2; + this.data = data2; + this.layerId = createElementID(); + if (!this.data.sr) { + this.data.sr = 1; + } + this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); + }, + getType: function() { + return this.type; + }, + sourceRectAtTime: function() { + } + }; + FrameElement.prototype = { + /** + * @function + * Initializes frame related properties. + * + */ + initFrame: function() { + this._isFirstFrame = false; + this.dynamicProperties = []; + this._mdf = false; + }, + /** + * @function + * Calculates all dynamic values + * + * @param {number} num + * current frame number in Layer's time + * @param {boolean} isVisible + * if layers is currently in range + * + */ + prepareProperties: function(num, isVisible) { + var i; + var len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + if (isVisible || this._isParent && this.dynamicProperties[i].propType === "transform") { + this.dynamicProperties[i].getValue(); + if (this.dynamicProperties[i]._mdf) { + this.globalData._mdf = true; + this._mdf = true; + } + } + } + }, + addDynamicProperty: function(prop) { + if (this.dynamicProperties.indexOf(prop) === -1) { + this.dynamicProperties.push(prop); + } + } + }; + const FootageInterface = /* @__PURE__ */ function() { + var outlineInterfaceFactory = function(elem2) { + var currentPropertyName = ""; + var currentProperty = elem2.getFootageData(); + function init() { + currentPropertyName = ""; + currentProperty = elem2.getFootageData(); + return searchProperty; + } + function searchProperty(value2) { + if (currentProperty[value2]) { + currentPropertyName = value2; + currentProperty = currentProperty[value2]; + if (typeof currentProperty === "object") { + return searchProperty; + } + return currentProperty; + } + var propertyNameIndex = value2.indexOf(currentPropertyName); + if (propertyNameIndex !== -1) { + var index2 = parseInt(value2.substr(propertyNameIndex + currentPropertyName.length), 10); + currentProperty = currentProperty[index2]; + if (typeof currentProperty === "object") { + return searchProperty; + } + return currentProperty; + } + return ""; + } + return init; + }; + var dataInterfaceFactory = function(elem2) { + function interfaceFunction(value2) { + if (value2 === "Outline") { + return interfaceFunction.outlineInterface(); + } + return null; + } + interfaceFunction._name = "Outline"; + interfaceFunction.outlineInterface = outlineInterfaceFactory(elem2); + return interfaceFunction; + }; + return function(elem2) { + function _interfaceFunction(value2) { + if (value2 === "Data") { + return _interfaceFunction.dataInterface; + } + return null; + } + _interfaceFunction._name = "Data"; + _interfaceFunction.dataInterface = dataInterfaceFactory(elem2); + return _interfaceFunction; + }; + }(); + FootageElement.prototype.prepareFrame = function() { + }; + extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement); + FootageElement.prototype.getBaseElement = function() { + return null; + }; + FootageElement.prototype.renderFrame = function() { + }; + FootageElement.prototype.destroy = function() { + }; + FootageElement.prototype.initExpressions = function() { + this.layerInterface = FootageInterface(this); + }; + FootageElement.prototype.getFootageData = function() { + return this.footageData; + }; + AudioElement.prototype.prepareFrame = function(num) { + this.prepareRenderableFrame(num, true); + this.prepareProperties(num, true); + if (!this.tm._placeholder) { + var timeRemapped = this.tm.v; + this._currentTime = timeRemapped; + } else { + this._currentTime = num / this.data.sr; + } + this._volume = this.lv.v[0]; + var totalVolume = this._volume * this._volumeMultiplier; + if (this._previousVolume !== totalVolume) { + this._previousVolume = totalVolume; + this.audio.volume(totalVolume); + } + }; + extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement); + AudioElement.prototype.renderFrame = function() { + if (this.isInRange && this._canPlay) { + if (!this._isPlaying) { + this.audio.play(); + this.audio.seek(this._currentTime / this.globalData.frameRate); + this._isPlaying = true; + } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) { + this.audio.seek(this._currentTime / this.globalData.frameRate); + } + } + }; + AudioElement.prototype.show = function() { + }; + AudioElement.prototype.hide = function() { + this.audio.pause(); + this._isPlaying = false; + }; + AudioElement.prototype.pause = function() { + this.audio.pause(); + this._isPlaying = false; + this._canPlay = false; + }; + AudioElement.prototype.resume = function() { + this._canPlay = true; + }; + AudioElement.prototype.setRate = function(rateValue) { + this.audio.rate(rateValue); + }; + AudioElement.prototype.volume = function(volumeValue) { + this._volumeMultiplier = volumeValue; + this._previousVolume = volumeValue * this._volume; + this.audio.volume(this._previousVolume); + }; + AudioElement.prototype.getBaseElement = function() { + return null; + }; + AudioElement.prototype.destroy = function() { + }; + AudioElement.prototype.sourceRectAtTime = function() { + }; + AudioElement.prototype.initExpressions = function() { + }; + BaseRenderer.prototype.checkLayers = function(num) { + var i; + var len = this.layers.length; + var data2; + this.completeLayers = true; + for (i = len - 1; i >= 0; i -= 1) { + if (!this.elements[i]) { + data2 = this.layers[i]; + if (data2.ip - data2.st <= num - this.layers[i].st && data2.op - data2.st > num - this.layers[i].st) { + this.buildItem(i); + } + } + this.completeLayers = this.elements[i] ? this.completeLayers : false; + } + this.checkPendingElements(); + }; + BaseRenderer.prototype.createItem = function(layer) { + switch (layer.ty) { + case 2: + return this.createImage(layer); + case 0: + return this.createComp(layer); + case 1: + return this.createSolid(layer); + case 3: + return this.createNull(layer); + case 4: + return this.createShape(layer); + case 5: + return this.createText(layer); + case 6: + return this.createAudio(layer); + case 13: + return this.createCamera(layer); + case 15: + return this.createFootage(layer); + default: + return this.createNull(layer); + } + }; + BaseRenderer.prototype.createCamera = function() { + throw new Error("You're using a 3d camera. Try the html renderer."); + }; + BaseRenderer.prototype.createAudio = function(data2) { + return new AudioElement(data2, this.globalData, this); + }; + BaseRenderer.prototype.createFootage = function(data2) { + return new FootageElement(data2, this.globalData, this); + }; + BaseRenderer.prototype.buildAllItems = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + this.buildItem(i); + } + this.checkPendingElements(); + }; + BaseRenderer.prototype.includeLayers = function(newLayers) { + this.completeLayers = false; + var i; + var len = newLayers.length; + var j; + var jLen = this.layers.length; + for (i = 0; i < len; i += 1) { + j = 0; + while (j < jLen) { + if (this.layers[j].id === newLayers[i].id) { + this.layers[j] = newLayers[i]; + break; + } + j += 1; + } + } + }; + BaseRenderer.prototype.setProjectInterface = function(pInterface) { + this.globalData.projectInterface = pInterface; + }; + BaseRenderer.prototype.initItems = function() { + if (!this.globalData.progressiveLoad) { + this.buildAllItems(); + } + }; + BaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy) { + var elements = this.elements; + var layers = this.layers; + var i = 0; + var len = layers.length; + while (i < len) { + if (layers[i].ind == parentName) { + if (!elements[i] || elements[i] === true) { + this.buildItem(i); + this.addPendingElement(element); + } else { + hierarchy.push(elements[i]); + elements[i].setAsParent(); + if (layers[i].parent !== void 0) { + this.buildElementParenting(element, layers[i].parent, hierarchy); + } else { + element.setHierarchy(hierarchy); + } + } + } + i += 1; + } + }; + BaseRenderer.prototype.addPendingElement = function(element) { + this.pendingElements.push(element); + }; + BaseRenderer.prototype.searchExtraCompositions = function(assets) { + var i; + var len = assets.length; + for (i = 0; i < len; i += 1) { + if (assets[i].xt) { + var comp2 = this.createComp(assets[i]); + comp2.initExpressions(); + this.globalData.projectInterface.registerComposition(comp2); + } + } + }; + BaseRenderer.prototype.getElementByPath = function(path) { + var pathValue = path.shift(); + var element; + if (typeof pathValue === "number") { + element = this.elements[pathValue]; + } else { + var i; + var len = this.elements.length; + for (i = 0; i < len; i += 1) { + if (this.elements[i].data.nm === pathValue) { + element = this.elements[i]; + break; + } + } + } + if (path.length === 0) { + return element; + } + return element.getElementByPath(path); + }; + BaseRenderer.prototype.setupGlobalData = function(animData, fontsContainer) { + this.globalData.fontManager = new FontManager(); + this.globalData.fontManager.addChars(animData.chars); + this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); + this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); + this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); + this.globalData.imageLoader = this.animationItem.imagePreloader; + this.globalData.audioController = this.animationItem.audioController; + this.globalData.frameId = 0; + this.globalData.frameRate = animData.fr; + this.globalData.nm = animData.nm; + this.globalData.compSize = { + w: animData.w, + h: animData.h + }; + }; + TransformElement.prototype = { + initTransform: function() { + this.finalTransform = { + mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 }, + _matMdf: false, + _opMdf: false, + mat: new Matrix() + }; + if (this.data.ao) { + this.finalTransform.mProp.autoOriented = true; + } + if (this.data.ty !== 11) { + } + }, + renderTransform: function() { + this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; + this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; + if (this.hierarchy) { + var mat; + var finalMat = this.finalTransform.mat; + var i = 0; + var len = this.hierarchy.length; + if (!this.finalTransform._matMdf) { + while (i < len) { + if (this.hierarchy[i].finalTransform.mProp._mdf) { + this.finalTransform._matMdf = true; + break; + } + i += 1; + } + } + if (this.finalTransform._matMdf) { + mat = this.finalTransform.mProp.v.props; + finalMat.cloneFromProps(mat); + for (i = 0; i < len; i += 1) { + mat = this.hierarchy[i].finalTransform.mProp.v.props; + finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]); + } + } + } + }, + globalToLocal: function(pt) { + var transforms = []; + transforms.push(this.finalTransform); + var flag = true; + var comp2 = this.comp; + while (flag) { + if (comp2.finalTransform) { + if (comp2.data.hasMask) { + transforms.splice(0, 0, comp2.finalTransform); + } + comp2 = comp2.comp; + } else { + flag = false; + } + } + var i; + var len = transforms.length; + var ptNew; + for (i = 0; i < len; i += 1) { + ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); + pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0]; + } + return pt; + }, + mHelper: new Matrix() + }; + MaskElement.prototype.getMaskProperty = function(pos) { + return this.viewData[pos].prop; + }; + MaskElement.prototype.renderFrame = function(isFirstFrame) { + var finalMat = this.element.finalTransform.mat; + var i; + var len = this.masksProperties.length; + for (i = 0; i < len; i += 1) { + if (this.viewData[i].prop._mdf || isFirstFrame) { + this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); + } + if (this.viewData[i].op._mdf || isFirstFrame) { + this.viewData[i].elem.setAttribute("fill-opacity", this.viewData[i].op.v); + } + if (this.masksProperties[i].mode !== "n") { + if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) { + this.viewData[i].invRect.setAttribute("transform", finalMat.getInverseMatrix().to2dCSS()); + } + if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { + var feMorph = this.storedData[i].expan; + if (this.storedData[i].x.v < 0) { + if (this.storedData[i].lastOperator !== "erode") { + this.storedData[i].lastOperator = "erode"; + this.storedData[i].elem.setAttribute("filter", "url(" + getLocationHref() + "#" + this.storedData[i].filterId + ")"); + } + feMorph.setAttribute("radius", -this.storedData[i].x.v); + } else { + if (this.storedData[i].lastOperator !== "dilate") { + this.storedData[i].lastOperator = "dilate"; + this.storedData[i].elem.setAttribute("filter", null); + } + this.storedData[i].elem.setAttribute("stroke-width", this.storedData[i].x.v * 2); + } + } + } + } + }; + MaskElement.prototype.getMaskelement = function() { + return this.maskElement; + }; + MaskElement.prototype.createLayerSolidPath = function() { + var path = "M0,0 "; + path += " h" + this.globalData.compSize.w; + path += " v" + this.globalData.compSize.h; + path += " h-" + this.globalData.compSize.w; + path += " v-" + this.globalData.compSize.h + " "; + return path; + }; + MaskElement.prototype.drawPath = function(pathData, pathNodes, viewData) { + var pathString = " M" + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; + var i; + var len; + len = pathNodes._length; + for (i = 1; i < len; i += 1) { + pathString += " C" + pathNodes.o[i - 1][0] + "," + pathNodes.o[i - 1][1] + " " + pathNodes.i[i][0] + "," + pathNodes.i[i][1] + " " + pathNodes.v[i][0] + "," + pathNodes.v[i][1]; + } + if (pathNodes.c && len > 1) { + pathString += " C" + pathNodes.o[i - 1][0] + "," + pathNodes.o[i - 1][1] + " " + pathNodes.i[0][0] + "," + pathNodes.i[0][1] + " " + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; + } + if (viewData.lastPath !== pathString) { + var pathShapeValue = ""; + if (viewData.elem) { + if (pathNodes.c) { + pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; + } + viewData.elem.setAttribute("d", pathShapeValue); + } + viewData.lastPath = pathString; + } + }; + MaskElement.prototype.destroy = function() { + this.element = null; + this.globalData = null; + this.maskElement = null; + this.data = null; + this.masksProperties = null; + }; + const filtersFactory = function() { + var ob2 = {}; + ob2.createFilter = createFilter; + ob2.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; + function createFilter(filId, skipCoordinates) { + var fil = createNS("filter"); + fil.setAttribute("id", filId); + if (skipCoordinates !== true) { + fil.setAttribute("filterUnits", "objectBoundingBox"); + fil.setAttribute("x", "0%"); + fil.setAttribute("y", "0%"); + fil.setAttribute("width", "100%"); + fil.setAttribute("height", "100%"); + } + return fil; + } + function createAlphaToLuminanceFilter() { + var feColorMatrix = createNS("feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); + feColorMatrix.setAttribute("values", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"); + return feColorMatrix; + } + return ob2; + }(); + const featureSupport = function() { + var ob2 = { + maskType: true + }; + if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\/\d./i.test(navigator.userAgent)) { + ob2.maskType = false; + } + return ob2; + }(); + registeredEffects = {}; + idPrefix = "filter_result_"; + SVGEffects.prototype.renderFrame = function(_isFirstFrame) { + var i; + var len = this.filters.length; + for (i = 0; i < len; i += 1) { + this.filters[i].renderFrame(_isFirstFrame); + } + }; + SVGBaseElement.prototype = { + initRendererElement: function() { + this.layerElement = createNS("g"); + }, + createContainerElements: function() { + this.matteElement = createNS("g"); + this.transformedElement = this.layerElement; + this.maskedElement = this.layerElement; + this._sizeChanged = false; + var layerElementParent = null; + var filId; + var fil; + var gg; + if (this.data.td) { + if (this.data.td == 3 || this.data.td == 1) { + var masker = createNS("mask"); + masker.setAttribute("id", this.layerId); + masker.setAttribute("mask-type", this.data.td == 3 ? "luminance" : "alpha"); + masker.appendChild(this.layerElement); + layerElementParent = masker; + this.globalData.defs.appendChild(masker); + if (!featureSupport.maskType && this.data.td == 1) { + masker.setAttribute("mask-type", "luminance"); + filId = createElementID(); + fil = filtersFactory.createFilter(filId); + this.globalData.defs.appendChild(fil); + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); + gg = createNS("g"); + gg.appendChild(this.layerElement); + layerElementParent = gg; + masker.appendChild(gg); + gg.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + } + } else if (this.data.td == 2) { + var maskGroup = createNS("mask"); + maskGroup.setAttribute("id", this.layerId); + maskGroup.setAttribute("mask-type", "alpha"); + var maskGrouper = createNS("g"); + maskGroup.appendChild(maskGrouper); + filId = createElementID(); + fil = filtersFactory.createFilter(filId); + var feCTr = createNS("feComponentTransfer"); + feCTr.setAttribute("in", "SourceGraphic"); + fil.appendChild(feCTr); + var feFunc = createNS("feFuncA"); + feFunc.setAttribute("type", "table"); + feFunc.setAttribute("tableValues", "1.0 0.0"); + feCTr.appendChild(feFunc); + this.globalData.defs.appendChild(fil); + var alphaRect = createNS("rect"); + alphaRect.setAttribute("width", this.comp.data.w); + alphaRect.setAttribute("height", this.comp.data.h); + alphaRect.setAttribute("x", "0"); + alphaRect.setAttribute("y", "0"); + alphaRect.setAttribute("fill", "#ffffff"); + alphaRect.setAttribute("opacity", "0"); + maskGrouper.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + maskGrouper.appendChild(alphaRect); + maskGrouper.appendChild(this.layerElement); + layerElementParent = maskGrouper; + if (!featureSupport.maskType) { + maskGroup.setAttribute("mask-type", "luminance"); + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); + gg = createNS("g"); + maskGrouper.appendChild(alphaRect); + gg.appendChild(this.layerElement); + layerElementParent = gg; + maskGrouper.appendChild(gg); + } + this.globalData.defs.appendChild(maskGroup); + } + } else if (this.data.tt) { + this.matteElement.appendChild(this.layerElement); + layerElementParent = this.matteElement; + this.baseElement = this.matteElement; + } else { + this.baseElement = this.layerElement; + } + if (this.data.ln) { + this.layerElement.setAttribute("id", this.data.ln); + } + if (this.data.cl) { + this.layerElement.setAttribute("class", this.data.cl); + } + if (this.data.ty === 0 && !this.data.hd) { + var cp = createNS("clipPath"); + var pt = createNS("path"); + pt.setAttribute("d", "M0,0 L" + this.data.w + ",0 L" + this.data.w + "," + this.data.h + " L0," + this.data.h + "z"); + var clipId = createElementID(); + cp.setAttribute("id", clipId); + cp.appendChild(pt); + this.globalData.defs.appendChild(cp); + if (this.checkMasks()) { + var cpGroup = createNS("g"); + cpGroup.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); + cpGroup.appendChild(this.layerElement); + this.transformedElement = cpGroup; + if (layerElementParent) { + layerElementParent.appendChild(this.transformedElement); + } else { + this.baseElement = this.transformedElement; + } + } else { + this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); + } + } + if (this.data.bm !== 0) { + this.setBlendMode(); + } + }, + renderElement: function() { + if (this.finalTransform._matMdf) { + this.transformedElement.setAttribute("transform", this.finalTransform.mat.to2dCSS()); + } + if (this.finalTransform._opMdf) { + this.transformedElement.setAttribute("opacity", this.finalTransform.mProp.o.v); + } + }, + destroyBaseElement: function() { + this.layerElement = null; + this.matteElement = null; + this.maskManager.destroy(); + }, + getBaseElement: function() { + if (this.data.hd) { + return null; + } + return this.baseElement; + }, + createRenderableComponents: function() { + this.maskManager = new MaskElement(this.data, this, this.globalData); + this.renderableEffectsManager = new SVGEffects(this); + }, + setMatte: function(id) { + if (!this.matteElement) { + return; + } + this.matteElement.setAttribute("mask", "url(" + getLocationHref() + "#" + id + ")"); + } + }; + HierarchyElement.prototype = { + /** + * @function + * Initializes hierarchy properties + * + */ + initHierarchy: function() { + this.hierarchy = []; + this._isParent = false; + this.checkParenting(); + }, + /** + * @function + * Sets layer's hierarchy. + * @param {array} hierarch + * layer's parent list + * + */ + setHierarchy: function(hierarchy) { + this.hierarchy = hierarchy; + }, + /** + * @function + * Sets layer as parent. + * + */ + setAsParent: function() { + this._isParent = true; + }, + /** + * @function + * Searches layer's parenting chain + * + */ + checkParenting: function() { + if (this.data.parent !== void 0) { + this.comp.buildElementParenting(this, this.data.parent, []); + } + } + }; + (function() { + var _prototype = { + initElement: function(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + this.initRenderable(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + this.createContent(); + this.hide(); + }, + hide: function() { + if (!this.hidden && (!this.isInRange || this.isTransparent)) { + var elem2 = this.baseElement || this.layerElement; + elem2.style.display = "none"; + this.hidden = true; + } + }, + show: function() { + if (this.isInRange && !this.isTransparent) { + if (!this.data.hd) { + var elem2 = this.baseElement || this.layerElement; + elem2.style.display = "block"; + } + this.hidden = false; + this._isFirstFrame = true; + } + }, + renderFrame: function() { + if (this.data.hd || this.hidden) { + return; + } + this.renderTransform(); + this.renderRenderable(); + this.renderElement(); + this.renderInnerContent(); + if (this._isFirstFrame) { + this._isFirstFrame = false; + } + }, + renderInnerContent: function() { + }, + prepareFrame: function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + this.checkTransparency(); + }, + destroy: function() { + this.innerElem = null; + this.destroyBaseElement(); + } + }; + extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement); + })(); + extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement); + IImageElement.prototype.createContent = function() { + var assetPath = this.globalData.getAssetsPath(this.assetData); + this.innerElem = createNS("image"); + this.innerElem.setAttribute("width", this.assetData.w + "px"); + this.innerElem.setAttribute("height", this.assetData.h + "px"); + this.innerElem.setAttribute("preserveAspectRatio", this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); + this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink", "href", assetPath); + this.layerElement.appendChild(this.innerElem); + }; + IImageElement.prototype.sourceRectAtTime = function() { + return this.sourceRect; + }; + IShapeElement.prototype = { + addShapeToModifiers: function(data2) { + var i; + var len = this.shapeModifiers.length; + for (i = 0; i < len; i += 1) { + this.shapeModifiers[i].addShape(data2); + } + }, + isShapeInAnimatedModifiers: function(data2) { + var i = 0; + var len = this.shapeModifiers.length; + while (i < len) { + if (this.shapeModifiers[i].isAnimatedWithShape(data2)) { + return true; + } + } + return false; + }, + renderModifiers: function() { + if (!this.shapeModifiers.length) { + return; + } + var i; + var len = this.shapes.length; + for (i = 0; i < len; i += 1) { + this.shapes[i].sh.reset(); + } + len = this.shapeModifiers.length; + var shouldBreakProcess; + for (i = len - 1; i >= 0; i -= 1) { + shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); + if (shouldBreakProcess) { + break; + } + } + }, + searchProcessedElement: function(elem2) { + var elements = this.processedElements; + var i = 0; + var len = elements.length; + while (i < len) { + if (elements[i].elem === elem2) { + return elements[i].pos; + } + i += 1; + } + return 0; + }, + addProcessedElement: function(elem2, pos) { + var elements = this.processedElements; + var i = elements.length; + while (i) { + i -= 1; + if (elements[i].elem === elem2) { + elements[i].pos = pos; + return; + } + } + elements.push(new ProcessedElement(elem2, pos)); + }, + prepareFrame: function(num) { + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + } + }; + const lineCapEnum = { + 1: "butt", + 2: "round", + 3: "square" + }; + const lineJoinEnum = { + 1: "miter", + 2: "round", + 3: "bevel" + }; + SVGShapeData.prototype.setAsAnimated = function() { + this._isAnimated = true; + }; + SVGStyleData.prototype.reset = function() { + this.d = ""; + this._mdf = false; + }; + DashProperty.prototype.getValue = function(forceRender) { + if (this.elem.globalData.frameId === this.frameId && !forceRender) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + this._mdf = this._mdf || forceRender; + if (this._mdf) { + var i = 0; + var len = this.dataProps.length; + if (this.renderer === "svg") { + this.dashStr = ""; + } + for (i = 0; i < len; i += 1) { + if (this.dataProps[i].n !== "o") { + if (this.renderer === "svg") { + this.dashStr += " " + this.dataProps[i].p.v; + } else { + this.dashArray[i] = this.dataProps[i].p.v; + } + } else { + this.dashoffset[0] = this.dataProps[i].p.v; + } + } + } + }; + extendPrototype([DynamicPropertyContainer], DashProperty); + extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); + extendPrototype([DynamicPropertyContainer], SVGFillStyleData); + extendPrototype([DynamicPropertyContainer], SVGNoStyleData); + GradientProperty.prototype.comparePoints = function(values2, points) { + var i = 0; + var len = this.o.length / 2; + var diff; + while (i < len) { + diff = Math.abs(values2[i * 4] - values2[points * 4 + i * 2]); + if (diff > 0.01) { + return false; + } + i += 1; + } + return true; + }; + GradientProperty.prototype.checkCollapsable = function() { + if (this.o.length / 2 !== this.c.length / 4) { + return false; + } + if (this.data.k.k[0].s) { + var i = 0; + var len = this.data.k.k.length; + while (i < len) { + if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) { + return false; + } + i += 1; + } + } else if (!this.comparePoints(this.data.k.k, this.data.p)) { + return false; + } + return true; + }; + GradientProperty.prototype.getValue = function(forceRender) { + this.prop.getValue(); + this._mdf = false; + this._cmdf = false; + this._omdf = false; + if (this.prop._mdf || forceRender) { + var i; + var len = this.data.p * 4; + var mult; + var val2; + for (i = 0; i < len; i += 1) { + mult = i % 4 === 0 ? 100 : 255; + val2 = Math.round(this.prop.v[i] * mult); + if (this.c[i] !== val2) { + this.c[i] = val2; + this._cmdf = !forceRender; + } + } + if (this.o.length) { + len = this.prop.v.length; + for (i = this.data.p * 4; i < len; i += 1) { + mult = i % 2 === 0 ? 100 : 1; + val2 = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; + if (this.o[i - this.data.p * 4] !== val2) { + this.o[i - this.data.p * 4] = val2; + this._omdf = !forceRender; + } + } + } + this._mdf = !forceRender; + } + }; + extendPrototype([DynamicPropertyContainer], GradientProperty); + SVGGradientFillStyleData.prototype.initGradientData = function(elem2, data2, styleOb) { + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, null, this); + this.e = PropertyFactory.getProp(elem2, data2.e, 1, null, this); + this.h = PropertyFactory.getProp(elem2, data2.h || { k: 0 }, 0, 0.01, this); + this.a = PropertyFactory.getProp(elem2, data2.a || { k: 0 }, 0, degToRads, this); + this.g = new GradientProperty(elem2, data2.g, this); + this.style = styleOb; + this.stops = []; + this.setGradientData(styleOb.pElem, data2); + this.setGradientOpacity(data2, styleOb); + this._isAnimated = !!this._isAnimated; + }; + SVGGradientFillStyleData.prototype.setGradientData = function(pathElement, data2) { + var gradientId = createElementID(); + var gfill = createNS(data2.t === 1 ? "linearGradient" : "radialGradient"); + gfill.setAttribute("id", gradientId); + gfill.setAttribute("spreadMethod", "pad"); + gfill.setAttribute("gradientUnits", "userSpaceOnUse"); + var stops = []; + var stop; + var j; + var jLen; + jLen = data2.g.p * 4; + for (j = 0; j < jLen; j += 4) { + stop = createNS("stop"); + gfill.appendChild(stop); + stops.push(stop); + } + pathElement.setAttribute(data2.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + gradientId + ")"); + this.gf = gfill; + this.cst = stops; + }; + SVGGradientFillStyleData.prototype.setGradientOpacity = function(data2, styleOb) { + if (this.g._hasOpacity && !this.g._collapsable) { + var stop; + var j; + var jLen; + var mask2 = createNS("mask"); + var maskElement = createNS("path"); + mask2.appendChild(maskElement); + var opacityId = createElementID(); + var maskId = createElementID(); + mask2.setAttribute("id", maskId); + var opFill = createNS(data2.t === 1 ? "linearGradient" : "radialGradient"); + opFill.setAttribute("id", opacityId); + opFill.setAttribute("spreadMethod", "pad"); + opFill.setAttribute("gradientUnits", "userSpaceOnUse"); + jLen = data2.g.k.k[0].s ? data2.g.k.k[0].s.length : data2.g.k.k.length; + var stops = this.stops; + for (j = data2.g.p * 4; j < jLen; j += 2) { + stop = createNS("stop"); + stop.setAttribute("stop-color", "rgb(255,255,255)"); + opFill.appendChild(stop); + stops.push(stop); + } + maskElement.setAttribute(data2.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + opacityId + ")"); + if (data2.ty === "gs") { + maskElement.setAttribute("stroke-linecap", lineCapEnum[data2.lc || 2]); + maskElement.setAttribute("stroke-linejoin", lineJoinEnum[data2.lj || 2]); + if (data2.lj === 1) { + maskElement.setAttribute("stroke-miterlimit", data2.ml); + } + } + this.of = opFill; + this.ms = mask2; + this.ost = stops; + this.maskId = maskId; + styleOb.msElem = maskElement; + } + }; + extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); + extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); + const buildShapeString = function(pathNodes, length2, closed, mat) { + if (length2 === 0) { + return ""; + } + var _o = pathNodes.o; + var _i = pathNodes.i; + var _v = pathNodes.v; + var i; + var shapeString = " M" + mat.applyToPointStringified(_v[0][0], _v[0][1]); + for (i = 1; i < length2; i += 1) { + shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[i][0], _i[i][1]) + " " + mat.applyToPointStringified(_v[i][0], _v[i][1]); + } + if (closed && length2) { + shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[0][0], _i[0][1]) + " " + mat.applyToPointStringified(_v[0][0], _v[0][1]); + shapeString += "z"; + } + return shapeString; + }; + const SVGElementsRenderer = function() { + var _identityMatrix = new Matrix(); + var _matrixHelper = new Matrix(); + var ob2 = { + createRenderFunction + }; + function createRenderFunction(data2) { + switch (data2.ty) { + case "fl": + return renderFill; + case "gf": + return renderGradient; + case "gs": + return renderGradientStroke; + case "st": + return renderStroke; + case "sh": + case "el": + case "rc": + case "sr": + return renderPath; + case "tr": + return renderContentTransform; + case "no": + return renderNoop; + default: + return null; + } + } + function renderContentTransform(styleData, itemData, isFirstFrame) { + if (isFirstFrame || itemData.transform.op._mdf) { + itemData.transform.container.setAttribute("opacity", itemData.transform.op.v); + } + if (isFirstFrame || itemData.transform.mProps._mdf) { + itemData.transform.container.setAttribute("transform", itemData.transform.mProps.v.to2dCSS()); + } + } + function renderNoop() { + } + function renderPath(styleData, itemData, isFirstFrame) { + var j; + var jLen; + var pathStringTransformed; + var redraw; + var pathNodes; + var l2; + var lLen = itemData.styles.length; + var lvl = itemData.lvl; + var paths; + var mat; + var props; + var iterations; + var k2; + for (l2 = 0; l2 < lLen; l2 += 1) { + redraw = itemData.sh._mdf || isFirstFrame; + if (itemData.styles[l2].lvl < lvl) { + mat = _matrixHelper.reset(); + iterations = lvl - itemData.styles[l2].lvl; + k2 = itemData.transformers.length - 1; + while (!redraw && iterations > 0) { + redraw = itemData.transformers[k2].mProps._mdf || redraw; + iterations -= 1; + k2 -= 1; + } + if (redraw) { + iterations = lvl - itemData.styles[l2].lvl; + k2 = itemData.transformers.length - 1; + while (iterations > 0) { + props = itemData.transformers[k2].mProps.v.props; + mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]); + iterations -= 1; + k2 -= 1; + } + } + } else { + mat = _identityMatrix; + } + paths = itemData.sh.paths; + jLen = paths._length; + if (redraw) { + pathStringTransformed = ""; + for (j = 0; j < jLen; j += 1) { + pathNodes = paths.shapes[j]; + if (pathNodes && pathNodes._length) { + pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); + } + } + itemData.caches[l2] = pathStringTransformed; + } else { + pathStringTransformed = itemData.caches[l2]; + } + itemData.styles[l2].d += styleData.hd === true ? "" : pathStringTransformed; + itemData.styles[l2]._mdf = redraw || itemData.styles[l2]._mdf; + } + } + function renderFill(styleData, itemData, isFirstFrame) { + var styleElem = itemData.style; + if (itemData.c._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("fill", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); + } + if (itemData.o._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("fill-opacity", itemData.o.v); + } + } + function renderGradientStroke(styleData, itemData, isFirstFrame) { + renderGradient(styleData, itemData, isFirstFrame); + renderStroke(styleData, itemData, isFirstFrame); + } + function renderGradient(styleData, itemData, isFirstFrame) { + var gfill = itemData.gf; + var hasOpacity = itemData.g._hasOpacity; + var pt1 = itemData.s.v; + var pt2 = itemData.e.v; + if (itemData.o._mdf || isFirstFrame) { + var attr = styleData.ty === "gf" ? "fill-opacity" : "stroke-opacity"; + itemData.style.pElem.setAttribute(attr, itemData.o.v); + } + if (itemData.s._mdf || isFirstFrame) { + var attr1 = styleData.t === 1 ? "x1" : "cx"; + var attr2 = attr1 === "x1" ? "y1" : "cy"; + gfill.setAttribute(attr1, pt1[0]); + gfill.setAttribute(attr2, pt1[1]); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute(attr1, pt1[0]); + itemData.of.setAttribute(attr2, pt1[1]); + } + } + var stops; + var i; + var len; + var stop; + if (itemData.g._cmdf || isFirstFrame) { + stops = itemData.cst; + var cValues = itemData.g.c; + len = stops.length; + for (i = 0; i < len; i += 1) { + stop = stops[i]; + stop.setAttribute("offset", cValues[i * 4] + "%"); + stop.setAttribute("stop-color", "rgb(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + ")"); + } + } + if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { + var oValues = itemData.g.o; + if (itemData.g._collapsable) { + stops = itemData.cst; + } else { + stops = itemData.ost; + } + len = stops.length; + for (i = 0; i < len; i += 1) { + stop = stops[i]; + if (!itemData.g._collapsable) { + stop.setAttribute("offset", oValues[i * 2] + "%"); + } + stop.setAttribute("stop-opacity", oValues[i * 2 + 1]); + } + } + if (styleData.t === 1) { + if (itemData.e._mdf || isFirstFrame) { + gfill.setAttribute("x2", pt2[0]); + gfill.setAttribute("y2", pt2[1]); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("x2", pt2[0]); + itemData.of.setAttribute("y2", pt2[1]); + } + } + } else { + var rad; + if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { + rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + gfill.setAttribute("r", rad); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("r", rad); + } + } + if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { + if (!rad) { + rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + } + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); + var percent = itemData.h.v; + if (percent >= 1) { + percent = 0.99; + } else if (percent <= -1) { + percent = -0.99; + } + var dist = rad * percent; + var x2 = Math.cos(ang + itemData.a.v) * dist + pt1[0]; + var y2 = Math.sin(ang + itemData.a.v) * dist + pt1[1]; + gfill.setAttribute("fx", x2); + gfill.setAttribute("fy", y2); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("fx", x2); + itemData.of.setAttribute("fy", y2); + } + } + } + } + function renderStroke(styleData, itemData, isFirstFrame) { + var styleElem = itemData.style; + var d = itemData.d; + if (d && (d._mdf || isFirstFrame) && d.dashStr) { + styleElem.pElem.setAttribute("stroke-dasharray", d.dashStr); + styleElem.pElem.setAttribute("stroke-dashoffset", d.dashoffset[0]); + } + if (itemData.c && (itemData.c._mdf || isFirstFrame)) { + styleElem.pElem.setAttribute("stroke", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); + } + if (itemData.o._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("stroke-opacity", itemData.o.v); + } + if (itemData.w._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("stroke-width", itemData.w.v); + if (styleElem.msElem) { + styleElem.msElem.setAttribute("stroke-width", itemData.w.v); + } + } + } + return ob2; + }(); + extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement); + SVGShapeElement.prototype.initSecondaryElement = function() { + }; + SVGShapeElement.prototype.identityMatrix = new Matrix(); + SVGShapeElement.prototype.buildExpressionInterface = function() { + }; + SVGShapeElement.prototype.createContent = function() { + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); + this.filterUniqueShapes(); + }; + SVGShapeElement.prototype.filterUniqueShapes = function() { + var i; + var len = this.shapes.length; + var shape; + var j; + var jLen = this.stylesList.length; + var style; + var tempShapes = []; + var areAnimated = false; + for (j = 0; j < jLen; j += 1) { + style = this.stylesList[j]; + areAnimated = false; + tempShapes.length = 0; + for (i = 0; i < len; i += 1) { + shape = this.shapes[i]; + if (shape.styles.indexOf(style) !== -1) { + tempShapes.push(shape); + areAnimated = shape._isAnimated || areAnimated; + } + } + if (tempShapes.length > 1 && areAnimated) { + this.setShapesAsAnimated(tempShapes); + } + } + }; + SVGShapeElement.prototype.setShapesAsAnimated = function(shapes) { + var i; + var len = shapes.length; + for (i = 0; i < len; i += 1) { + shapes[i].setAsAnimated(); + } + }; + SVGShapeElement.prototype.createStyleElement = function(data2, level) { + var elementData; + var styleOb = new SVGStyleData(data2, level); + var pathElement = styleOb.pElem; + if (data2.ty === "st") { + elementData = new SVGStrokeStyleData(this, data2, styleOb); + } else if (data2.ty === "fl") { + elementData = new SVGFillStyleData(this, data2, styleOb); + } else if (data2.ty === "gf" || data2.ty === "gs") { + var GradientConstructor = data2.ty === "gf" ? SVGGradientFillStyleData : SVGGradientStrokeStyleData; + elementData = new GradientConstructor(this, data2, styleOb); + this.globalData.defs.appendChild(elementData.gf); + if (elementData.maskId) { + this.globalData.defs.appendChild(elementData.ms); + this.globalData.defs.appendChild(elementData.of); + pathElement.setAttribute("mask", "url(" + getLocationHref() + "#" + elementData.maskId + ")"); + } + } else if (data2.ty === "no") { + elementData = new SVGNoStyleData(this, data2, styleOb); + } + if (data2.ty === "st" || data2.ty === "gs") { + pathElement.setAttribute("stroke-linecap", lineCapEnum[data2.lc || 2]); + pathElement.setAttribute("stroke-linejoin", lineJoinEnum[data2.lj || 2]); + pathElement.setAttribute("fill-opacity", "0"); + if (data2.lj === 1) { + pathElement.setAttribute("stroke-miterlimit", data2.ml); + } + } + if (data2.r === 2) { + pathElement.setAttribute("fill-rule", "evenodd"); + } + if (data2.ln) { + pathElement.setAttribute("id", data2.ln); + } + if (data2.cl) { + pathElement.setAttribute("class", data2.cl); + } + if (data2.bm) { + pathElement.style["mix-blend-mode"] = getBlendMode(data2.bm); + } + this.stylesList.push(styleOb); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.createGroupElement = function(data2) { + var elementData = new ShapeGroupData(); + if (data2.ln) { + elementData.gr.setAttribute("id", data2.ln); + } + if (data2.cl) { + elementData.gr.setAttribute("class", data2.cl); + } + if (data2.bm) { + elementData.gr.style["mix-blend-mode"] = getBlendMode(data2.bm); + } + return elementData; + }; + SVGShapeElement.prototype.createTransformElement = function(data2, container) { + var transformProperty = TransformPropertyFactory.getTransformProperty(this, data2, this); + var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.createShapeElement = function(data2, ownTransformers, level) { + var ty = 4; + if (data2.ty === "rc") { + ty = 5; + } else if (data2.ty === "el") { + ty = 6; + } else if (data2.ty === "sr") { + ty = 7; + } + var shapeProperty = ShapePropertyFactory.getShapeProp(this, data2, ty, this); + var elementData = new SVGShapeData(ownTransformers, level, shapeProperty); + this.shapes.push(elementData); + this.addShapeToModifiers(elementData); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.addToAnimatedContents = function(data2, element) { + var i = 0; + var len = this.animatedContents.length; + while (i < len) { + if (this.animatedContents[i].element === element) { + return; + } + i += 1; + } + this.animatedContents.push({ + fn: SVGElementsRenderer.createRenderFunction(data2), + element, + data: data2 + }); + }; + SVGShapeElement.prototype.setElementStyles = function(elementData) { + var arr = elementData.styles; + var j; + var jLen = this.stylesList.length; + for (j = 0; j < jLen; j += 1) { + if (!this.stylesList[j].closed) { + arr.push(this.stylesList[j]); + } + } + }; + SVGShapeElement.prototype.reloadShapes = function() { + this._isFirstFrame = true; + var i; + var len = this.itemsData.length; + for (i = 0; i < len; i += 1) { + this.prevViewData[i] = this.itemsData[i]; + } + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); + this.filterUniqueShapes(); + len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + } + this.renderModifiers(); + }; + SVGShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, container, level, transformers, render) { + var ownTransformers = [].concat(transformers); + var i; + var len = arr.length - 1; + var j; + var jLen; + var ownStyles = []; + var ownModifiers = []; + var currentTransform; + var modifier; + var processedPos; + for (i = len; i >= 0; i -= 1) { + processedPos = this.searchProcessedElement(arr[i]); + if (!processedPos) { + arr[i]._render = render; + } else { + itemsData[i] = prevViewData[processedPos - 1]; + } + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs" || arr[i].ty === "no") { + if (!processedPos) { + itemsData[i] = this.createStyleElement(arr[i], level); + } else { + itemsData[i].style.closed = false; + } + if (arr[i]._render) { + if (itemsData[i].style.pElem.parentNode !== container) { + container.appendChild(itemsData[i].style.pElem); + } + } + ownStyles.push(itemsData[i].style); + } else if (arr[i].ty === "gr") { + if (!processedPos) { + itemsData[i] = this.createGroupElement(arr[i]); + } else { + jLen = itemsData[i].it.length; + for (j = 0; j < jLen; j += 1) { + itemsData[i].prevViewData[j] = itemsData[i].it[j]; + } + } + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); + if (arr[i]._render) { + if (itemsData[i].gr.parentNode !== container) { + container.appendChild(itemsData[i].gr); + } + } + } else if (arr[i].ty === "tr") { + if (!processedPos) { + itemsData[i] = this.createTransformElement(arr[i], container); + } + currentTransform = itemsData[i].transform; + ownTransformers.push(currentTransform); + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { + if (!processedPos) { + itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); + } + this.setElementStyles(itemsData[i]); + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "ms" || arr[i].ty === "pb") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + modifier.init(this, arr[i]); + itemsData[i] = modifier; + this.shapeModifiers.push(modifier); + } else { + modifier = itemsData[i]; + modifier.closed = false; + } + ownModifiers.push(modifier); + } else if (arr[i].ty === "rp") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + itemsData[i] = modifier; + modifier.init(this, arr, i, itemsData); + this.shapeModifiers.push(modifier); + render = false; + } else { + modifier = itemsData[i]; + modifier.closed = true; + } + ownModifiers.push(modifier); + } + this.addProcessedElement(arr[i], i + 1); + } + len = ownStyles.length; + for (i = 0; i < len; i += 1) { + ownStyles[i].closed = true; + } + len = ownModifiers.length; + for (i = 0; i < len; i += 1) { + ownModifiers[i].closed = true; + } + }; + SVGShapeElement.prototype.renderInnerContent = function() { + this.renderModifiers(); + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + this.stylesList[i].reset(); + } + this.renderShape(); + for (i = 0; i < len; i += 1) { + if (this.stylesList[i]._mdf || this._isFirstFrame) { + if (this.stylesList[i].msElem) { + this.stylesList[i].msElem.setAttribute("d", this.stylesList[i].d); + this.stylesList[i].d = "M0 0" + this.stylesList[i].d; + } + this.stylesList[i].pElem.setAttribute("d", this.stylesList[i].d || "M0 0"); + } + } + }; + SVGShapeElement.prototype.renderShape = function() { + var i; + var len = this.animatedContents.length; + var animatedContent; + for (i = 0; i < len; i += 1) { + animatedContent = this.animatedContents[i]; + if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) { + animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); + } + } + }; + SVGShapeElement.prototype.destroy = function() { + this.destroyBaseElement(); + this.shapesData = null; + this.itemsData = null; + }; + LetterProps.prototype.update = function(o, sw, sc, fc, m, p2) { + this._mdf.o = false; + this._mdf.sw = false; + this._mdf.sc = false; + this._mdf.fc = false; + this._mdf.m = false; + this._mdf.p = false; + var updated = false; + if (this.o !== o) { + this.o = o; + this._mdf.o = true; + updated = true; + } + if (this.sw !== sw) { + this.sw = sw; + this._mdf.sw = true; + updated = true; + } + if (this.sc !== sc) { + this.sc = sc; + this._mdf.sc = true; + updated = true; + } + if (this.fc !== fc) { + this.fc = fc; + this._mdf.fc = true; + updated = true; + } + if (this.m !== m) { + this.m = m; + this._mdf.m = true; + updated = true; + } + if (p2.length && (this.p[0] !== p2[0] || this.p[1] !== p2[1] || this.p[4] !== p2[4] || this.p[5] !== p2[5] || this.p[12] !== p2[12] || this.p[13] !== p2[13])) { + this.p = p2; + this._mdf.p = true; + updated = true; + } + return updated; + }; + TextProperty.prototype.defaultBoxWidth = [0, 0]; + TextProperty.prototype.copyData = function(obj, data2) { + for (var s in data2) { + if (Object.prototype.hasOwnProperty.call(data2, s)) { + obj[s] = data2[s]; + } + } + return obj; + }; + TextProperty.prototype.setCurrentData = function(data2) { + if (!data2.__complete) { + this.completeTextData(data2); + } + this.currentData = data2; + this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; + this._mdf = true; + }; + TextProperty.prototype.searchProperty = function() { + return this.searchKeyframes(); + }; + TextProperty.prototype.searchKeyframes = function() { + this.kf = this.data.d.k.length > 1; + if (this.kf) { + this.addEffect(this.getKeyframeValue.bind(this)); + } + return this.kf; + }; + TextProperty.prototype.addEffect = function(effectFunction) { + this.effectsSequence.push(effectFunction); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.getValue = function(_finalValue) { + if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) { + return; + } + this.currentData.t = this.data.d.k[this.keysIndex].s.t; + var currentValue = this.currentData; + var currentIndex = this.keysIndex; + if (this.lock) { + this.setCurrentData(this.currentData); + return; + } + this.lock = true; + this._mdf = false; + var i; + var len = this.effectsSequence.length; + var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; + for (i = 0; i < len; i += 1) { + if (currentIndex !== this.keysIndex) { + finalValue = this.effectsSequence[i](finalValue, finalValue.t); + } else { + finalValue = this.effectsSequence[i](this.currentData, finalValue.t); + } + } + if (currentValue !== finalValue) { + this.setCurrentData(finalValue); + } + this.v = this.currentData; + this.pv = this.v; + this.lock = false; + this.frameId = this.elem.globalData.frameId; + }; + TextProperty.prototype.getKeyframeValue = function() { + var textKeys = this.data.d.k; + var frameNum = this.elem.comp.renderedFrame; + var i = 0; + var len = textKeys.length; + while (i <= len - 1) { + if (i === len - 1 || textKeys[i + 1].t > frameNum) { + break; + } + i += 1; + } + if (this.keysIndex !== i) { + this.keysIndex = i; + } + return this.data.d.k[this.keysIndex].s; + }; + TextProperty.prototype.buildFinalText = function(text2) { + var charactersArray = []; + var i = 0; + var len = text2.length; + var charCode; + var secondCharCode; + var shouldCombine = false; + while (i < len) { + charCode = text2.charCodeAt(i); + if (FontManager.isCombinedCharacter(charCode)) { + charactersArray[charactersArray.length - 1] += text2.charAt(i); + } else if (charCode >= 55296 && charCode <= 56319) { + secondCharCode = text2.charCodeAt(i + 1); + if (secondCharCode >= 56320 && secondCharCode <= 57343) { + if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) { + charactersArray[charactersArray.length - 1] += text2.substr(i, 2); + shouldCombine = false; + } else { + charactersArray.push(text2.substr(i, 2)); + } + i += 1; + } else { + charactersArray.push(text2.charAt(i)); + } + } else if (charCode > 56319) { + secondCharCode = text2.charCodeAt(i + 1); + if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) { + shouldCombine = true; + charactersArray[charactersArray.length - 1] += text2.substr(i, 2); + i += 1; + } else { + charactersArray.push(text2.charAt(i)); + } + } else if (FontManager.isZeroWidthJoiner(charCode)) { + charactersArray[charactersArray.length - 1] += text2.charAt(i); + shouldCombine = true; + } else { + charactersArray.push(text2.charAt(i)); + } + i += 1; + } + return charactersArray; + }; + TextProperty.prototype.completeTextData = function(documentData) { + documentData.__complete = true; + var fontManager = this.elem.globalData.fontManager; + var data2 = this.data; + var letters = []; + var i; + var len; + var newLineFlag; + var index2 = 0; + var val2; + var anchorGrouping = data2.m.g; + var currentSize = 0; + var currentPos = 0; + var currentLine = 0; + var lineWidths = []; + var lineWidth = 0; + var maxLineWidth = 0; + var j; + var jLen; + var fontData = fontManager.getFontByName(documentData.f); + var charData; + var cLength = 0; + var fontProps = getFontProperties(fontData); + documentData.fWeight = fontProps.weight; + documentData.fStyle = fontProps.style; + documentData.finalSize = documentData.s; + documentData.finalText = this.buildFinalText(documentData.t); + len = documentData.finalText.length; + documentData.finalLineHeight = documentData.lh; + var trackingOffset = documentData.tr / 1e3 * documentData.finalSize; + var charCode; + if (documentData.sz) { + var flag = true; + var boxWidth = documentData.sz[0]; + var boxHeight = documentData.sz[1]; + var currentHeight; + var finalText; + while (flag) { + finalText = this.buildFinalText(documentData.t); + currentHeight = 0; + lineWidth = 0; + len = finalText.length; + trackingOffset = documentData.tr / 1e3 * documentData.finalSize; + var lastSpaceIndex = -1; + for (i = 0; i < len; i += 1) { + charCode = finalText[i].charCodeAt(0); + newLineFlag = false; + if (finalText[i] === " ") { + lastSpaceIndex = i; + } else if (charCode === 13 || charCode === 3) { + lineWidth = 0; + newLineFlag = true; + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; + } + if (fontManager.chars) { + charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; + } else { + cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); + } + if (lineWidth + cLength > boxWidth && finalText[i] !== " ") { + if (lastSpaceIndex === -1) { + len += 1; + } else { + i = lastSpaceIndex; + } + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; + finalText.splice(i, lastSpaceIndex === i ? 1 : 0, "\r"); + lastSpaceIndex = -1; + lineWidth = 0; + } else { + lineWidth += cLength; + lineWidth += trackingOffset; + } + } + currentHeight += fontData.ascent * documentData.finalSize / 100; + if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { + documentData.finalSize -= 1; + documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; + } else { + documentData.finalText = finalText; + len = documentData.finalText.length; + flag = false; + } + } + } + lineWidth = -trackingOffset; + cLength = 0; + var uncollapsedSpaces = 0; + var currentChar; + for (i = 0; i < len; i += 1) { + newLineFlag = false; + currentChar = documentData.finalText[i]; + charCode = currentChar.charCodeAt(0); + if (charCode === 13 || charCode === 3) { + uncollapsedSpaces = 0; + lineWidths.push(lineWidth); + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; + lineWidth = -2 * trackingOffset; + val2 = ""; + newLineFlag = true; + currentLine += 1; + } else { + val2 = currentChar; + } + if (fontManager.chars) { + charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; + } else { + cLength = fontManager.measureText(val2, documentData.f, documentData.finalSize); + } + if (currentChar === " ") { + uncollapsedSpaces += cLength + trackingOffset; + } else { + lineWidth += cLength + trackingOffset + uncollapsedSpaces; + uncollapsedSpaces = 0; + } + letters.push({ + l: cLength, + an: cLength, + add: currentSize, + n: newLineFlag, + anIndexes: [], + val: val2, + line: currentLine, + animatorJustifyOffset: 0 + }); + if (anchorGrouping == 2) { + currentSize += cLength; + if (val2 === "" || val2 === " " || i === len - 1) { + if (val2 === "" || val2 === " ") { + currentSize -= cLength; + } + while (currentPos <= i) { + letters[currentPos].an = currentSize; + letters[currentPos].ind = index2; + letters[currentPos].extra = cLength; + currentPos += 1; + } + index2 += 1; + currentSize = 0; + } + } else if (anchorGrouping == 3) { + currentSize += cLength; + if (val2 === "" || i === len - 1) { + if (val2 === "") { + currentSize -= cLength; + } + while (currentPos <= i) { + letters[currentPos].an = currentSize; + letters[currentPos].ind = index2; + letters[currentPos].extra = cLength; + currentPos += 1; + } + currentSize = 0; + index2 += 1; + } + } else { + letters[index2].ind = index2; + letters[index2].extra = 0; + index2 += 1; + } + } + documentData.l = letters; + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; + lineWidths.push(lineWidth); + if (documentData.sz) { + documentData.boxWidth = documentData.sz[0]; + documentData.justifyOffset = 0; + } else { + documentData.boxWidth = maxLineWidth; + switch (documentData.j) { + case 1: + documentData.justifyOffset = -documentData.boxWidth; + break; + case 2: + documentData.justifyOffset = -documentData.boxWidth / 2; + break; + default: + documentData.justifyOffset = 0; + } + } + documentData.lineWidths = lineWidths; + var animators = data2.a; + var animatorData; + var letterData; + jLen = animators.length; + var based; + var ind; + var indexes = []; + for (j = 0; j < jLen; j += 1) { + animatorData = animators[j]; + if (animatorData.a.sc) { + documentData.strokeColorAnim = true; + } + if (animatorData.a.sw) { + documentData.strokeWidthAnim = true; + } + if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) { + documentData.fillColorAnim = true; + } + ind = 0; + based = animatorData.s.b; + for (i = 0; i < len; i += 1) { + letterData = letters[i]; + letterData.anIndexes[j] = ind; + if (based == 1 && letterData.val !== "" || based == 2 && letterData.val !== "" && letterData.val !== " " || based == 3 && (letterData.n || letterData.val == " " || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) { + if (animatorData.s.rn === 1) { + indexes.push(ind); + } + ind += 1; + } + } + data2.a[j].s.totalChars = ind; + var currentInd = -1; + var newInd; + if (animatorData.s.rn === 1) { + for (i = 0; i < len; i += 1) { + letterData = letters[i]; + if (currentInd != letterData.anIndexes[j]) { + currentInd = letterData.anIndexes[j]; + newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; + } + letterData.anIndexes[j] = newInd; + } + } + } + documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; + documentData.ls = documentData.ls || 0; + documentData.ascent = fontData.ascent * documentData.finalSize / 100; + }; + TextProperty.prototype.updateDocumentData = function(newData, index2) { + index2 = index2 === void 0 ? this.keysIndex : index2; + var dData = this.copyData({}, this.data.d.k[index2].s); + dData = this.copyData(dData, newData); + this.data.d.k[index2].s = dData; + this.recalculate(index2); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.recalculate = function(index2) { + var dData = this.data.d.k[index2].s; + dData.__complete = false; + this.keysIndex = 0; + this._isFirstFrame = true; + this.getValue(dData); + }; + TextProperty.prototype.canResizeFont = function(_canResize) { + this.canResize = _canResize; + this.recalculate(this.keysIndex); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.setMinimumFontSize = function(_fontValue) { + this.minimumFontSize = Math.floor(_fontValue) || 1; + this.recalculate(this.keysIndex); + this.elem.addDynamicProperty(this); + }; + const TextSelectorProp = function() { + var max2 = Math.max; + var min = Math.min; + var floor = Math.floor; + function TextSelectorPropFactory(elem2, data2) { + this._currentTextLength = -1; + this.k = false; + this.data = data2; + this.elem = elem2; + this.comp = elem2.comp; + this.finalS = 0; + this.finalE = 0; + this.initDynamicPropertyContainer(elem2); + this.s = PropertyFactory.getProp(elem2, data2.s || { k: 0 }, 0, 0, this); + if ("e" in data2) { + this.e = PropertyFactory.getProp(elem2, data2.e, 0, 0, this); + } else { + this.e = { v: 100 }; + } + this.o = PropertyFactory.getProp(elem2, data2.o || { k: 0 }, 0, 0, this); + this.xe = PropertyFactory.getProp(elem2, data2.xe || { k: 0 }, 0, 0, this); + this.ne = PropertyFactory.getProp(elem2, data2.ne || { k: 0 }, 0, 0, this); + this.sm = PropertyFactory.getProp(elem2, data2.sm || { k: 100 }, 0, 0, this); + this.a = PropertyFactory.getProp(elem2, data2.a, 0, 0.01, this); + if (!this.dynamicProperties.length) { + this.getValue(); + } + } + TextSelectorPropFactory.prototype = { + getMult: function(ind) { + if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) { + this.getValue(); + } + var x1 = 0; + var y1 = 0; + var x2 = 1; + var y2 = 1; + if (this.ne.v > 0) { + x1 = this.ne.v / 100; + } else { + y1 = -this.ne.v / 100; + } + if (this.xe.v > 0) { + x2 = 1 - this.xe.v / 100; + } else { + y2 = 1 + this.xe.v / 100; + } + var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; + var mult = 0; + var s = this.finalS; + var e = this.finalE; + var type = this.data.sh; + if (type === 2) { + if (e === s) { + mult = ind >= e ? 1 : 0; + } else { + mult = max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + } + mult = easer(mult); + } else if (type === 3) { + if (e === s) { + mult = ind >= e ? 0 : 1; + } else { + mult = 1 - max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + } + mult = easer(mult); + } else if (type === 4) { + if (e === s) { + mult = 0; + } else { + mult = max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + if (mult < 0.5) { + mult *= 2; + } else { + mult = 1 - 2 * (mult - 0.5); + } + } + mult = easer(mult); + } else if (type === 5) { + if (e === s) { + mult = 0; + } else { + var tot = e - s; + ind = min(max2(0, ind + 0.5 - s), e - s); + var x3 = -tot / 2 + ind; + var a2 = tot / 2; + mult = Math.sqrt(1 - x3 * x3 / (a2 * a2)); + } + mult = easer(mult); + } else if (type === 6) { + if (e === s) { + mult = 0; + } else { + ind = min(max2(0, ind + 0.5 - s), e - s); + mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; + } + mult = easer(mult); + } else { + if (ind >= floor(s)) { + if (ind - s < 0) { + mult = max2(0, min(min(e, 1) - (s - ind), 1)); + } else { + mult = max2(0, min(e - ind, 1)); + } + } + mult = easer(mult); + } + if (this.sm.v !== 100) { + var smoothness = this.sm.v * 0.01; + if (smoothness === 0) { + smoothness = 1e-8; + } + var threshold = 0.5 - smoothness * 0.5; + if (mult < threshold) { + mult = 0; + } else { + mult = (mult - threshold) / smoothness; + if (mult > 1) { + mult = 1; + } + } + } + return mult * this.a.v; + }, + getValue: function(newCharsFlag) { + this.iterateDynamicProperties(); + this._mdf = newCharsFlag || this._mdf; + this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; + if (newCharsFlag && this.data.r === 2) { + this.e.v = this._currentTextLength; + } + var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; + var o = this.o.v / divisor; + var s = this.s.v / divisor + o; + var e = this.e.v / divisor + o; + if (s > e) { + var _s = s; + s = e; + e = _s; + } + this.finalS = s; + this.finalE = e; + } + }; + extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); + function getTextSelectorProp(elem2, data2, arr) { + return new TextSelectorPropFactory(elem2, data2, arr); + } + return { + getTextSelectorProp + }; + }(); + TextAnimatorProperty.prototype.searchProperties = function() { + var i; + var len = this._textData.a.length; + var animatorProps; + var getProp = PropertyFactory.getProp; + for (i = 0; i < len; i += 1) { + animatorProps = this._textData.a[i]; + this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); + } + if (this._textData.p && "m" in this._textData.p) { + this._pathData = { + a: getProp(this._elem, this._textData.p.a, 0, 0, this), + f: getProp(this._elem, this._textData.p.f, 0, 0, this), + l: getProp(this._elem, this._textData.p.l, 0, 0, this), + r: getProp(this._elem, this._textData.p.r, 0, 0, this), + p: getProp(this._elem, this._textData.p.p, 0, 0, this), + m: this._elem.maskManager.getMaskProperty(this._textData.p.m) + }; + this._hasMaskedPath = true; + } else { + this._hasMaskedPath = false; + } + this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); + }; + TextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag) { + this.lettersChangedFlag = lettersChangedFlag; + if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) { + return; + } + this._isFirstFrame = false; + var alignment = this._moreOptions.alignment.v; + var animators = this._animatorsData; + var textData = this._textData; + var matrixHelper = this.mHelper; + var renderType = this._renderType; + var renderedLettersCount = this.renderedLetters.length; + var xPos; + var yPos; + var i; + var len; + var letters = documentData.l; + var pathInfo; + var currentLength; + var currentPoint; + var segmentLength; + var flag; + var pointInd; + var segmentInd; + var prevPoint; + var points; + var segments; + var partialLength; + var totalLength; + var perc; + var tanAngle; + var mask2; + if (this._hasMaskedPath) { + mask2 = this._pathData.m; + if (!this._pathData.n || this._pathData._mdf) { + var paths = mask2.v; + if (this._pathData.r.v) { + paths = paths.reverse(); + } + pathInfo = { + tLength: 0, + segments: [] + }; + len = paths._length - 1; + var bezierData; + totalLength = 0; + for (i = 0; i < len; i += 1) { + bezierData = bez.buildBezierData( + paths.v[i], + paths.v[i + 1], + [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], + [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]] + ); + pathInfo.tLength += bezierData.segmentLength; + pathInfo.segments.push(bezierData); + totalLength += bezierData.segmentLength; + } + i = len; + if (mask2.v.c) { + bezierData = bez.buildBezierData( + paths.v[i], + paths.v[0], + [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], + [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]] + ); + pathInfo.tLength += bezierData.segmentLength; + pathInfo.segments.push(bezierData); + totalLength += bezierData.segmentLength; + } + this._pathData.pi = pathInfo; + } + pathInfo = this._pathData.pi; + currentLength = this._pathData.f.v; + segmentInd = 0; + pointInd = 1; + segmentLength = 0; + flag = true; + segments = pathInfo.segments; + if (currentLength < 0 && mask2.v.c) { + if (pathInfo.tLength < Math.abs(currentLength)) { + currentLength = -Math.abs(currentLength) % pathInfo.tLength; + } + segmentInd = segments.length - 1; + points = segments[segmentInd].points; + pointInd = points.length - 1; + while (currentLength < 0) { + currentLength += points[pointInd].partialLength; + pointInd -= 1; + if (pointInd < 0) { + segmentInd -= 1; + points = segments[segmentInd].points; + pointInd = points.length - 1; + } + } + } + points = segments[segmentInd].points; + prevPoint = points[pointInd - 1]; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + } + len = letters.length; + xPos = 0; + yPos = 0; + var yOff = documentData.finalSize * 1.2 * 0.714; + var firstLine = true; + var animatorProps; + var animatorSelector; + var j; + var jLen; + var letterValue; + jLen = animators.length; + var mult; + var ind = -1; + var offf; + var xPathPos; + var yPathPos; + var initPathPos = currentLength; + var initSegmentInd = segmentInd; + var initPointInd = pointInd; + var currentLine = -1; + var elemOpacity; + var sc; + var sw; + var fc; + var k2; + var letterSw; + var letterSc; + var letterFc; + var letterM = ""; + var letterP = this.defaultPropsArray; + var letterO; + if (documentData.j === 2 || documentData.j === 1) { + var animatorJustifyOffset = 0; + var animatorFirstCharOffset = 0; + var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1; + var lastIndex = 0; + var isNewLine = true; + for (i = 0; i < len; i += 1) { + if (letters[i].n) { + if (animatorJustifyOffset) { + animatorJustifyOffset += animatorFirstCharOffset; + } + while (lastIndex < i) { + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; + lastIndex += 1; + } + animatorJustifyOffset = 0; + isNewLine = true; + } else { + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.t.propType) { + if (isNewLine && documentData.j === 2) { + animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; + } + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; + } else { + animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; + } + } + } + isNewLine = false; + } + } + if (animatorJustifyOffset) { + animatorJustifyOffset += animatorFirstCharOffset; + } + while (lastIndex < i) { + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; + lastIndex += 1; + } + } + for (i = 0; i < len; i += 1) { + matrixHelper.reset(); + elemOpacity = 1; + if (letters[i].n) { + xPos = 0; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + currentLength = initPathPos; + firstLine = false; + if (this._hasMaskedPath) { + segmentInd = initSegmentInd; + pointInd = initPointInd; + points = segments[segmentInd].points; + prevPoint = points[pointInd - 1]; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + segmentLength = 0; + } + letterM = ""; + letterFc = ""; + letterSw = ""; + letterO = ""; + letterP = this.defaultPropsArray; + } else { + if (this._hasMaskedPath) { + if (currentLine !== letters[i].line) { + switch (documentData.j) { + case 1: + currentLength += totalLength - documentData.lineWidths[letters[i].line]; + break; + case 2: + currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; + break; + default: + break; + } + currentLine = letters[i].line; + } + if (ind !== letters[i].ind) { + if (letters[ind]) { + currentLength += letters[ind].extra; + } + currentLength += letters[i].an / 2; + ind = letters[i].ind; + } + currentLength += alignment[0] * letters[i].an * 5e-3; + var animatorOffset = 0; + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.p.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorOffset += animatorProps.p.v[0] * mult[0]; + } else { + animatorOffset += animatorProps.p.v[0] * mult; + } + } + if (animatorProps.a.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorOffset += animatorProps.a.v[0] * mult[0]; + } else { + animatorOffset += animatorProps.a.v[0] * mult; + } + } + } + flag = true; + if (this._pathData.a.v) { + currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1); + currentLength += this._pathData.f.v; + } + while (flag) { + if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { + perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; + xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; + yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; + matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -(alignment[1] * yOff) * 0.01); + flag = false; + } else if (points) { + segmentLength += currentPoint.partialLength; + pointInd += 1; + if (pointInd >= points.length) { + pointInd = 0; + segmentInd += 1; + if (!segments[segmentInd]) { + if (mask2.v.c) { + pointInd = 0; + segmentInd = 0; + points = segments[segmentInd].points; + } else { + segmentLength -= currentPoint.partialLength; + points = null; + } + } else { + points = segments[segmentInd].points; + } + } + if (points) { + prevPoint = currentPoint; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + } + } + } + offf = letters[i].an / 2 - letters[i].add; + matrixHelper.translate(-offf, 0, 0); + } else { + offf = letters[i].an / 2 - letters[i].add; + matrixHelper.translate(-offf, 0, 0); + matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -alignment[1] * yOff * 0.01, 0); + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.t.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (xPos !== 0 || documentData.j !== 0) { + if (this._hasMaskedPath) { + if (mult.length) { + currentLength += animatorProps.t.v * mult[0]; + } else { + currentLength += animatorProps.t.v * mult; + } + } else if (mult.length) { + xPos += animatorProps.t.v * mult[0]; + } else { + xPos += animatorProps.t.v * mult; + } + } + } + } + if (documentData.strokeWidthAnim) { + sw = documentData.sw || 0; + } + if (documentData.strokeColorAnim) { + if (documentData.sc) { + sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]]; + } else { + sc = [0, 0, 0]; + } + } + if (documentData.fillColorAnim && documentData.fc) { + fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]]; + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.a.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); + } else { + matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.s.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); + } else { + matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (animatorProps.sk.propType) { + if (mult.length) { + matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); + } else { + matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); + } + } + if (animatorProps.r.propType) { + if (mult.length) { + matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); + } else { + matrixHelper.rotateZ(-animatorProps.r.v * mult); + } + } + if (animatorProps.ry.propType) { + if (mult.length) { + matrixHelper.rotateY(animatorProps.ry.v * mult[1]); + } else { + matrixHelper.rotateY(animatorProps.ry.v * mult); + } + } + if (animatorProps.rx.propType) { + if (mult.length) { + matrixHelper.rotateX(animatorProps.rx.v * mult[0]); + } else { + matrixHelper.rotateX(animatorProps.rx.v * mult); + } + } + if (animatorProps.o.propType) { + if (mult.length) { + elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; + } else { + elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; + } + } + if (documentData.strokeWidthAnim && animatorProps.sw.propType) { + if (mult.length) { + sw += animatorProps.sw.v * mult[0]; + } else { + sw += animatorProps.sw.v * mult; + } + } + if (documentData.strokeColorAnim && animatorProps.sc.propType) { + for (k2 = 0; k2 < 3; k2 += 1) { + if (mult.length) { + sc[k2] += (animatorProps.sc.v[k2] - sc[k2]) * mult[0]; + } else { + sc[k2] += (animatorProps.sc.v[k2] - sc[k2]) * mult; + } + } + } + if (documentData.fillColorAnim && documentData.fc) { + if (animatorProps.fc.propType) { + for (k2 = 0; k2 < 3; k2 += 1) { + if (mult.length) { + fc[k2] += (animatorProps.fc.v[k2] - fc[k2]) * mult[0]; + } else { + fc[k2] += (animatorProps.fc.v[k2] - fc[k2]) * mult; + } + } + } + if (animatorProps.fh.propType) { + if (mult.length) { + fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); + } else { + fc = addHueToRGB(fc, animatorProps.fh.v * mult); + } + } + if (animatorProps.fs.propType) { + if (mult.length) { + fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); + } else { + fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); + } + } + if (animatorProps.fb.propType) { + if (mult.length) { + fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); + } else { + fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); + } + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.p.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (this._hasMaskedPath) { + if (mult.length) { + matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); + } else { + matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); + } + } else if (mult.length) { + matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); + } else { + matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); + } + } + } + if (documentData.strokeWidthAnim) { + letterSw = sw < 0 ? 0 : sw; + } + if (documentData.strokeColorAnim) { + letterSc = "rgb(" + Math.round(sc[0] * 255) + "," + Math.round(sc[1] * 255) + "," + Math.round(sc[2] * 255) + ")"; + } + if (documentData.fillColorAnim && documentData.fc) { + letterFc = "rgb(" + Math.round(fc[0] * 255) + "," + Math.round(fc[1] * 255) + "," + Math.round(fc[2] * 255) + ")"; + } + if (this._hasMaskedPath) { + matrixHelper.translate(0, -documentData.ls); + matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0); + if (this._pathData.p.v) { + tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); + var rot = Math.atan(tanAngle) * 180 / Math.PI; + if (currentPoint.point[0] < prevPoint.point[0]) { + rot += 180; + } + matrixHelper.rotate(-rot * Math.PI / 180); + } + matrixHelper.translate(xPathPos, yPathPos, 0); + currentLength -= alignment[0] * letters[i].an * 5e-3; + if (letters[i + 1] && ind !== letters[i + 1].ind) { + currentLength += letters[i].an / 2; + currentLength += documentData.tr * 1e-3 * documentData.finalSize; + } + } else { + matrixHelper.translate(xPos, yPos, 0); + if (documentData.ps) { + matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); + } + switch (documentData.j) { + case 1: + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); + break; + case 2: + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); + break; + default: + break; + } + matrixHelper.translate(0, -documentData.ls); + matrixHelper.translate(offf, 0, 0); + matrixHelper.translate(alignment[0] * letters[i].an * 5e-3, alignment[1] * yOff * 0.01, 0); + xPos += letters[i].l + documentData.tr * 1e-3 * documentData.finalSize; + } + if (renderType === "html") { + letterM = matrixHelper.toCSS(); + } else if (renderType === "svg") { + letterM = matrixHelper.to2dCSS(); + } else { + letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]]; + } + letterO = elemOpacity; + } + if (renderedLettersCount <= i) { + letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); + this.renderedLetters.push(letterValue); + renderedLettersCount += 1; + this.lettersChangedFlag = true; + } else { + letterValue = this.renderedLetters[i]; + this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; + } + } + }; + TextAnimatorProperty.prototype.getValue = function() { + if (this._elem.globalData.frameId === this._frameId) { + return; + } + this._frameId = this._elem.globalData.frameId; + this.iterateDynamicProperties(); + }; + TextAnimatorProperty.prototype.mHelper = new Matrix(); + TextAnimatorProperty.prototype.defaultPropsArray = []; + extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); + ITextElement.prototype.initElement = function(data2, globalData2, comp2) { + this.lettersChangedFlag = true; + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.textProperty = new TextProperty(this, data2.t, this.dynamicProperties); + this.textAnimator = new TextAnimatorProperty(data2.t, this.renderType, this); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + this.initRenderable(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + this.createContent(); + this.hide(); + this.textAnimator.searchProperties(this.dynamicProperties); + }; + ITextElement.prototype.prepareFrame = function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + if (this.textProperty._mdf || this.textProperty._isFirstFrame) { + this.buildNewText(); + this.textProperty._isFirstFrame = false; + this.textProperty._mdf = false; + } + }; + ITextElement.prototype.createPathShape = function(matrixHelper, shapes) { + var j; + var jLen = shapes.length; + var pathNodes; + var shapeStr = ""; + for (j = 0; j < jLen; j += 1) { + if (shapes[j].ty === "sh") { + pathNodes = shapes[j].ks.k; + shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); + } + } + return shapeStr; + }; + ITextElement.prototype.updateDocumentData = function(newData, index2) { + this.textProperty.updateDocumentData(newData, index2); + }; + ITextElement.prototype.canResizeFont = function(_canResize) { + this.textProperty.canResizeFont(_canResize); + }; + ITextElement.prototype.setMinimumFontSize = function(_fontSize) { + this.textProperty.setMinimumFontSize(_fontSize); + }; + ITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) { + if (documentData.ps) { + matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); + } + matrixHelper.translate(0, -documentData.ls, 0); + switch (documentData.j) { + case 1: + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); + break; + case 2: + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); + break; + default: + break; + } + matrixHelper.translate(xPos, yPos, 0); + }; + ITextElement.prototype.buildColor = function(colorData) { + return "rgb(" + Math.round(colorData[0] * 255) + "," + Math.round(colorData[1] * 255) + "," + Math.round(colorData[2] * 255) + ")"; + }; + ITextElement.prototype.emptyProp = new LetterProps(); + ITextElement.prototype.destroy = function() { + }; + emptyShapeData = { + shapes: [] + }; + extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement); + SVGTextLottieElement.prototype.createContent = function() { + if (this.data.singleShape && !this.globalData.fontManager.chars) { + this.textContainer = createNS("text"); + } + }; + SVGTextLottieElement.prototype.buildTextContents = function(textArray) { + var i = 0; + var len = textArray.length; + var textContents = []; + var currentTextContent = ""; + while (i < len) { + if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { + textContents.push(currentTextContent); + currentTextContent = ""; + } else { + currentTextContent += textArray[i]; + } + i += 1; + } + textContents.push(currentTextContent); + return textContents; + }; + SVGTextLottieElement.prototype.buildShapeData = function(data2, scale2) { + if (data2.shapes && data2.shapes.length) { + var shape = data2.shapes[0]; + if (shape.it) { + var shapeItem = shape.it[shape.it.length - 1]; + if (shapeItem.s) { + shapeItem.s.k[0] = scale2; + shapeItem.s.k[1] = scale2; + } + } + } + return data2; + }; + SVGTextLottieElement.prototype.buildNewText = function() { + this.addDynamicProperty(this); + var i; + var len; + var documentData = this.textProperty.currentData; + this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); + if (documentData.fc) { + this.layerElement.setAttribute("fill", this.buildColor(documentData.fc)); + } else { + this.layerElement.setAttribute("fill", "rgba(0,0,0,0)"); + } + if (documentData.sc) { + this.layerElement.setAttribute("stroke", this.buildColor(documentData.sc)); + this.layerElement.setAttribute("stroke-width", documentData.sw); + } + this.layerElement.setAttribute("font-size", documentData.finalSize); + var fontData = this.globalData.fontManager.getFontByName(documentData.f); + if (fontData.fClass) { + this.layerElement.setAttribute("class", fontData.fClass); + } else { + this.layerElement.setAttribute("font-family", fontData.fFamily); + var fWeight = documentData.fWeight; + var fStyle = documentData.fStyle; + this.layerElement.setAttribute("font-style", fStyle); + this.layerElement.setAttribute("font-weight", fWeight); + } + this.layerElement.setAttribute("aria-label", documentData.t); + var letters = documentData.l || []; + var usesGlyphs = !!this.globalData.fontManager.chars; + len = letters.length; + var tSpan; + var matrixHelper = this.mHelper; + var shapeStr = ""; + var singleShape = this.data.singleShape; + var xPos = 0; + var yPos = 0; + var firstLine = true; + var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize; + if (singleShape && !usesGlyphs && !documentData.sz) { + var tElement = this.textContainer; + var justify = "start"; + switch (documentData.j) { + case 1: + justify = "end"; + break; + case 2: + justify = "middle"; + break; + default: + justify = "start"; + break; + } + tElement.setAttribute("text-anchor", justify); + tElement.setAttribute("letter-spacing", trackingOffset); + var textContent = this.buildTextContents(documentData.finalText); + len = textContent.length; + yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; + for (i = 0; i < len; i += 1) { + tSpan = this.textSpans[i].span || createNS("tspan"); + tSpan.textContent = textContent[i]; + tSpan.setAttribute("x", 0); + tSpan.setAttribute("y", yPos); + tSpan.style.display = "inherit"; + tElement.appendChild(tSpan); + if (!this.textSpans[i]) { + this.textSpans[i] = { + span: null, + glyph: null + }; + } + this.textSpans[i].span = tSpan; + yPos += documentData.finalLineHeight; + } + this.layerElement.appendChild(tElement); + } else { + var cachedSpansLength = this.textSpans.length; + var charData; + for (i = 0; i < len; i += 1) { + if (!this.textSpans[i]) { + this.textSpans[i] = { + span: null, + childSpan: null, + glyph: null + }; + } + if (!usesGlyphs || !singleShape || i === 0) { + tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? "g" : "text"); + if (cachedSpansLength <= i) { + tSpan.setAttribute("stroke-linecap", "butt"); + tSpan.setAttribute("stroke-linejoin", "round"); + tSpan.setAttribute("stroke-miterlimit", "4"); + this.textSpans[i].span = tSpan; + if (usesGlyphs) { + var childSpan = createNS("g"); + tSpan.appendChild(childSpan); + this.textSpans[i].childSpan = childSpan; + } + this.textSpans[i].span = tSpan; + this.layerElement.appendChild(tSpan); + } + tSpan.style.display = "inherit"; + } + matrixHelper.reset(); + if (singleShape) { + if (letters[i].n) { + xPos = -trackingOffset; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + firstLine = false; + } + this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); + xPos += letters[i].l || 0; + xPos += trackingOffset; + } + if (usesGlyphs) { + charData = this.globalData.fontManager.getCharData( + documentData.finalText[i], + fontData.fStyle, + this.globalData.fontManager.getFontByName(documentData.f).fFamily + ); + var glyphElement; + if (charData.t === 1) { + glyphElement = new SVGCompElement(charData.data, this.globalData, this); + } else { + var data2 = emptyShapeData; + if (charData.data && charData.data.shapes) { + data2 = this.buildShapeData(charData.data, documentData.finalSize); + } + glyphElement = new SVGShapeElement(data2, this.globalData, this); + } + if (this.textSpans[i].glyph) { + var glyph = this.textSpans[i].glyph; + this.textSpans[i].childSpan.removeChild(glyph.layerElement); + glyph.destroy(); + } + this.textSpans[i].glyph = glyphElement; + glyphElement._debug = true; + glyphElement.prepareFrame(0); + glyphElement.renderFrame(); + this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); + if (charData.t === 1) { + this.textSpans[i].childSpan.setAttribute("transform", "scale(" + documentData.finalSize / 100 + "," + documentData.finalSize / 100 + ")"); + } + } else { + if (singleShape) { + tSpan.setAttribute("transform", "translate(" + matrixHelper.props[12] + "," + matrixHelper.props[13] + ")"); + } + tSpan.textContent = letters[i].val; + tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + } + } + if (singleShape && tSpan) { + tSpan.setAttribute("d", shapeStr); + } + } + while (i < this.textSpans.length) { + this.textSpans[i].span.style.display = "none"; + i += 1; + } + this._sizeChanged = true; + }; + SVGTextLottieElement.prototype.sourceRectAtTime = function() { + this.prepareFrame(this.comp.renderedFrame - this.data.st); + this.renderInnerContent(); + if (this._sizeChanged) { + this._sizeChanged = false; + var textBox = this.layerElement.getBBox(); + this.bbox = { + top: textBox.y, + left: textBox.x, + width: textBox.width, + height: textBox.height + }; + } + return this.bbox; + }; + SVGTextLottieElement.prototype.getValue = function() { + var i; + var len = this.textSpans.length; + var glyphElement; + this.renderedFrame = this.comp.renderedFrame; + for (i = 0; i < len; i += 1) { + glyphElement = this.textSpans[i].glyph; + if (glyphElement) { + glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); + if (glyphElement._mdf) { + this._mdf = true; + } + } + } + }; + SVGTextLottieElement.prototype.renderInnerContent = function() { + if (!this.data.singleShape || this._mdf) { + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); + if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { + this._sizeChanged = true; + var i; + var len; + var renderedLetters = this.textAnimator.renderedLetters; + var letters = this.textProperty.currentData.l; + len = letters.length; + var renderedLetter; + var textSpan; + var glyphElement; + for (i = 0; i < len; i += 1) { + if (!letters[i].n) { + renderedLetter = renderedLetters[i]; + textSpan = this.textSpans[i].span; + glyphElement = this.textSpans[i].glyph; + if (glyphElement) { + glyphElement.renderFrame(); + } + if (renderedLetter._mdf.m) { + textSpan.setAttribute("transform", renderedLetter.m); + } + if (renderedLetter._mdf.o) { + textSpan.setAttribute("opacity", renderedLetter.o); + } + if (renderedLetter._mdf.sw) { + textSpan.setAttribute("stroke-width", renderedLetter.sw); + } + if (renderedLetter._mdf.sc) { + textSpan.setAttribute("stroke", renderedLetter.sc); + } + if (renderedLetter._mdf.fc) { + textSpan.setAttribute("fill", renderedLetter.fc); + } + } + } + } + } + }; + extendPrototype([IImageElement], ISolidElement); + ISolidElement.prototype.createContent = function() { + var rect = createNS("rect"); + rect.setAttribute("width", this.data.sw); + rect.setAttribute("height", this.data.sh); + rect.setAttribute("fill", this.data.sc); + this.layerElement.appendChild(rect); + }; + NullElement.prototype.prepareFrame = function(num) { + this.prepareProperties(num, true); + }; + NullElement.prototype.renderFrame = function() { + }; + NullElement.prototype.getBaseElement = function() { + return null; + }; + NullElement.prototype.destroy = function() { + }; + NullElement.prototype.sourceRectAtTime = function() { + }; + NullElement.prototype.hide = function() { + }; + extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement); + extendPrototype([BaseRenderer], SVGRendererBase); + SVGRendererBase.prototype.createNull = function(data2) { + return new NullElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createShape = function(data2) { + return new SVGShapeElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createText = function(data2) { + return new SVGTextLottieElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createImage = function(data2) { + return new IImageElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createSolid = function(data2) { + return new ISolidElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.configAnimation = function(animData) { + this.svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg"); + if (this.renderConfig.viewBoxSize) { + this.svgElement.setAttribute("viewBox", this.renderConfig.viewBoxSize); + } else { + this.svgElement.setAttribute("viewBox", "0 0 " + animData.w + " " + animData.h); + } + if (!this.renderConfig.viewBoxOnly) { + this.svgElement.setAttribute("width", animData.w); + this.svgElement.setAttribute("height", animData.h); + this.svgElement.style.width = "100%"; + this.svgElement.style.height = "100%"; + this.svgElement.style.transform = "translate3d(0,0,0)"; + this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; + } + if (this.renderConfig.width) { + this.svgElement.setAttribute("width", this.renderConfig.width); + } + if (this.renderConfig.height) { + this.svgElement.setAttribute("height", this.renderConfig.height); + } + if (this.renderConfig.className) { + this.svgElement.setAttribute("class", this.renderConfig.className); + } + if (this.renderConfig.id) { + this.svgElement.setAttribute("id", this.renderConfig.id); + } + if (this.renderConfig.focusable !== void 0) { + this.svgElement.setAttribute("focusable", this.renderConfig.focusable); + } + this.svgElement.setAttribute("preserveAspectRatio", this.renderConfig.preserveAspectRatio); + this.animationItem.wrapper.appendChild(this.svgElement); + var defs = this.globalData.defs; + this.setupGlobalData(animData, defs); + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; + this.data = animData; + var maskElement = createNS("clipPath"); + var rect = createNS("rect"); + rect.setAttribute("width", animData.w); + rect.setAttribute("height", animData.h); + rect.setAttribute("x", 0); + rect.setAttribute("y", 0); + var maskId = createElementID(); + maskElement.setAttribute("id", maskId); + maskElement.appendChild(rect); + this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + maskId + ")"); + defs.appendChild(maskElement); + this.layers = animData.layers; + this.elements = createSizedArray(animData.layers.length); + }; + SVGRendererBase.prototype.destroy = function() { + if (this.animationItem.wrapper) { + this.animationItem.wrapper.innerText = ""; + } + this.layerElement = null; + this.globalData.defs = null; + var i; + var len = this.layers ? this.layers.length : 0; + for (i = 0; i < len; i += 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.elements.length = 0; + this.destroyed = true; + this.animationItem = null; + }; + SVGRendererBase.prototype.updateContainerSize = function() { + }; + SVGRendererBase.prototype.buildItem = function(pos) { + var elements = this.elements; + if (elements[pos] || this.layers[pos].ty === 99) { + return; + } + elements[pos] = true; + var element = this.createItem(this.layers[pos]); + elements[pos] = element; + if (getExpressionsPlugin()) { + if (this.layers[pos].ty === 0) { + this.globalData.projectInterface.registerComposition(element); + } + element.initExpressions(); + } + this.appendElementInPos(element, pos); + if (this.layers[pos].tt) { + if (!this.elements[pos - 1] || this.elements[pos - 1] === true) { + this.buildItem(pos - 1); + this.addPendingElement(element); + } else { + element.setMatte(elements[pos - 1].layerId); + } + } + }; + SVGRendererBase.prototype.checkPendingElements = function() { + while (this.pendingElements.length) { + var element = this.pendingElements.pop(); + element.checkParenting(); + if (element.data.tt) { + var i = 0; + var len = this.elements.length; + while (i < len) { + if (this.elements[i] === element) { + element.setMatte(this.elements[i - 1].layerId); + break; + } + i += 1; + } + } + } + }; + SVGRendererBase.prototype.renderFrame = function(num) { + if (this.renderedFrame === num || this.destroyed) { + return; + } + if (num === null) { + num = this.renderedFrame; + } else { + this.renderedFrame = num; + } + this.globalData.frameNum = num; + this.globalData.frameId += 1; + this.globalData.projectInterface.currentFrame = num; + this.globalData._mdf = false; + var i; + var len = this.layers.length; + if (!this.completeLayers) { + this.checkLayers(num); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(num - this.layers[i].st); + } + } + if (this.globalData._mdf) { + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + } + }; + SVGRendererBase.prototype.appendElementInPos = function(element, pos) { + var newElement = element.getBaseElement(); + if (!newElement) { + return; + } + var i = 0; + var nextElement; + while (i < pos) { + if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) { + nextElement = this.elements[i].getBaseElement(); + } + i += 1; + } + if (nextElement) { + this.layerElement.insertBefore(newElement, nextElement); + } else { + this.layerElement.appendChild(newElement); + } + }; + SVGRendererBase.prototype.hide = function() { + this.layerElement.style.display = "none"; + }; + SVGRendererBase.prototype.show = function() { + this.layerElement.style.display = "block"; + }; + extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement); + ICompElement.prototype.initElement = function(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initTransform(data2, globalData2, comp2); + this.initRenderable(); + this.initHierarchy(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + if (this.data.xt || !globalData2.progressiveLoad) { + this.buildAllItems(); + } + this.hide(); + }; + ICompElement.prototype.prepareFrame = function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + if (!this.isInRange && !this.data.xt) { + return; + } + if (!this.tm._placeholder) { + var timeRemapped = this.tm.v; + if (timeRemapped === this.data.op) { + timeRemapped = this.data.op - 1; + } + this.renderedFrame = timeRemapped; + } else { + this.renderedFrame = num / this.data.sr; + } + var i; + var len = this.elements.length; + if (!this.completeLayers) { + this.checkLayers(this.renderedFrame); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); + if (this.elements[i]._mdf) { + this._mdf = true; + } + } + } + }; + ICompElement.prototype.renderInnerContent = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + }; + ICompElement.prototype.setElements = function(elems) { + this.elements = elems; + }; + ICompElement.prototype.getElements = function() { + return this.elements; + }; + ICompElement.prototype.destroyElements = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + }; + ICompElement.prototype.destroy = function() { + this.destroyElements(); + this.destroyBaseElement(); + }; + extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement); + SVGCompElement.prototype.createComp = function(data2) { + return new SVGCompElement(data2, this.globalData, this); + }; + extendPrototype([SVGRendererBase], SVGRenderer); + SVGRenderer.prototype.createComp = function(data2) { + return new SVGCompElement(data2, this.globalData, this); + }; + CVContextData.prototype.duplicate = function() { + var newLength = this._length * 2; + var currentSavedOp = this.savedOp; + this.savedOp = createTypedArray("float32", newLength); + this.savedOp.set(currentSavedOp); + var i = 0; + for (i = this._length; i < newLength; i += 1) { + this.saved[i] = createTypedArray("float32", 16); + } + this._length = newLength; + }; + CVContextData.prototype.reset = function() { + this.cArrPos = 0; + this.cTr.reset(); + this.cO = 1; + }; + ShapeTransformManager.prototype = { + addTransformSequence: function(transforms) { + var i; + var len = transforms.length; + var key2 = "_"; + for (i = 0; i < len; i += 1) { + key2 += transforms[i].transform.key + "_"; + } + var sequence = this.sequences[key2]; + if (!sequence) { + sequence = { + transforms: [].concat(transforms), + finalTransform: new Matrix(), + _mdf: false + }; + this.sequences[key2] = sequence; + this.sequenceList.push(sequence); + } + return sequence; + }, + processSequence: function(sequence, isFirstFrame) { + var i = 0; + var len = sequence.transforms.length; + var _mdf = isFirstFrame; + while (i < len && !isFirstFrame) { + if (sequence.transforms[i].transform.mProps._mdf) { + _mdf = true; + break; + } + i += 1; + } + if (_mdf) { + var props; + sequence.finalTransform.reset(); + for (i = len - 1; i >= 0; i -= 1) { + props = sequence.transforms[i].transform.mProps.v.props; + sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]); + } + } + sequence._mdf = _mdf; + }, + processSequences: function(isFirstFrame) { + var i; + var len = this.sequenceList.length; + for (i = 0; i < len; i += 1) { + this.processSequence(this.sequenceList[i], isFirstFrame); + } + }, + getNewKey: function() { + this.transform_key_count += 1; + return "_" + this.transform_key_count; + } + }; + CVEffects.prototype.renderFrame = function() { + }; + CVMaskElement.prototype.renderFrame = function() { + if (!this.hasMasks) { + return; + } + var transform2 = this.element.finalTransform.mat; + var ctx = this.element.canvasContext; + var i; + var len = this.masksProperties.length; + var pt; + var pts; + var data2; + ctx.beginPath(); + for (i = 0; i < len; i += 1) { + if (this.masksProperties[i].mode !== "n") { + if (this.masksProperties[i].inv) { + ctx.moveTo(0, 0); + ctx.lineTo(this.element.globalData.compSize.w, 0); + ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); + ctx.lineTo(0, this.element.globalData.compSize.h); + ctx.lineTo(0, 0); + } + data2 = this.viewData[i].v; + pt = transform2.applyToPointArray(data2.v[0][0], data2.v[0][1], 0); + ctx.moveTo(pt[0], pt[1]); + var j; + var jLen = data2._length; + for (j = 1; j < jLen; j += 1) { + pts = transform2.applyToTriplePoints(data2.o[j - 1], data2.i[j], data2.v[j]); + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); + } + pts = transform2.applyToTriplePoints(data2.o[j - 1], data2.i[0], data2.v[0]); + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); + } + } + this.element.globalData.renderer.save(true); + ctx.clip(); + }; + CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; + CVMaskElement.prototype.destroy = function() { + this.element = null; + }; + CVBaseElement.prototype = { + createElements: function() { + }, + initRendererElement: function() { + }, + createContainerElements: function() { + this.canvasContext = this.globalData.canvasContext; + this.renderableEffectsManager = new CVEffects(this); + }, + createContent: function() { + }, + setBlendMode: function() { + var globalData2 = this.globalData; + if (globalData2.blendMode !== this.data.bm) { + globalData2.blendMode = this.data.bm; + var blendModeValue = getBlendMode(this.data.bm); + globalData2.canvasContext.globalCompositeOperation = blendModeValue; + } + }, + createRenderableComponents: function() { + this.maskManager = new CVMaskElement(this.data, this); + }, + hideElement: function() { + if (!this.hidden && (!this.isInRange || this.isTransparent)) { + this.hidden = true; + } + }, + showElement: function() { + if (this.isInRange && !this.isTransparent) { + this.hidden = false; + this._isFirstFrame = true; + this.maskManager._isFirstFrame = true; + } + }, + renderFrame: function() { + if (this.hidden || this.data.hd) { + return; + } + this.renderTransform(); + this.renderRenderable(); + this.setBlendMode(); + var forceRealStack = this.data.ty === 0; + this.globalData.renderer.save(forceRealStack); + this.globalData.renderer.ctxTransform(this.finalTransform.mat.props); + this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v); + this.renderInnerContent(); + this.globalData.renderer.restore(forceRealStack); + if (this.maskManager.hasMasks) { + this.globalData.renderer.restore(true); + } + if (this._isFirstFrame) { + this._isFirstFrame = false; + } + }, + destroy: function() { + this.canvasContext = null; + this.data = null; + this.globalData = null; + this.maskManager.destroy(); + }, + mHelper: new Matrix() + }; + CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; + CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; + CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; + extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement); + CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; + CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false }; + CVShapeElement.prototype.dashResetter = []; + CVShapeElement.prototype.createContent = function() { + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); + }; + CVShapeElement.prototype.createStyleElement = function(data2, transforms) { + var styleElem = { + data: data2, + type: data2.ty, + preTransforms: this.transformsManager.addTransformSequence(transforms), + transforms: [], + elements: [], + closed: data2.hd === true + }; + var elementData = {}; + if (data2.ty === "fl" || data2.ty === "st") { + elementData.c = PropertyFactory.getProp(this, data2.c, 1, 255, this); + if (!elementData.c.k) { + styleElem.co = "rgb(" + bmFloor(elementData.c.v[0]) + "," + bmFloor(elementData.c.v[1]) + "," + bmFloor(elementData.c.v[2]) + ")"; + } + } else if (data2.ty === "gf" || data2.ty === "gs") { + elementData.s = PropertyFactory.getProp(this, data2.s, 1, null, this); + elementData.e = PropertyFactory.getProp(this, data2.e, 1, null, this); + elementData.h = PropertyFactory.getProp(this, data2.h || { k: 0 }, 0, 0.01, this); + elementData.a = PropertyFactory.getProp(this, data2.a || { k: 0 }, 0, degToRads, this); + elementData.g = new GradientProperty(this, data2.g, this); + } + elementData.o = PropertyFactory.getProp(this, data2.o, 0, 0.01, this); + if (data2.ty === "st" || data2.ty === "gs") { + styleElem.lc = lineCapEnum[data2.lc || 2]; + styleElem.lj = lineJoinEnum[data2.lj || 2]; + if (data2.lj == 1) { + styleElem.ml = data2.ml; + } + elementData.w = PropertyFactory.getProp(this, data2.w, 0, null, this); + if (!elementData.w.k) { + styleElem.wi = elementData.w.v; + } + if (data2.d) { + var d = new DashProperty(this, data2.d, "canvas", this); + elementData.d = d; + if (!elementData.d.k) { + styleElem.da = elementData.d.dashArray; + styleElem.do = elementData.d.dashoffset[0]; + } + } + } else { + styleElem.r = data2.r === 2 ? "evenodd" : "nonzero"; + } + this.stylesList.push(styleElem); + elementData.style = styleElem; + return elementData; + }; + CVShapeElement.prototype.createGroupElement = function() { + var elementData = { + it: [], + prevViewData: [] + }; + return elementData; + }; + CVShapeElement.prototype.createTransformElement = function(data2) { + var elementData = { + transform: { + opacity: 1, + _opMdf: false, + key: this.transformsManager.getNewKey(), + op: PropertyFactory.getProp(this, data2.o, 0, 0.01, this), + mProps: TransformPropertyFactory.getTransformProperty(this, data2, this) + } + }; + return elementData; + }; + CVShapeElement.prototype.createShapeElement = function(data2) { + var elementData = new CVShapeData(this, data2, this.stylesList, this.transformsManager); + this.shapes.push(elementData); + this.addShapeToModifiers(elementData); + return elementData; + }; + CVShapeElement.prototype.reloadShapes = function() { + this._isFirstFrame = true; + var i; + var len = this.itemsData.length; + for (i = 0; i < len; i += 1) { + this.prevViewData[i] = this.itemsData[i]; + } + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); + len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + } + this.renderModifiers(); + this.transformsManager.processSequences(this._isFirstFrame); + }; + CVShapeElement.prototype.addTransformToStyleList = function(transform2) { + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + if (!this.stylesList[i].closed) { + this.stylesList[i].transforms.push(transform2); + } + } + }; + CVShapeElement.prototype.removeTransformFromStyleList = function() { + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + if (!this.stylesList[i].closed) { + this.stylesList[i].transforms.pop(); + } + } + }; + CVShapeElement.prototype.closeStyles = function(styles) { + var i; + var len = styles.length; + for (i = 0; i < len; i += 1) { + styles[i].closed = true; + } + }; + CVShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, shouldRender, transforms) { + var i; + var len = arr.length - 1; + var j; + var jLen; + var ownStyles = []; + var ownModifiers = []; + var processedPos; + var modifier; + var currentTransform; + var ownTransforms = [].concat(transforms); + for (i = len; i >= 0; i -= 1) { + processedPos = this.searchProcessedElement(arr[i]); + if (!processedPos) { + arr[i]._shouldRender = shouldRender; + } else { + itemsData[i] = prevViewData[processedPos - 1]; + } + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs") { + if (!processedPos) { + itemsData[i] = this.createStyleElement(arr[i], ownTransforms); + } else { + itemsData[i].style.closed = false; + } + ownStyles.push(itemsData[i].style); + } else if (arr[i].ty === "gr") { + if (!processedPos) { + itemsData[i] = this.createGroupElement(arr[i]); + } else { + jLen = itemsData[i].it.length; + for (j = 0; j < jLen; j += 1) { + itemsData[i].prevViewData[j] = itemsData[i].it[j]; + } + } + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); + } else if (arr[i].ty === "tr") { + if (!processedPos) { + currentTransform = this.createTransformElement(arr[i]); + itemsData[i] = currentTransform; + } + ownTransforms.push(itemsData[i]); + this.addTransformToStyleList(itemsData[i]); + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { + if (!processedPos) { + itemsData[i] = this.createShapeElement(arr[i]); + } + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "pb") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + modifier.init(this, arr[i]); + itemsData[i] = modifier; + this.shapeModifiers.push(modifier); + } else { + modifier = itemsData[i]; + modifier.closed = false; + } + ownModifiers.push(modifier); + } else if (arr[i].ty === "rp") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + itemsData[i] = modifier; + modifier.init(this, arr, i, itemsData); + this.shapeModifiers.push(modifier); + shouldRender = false; + } else { + modifier = itemsData[i]; + modifier.closed = true; + } + ownModifiers.push(modifier); + } + this.addProcessedElement(arr[i], i + 1); + } + this.removeTransformFromStyleList(); + this.closeStyles(ownStyles); + len = ownModifiers.length; + for (i = 0; i < len; i += 1) { + ownModifiers[i].closed = true; + } + }; + CVShapeElement.prototype.renderInnerContent = function() { + this.transformHelper.opacity = 1; + this.transformHelper._opMdf = false; + this.renderModifiers(); + this.transformsManager.processSequences(this._isFirstFrame); + this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); + }; + CVShapeElement.prototype.renderShapeTransform = function(parentTransform, groupTransform) { + if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { + groupTransform.opacity = parentTransform.opacity; + groupTransform.opacity *= groupTransform.op.v; + groupTransform._opMdf = true; + } + }; + CVShapeElement.prototype.drawLayer = function() { + var i; + var len = this.stylesList.length; + var j; + var jLen; + var k2; + var kLen; + var elems; + var nodes; + var renderer2 = this.globalData.renderer; + var ctx = this.globalData.canvasContext; + var type; + var currentStyle; + for (i = 0; i < len; i += 1) { + currentStyle = this.stylesList[i]; + type = currentStyle.type; + if (!((type === "st" || type === "gs") && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { + renderer2.save(); + elems = currentStyle.elements; + if (type === "st" || type === "gs") { + ctx.strokeStyle = type === "st" ? currentStyle.co : currentStyle.grd; + ctx.lineWidth = currentStyle.wi; + ctx.lineCap = currentStyle.lc; + ctx.lineJoin = currentStyle.lj; + ctx.miterLimit = currentStyle.ml || 0; + } else { + ctx.fillStyle = type === "fl" ? currentStyle.co : currentStyle.grd; + } + renderer2.ctxOpacity(currentStyle.coOp); + if (type !== "st" && type !== "gs") { + ctx.beginPath(); + } + renderer2.ctxTransform(currentStyle.preTransforms.finalTransform.props); + jLen = elems.length; + for (j = 0; j < jLen; j += 1) { + if (type === "st" || type === "gs") { + ctx.beginPath(); + if (currentStyle.da) { + ctx.setLineDash(currentStyle.da); + ctx.lineDashOffset = currentStyle.do; + } + } + nodes = elems[j].trNodes; + kLen = nodes.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (nodes[k2].t === "m") { + ctx.moveTo(nodes[k2].p[0], nodes[k2].p[1]); + } else if (nodes[k2].t === "c") { + ctx.bezierCurveTo(nodes[k2].pts[0], nodes[k2].pts[1], nodes[k2].pts[2], nodes[k2].pts[3], nodes[k2].pts[4], nodes[k2].pts[5]); + } else { + ctx.closePath(); + } + } + if (type === "st" || type === "gs") { + ctx.stroke(); + if (currentStyle.da) { + ctx.setLineDash(this.dashResetter); + } + } + } + if (type !== "st" && type !== "gs") { + ctx.fill(currentStyle.r); + } + renderer2.restore(); + } + } + }; + CVShapeElement.prototype.renderShape = function(parentTransform, items, data2, isMain) { + var i; + var len = items.length - 1; + var groupTransform; + groupTransform = parentTransform; + for (i = len; i >= 0; i -= 1) { + if (items[i].ty === "tr") { + groupTransform = data2[i].transform; + this.renderShapeTransform(parentTransform, groupTransform); + } else if (items[i].ty === "sh" || items[i].ty === "el" || items[i].ty === "rc" || items[i].ty === "sr") { + this.renderPath(items[i], data2[i]); + } else if (items[i].ty === "fl") { + this.renderFill(items[i], data2[i], groupTransform); + } else if (items[i].ty === "st") { + this.renderStroke(items[i], data2[i], groupTransform); + } else if (items[i].ty === "gf" || items[i].ty === "gs") { + this.renderGradientFill(items[i], data2[i], groupTransform); + } else if (items[i].ty === "gr") { + this.renderShape(groupTransform, items[i].it, data2[i].it); + } else if (items[i].ty === "tm") { + } + } + if (isMain) { + this.drawLayer(); + } + }; + CVShapeElement.prototype.renderStyledShape = function(styledShape, shape) { + if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { + var shapeNodes = styledShape.trNodes; + var paths = shape.paths; + var i; + var len; + var j; + var jLen = paths._length; + shapeNodes.length = 0; + var groupTransformMat = styledShape.transforms.finalTransform; + for (j = 0; j < jLen; j += 1) { + var pathNodes = paths.shapes[j]; + if (pathNodes && pathNodes.v) { + len = pathNodes._length; + for (i = 1; i < len; i += 1) { + if (i === 1) { + shapeNodes.push({ + t: "m", + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) + }); + } + shapeNodes.push({ + t: "c", + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) + }); + } + if (len === 1) { + shapeNodes.push({ + t: "m", + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) + }); + } + if (pathNodes.c && len) { + shapeNodes.push({ + t: "c", + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) + }); + shapeNodes.push({ + t: "z" + }); + } + } + } + styledShape.trNodes = shapeNodes; + } + }; + CVShapeElement.prototype.renderPath = function(pathData, itemData) { + if (pathData.hd !== true && pathData._shouldRender) { + var i; + var len = itemData.styledShapes.length; + for (i = 0; i < len; i += 1) { + this.renderStyledShape(itemData.styledShapes[i], itemData.sh); + } + } + }; + CVShapeElement.prototype.renderFill = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + if (itemData.c._mdf || this._isFirstFrame) { + styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; + } + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { + styleElem.coOp = itemData.o.v * groupTransform.opacity; + } + }; + CVShapeElement.prototype.renderGradientFill = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + var grd; + if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { + var ctx = this.globalData.canvasContext; + var pt1 = itemData.s.v; + var pt2 = itemData.e.v; + if (styleData.t === 1) { + grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); + } else { + var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); + var percent = itemData.h.v; + if (percent >= 1) { + percent = 0.99; + } else if (percent <= -1) { + percent = -0.99; + } + var dist = rad * percent; + var x2 = Math.cos(ang + itemData.a.v) * dist + pt1[0]; + var y2 = Math.sin(ang + itemData.a.v) * dist + pt1[1]; + grd = ctx.createRadialGradient(x2, y2, 0, pt1[0], pt1[1], rad); + } + var i; + var len = styleData.g.p; + var cValues = itemData.g.c; + var opacity = 1; + for (i = 0; i < len; i += 1) { + if (itemData.g._hasOpacity && itemData.g._collapsable) { + opacity = itemData.g.o[i * 2 + 1]; + } + grd.addColorStop(cValues[i * 4] / 100, "rgba(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + "," + opacity + ")"); + } + styleElem.grd = grd; + } + styleElem.coOp = itemData.o.v * groupTransform.opacity; + }; + CVShapeElement.prototype.renderStroke = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + var d = itemData.d; + if (d && (d._mdf || this._isFirstFrame)) { + styleElem.da = d.dashArray; + styleElem.do = d.dashoffset[0]; + } + if (itemData.c._mdf || this._isFirstFrame) { + styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; + } + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { + styleElem.coOp = itemData.o.v * groupTransform.opacity; + } + if (itemData.w._mdf || this._isFirstFrame) { + styleElem.wi = itemData.w.v; + } + }; + CVShapeElement.prototype.destroy = function() { + this.shapesData = null; + this.globalData = null; + this.canvasContext = null; + this.stylesList.length = 0; + this.itemsData.length = 0; + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement); + CVTextElement.prototype.tHelper = createTag("canvas").getContext("2d"); + CVTextElement.prototype.buildNewText = function() { + var documentData = this.textProperty.currentData; + this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); + var hasFill = false; + if (documentData.fc) { + hasFill = true; + this.values.fill = this.buildColor(documentData.fc); + } else { + this.values.fill = "rgba(0,0,0,0)"; + } + this.fill = hasFill; + var hasStroke = false; + if (documentData.sc) { + hasStroke = true; + this.values.stroke = this.buildColor(documentData.sc); + this.values.sWidth = documentData.sw; + } + var fontData = this.globalData.fontManager.getFontByName(documentData.f); + var i; + var len; + var letters = documentData.l; + var matrixHelper = this.mHelper; + this.stroke = hasStroke; + this.values.fValue = documentData.finalSize + "px " + this.globalData.fontManager.getFontByName(documentData.f).fFamily; + len = documentData.finalText.length; + var charData; + var shapeData; + var k2; + var kLen; + var shapes; + var j; + var jLen; + var pathNodes; + var commands; + var pathArr; + var singleShape = this.data.singleShape; + var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize; + var xPos = 0; + var yPos = 0; + var firstLine = true; + var cnt = 0; + for (i = 0; i < len; i += 1) { + charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); + shapeData = charData && charData.data || {}; + matrixHelper.reset(); + if (singleShape && letters[i].n) { + xPos = -trackingOffset; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + firstLine = false; + } + shapes = shapeData.shapes ? shapeData.shapes[0].it : []; + jLen = shapes.length; + matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); + if (singleShape) { + this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); + } + commands = createSizedArray(jLen - 1); + var commandsCounter = 0; + for (j = 0; j < jLen; j += 1) { + if (shapes[j].ty === "sh") { + kLen = shapes[j].ks.k.i.length; + pathNodes = shapes[j].ks.k; + pathArr = []; + for (k2 = 1; k2 < kLen; k2 += 1) { + if (k2 === 1) { + pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); + } + pathArr.push(matrixHelper.applyToX(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k2][0], pathNodes.i[k2][1], 0), matrixHelper.applyToY(pathNodes.i[k2][0], pathNodes.i[k2][1], 0), matrixHelper.applyToX(pathNodes.v[k2][0], pathNodes.v[k2][1], 0), matrixHelper.applyToY(pathNodes.v[k2][0], pathNodes.v[k2][1], 0)); + } + pathArr.push(matrixHelper.applyToX(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); + commands[commandsCounter] = pathArr; + commandsCounter += 1; + } + } + if (singleShape) { + xPos += letters[i].l; + xPos += trackingOffset; + } + if (this.textSpans[cnt]) { + this.textSpans[cnt].elem = commands; + } else { + this.textSpans[cnt] = { elem: commands }; + } + cnt += 1; + } + }; + CVTextElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.font = this.values.fValue; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 4; + if (!this.data.singleShape) { + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); + } + var i; + var len; + var j; + var jLen; + var k2; + var kLen; + var renderedLetters = this.textAnimator.renderedLetters; + var letters = this.textProperty.currentData.l; + len = letters.length; + var renderedLetter; + var lastFill = null; + var lastStroke = null; + var lastStrokeW = null; + var commands; + var pathArr; + for (i = 0; i < len; i += 1) { + if (!letters[i].n) { + renderedLetter = renderedLetters[i]; + if (renderedLetter) { + this.globalData.renderer.save(); + this.globalData.renderer.ctxTransform(renderedLetter.p); + this.globalData.renderer.ctxOpacity(renderedLetter.o); + } + if (this.fill) { + if (renderedLetter && renderedLetter.fc) { + if (lastFill !== renderedLetter.fc) { + lastFill = renderedLetter.fc; + ctx.fillStyle = renderedLetter.fc; + } + } else if (lastFill !== this.values.fill) { + lastFill = this.values.fill; + ctx.fillStyle = this.values.fill; + } + commands = this.textSpans[i].elem; + jLen = commands.length; + this.globalData.canvasContext.beginPath(); + for (j = 0; j < jLen; j += 1) { + pathArr = commands[j]; + kLen = pathArr.length; + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); + for (k2 = 2; k2 < kLen; k2 += 6) { + this.globalData.canvasContext.bezierCurveTo(pathArr[k2], pathArr[k2 + 1], pathArr[k2 + 2], pathArr[k2 + 3], pathArr[k2 + 4], pathArr[k2 + 5]); + } + } + this.globalData.canvasContext.closePath(); + this.globalData.canvasContext.fill(); + } + if (this.stroke) { + if (renderedLetter && renderedLetter.sw) { + if (lastStrokeW !== renderedLetter.sw) { + lastStrokeW = renderedLetter.sw; + ctx.lineWidth = renderedLetter.sw; + } + } else if (lastStrokeW !== this.values.sWidth) { + lastStrokeW = this.values.sWidth; + ctx.lineWidth = this.values.sWidth; + } + if (renderedLetter && renderedLetter.sc) { + if (lastStroke !== renderedLetter.sc) { + lastStroke = renderedLetter.sc; + ctx.strokeStyle = renderedLetter.sc; + } + } else if (lastStroke !== this.values.stroke) { + lastStroke = this.values.stroke; + ctx.strokeStyle = this.values.stroke; + } + commands = this.textSpans[i].elem; + jLen = commands.length; + this.globalData.canvasContext.beginPath(); + for (j = 0; j < jLen; j += 1) { + pathArr = commands[j]; + kLen = pathArr.length; + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); + for (k2 = 2; k2 < kLen; k2 += 6) { + this.globalData.canvasContext.bezierCurveTo(pathArr[k2], pathArr[k2 + 1], pathArr[k2 + 2], pathArr[k2 + 3], pathArr[k2 + 4], pathArr[k2 + 5]); + } + } + this.globalData.canvasContext.closePath(); + this.globalData.canvasContext.stroke(); + } + if (renderedLetter) { + this.globalData.renderer.restore(); + } + } + } + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement); + CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; + CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; + CVImageElement.prototype.createContent = function() { + if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { + var canvas = createTag("canvas"); + canvas.width = this.assetData.w; + canvas.height = this.assetData.h; + var ctx = canvas.getContext("2d"); + var imgW = this.img.width; + var imgH = this.img.height; + var imgRel = imgW / imgH; + var canvasRel = this.assetData.w / this.assetData.h; + var widthCrop; + var heightCrop; + var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; + if (imgRel > canvasRel && par === "xMidYMid slice" || imgRel < canvasRel && par !== "xMidYMid slice") { + heightCrop = imgH; + widthCrop = heightCrop * canvasRel; + } else { + widthCrop = imgW; + heightCrop = widthCrop / canvasRel; + } + ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); + this.img = canvas; + } + }; + CVImageElement.prototype.renderInnerContent = function() { + this.canvasContext.drawImage(this.img, 0, 0); + }; + CVImageElement.prototype.destroy = function() { + this.img = null; + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement); + CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; + CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; + CVSolidElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.fillStyle = this.data.sc; + ctx.fillRect(0, 0, this.data.sw, this.data.sh); + }; + extendPrototype([BaseRenderer], CanvasRendererBase); + CanvasRendererBase.prototype.createShape = function(data2) { + return new CVShapeElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createText = function(data2) { + return new CVTextElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createImage = function(data2) { + return new CVImageElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createSolid = function(data2) { + return new CVSolidElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; + CanvasRendererBase.prototype.ctxTransform = function(props) { + if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) { + return; + } + if (!this.renderConfig.clearCanvas) { + this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); + return; + } + this.transformMat.cloneFromProps(props); + var cProps = this.contextData.cTr.props; + this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); + this.contextData.cTr.cloneFromProps(this.transformMat.props); + var trProps = this.contextData.cTr.props; + this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); + }; + CanvasRendererBase.prototype.ctxOpacity = function(op) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.globalAlpha *= op < 0 ? 0 : op; + this.globalData.currentGlobalAlpha = this.contextData.cO; + return; + } + this.contextData.cO *= op < 0 ? 0 : op; + if (this.globalData.currentGlobalAlpha !== this.contextData.cO) { + this.canvasContext.globalAlpha = this.contextData.cO; + this.globalData.currentGlobalAlpha = this.contextData.cO; + } + }; + CanvasRendererBase.prototype.reset = function() { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.restore(); + return; + } + this.contextData.reset(); + }; + CanvasRendererBase.prototype.save = function(actionFlag) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.save(); + return; + } + if (actionFlag) { + this.canvasContext.save(); + } + var props = this.contextData.cTr.props; + if (this.contextData._length <= this.contextData.cArrPos) { + this.contextData.duplicate(); + } + var i; + var arr = this.contextData.saved[this.contextData.cArrPos]; + for (i = 0; i < 16; i += 1) { + arr[i] = props[i]; + } + this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO; + this.contextData.cArrPos += 1; + }; + CanvasRendererBase.prototype.restore = function(actionFlag) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.restore(); + return; + } + if (actionFlag) { + this.canvasContext.restore(); + this.globalData.blendMode = "source-over"; + } + this.contextData.cArrPos -= 1; + var popped = this.contextData.saved[this.contextData.cArrPos]; + var i; + var arr = this.contextData.cTr.props; + for (i = 0; i < 16; i += 1) { + arr[i] = popped[i]; + } + this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]); + popped = this.contextData.savedOp[this.contextData.cArrPos]; + this.contextData.cO = popped; + if (this.globalData.currentGlobalAlpha !== popped) { + this.canvasContext.globalAlpha = popped; + this.globalData.currentGlobalAlpha = popped; + } + }; + CanvasRendererBase.prototype.configAnimation = function(animData) { + if (this.animationItem.wrapper) { + this.animationItem.container = createTag("canvas"); + var containerStyle = this.animationItem.container.style; + containerStyle.width = "100%"; + containerStyle.height = "100%"; + var origin = "0px 0px 0px"; + containerStyle.transformOrigin = origin; + containerStyle.mozTransformOrigin = origin; + containerStyle.webkitTransformOrigin = origin; + containerStyle["-webkit-transform"] = origin; + containerStyle.contentVisibility = this.renderConfig.contentVisibility; + this.animationItem.wrapper.appendChild(this.animationItem.container); + this.canvasContext = this.animationItem.container.getContext("2d"); + if (this.renderConfig.className) { + this.animationItem.container.setAttribute("class", this.renderConfig.className); + } + if (this.renderConfig.id) { + this.animationItem.container.setAttribute("id", this.renderConfig.id); + } + } else { + this.canvasContext = this.renderConfig.context; + } + this.data = animData; + this.layers = animData.layers; + this.transformCanvas = { + w: animData.w, + h: animData.h, + sx: 0, + sy: 0, + tx: 0, + ty: 0 + }; + this.setupGlobalData(animData, document.body); + this.globalData.canvasContext = this.canvasContext; + this.globalData.renderer = this; + this.globalData.isDashed = false; + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; + this.globalData.transformCanvas = this.transformCanvas; + this.elements = createSizedArray(animData.layers.length); + this.updateContainerSize(); + }; + CanvasRendererBase.prototype.updateContainerSize = function() { + this.reset(); + var elementWidth; + var elementHeight; + if (this.animationItem.wrapper && this.animationItem.container) { + elementWidth = this.animationItem.wrapper.offsetWidth; + elementHeight = this.animationItem.wrapper.offsetHeight; + this.animationItem.container.setAttribute("width", elementWidth * this.renderConfig.dpr); + this.animationItem.container.setAttribute("height", elementHeight * this.renderConfig.dpr); + } else { + elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr; + elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr; + } + var elementRel; + var animationRel; + if (this.renderConfig.preserveAspectRatio.indexOf("meet") !== -1 || this.renderConfig.preserveAspectRatio.indexOf("slice") !== -1) { + var par = this.renderConfig.preserveAspectRatio.split(" "); + var fillType = par[1] || "meet"; + var pos = par[0] || "xMidYMid"; + var xPos = pos.substr(0, 4); + var yPos = pos.substr(4); + elementRel = elementWidth / elementHeight; + animationRel = this.transformCanvas.w / this.transformCanvas.h; + if (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice") { + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + } else { + this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + } + if (xPos === "xMid" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) { + this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; + } else if (xPos === "xMax" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) { + this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; + } else { + this.transformCanvas.tx = 0; + } + if (yPos === "YMid" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) { + this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; + } else if (yPos === "YMax" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) { + this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; + } else { + this.transformCanvas.ty = 0; + } + } else if (this.renderConfig.preserveAspectRatio === "none") { + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + this.transformCanvas.tx = 0; + this.transformCanvas.ty = 0; + } else { + this.transformCanvas.sx = this.renderConfig.dpr; + this.transformCanvas.sy = this.renderConfig.dpr; + this.transformCanvas.tx = 0; + this.transformCanvas.ty = 0; + } + this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1]; + this.ctxTransform(this.transformCanvas.props); + this.canvasContext.beginPath(); + this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); + this.canvasContext.closePath(); + this.canvasContext.clip(); + this.renderFrame(this.renderedFrame, true); + }; + CanvasRendererBase.prototype.destroy = function() { + if (this.renderConfig.clearCanvas && this.animationItem.wrapper) { + this.animationItem.wrapper.innerText = ""; + } + var i; + var len = this.layers ? this.layers.length : 0; + for (i = len - 1; i >= 0; i -= 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.elements.length = 0; + this.globalData.canvasContext = null; + this.animationItem.container = null; + this.destroyed = true; + }; + CanvasRendererBase.prototype.renderFrame = function(num, forceRender) { + if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) { + return; + } + this.renderedFrame = num; + this.globalData.frameNum = num - this.animationItem._isFirstFrame; + this.globalData.frameId += 1; + this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; + this.globalData.projectInterface.currentFrame = num; + var i; + var len = this.layers.length; + if (!this.completeLayers) { + this.checkLayers(num); + } + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(num - this.layers[i].st); + } + } + if (this.globalData._mdf) { + if (this.renderConfig.clearCanvas === true) { + this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); + } else { + this.save(); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + if (this.renderConfig.clearCanvas !== true) { + this.restore(); + } + } + }; + CanvasRendererBase.prototype.buildItem = function(pos) { + var elements = this.elements; + if (elements[pos] || this.layers[pos].ty === 99) { + return; + } + var element = this.createItem(this.layers[pos], this, this.globalData); + elements[pos] = element; + element.initExpressions(); + }; + CanvasRendererBase.prototype.checkPendingElements = function() { + while (this.pendingElements.length) { + var element = this.pendingElements.pop(); + element.checkParenting(); + } + }; + CanvasRendererBase.prototype.hide = function() { + this.animationItem.container.style.display = "none"; + }; + CanvasRendererBase.prototype.show = function() { + this.animationItem.container.style.display = "block"; + }; + extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement); + CVCompElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.beginPath(); + ctx.moveTo(0, 0); + ctx.lineTo(this.data.w, 0); + ctx.lineTo(this.data.w, this.data.h); + ctx.lineTo(0, this.data.h); + ctx.lineTo(0, 0); + ctx.clip(); + var i; + var len = this.layers.length; + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + }; + CVCompElement.prototype.destroy = function() { + var i; + var len = this.layers.length; + for (i = len - 1; i >= 0; i -= 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.layers = null; + this.elements = null; + }; + CVCompElement.prototype.createComp = function(data2) { + return new CVCompElement(data2, this.globalData, this); + }; + extendPrototype([CanvasRendererBase], CanvasRenderer); + CanvasRenderer.prototype.createComp = function(data2) { + return new CVCompElement(data2, this.globalData, this); + }; + registerRenderer("canvas", CanvasRenderer); + ShapeModifiers.registerModifier("tm", TrimModifier); + ShapeModifiers.registerModifier("pb", PuckerAndBloatModifier); + ShapeModifiers.registerModifier("rp", RepeaterModifier); + ShapeModifiers.registerModifier("rd", RoundCornersModifier); + const Expressions = function() { + var ob2 = {}; + ob2.initExpressions = initExpressions; + function initExpressions(animation) { + var stackCount = 0; + var registers = []; + function pushExpression() { + stackCount += 1; + } + function popExpression() { + stackCount -= 1; + if (stackCount === 0) { + releaseInstances(); + } + } + function registerExpressionProperty(expression) { + if (registers.indexOf(expression) === -1) { + registers.push(expression); + } + } + function releaseInstances() { + var i; + var len = registers.length; + for (i = 0; i < len; i += 1) { + registers[i].release(); + } + registers.length = 0; + } + animation.renderer.compInterface = CompExpressionInterface(animation.renderer); + animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); + animation.renderer.globalData.pushExpression = pushExpression; + animation.renderer.globalData.popExpression = popExpression; + animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; + } + return ob2; + }(); + ; + propTypes = { + SHAPE: "shape" + }; + const ExpressionManager = function() { + "use strict"; + var ob = {}; + var Math = BMMath; + var window = null; + var document = null; + var XMLHttpRequest = null; + var fetch = null; + var frames = null; + initialize$2(BMMath); + function $bm_isInstanceOfArray(arr) { + return arr.constructor === Array || arr.constructor === Float32Array; + } + function isNumerable(tOfV, v) { + return tOfV === "number" || tOfV === "boolean" || tOfV === "string" || v instanceof Number; + } + function $bm_neg(a2) { + var tOfA = typeof a2; + if (tOfA === "number" || tOfA === "boolean" || a2 instanceof Number) { + return -a2; + } + if ($bm_isInstanceOfArray(a2)) { + var i; + var lenA = a2.length; + var retArr = []; + for (i = 0; i < lenA; i += 1) { + retArr[i] = -a2[i]; + } + return retArr; + } + if (a2.propType) { + return a2.v; + } + return -a2; + } + var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, "easeIn").get; + var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, "easeOut").get; + var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, "easeInOut").get; + function sum(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + if (tOfA === "string" || tOfB === "string") { + return a2 + b3; + } + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 + b3; + } + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + a2 = a2.slice(0); + a2[0] += b3; + return a2; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + b3 = b3.slice(0); + b3[0] = a2 + b3[0]; + return b3; + } + if ($bm_isInstanceOfArray(a2) && $bm_isInstanceOfArray(b3)) { + var i = 0; + var lenA = a2.length; + var lenB = b3.length; + var retArr = []; + while (i < lenA || i < lenB) { + if ((typeof a2[i] === "number" || a2[i] instanceof Number) && (typeof b3[i] === "number" || b3[i] instanceof Number)) { + retArr[i] = a2[i] + b3[i]; + } else { + retArr[i] = b3[i] === void 0 ? a2[i] : a2[i] || b3[i]; + } + i += 1; + } + return retArr; + } + return 0; + } + var add = sum; + function sub(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + if (tOfA === "string") { + a2 = parseInt(a2, 10); + } + if (tOfB === "string") { + b3 = parseInt(b3, 10); + } + return a2 - b3; + } + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + a2 = a2.slice(0); + a2[0] -= b3; + return a2; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + b3 = b3.slice(0); + b3[0] = a2 - b3[0]; + return b3; + } + if ($bm_isInstanceOfArray(a2) && $bm_isInstanceOfArray(b3)) { + var i = 0; + var lenA = a2.length; + var lenB = b3.length; + var retArr = []; + while (i < lenA || i < lenB) { + if ((typeof a2[i] === "number" || a2[i] instanceof Number) && (typeof b3[i] === "number" || b3[i] instanceof Number)) { + retArr[i] = a2[i] - b3[i]; + } else { + retArr[i] = b3[i] === void 0 ? a2[i] : a2[i] || b3[i]; + } + i += 1; + } + return retArr; + } + return 0; + } + function mul(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + var arr; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 * b3; + } + var i; + var len; + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + len = a2.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2[i] * b3; + } + return arr; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + len = b3.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2 * b3[i]; + } + return arr; + } + return 0; + } + function div(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + var arr; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 / b3; + } + var i; + var len; + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + len = a2.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2[i] / b3; + } + return arr; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + len = b3.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2 / b3[i]; + } + return arr; + } + return 0; + } + function mod(a2, b3) { + if (typeof a2 === "string") { + a2 = parseInt(a2, 10); + } + if (typeof b3 === "string") { + b3 = parseInt(b3, 10); + } + return a2 % b3; + } + var $bm_sum = sum; + var $bm_sub = sub; + var $bm_mul = mul; + var $bm_div = div; + var $bm_mod = mod; + function clamp(num, min, max2) { + if (min > max2) { + var mm = max2; + max2 = min; + min = mm; + } + return Math.min(Math.max(num, min), max2); + } + function radiansToDegrees(val2) { + return val2 / degToRads; + } + var radians_to_degrees = radiansToDegrees; + function degreesToRadians(val2) { + return val2 * degToRads; + } + var degrees_to_radians = radiansToDegrees; + var helperLengthArray = [0, 0, 0, 0, 0, 0]; + function length(arr1, arr2) { + if (typeof arr1 === "number" || arr1 instanceof Number) { + arr2 = arr2 || 0; + return Math.abs(arr1 - arr2); + } + if (!arr2) { + arr2 = helperLengthArray; + } + var i; + var len = Math.min(arr1.length, arr2.length); + var addedLength = 0; + for (i = 0; i < len; i += 1) { + addedLength += Math.pow(arr2[i] - arr1[i], 2); + } + return Math.sqrt(addedLength); + } + function normalize(vec) { + return div(vec, length(vec)); + } + function rgbToHsl(val2) { + var r = val2[0]; + var g2 = val2[1]; + var b3 = val2[2]; + var max2 = Math.max(r, g2, b3); + var min = Math.min(r, g2, b3); + var h; + var s; + var l2 = (max2 + min) / 2; + if (max2 === min) { + h = 0; + s = 0; + } else { + var d = max2 - min; + s = l2 > 0.5 ? d / (2 - max2 - min) : d / (max2 + min); + switch (max2) { + case r: + h = (g2 - b3) / d + (g2 < b3 ? 6 : 0); + break; + case g2: + h = (b3 - r) / d + 2; + break; + case b3: + h = (r - g2) / d + 4; + break; + default: + break; + } + h /= 6; + } + return [h, s, l2, val2[3]]; + } + function hue2rgb(p2, q2, t3) { + if (t3 < 0) t3 += 1; + if (t3 > 1) t3 -= 1; + if (t3 < 1 / 6) return p2 + (q2 - p2) * 6 * t3; + if (t3 < 1 / 2) return q2; + if (t3 < 2 / 3) return p2 + (q2 - p2) * (2 / 3 - t3) * 6; + return p2; + } + function hslToRgb(val2) { + var h = val2[0]; + var s = val2[1]; + var l2 = val2[2]; + var r; + var g2; + var b3; + if (s === 0) { + r = l2; + b3 = l2; + g2 = l2; + } else { + var q2 = l2 < 0.5 ? l2 * (1 + s) : l2 + s - l2 * s; + var p2 = 2 * l2 - q2; + r = hue2rgb(p2, q2, h + 1 / 3); + g2 = hue2rgb(p2, q2, h); + b3 = hue2rgb(p2, q2, h - 1 / 3); + } + return [r, g2, b3, val2[3]]; + } + function linear(t3, tMin, tMax, value1, value2) { + if (value1 === void 0 || value2 === void 0) { + value1 = tMin; + value2 = tMax; + tMin = 0; + tMax = 1; + } + if (tMax < tMin) { + var _tMin = tMax; + tMax = tMin; + tMin = _tMin; + } + if (t3 <= tMin) { + return value1; + } + if (t3 >= tMax) { + return value2; + } + var perc = tMax === tMin ? 0 : (t3 - tMin) / (tMax - tMin); + if (!value1.length) { + return value1 + (value2 - value1) * perc; + } + var i; + var len = value1.length; + var arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = value1[i] + (value2[i] - value1[i]) * perc; + } + return arr; + } + function random(min, max2) { + if (max2 === void 0) { + if (min === void 0) { + min = 0; + max2 = 1; + } else { + max2 = min; + min = void 0; + } + } + if (max2.length) { + var i; + var len = max2.length; + if (!min) { + min = createTypedArray("float32", len); + } + var arr = createTypedArray("float32", len); + var rnd = BMMath.random(); + for (i = 0; i < len; i += 1) { + arr[i] = min[i] + rnd * (max2[i] - min[i]); + } + return arr; + } + if (min === void 0) { + min = 0; + } + var rndm = BMMath.random(); + return min + rndm * (max2 - min); + } + function createPath(points, inTangents, outTangents, closed) { + var i; + var len = points.length; + var path = shapePool.newElement(); + path.setPathData(!!closed, len); + var arrPlaceholder = [0, 0]; + var inVertexPoint; + var outVertexPoint; + for (i = 0; i < len; i += 1) { + inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; + outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; + path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true); + } + return path; + } + function initiateExpression(elem, data, property) { + var val = data.x; + var needsVelocity = /velocity(?![\w\d])/.test(val); + var _needsRandom = val.indexOf("random") !== -1; + var elemType = elem.data.ty; + var transform; + var $bm_transform; + var content; + var effect; + var thisProperty = property; + thisProperty.valueAtTime = thisProperty.getValueAtTime; + Object.defineProperty(thisProperty, "value", { + get: function() { + return thisProperty.v; + } + }); + elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate; + elem.comp.displayStartTime = 0; + var inPoint = elem.data.ip / elem.comp.globalData.frameRate; + var outPoint = elem.data.op / elem.comp.globalData.frameRate; + var width = elem.data.sw ? elem.data.sw : 0; + var height = elem.data.sh ? elem.data.sh : 0; + var name = elem.data.nm; + var loopIn; + var loop_in; + var loopOut; + var loop_out; + var smooth; + var toWorld; + var fromWorld; + var fromComp; + var toComp; + var fromCompToSurface; + var position; + var rotation; + var anchorPoint; + var scale; + var thisLayer; + var thisComp; + var mask; + var valueAtTime; + var velocityAtTime; + var scoped_bm_rt; + var expression_function = eval("[function _expression_function(){" + val + ";scoped_bm_rt=$bm_rt}]")[0]; + var numKeys = property.kf ? data.k.length : 0; + var active = !this.data || this.data.hd !== true; + var wiggle = (function wiggle2(freq, amp) { + var iWiggle; + var j; + var lenWiggle = this.pv.length ? this.pv.length : 1; + var addedAmps = createTypedArray("float32", lenWiggle); + freq = 5; + var iterations = Math.floor(time * freq); + iWiggle = 0; + j = 0; + while (iWiggle < iterations) { + for (j = 0; j < lenWiggle; j += 1) { + addedAmps[j] += -amp + amp * 2 * BMMath.random(); + } + iWiggle += 1; + } + var periods = time * freq; + var perc = periods - Math.floor(periods); + var arr = createTypedArray("float32", lenWiggle); + if (lenWiggle > 1) { + for (j = 0; j < lenWiggle; j += 1) { + arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; + } + return arr; + } + return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; + }).bind(this); + if (thisProperty.loopIn) { + loopIn = thisProperty.loopIn.bind(thisProperty); + loop_in = loopIn; + } + if (thisProperty.loopOut) { + loopOut = thisProperty.loopOut.bind(thisProperty); + loop_out = loopOut; + } + if (thisProperty.smooth) { + smooth = thisProperty.smooth.bind(thisProperty); + } + function loopInDuration(type, duration) { + return loopIn(type, duration, true); + } + function loopOutDuration(type, duration) { + return loopOut(type, duration, true); + } + if (this.getValueAtTime) { + valueAtTime = this.getValueAtTime.bind(this); + } + if (this.getVelocityAtTime) { + velocityAtTime = this.getVelocityAtTime.bind(this); + } + var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface); + function lookAt(elem1, elem2) { + var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]]; + var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads; + var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads; + return [yaw, pitch, 0]; + } + function easeOut(t3, tMin, tMax, val1, val2) { + return applyEase(easeOutBez, t3, tMin, tMax, val1, val2); + } + function easeIn(t3, tMin, tMax, val1, val2) { + return applyEase(easeInBez, t3, tMin, tMax, val1, val2); + } + function ease(t3, tMin, tMax, val1, val2) { + return applyEase(easeInOutBez, t3, tMin, tMax, val1, val2); + } + function applyEase(fn, t3, tMin, tMax, val1, val2) { + if (val1 === void 0) { + val1 = tMin; + val2 = tMax; + } else { + t3 = (t3 - tMin) / (tMax - tMin); + } + if (t3 > 1) { + t3 = 1; + } else if (t3 < 0) { + t3 = 0; + } + var mult = fn(t3); + if ($bm_isInstanceOfArray(val1)) { + var iKey; + var lenKey = val1.length; + var arr = createTypedArray("float32", lenKey); + for (iKey = 0; iKey < lenKey; iKey += 1) { + arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]; + } + return arr; + } + return (val2 - val1) * mult + val1; + } + function nearestKey(time2) { + var iKey; + var lenKey = data.k.length; + var index2; + var keyTime; + if (!data.k.length || typeof data.k[0] === "number") { + index2 = 0; + keyTime = 0; + } else { + index2 = -1; + time2 *= elem.comp.globalData.frameRate; + if (time2 < data.k[0].t) { + index2 = 1; + keyTime = data.k[0].t; + } else { + for (iKey = 0; iKey < lenKey - 1; iKey += 1) { + if (time2 === data.k[iKey].t) { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + break; + } else if (time2 > data.k[iKey].t && time2 < data.k[iKey + 1].t) { + if (time2 - data.k[iKey].t > data.k[iKey + 1].t - time2) { + index2 = iKey + 2; + keyTime = data.k[iKey + 1].t; + } else { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + } + break; + } + } + if (index2 === -1) { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + } + } + } + var obKey = {}; + obKey.index = index2; + obKey.time = keyTime / elem.comp.globalData.frameRate; + return obKey; + } + function key(ind) { + var obKey; + var iKey; + var lenKey; + if (!data.k.length || typeof data.k[0] === "number") { + throw new Error("The property has no keyframe at index " + ind); + } + ind -= 1; + obKey = { + time: data.k[ind].t / elem.comp.globalData.frameRate, + value: [] + }; + var arr = Object.prototype.hasOwnProperty.call(data.k[ind], "s") ? data.k[ind].s : data.k[ind - 1].e; + lenKey = arr.length; + for (iKey = 0; iKey < lenKey; iKey += 1) { + obKey[iKey] = arr[iKey]; + obKey.value[iKey] = arr[iKey]; + } + return obKey; + } + function framesToTime(fr, fps) { + if (!fps) { + fps = elem.comp.globalData.frameRate; + } + return fr / fps; + } + function timeToFrames(t3, fps) { + if (!t3 && t3 !== 0) { + t3 = time; + } + if (!fps) { + fps = elem.comp.globalData.frameRate; + } + return t3 * fps; + } + function seedRandom(seed) { + BMMath.seedrandom(randSeed + seed); + } + function sourceRectAtTime() { + return elem.sourceRectAtTime(); + } + function substring(init, end) { + if (typeof value === "string") { + if (end === void 0) { + return value.substring(init); + } + return value.substring(init, end); + } + return ""; + } + function substr(init, end) { + if (typeof value === "string") { + if (end === void 0) { + return value.substr(init); + } + return value.substr(init, end); + } + return ""; + } + function posterizeTime(framesPerSecond) { + time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond; + value = valueAtTime(time); + } + var time; + var velocity; + var value; + var text; + var textIndex; + var textTotal; + var selectorValue; + var index = elem.data.ind; + var hasParent = !!(elem.hierarchy && elem.hierarchy.length); + var parent; + var randSeed = Math.floor(Math.random() * 1e6); + var globalData = elem.globalData; + function executeExpression(_value) { + value = _value; + if (this.frameExpressionId === elem.globalData.frameId && this.propType !== "textSelector") { + return value; + } + if (this.propType === "textSelector") { + textIndex = this.textIndex; + textTotal = this.textTotal; + selectorValue = this.selectorValue; + } + if (!thisLayer) { + text = elem.layerInterface.text; + thisLayer = elem.layerInterface; + thisComp = elem.comp.compInterface; + toWorld = thisLayer.toWorld.bind(thisLayer); + fromWorld = thisLayer.fromWorld.bind(thisLayer); + fromComp = thisLayer.fromComp.bind(thisLayer); + toComp = thisLayer.toComp.bind(thisLayer); + mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null; + fromCompToSurface = fromComp; + } + if (!transform) { + transform = elem.layerInterface("ADBE Transform Group"); + $bm_transform = transform; + if (transform) { + anchorPoint = transform.anchorPoint; + } + } + if (elemType === 4 && !content) { + content = thisLayer("ADBE Root Vectors Group"); + } + if (!effect) { + effect = thisLayer(4); + } + hasParent = !!(elem.hierarchy && elem.hierarchy.length); + if (hasParent && !parent) { + parent = elem.hierarchy[0].layerInterface; + } + time = this.comp.renderedFrame / this.comp.globalData.frameRate; + if (_needsRandom) { + seedRandom(randSeed + time); + } + if (needsVelocity) { + velocity = velocityAtTime(time); + } + expression_function(); + this.frameExpressionId = elem.globalData.frameId; + scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt; + return scoped_bm_rt; + } + executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData]; + return executeExpression; + } + ob.initiateExpression = initiateExpression; + ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath]; + return ob; + }(); + const expressionHelpers = /* @__PURE__ */ function() { + function searchExpressions(elem2, data2, prop) { + if (data2.x) { + prop.k = true; + prop.x = true; + prop.initiateExpression = ExpressionManager.initiateExpression; + prop.effectsSequence.push(prop.initiateExpression(elem2, data2, prop).bind(prop)); + } + } + function getValueAtTime(frameNum) { + frameNum *= this.elem.globalData.frameRate; + frameNum -= this.offsetTime; + if (frameNum !== this._cachingAtTime.lastFrame) { + this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; + this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); + this._cachingAtTime.lastFrame = frameNum; + } + return this._cachingAtTime.value; + } + function getSpeedAtTime(frameNum) { + var delta = -0.01; + var v12 = this.getValueAtTime(frameNum); + var v2 = this.getValueAtTime(frameNum + delta); + var speed = 0; + if (v12.length) { + var i; + for (i = 0; i < v12.length; i += 1) { + speed += Math.pow(v2[i] - v12[i], 2); + } + speed = Math.sqrt(speed) * 100; + } else { + speed = 0; + } + return speed; + } + function getVelocityAtTime(frameNum) { + if (this.vel !== void 0) { + return this.vel; + } + var delta = -1e-3; + var v12 = this.getValueAtTime(frameNum); + var v2 = this.getValueAtTime(frameNum + delta); + var velocity2; + if (v12.length) { + velocity2 = createTypedArray("float32", v12.length); + var i; + for (i = 0; i < v12.length; i += 1) { + velocity2[i] = (v2[i] - v12[i]) / delta; + } + } else { + velocity2 = (v2 - v12) / delta; + } + return velocity2; + } + function getStaticValueAtTime() { + return this.pv; + } + function setGroupProperty(propertyGroup) { + this.propertyGroup = propertyGroup; + } + return { + searchExpressions, + getSpeedAtTime, + getVelocityAtTime, + getValueAtTime, + getStaticValueAtTime, + setGroupProperty + }; + }(); + setExpressionsPlugin(Expressions); + initialize$1(); + initialize(); +} +var standalone; +var animationData; +var renderer; +var queryString; +var scripts; +var index2; +var myScript; +var readyStateCheckInterval; +var registeredEffects; +var idPrefix; +var emptyShapeData; +var propTypes; + +// node_modules/three/examples/jsm/loaders/LottieLoader.js +var LottieLoader = class extends Loader { + setQuality(value2) { + this._quality = value2; + } + load(url, onLoad, onProgress, onError) { + const quality = this._quality || 1; + const texture = new CanvasTexture(); + texture.minFilter = NearestFilter; + texture.colorSpace = SRGBColorSpace; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + const data2 = JSON.parse(text2); + const container = document.createElement("div"); + container.style.width = data2.w + "px"; + container.style.height = data2.h + "px"; + document.body.appendChild(container); + const animation = lottie.loadAnimation({ + container, + animType: "canvas", + loop: true, + autoplay: true, + animationData: data2, + rendererSettings: { dpr: quality } + }); + texture.animation = animation; + texture.image = animation.container; + animation.addEventListener("enterFrame", function() { + texture.needsUpdate = true; + }); + container.style.display = "none"; + if (onLoad !== void 0) { + onLoad(texture); + } + }, onProgress, onError); + return texture; + } +}; + +// node_modules/three/examples/jsm/loaders/MD2Loader.js +var _normalData = [ + [-0.525731, 0, 0.850651], + [-0.442863, 0.238856, 0.864188], + [-0.295242, 0, 0.955423], + [-0.309017, 0.5, 0.809017], + [-0.16246, 0.262866, 0.951056], + [0, 0, 1], + [0, 0.850651, 0.525731], + [-0.147621, 0.716567, 0.681718], + [0.147621, 0.716567, 0.681718], + [0, 0.525731, 0.850651], + [0.309017, 0.5, 0.809017], + [0.525731, 0, 0.850651], + [0.295242, 0, 0.955423], + [0.442863, 0.238856, 0.864188], + [0.16246, 0.262866, 0.951056], + [-0.681718, 0.147621, 0.716567], + [-0.809017, 0.309017, 0.5], + [-0.587785, 0.425325, 0.688191], + [-0.850651, 0.525731, 0], + [-0.864188, 0.442863, 0.238856], + [-0.716567, 0.681718, 0.147621], + [-0.688191, 0.587785, 0.425325], + [-0.5, 0.809017, 0.309017], + [-0.238856, 0.864188, 0.442863], + [-0.425325, 0.688191, 0.587785], + [-0.716567, 0.681718, -0.147621], + [-0.5, 0.809017, -0.309017], + [-0.525731, 0.850651, 0], + [0, 0.850651, -0.525731], + [-0.238856, 0.864188, -0.442863], + [0, 0.955423, -0.295242], + [-0.262866, 0.951056, -0.16246], + [0, 1, 0], + [0, 0.955423, 0.295242], + [-0.262866, 0.951056, 0.16246], + [0.238856, 0.864188, 0.442863], + [0.262866, 0.951056, 0.16246], + [0.5, 0.809017, 0.309017], + [0.238856, 0.864188, -0.442863], + [0.262866, 0.951056, -0.16246], + [0.5, 0.809017, -0.309017], + [0.850651, 0.525731, 0], + [0.716567, 0.681718, 0.147621], + [0.716567, 0.681718, -0.147621], + [0.525731, 0.850651, 0], + [0.425325, 0.688191, 0.587785], + [0.864188, 0.442863, 0.238856], + [0.688191, 0.587785, 0.425325], + [0.809017, 0.309017, 0.5], + [0.681718, 0.147621, 0.716567], + [0.587785, 0.425325, 0.688191], + [0.955423, 0.295242, 0], + [1, 0, 0], + [0.951056, 0.16246, 0.262866], + [0.850651, -0.525731, 0], + [0.955423, -0.295242, 0], + [0.864188, -0.442863, 0.238856], + [0.951056, -0.16246, 0.262866], + [0.809017, -0.309017, 0.5], + [0.681718, -0.147621, 0.716567], + [0.850651, 0, 0.525731], + [0.864188, 0.442863, -0.238856], + [0.809017, 0.309017, -0.5], + [0.951056, 0.16246, -0.262866], + [0.525731, 0, -0.850651], + [0.681718, 0.147621, -0.716567], + [0.681718, -0.147621, -0.716567], + [0.850651, 0, -0.525731], + [0.809017, -0.309017, -0.5], + [0.864188, -0.442863, -0.238856], + [0.951056, -0.16246, -0.262866], + [0.147621, 0.716567, -0.681718], + [0.309017, 0.5, -0.809017], + [0.425325, 0.688191, -0.587785], + [0.442863, 0.238856, -0.864188], + [0.587785, 0.425325, -0.688191], + [0.688191, 0.587785, -0.425325], + [-0.147621, 0.716567, -0.681718], + [-0.309017, 0.5, -0.809017], + [0, 0.525731, -0.850651], + [-0.525731, 0, -0.850651], + [-0.442863, 0.238856, -0.864188], + [-0.295242, 0, -0.955423], + [-0.16246, 0.262866, -0.951056], + [0, 0, -1], + [0.295242, 0, -0.955423], + [0.16246, 0.262866, -0.951056], + [-0.442863, -0.238856, -0.864188], + [-0.309017, -0.5, -0.809017], + [-0.16246, -0.262866, -0.951056], + [0, -0.850651, -0.525731], + [-0.147621, -0.716567, -0.681718], + [0.147621, -0.716567, -0.681718], + [0, -0.525731, -0.850651], + [0.309017, -0.5, -0.809017], + [0.442863, -0.238856, -0.864188], + [0.16246, -0.262866, -0.951056], + [0.238856, -0.864188, -0.442863], + [0.5, -0.809017, -0.309017], + [0.425325, -0.688191, -0.587785], + [0.716567, -0.681718, -0.147621], + [0.688191, -0.587785, -0.425325], + [0.587785, -0.425325, -0.688191], + [0, -0.955423, -0.295242], + [0, -1, 0], + [0.262866, -0.951056, -0.16246], + [0, -0.850651, 0.525731], + [0, -0.955423, 0.295242], + [0.238856, -0.864188, 0.442863], + [0.262866, -0.951056, 0.16246], + [0.5, -0.809017, 0.309017], + [0.716567, -0.681718, 0.147621], + [0.525731, -0.850651, 0], + [-0.238856, -0.864188, -0.442863], + [-0.5, -0.809017, -0.309017], + [-0.262866, -0.951056, -0.16246], + [-0.850651, -0.525731, 0], + [-0.716567, -0.681718, -0.147621], + [-0.716567, -0.681718, 0.147621], + [-0.525731, -0.850651, 0], + [-0.5, -0.809017, 0.309017], + [-0.238856, -0.864188, 0.442863], + [-0.262866, -0.951056, 0.16246], + [-0.864188, -0.442863, 0.238856], + [-0.809017, -0.309017, 0.5], + [-0.688191, -0.587785, 0.425325], + [-0.681718, -0.147621, 0.716567], + [-0.442863, -0.238856, 0.864188], + [-0.587785, -0.425325, 0.688191], + [-0.309017, -0.5, 0.809017], + [-0.147621, -0.716567, 0.681718], + [-0.425325, -0.688191, 0.587785], + [-0.16246, -0.262866, 0.951056], + [0.442863, -0.238856, 0.864188], + [0.16246, -0.262866, 0.951056], + [0.309017, -0.5, 0.809017], + [0.147621, -0.716567, 0.681718], + [0, -0.525731, 0.850651], + [0.425325, -0.688191, 0.587785], + [0.587785, -0.425325, 0.688191], + [0.688191, -0.587785, 0.425325], + [-0.955423, 0.295242, 0], + [-0.951056, 0.16246, 0.262866], + [-1, 0, 0], + [-0.850651, 0, 0.525731], + [-0.955423, -0.295242, 0], + [-0.951056, -0.16246, 0.262866], + [-0.864188, 0.442863, -0.238856], + [-0.951056, 0.16246, -0.262866], + [-0.809017, 0.309017, -0.5], + [-0.864188, -0.442863, -0.238856], + [-0.951056, -0.16246, -0.262866], + [-0.809017, -0.309017, -0.5], + [-0.681718, 0.147621, -0.716567], + [-0.681718, -0.147621, -0.716567], + [-0.850651, 0, -0.525731], + [-0.688191, 0.587785, -0.425325], + [-0.587785, 0.425325, -0.688191], + [-0.425325, 0.688191, -0.587785], + [-0.425325, -0.688191, -0.587785], + [-0.587785, -0.425325, -0.688191], + [-0.688191, -0.587785, -0.425325] +]; +var MD2Loader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const data2 = new DataView(buffer); + const header = {}; + const headerNames = [ + "ident", + "version", + "skinwidth", + "skinheight", + "framesize", + "num_skins", + "num_vertices", + "num_st", + "num_tris", + "num_glcmds", + "num_frames", + "offset_skins", + "offset_st", + "offset_tris", + "offset_frames", + "offset_glcmds", + "offset_end" + ]; + for (let i = 0; i < headerNames.length; i++) { + header[headerNames[i]] = data2.getInt32(i * 4, true); + } + if (header.ident !== 844121161 || header.version !== 8) { + console.error("Not a valid MD2 file"); + return; + } + if (header.offset_end !== data2.byteLength) { + console.error("Corrupted MD2 file"); + return; + } + const geometry = new BufferGeometry(); + const uvsTemp = []; + let offset = header.offset_st; + for (let i = 0, l2 = header.num_st; i < l2; i++) { + const u = data2.getInt16(offset + 0, true); + const v = data2.getInt16(offset + 2, true); + uvsTemp.push(u / header.skinwidth, 1 - v / header.skinheight); + offset += 4; + } + offset = header.offset_tris; + const vertexIndices = []; + const uvIndices = []; + for (let i = 0, l2 = header.num_tris; i < l2; i++) { + vertexIndices.push( + data2.getUint16(offset + 0, true), + data2.getUint16(offset + 2, true), + data2.getUint16(offset + 4, true) + ); + uvIndices.push( + data2.getUint16(offset + 6, true), + data2.getUint16(offset + 8, true), + data2.getUint16(offset + 10, true) + ); + offset += 12; + } + const translation = new Vector3(); + const scale2 = new Vector3(); + const frames2 = []; + offset = header.offset_frames; + for (let i = 0, l2 = header.num_frames; i < l2; i++) { + scale2.set( + data2.getFloat32(offset + 0, true), + data2.getFloat32(offset + 4, true), + data2.getFloat32(offset + 8, true) + ); + translation.set( + data2.getFloat32(offset + 12, true), + data2.getFloat32(offset + 16, true), + data2.getFloat32(offset + 20, true) + ); + offset += 24; + const string = []; + for (let j = 0; j < 16; j++) { + const character = data2.getUint8(offset + j); + if (character === 0) break; + string[j] = character; + } + const frame = { + name: String.fromCharCode.apply(null, string), + vertices: [], + normals: [] + }; + offset += 16; + for (let j = 0; j < header.num_vertices; j++) { + let x2 = data2.getUint8(offset++); + let y2 = data2.getUint8(offset++); + let z = data2.getUint8(offset++); + const n2 = _normalData[data2.getUint8(offset++)]; + x2 = x2 * scale2.x + translation.x; + y2 = y2 * scale2.y + translation.y; + z = z * scale2.z + translation.z; + frame.vertices.push(x2, z, y2); + frame.normals.push(n2[0], n2[2], n2[1]); + } + frames2.push(frame); + } + const positions = []; + const normals = []; + const uvs = []; + const verticesTemp = frames2[0].vertices; + const normalsTemp = frames2[0].normals; + for (let i = 0, l2 = vertexIndices.length; i < l2; i++) { + const vertexIndex = vertexIndices[i]; + let stride = vertexIndex * 3; + const x2 = verticesTemp[stride]; + const y2 = verticesTemp[stride + 1]; + const z = verticesTemp[stride + 2]; + positions.push(x2, y2, z); + const nx = normalsTemp[stride]; + const ny = normalsTemp[stride + 1]; + const nz = normalsTemp[stride + 2]; + normals.push(nx, ny, nz); + const uvIndex = uvIndices[i]; + stride = uvIndex * 2; + const u = uvsTemp[stride]; + const v = uvsTemp[stride + 1]; + uvs.push(u, v); + } + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + const morphPositions = []; + const morphNormals = []; + for (let i = 0, l2 = frames2.length; i < l2; i++) { + const frame = frames2[i]; + const attributeName = frame.name; + if (frame.vertices.length > 0) { + const positions2 = []; + for (let j = 0, jl = vertexIndices.length; j < jl; j++) { + const vertexIndex = vertexIndices[j]; + const stride = vertexIndex * 3; + const x2 = frame.vertices[stride]; + const y2 = frame.vertices[stride + 1]; + const z = frame.vertices[stride + 2]; + positions2.push(x2, y2, z); + } + const positionAttribute = new Float32BufferAttribute(positions2, 3); + positionAttribute.name = attributeName; + morphPositions.push(positionAttribute); + } + if (frame.normals.length > 0) { + const normals2 = []; + for (let j = 0, jl = vertexIndices.length; j < jl; j++) { + const vertexIndex = vertexIndices[j]; + const stride = vertexIndex * 3; + const nx = frame.normals[stride]; + const ny = frame.normals[stride + 1]; + const nz = frame.normals[stride + 2]; + normals2.push(nx, ny, nz); + } + const normalAttribute = new Float32BufferAttribute(normals2, 3); + normalAttribute.name = attributeName; + morphNormals.push(normalAttribute); + } + } + geometry.morphAttributes.position = morphPositions; + geometry.morphAttributes.normal = morphNormals; + geometry.morphTargetsRelative = false; + geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences(frames2, 10); + return geometry; + } +}; + +// node_modules/three/examples/jsm/loaders/MDDLoader.js +var MDDLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.load(url, function(data2) { + onLoad(scope.parse(data2)); + }, onProgress, onError); + } + parse(data2) { + const view = new DataView(data2); + const totalFrames = view.getUint32(0); + const totalPoints = view.getUint32(4); + let offset = 8; + const times = new Float32Array(totalFrames); + const values2 = new Float32Array(totalFrames * totalFrames).fill(0); + for (let i = 0; i < totalFrames; i++) { + times[i] = view.getFloat32(offset); + offset += 4; + values2[totalFrames * i + i] = 1; + } + const track = new NumberKeyframeTrack(".morphTargetInfluences", times, values2); + const clip = new AnimationClip("default", times[times.length - 1], [track]); + const morphTargets = []; + for (let i = 0; i < totalFrames; i++) { + const morphTarget = new Float32Array(totalPoints * 3); + for (let j = 0; j < totalPoints; j++) { + const stride = j * 3; + morphTarget[stride + 0] = view.getFloat32(offset); + offset += 4; + morphTarget[stride + 1] = view.getFloat32(offset); + offset += 4; + morphTarget[stride + 2] = view.getFloat32(offset); + offset += 4; + } + const attribute = new BufferAttribute(morphTarget, 3); + attribute.name = "morph_" + i; + morphTargets.push(attribute); + } + return { + morphTargets, + clip + }; + } +}; + +// node_modules/three/examples/jsm/shaders/MMDToonShader.js +var lights_mmd_toon_pars_fragment = ( + /* glsl */ + ` +varying vec3 vViewPosition; + +struct BlinnPhongMaterial { + + vec3 diffuseColor; + vec3 specularColor; + float specularShininess; + float specularStrength; + +}; + +void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { + + vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; + + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + + reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; + +} + +void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { + + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + +} + +#define RE_Direct RE_Direct_BlinnPhong +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong +` +); +var mmd_toon_matcap_fragment = ( + /* glsl */ + ` +#ifdef USE_MATCAP + + vec3 viewDir = normalize( vViewPosition ); + vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); + vec3 y = cross( viewDir, x ); + vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks + vec4 matcapColor = texture2D( matcap, uv ); + + #ifdef MATCAP_BLENDING_MULTIPLY + + outgoingLight *= matcapColor.rgb; + + #elif defined( MATCAP_BLENDING_ADD ) + + outgoingLight += matcapColor.rgb; + + #endif + +#endif +` +); +var MMDToonShader = { + name: "MMDToonShader", + defines: { + TOON: true, + MATCAP: true, + MATCAP_BLENDING_ADD: true + }, + uniforms: UniformsUtils.merge([ + ShaderLib.toon.uniforms, + ShaderLib.phong.uniforms, + ShaderLib.matcap.uniforms + ]), + vertexShader: ShaderLib.phong.vertexShader.replace( + "#include ", + "" + ).replace( + "#include ", + "" + ), + fragmentShader: ShaderLib.phong.fragmentShader.replace( + "#include ", + ` + #ifdef USE_MATCAP + uniform sampler2D matcap; + #endif + + #include + ` + ).replace( + "#include ", + ` + #include + ` + ).replace( + "#include ", + "" + ).replace( + "#include ", + lights_mmd_toon_pars_fragment + ).replace( + "#include ", + ` + ${mmd_toon_matcap_fragment} + ` + ) +}; + +// node_modules/three/examples/jsm/loaders/MMDLoader.js +var MMDLoader = class extends Loader { + constructor(manager) { + super(manager); + this.loader = new FileLoader(this.manager); + this.parser = null; + this.meshBuilder = new MeshBuilder(this.manager); + this.animationBuilder = new AnimationBuilder(); + } + /** + * @param {string} animationPath + * @return {MMDLoader} + */ + setAnimationPath(animationPath) { + this.animationPath = animationPath; + return this; + } + // Load MMD assets as Three.js Object + /** + * Loads Model file (.pmd or .pmx) as a SkinnedMesh. + * + * @param {string} url - url to Model(.pmd or .pmx) file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + load(url, onLoad, onProgress, onError) { + const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin); + let resourcePath; + if (this.resourcePath !== "") { + resourcePath = this.resourcePath; + } else if (this.path !== "") { + resourcePath = this.path; + } else { + resourcePath = LoaderUtils.extractUrlBase(url); + } + const parser = this._getParser(); + const extractModelExtension = this._extractModelExtension; + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + const modelExtension = extractModelExtension(buffer); + if (modelExtension !== "pmd" && modelExtension !== "pmx") { + if (onError) onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + ".")); + return; + } + const data2 = modelExtension === "pmd" ? parser.parsePmd(buffer, true) : parser.parsePmx(buffer, true); + onLoad(builder.build(data2, resourcePath, onProgress, onError)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads Motion file(s) (.vmd) as a AnimationClip. + * If two or more files are specified, they'll be merged. + * + * @param {string|Array} url - url(s) to animation(.vmd) file(s) + * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadAnimation(url, object, onLoad, onProgress, onError) { + const builder = this.animationBuilder; + this.loadVMD(url, function(vmd) { + onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object)); + }, onProgress, onError); + } + /** + * Loads mode file and motion file(s) as an object containing + * a SkinnedMesh and a AnimationClip. + * Tracks of AnimationClip are fitting to the model. + * + * @param {string} modelUrl - url to Model(.pmd or .pmx) file + * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) { + const scope = this; + this.load(modelUrl, function(mesh) { + scope.loadAnimation(vmdUrl, mesh, function(animation) { + onLoad({ + mesh, + animation + }); + }, onProgress, onError); + }, onProgress, onError); + } + // Load MMD assets as Object data parsed by MMDParser + /** + * Loads .pmd file as an Object. + * + * @param {string} url - url to .pmd file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadPMD(url, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + onLoad(parser.parsePmd(buffer, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads .pmx file as an Object. + * + * @param {string} url - url to .pmx file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadPMX(url, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + onLoad(parser.parsePmx(buffer, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads .vmd file as an Object. If two or more files are specified + * they'll be merged. + * + * @param {string|Array} url - url(s) to .vmd file(s) + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadVMD(url, onLoad, onProgress, onError) { + const urls = Array.isArray(url) ? url : [url]; + const vmds = []; + const vmdNum = urls.length; + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials); + for (let i = 0, il = urls.length; i < il; i++) { + this.loader.load(urls[i], function(buffer) { + try { + vmds.push(parser.parseVmd(buffer, true)); + if (vmds.length === vmdNum) onLoad(parser.mergeVmds(vmds)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + } + /** + * Loads .vpd file as an Object. + * + * @param {string} url - url to .vpd file + * @param {boolean} isUnicode + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadVPD(url, isUnicode, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(text2) { + try { + onLoad(parser.parseVpd(text2, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + // private methods + _extractModelExtension(buffer) { + const decoder = new TextDecoder("utf-8"); + const bytes = new Uint8Array(buffer, 0, 3); + return decoder.decode(bytes).toLowerCase(); + } + _getParser() { + if (this.parser === null) { + this.parser = new MMDParser.Parser(); + } + return this.parser; + } +}; +var DEFAULT_TOON_TEXTURES = [ + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=" +]; +var NON_ALPHA_CHANNEL_FORMATS = [ + RGB_S3TC_DXT1_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_PVRTC_2BPPV1_Format, + RGB_ETC1_Format, + RGB_ETC2_Format +]; +var MeshBuilder = class { + constructor(manager) { + this.crossOrigin = "anonymous"; + this.geometryBuilder = new GeometryBuilder(); + this.materialBuilder = new MaterialBuilder(manager); + } + /** + * @param {string} crossOrigin + * @return {MeshBuilder} + */ + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + /** + * @param {Object} data - parsed PMD/PMX data + * @param {string} resourcePath + * @param {function} onProgress + * @param {function} onError + * @return {SkinnedMesh} + */ + build(data2, resourcePath, onProgress, onError) { + const geometry = this.geometryBuilder.build(data2); + const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data2, geometry, onProgress, onError); + const mesh = new SkinnedMesh(geometry, material); + const skeleton = new Skeleton(initBones(mesh)); + mesh.bind(skeleton); + return mesh; + } +}; +function initBones(mesh) { + const geometry = mesh.geometry; + const bones = []; + if (geometry && geometry.bones !== void 0) { + for (let i = 0, il = geometry.bones.length; i < il; i++) { + const gbone = geometry.bones[i]; + const bone = new Bone(); + bones.push(bone); + bone.name = gbone.name; + bone.position.fromArray(gbone.pos); + bone.quaternion.fromArray(gbone.rotq); + if (gbone.scl !== void 0) bone.scale.fromArray(gbone.scl); + } + for (let i = 0, il = geometry.bones.length; i < il; i++) { + const gbone = geometry.bones[i]; + if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) { + bones[gbone.parent].add(bones[i]); + } else { + mesh.add(bones[i]); + } + } + } + mesh.updateMatrixWorld(true); + return bones; +} +var GeometryBuilder = class { + /** + * @param {Object} data - parsed PMD/PMX data + * @return {BufferGeometry} + */ + build(data2) { + const positions = []; + const uvs = []; + const normals = []; + const indices = []; + const groups = []; + const bones = []; + const skinIndices = []; + const skinWeights = []; + const morphTargets = []; + const morphPositions = []; + const iks = []; + const grants = []; + const rigidBodies = []; + const constraints = []; + let offset = 0; + const boneTypeTable = {}; + for (let i = 0; i < data2.metadata.vertexCount; i++) { + const v = data2.vertices[i]; + for (let j = 0, jl = v.position.length; j < jl; j++) { + positions.push(v.position[j]); + } + for (let j = 0, jl = v.normal.length; j < jl; j++) { + normals.push(v.normal[j]); + } + for (let j = 0, jl = v.uv.length; j < jl; j++) { + uvs.push(v.uv[j]); + } + for (let j = 0; j < 4; j++) { + skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0); + } + for (let j = 0; j < 4; j++) { + skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0); + } + } + for (let i = 0; i < data2.metadata.faceCount; i++) { + const face = data2.faces[i]; + for (let j = 0, jl = face.indices.length; j < jl; j++) { + indices.push(face.indices[j]); + } + } + for (let i = 0; i < data2.metadata.materialCount; i++) { + const material = data2.materials[i]; + groups.push({ + offset: offset * 3, + count: material.faceCount * 3 + }); + offset += material.faceCount; + } + for (let i = 0; i < data2.metadata.rigidBodyCount; i++) { + const body = data2.rigidBodies[i]; + let value2 = boneTypeTable[body.boneIndex]; + value2 = value2 === void 0 ? body.type : Math.max(body.type, value2); + boneTypeTable[body.boneIndex] = value2; + } + for (let i = 0; i < data2.metadata.boneCount; i++) { + const boneData = data2.bones[i]; + const bone = { + index: i, + transformationClass: boneData.transformationClass, + parent: boneData.parentIndex, + name: boneData.name, + pos: boneData.position.slice(0, 3), + rotq: [0, 0, 0, 1], + scl: [1, 1, 1], + rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1 + }; + if (bone.parent !== -1) { + bone.pos[0] -= data2.bones[bone.parent].position[0]; + bone.pos[1] -= data2.bones[bone.parent].position[1]; + bone.pos[2] -= data2.bones[bone.parent].position[2]; + } + bones.push(bone); + } + if (data2.metadata.format === "pmd") { + for (let i = 0; i < data2.metadata.ikCount; i++) { + const ik = data2.iks[i]; + const param = { + target: ik.target, + effector: ik.effector, + iteration: ik.iteration, + maxAngle: ik.maxAngle * 4, + links: [] + }; + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = {}; + link.index = ik.links[j].index; + link.enabled = true; + if (data2.bones[link.index].name.indexOf("ひざ") >= 0) { + link.limitation = new Vector3(1, 0, 0); + } + param.links.push(link); + } + iks.push(param); + } + } else { + for (let i = 0; i < data2.metadata.boneCount; i++) { + const ik = data2.bones[i].ik; + if (ik === void 0) continue; + const param = { + target: i, + effector: ik.effector, + iteration: ik.iteration, + maxAngle: ik.maxAngle, + links: [] + }; + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = {}; + link.index = ik.links[j].index; + link.enabled = true; + if (ik.links[j].angleLimitation === 1) { + const rotationMin = ik.links[j].lowerLimitationAngle; + const rotationMax = ik.links[j].upperLimitationAngle; + const tmp1 = -rotationMax[0]; + const tmp2 = -rotationMax[1]; + rotationMax[0] = -rotationMin[0]; + rotationMax[1] = -rotationMin[1]; + rotationMin[0] = tmp1; + rotationMin[1] = tmp2; + link.rotationMin = new Vector3().fromArray(rotationMin); + link.rotationMax = new Vector3().fromArray(rotationMax); + } + param.links.push(link); + } + iks.push(param); + bones[i].ik = param; + } + } + if (data2.metadata.format === "pmx") { + let traverse = function(entry) { + if (entry.param) { + grants.push(entry.param); + bones[entry.param.index].grant = entry.param; + } + entry.visited = true; + for (let i = 0, il = entry.children.length; i < il; i++) { + const child = entry.children[i]; + if (!child.visited) traverse(child); + } + }; + const grantEntryMap = {}; + for (let i = 0; i < data2.metadata.boneCount; i++) { + const boneData = data2.bones[i]; + const grant = boneData.grant; + if (grant === void 0) continue; + const param = { + index: i, + parentIndex: grant.parentIndex, + ratio: grant.ratio, + isLocal: grant.isLocal, + affectRotation: grant.affectRotation, + affectPosition: grant.affectPosition, + transformationClass: boneData.transformationClass + }; + grantEntryMap[i] = { parent: null, children: [], param, visited: false }; + } + const rootEntry = { parent: null, children: [], param: null, visited: false }; + for (const boneIndex in grantEntryMap) { + const grantEntry = grantEntryMap[boneIndex]; + const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry; + grantEntry.parent = parentGrantEntry; + parentGrantEntry.children.push(grantEntry); + } + traverse(rootEntry); + } + function updateAttributes(attribute, morph, ratio) { + for (let i = 0; i < morph.elementCount; i++) { + const element = morph.elements[i]; + let index2; + if (data2.metadata.format === "pmd") { + index2 = data2.morphs[0].elements[element.index].index; + } else { + index2 = element.index; + } + attribute.array[index2 * 3 + 0] += element.position[0] * ratio; + attribute.array[index2 * 3 + 1] += element.position[1] * ratio; + attribute.array[index2 * 3 + 2] += element.position[2] * ratio; + } + } + for (let i = 0; i < data2.metadata.morphCount; i++) { + const morph = data2.morphs[i]; + const params = { name: morph.name }; + const attribute = new Float32BufferAttribute(data2.metadata.vertexCount * 3, 3); + attribute.name = morph.name; + for (let j = 0; j < data2.metadata.vertexCount * 3; j++) { + attribute.array[j] = positions[j]; + } + if (data2.metadata.format === "pmd") { + if (i !== 0) { + updateAttributes(attribute, morph, 1); + } + } else { + if (morph.type === 0) { + for (let j = 0; j < morph.elementCount; j++) { + const morph2 = data2.morphs[morph.elements[j].index]; + const ratio = morph.elements[j].ratio; + if (morph2.type === 1) { + updateAttributes(attribute, morph2, ratio); + } else { + } + } + } else if (morph.type === 1) { + updateAttributes(attribute, morph, 1); + } else if (morph.type === 2) { + } else if (morph.type === 3) { + } else if (morph.type === 4) { + } else if (morph.type === 5) { + } else if (morph.type === 6) { + } else if (morph.type === 7) { + } else if (morph.type === 8) { + } + } + morphTargets.push(params); + morphPositions.push(attribute); + } + for (let i = 0; i < data2.metadata.rigidBodyCount; i++) { + const rigidBody = data2.rigidBodies[i]; + const params = {}; + for (const key2 in rigidBody) { + params[key2] = rigidBody[key2]; + } + if (data2.metadata.format === "pmx") { + if (params.boneIndex !== -1) { + const bone = data2.bones[params.boneIndex]; + params.position[0] -= bone.position[0]; + params.position[1] -= bone.position[1]; + params.position[2] -= bone.position[2]; + } + } + rigidBodies.push(params); + } + for (let i = 0; i < data2.metadata.constraintCount; i++) { + const constraint = data2.constraints[i]; + const params = {}; + for (const key2 in constraint) { + params[key2] = constraint[key2]; + } + const bodyA = rigidBodies[params.rigidBodyIndex1]; + const bodyB = rigidBodies[params.rigidBodyIndex2]; + if (bodyA.type !== 0 && bodyB.type === 2) { + if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data2.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) { + bodyB.type = 1; + } + } + constraints.push(params); + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + geometry.setAttribute("skinIndex", new Uint16BufferAttribute(skinIndices, 4)); + geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeights, 4)); + geometry.setIndex(indices); + for (let i = 0, il = groups.length; i < il; i++) { + geometry.addGroup(groups[i].offset, groups[i].count, i); + } + geometry.bones = bones; + geometry.morphTargets = morphTargets; + geometry.morphAttributes.position = morphPositions; + geometry.morphTargetsRelative = false; + geometry.userData.MMD = { + bones, + iks, + grants, + rigidBodies, + constraints, + format: data2.metadata.format + }; + geometry.computeBoundingSphere(); + return geometry; + } +}; +var MaterialBuilder = class { + constructor(manager) { + this.manager = manager; + this.textureLoader = new TextureLoader(this.manager); + this.tgaLoader = null; + this.crossOrigin = "anonymous"; + this.resourcePath = void 0; + } + /** + * @param {string} crossOrigin + * @return {MaterialBuilder} + */ + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + /** + * @param {string} resourcePath + * @return {MaterialBuilder} + */ + setResourcePath(resourcePath) { + this.resourcePath = resourcePath; + return this; + } + /** + * @param {Object} data - parsed PMD/PMX data + * @param {BufferGeometry} geometry - some properties are dependend on geometry + * @param {function} onProgress + * @param {function} onError + * @return {Array} + */ + build(data2, geometry) { + const materials = []; + const textures = {}; + this.textureLoader.setCrossOrigin(this.crossOrigin); + for (let i = 0; i < data2.metadata.materialCount; i++) { + const material = data2.materials[i]; + const params = { userData: { MMD: {} } }; + if (material.name !== void 0) params.name = material.name; + params.diffuse = new Color().setRGB( + material.diffuse[0], + material.diffuse[1], + material.diffuse[2], + SRGBColorSpace + ); + params.opacity = material.diffuse[3]; + params.specular = new Color().setRGB(...material.specular, SRGBColorSpace); + params.shininess = material.shininess; + params.emissive = new Color().setRGB(...material.ambient, SRGBColorSpace); + params.transparent = params.opacity !== 1; + params.fog = true; + params.blending = CustomBlending; + params.blendSrc = SrcAlphaFactor; + params.blendDst = OneMinusSrcAlphaFactor; + params.blendSrcAlpha = SrcAlphaFactor; + params.blendDstAlpha = DstAlphaFactor; + if (data2.metadata.format === "pmx" && (material.flag & 1) === 1) { + params.side = DoubleSide; + } else { + params.side = params.opacity === 1 ? FrontSide : DoubleSide; + } + if (data2.metadata.format === "pmd") { + if (material.fileName) { + const fileName = material.fileName; + const fileNames = fileName.split("*"); + params.map = this._loadTexture(fileNames[0], textures); + if (fileNames.length > 1) { + const extension = fileNames[1].slice(-4).toLowerCase(); + params.matcap = this._loadTexture( + fileNames[1], + textures + ); + params.matcapCombine = extension === ".sph" ? MultiplyOperation : AddOperation; + } + } + const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data2.toonTextures[material.toonIndex].fileName; + params.gradientMap = this._loadTexture( + toonFileName, + textures, + { + isToonTexture: true, + isDefaultToonTexture: this._isDefaultToonTexture(toonFileName) + } + ); + params.userData.outlineParameters = { + thickness: material.edgeFlag === 1 ? 3e-3 : 0, + color: [0, 0, 0], + alpha: 1, + visible: material.edgeFlag === 1 + }; + } else { + if (material.textureIndex !== -1) { + params.map = this._loadTexture(data2.textures[material.textureIndex], textures); + params.userData.MMD.mapFileName = data2.textures[material.textureIndex]; + } + if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) { + params.matcap = this._loadTexture( + data2.textures[material.envTextureIndex], + textures + ); + params.userData.MMD.matcapFileName = data2.textures[material.envTextureIndex]; + params.matcapCombine = material.envFlag === 1 ? MultiplyOperation : AddOperation; + } + let toonFileName, isDefaultToon; + if (material.toonIndex === -1 || material.toonFlag !== 0) { + toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp"; + isDefaultToon = true; + } else { + toonFileName = data2.textures[material.toonIndex]; + isDefaultToon = false; + } + params.gradientMap = this._loadTexture( + toonFileName, + textures, + { + isToonTexture: true, + isDefaultToonTexture: isDefaultToon + } + ); + params.userData.outlineParameters = { + thickness: material.edgeSize / 300, + // TODO: better calculation? + color: material.edgeColor.slice(0, 3), + alpha: material.edgeColor[3], + visible: (material.flag & 16) !== 0 && material.edgeSize > 0 + }; + } + if (params.map !== void 0) { + if (!params.transparent) { + this._checkImageTransparency(params.map, geometry, i); + } + params.emissive.multiplyScalar(0.2); + } + materials.push(new MMDToonMaterial(params)); + } + if (data2.metadata.format === "pmx") { + let checkAlphaMorph = function(elements, materials2) { + for (let i = 0, il = elements.length; i < il; i++) { + const element = elements[i]; + if (element.index === -1) continue; + const material = materials2[element.index]; + if (material.opacity !== element.diffuse[3]) { + material.transparent = true; + } + } + }; + for (let i = 0, il = data2.morphs.length; i < il; i++) { + const morph = data2.morphs[i]; + const elements = morph.elements; + if (morph.type === 0) { + for (let j = 0, jl = elements.length; j < jl; j++) { + const morph2 = data2.morphs[elements[j].index]; + if (morph2.type !== 8) continue; + checkAlphaMorph(morph2.elements, materials); + } + } else if (morph.type === 8) { + checkAlphaMorph(elements, materials); + } + } + } + return materials; + } + // private methods + _getTGALoader() { + if (this.tgaLoader === null) { + if (TGALoader === void 0) { + throw new Error("THREE.MMDLoader: Import TGALoader"); + } + this.tgaLoader = new TGALoader(this.manager); + } + return this.tgaLoader; + } + _isDefaultToonTexture(name2) { + if (name2.length !== 10) return false; + return /toon(10|0[0-9])\.bmp/.test(name2); + } + _loadTexture(filePath, textures, params, onProgress, onError) { + params = params || {}; + const scope = this; + let fullPath; + if (params.isDefaultToonTexture === true) { + let index2; + try { + index2 = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]); + } catch (e) { + console.warn("THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."); + index2 = 0; + } + fullPath = DEFAULT_TOON_TEXTURES[index2]; + } else { + fullPath = this.resourcePath + filePath; + } + if (textures[fullPath] !== void 0) return textures[fullPath]; + let loader = this.manager.getHandler(fullPath); + if (loader === null) { + loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader; + } + const texture = loader.load(fullPath, function(t3) { + if (params.isToonTexture === true) { + t3.image = scope._getRotatedImage(t3.image); + t3.magFilter = NearestFilter; + t3.minFilter = NearestFilter; + } + t3.flipY = false; + t3.wrapS = RepeatWrapping; + t3.wrapT = RepeatWrapping; + t3.colorSpace = SRGBColorSpace; + for (let i = 0; i < texture.readyCallbacks.length; i++) { + texture.readyCallbacks[i](texture); + } + delete texture.readyCallbacks; + }, onProgress, onError); + texture.readyCallbacks = []; + textures[fullPath] = texture; + return texture; + } + _getRotatedImage(image) { + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + const width2 = image.width; + const height2 = image.height; + canvas.width = width2; + canvas.height = height2; + context.clearRect(0, 0, width2, height2); + context.translate(width2 / 2, height2 / 2); + context.rotate(0.5 * Math.PI); + context.translate(-width2 / 2, -height2 / 2); + context.drawImage(image, 0, 0); + return context.getImageData(0, 0, width2, height2); + } + // Check if the partial image area used by the texture is transparent. + _checkImageTransparency(map2, geometry, groupIndex) { + map2.readyCallbacks.push(function(texture) { + function createImageData(image) { + const canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0); + return context.getImageData(0, 0, canvas.width, canvas.height); + } + function detectImageTransparency(image, uvs, indices) { + const width2 = image.width; + const height2 = image.height; + const data2 = image.data; + const threshold = 253; + if (data2.length / (width2 * height2) !== 4) return false; + for (let i = 0; i < indices.length; i += 3) { + const centerUV = { x: 0, y: 0 }; + for (let j = 0; j < 3; j++) { + const index2 = indices[i * 3 + j]; + const uv = { x: uvs[index2 * 2 + 0], y: uvs[index2 * 2 + 1] }; + if (getAlphaByUv(image, uv) < threshold) return true; + centerUV.x += uv.x; + centerUV.y += uv.y; + } + centerUV.x /= 3; + centerUV.y /= 3; + if (getAlphaByUv(image, centerUV) < threshold) return true; + } + return false; + } + function getAlphaByUv(image, uv) { + const width2 = image.width; + const height2 = image.height; + let x2 = Math.round(uv.x * width2) % width2; + let y2 = Math.round(uv.y * height2) % height2; + if (x2 < 0) x2 += width2; + if (y2 < 0) y2 += height2; + const index2 = y2 * width2 + x2; + return image.data[index2 * 4 + 3]; + } + if (texture.isCompressedTexture === true) { + if (NON_ALPHA_CHANNEL_FORMATS.includes(texture.format)) { + map2.transparent = false; + } else { + map2.transparent = true; + } + return; + } + const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image); + const group = geometry.groups[groupIndex]; + if (detectImageTransparency( + imageData, + geometry.attributes.uv.array, + geometry.index.array.slice(group.start, group.start + group.count) + )) { + map2.transparent = true; + } + }); + } +}; +var AnimationBuilder = class { + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + build(vmd, mesh) { + const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks; + const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks; + for (let i = 0, il = tracks2.length; i < il; i++) { + tracks.push(tracks2[i]); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + buildSkeletalAnimation(vmd, mesh) { + function pushInterpolation(array, interpolation, index2) { + array.push(interpolation[index2 + 0] / 127); + array.push(interpolation[index2 + 8] / 127); + array.push(interpolation[index2 + 4] / 127); + array.push(interpolation[index2 + 12] / 127); + } + const tracks = []; + const motions = {}; + const bones = mesh.skeleton.bones; + const boneNameDictionary = {}; + for (let i = 0, il = bones.length; i < il; i++) { + boneNameDictionary[bones[i].name] = true; + } + for (let i = 0; i < vmd.metadata.motionCount; i++) { + const motion = vmd.motions[i]; + const boneName = motion.boneName; + if (boneNameDictionary[boneName] === void 0) continue; + motions[boneName] = motions[boneName] || []; + motions[boneName].push(motion); + } + for (const key2 in motions) { + const array = motions[key2]; + array.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const positions = []; + const rotations = []; + const pInterpolations = []; + const rInterpolations = []; + const basePosition = mesh.skeleton.getBoneByName(key2).position.toArray(); + for (let i = 0, il = array.length; i < il; i++) { + const time2 = array[i].frameNum / 30; + const position2 = array[i].position; + const rotation2 = array[i].rotation; + const interpolation = array[i].interpolation; + times.push(time2); + for (let j = 0; j < 3; j++) positions.push(basePosition[j] + position2[j]); + for (let j = 0; j < 4; j++) rotations.push(rotation2[j]); + for (let j = 0; j < 3; j++) pushInterpolation(pInterpolations, interpolation, j); + pushInterpolation(rInterpolations, interpolation, 3); + } + const targetName = ".bones[" + key2 + "]"; + tracks.push(this._createTrack(targetName + ".position", VectorKeyframeTrack, times, positions, pInterpolations)); + tracks.push(this._createTrack(targetName + ".quaternion", QuaternionKeyframeTrack, times, rotations, rInterpolations)); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + buildMorphAnimation(vmd, mesh) { + const tracks = []; + const morphs = {}; + const morphTargetDictionary = mesh.morphTargetDictionary; + for (let i = 0; i < vmd.metadata.morphCount; i++) { + const morph = vmd.morphs[i]; + const morphName = morph.morphName; + if (morphTargetDictionary[morphName] === void 0) continue; + morphs[morphName] = morphs[morphName] || []; + morphs[morphName].push(morph); + } + for (const key2 in morphs) { + const array = morphs[key2]; + array.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const values2 = []; + for (let i = 0, il = array.length; i < il; i++) { + times.push(array[i].frameNum / 30); + values2.push(array[i].weight); + } + tracks.push(new NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key2] + "]", times, values2)); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @return {AnimationClip} + */ + buildCameraAnimation(vmd) { + function pushVector3(array, vec) { + array.push(vec.x); + array.push(vec.y); + array.push(vec.z); + } + function pushQuaternion(array, q2) { + array.push(q2.x); + array.push(q2.y); + array.push(q2.z); + array.push(q2.w); + } + function pushInterpolation(array, interpolation, index2) { + array.push(interpolation[index2 * 4 + 0] / 127); + array.push(interpolation[index2 * 4 + 1] / 127); + array.push(interpolation[index2 * 4 + 2] / 127); + array.push(interpolation[index2 * 4 + 3] / 127); + } + const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice(); + cameras.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const centers = []; + const quaternions = []; + const positions = []; + const fovs = []; + const cInterpolations = []; + const qInterpolations = []; + const pInterpolations = []; + const fInterpolations = []; + const quaternion = new Quaternion(); + const euler = new Euler(); + const position2 = new Vector3(); + const center = new Vector3(); + for (let i = 0, il = cameras.length; i < il; i++) { + const motion = cameras[i]; + const time2 = motion.frameNum / 30; + const pos = motion.position; + const rot = motion.rotation; + const distance = motion.distance; + const fov = motion.fov; + const interpolation = motion.interpolation; + times.push(time2); + position2.set(0, 0, -distance); + center.set(pos[0], pos[1], pos[2]); + euler.set(-rot[0], -rot[1], -rot[2]); + quaternion.setFromEuler(euler); + position2.add(center); + position2.applyQuaternion(quaternion); + pushVector3(centers, center); + pushQuaternion(quaternions, quaternion); + pushVector3(positions, position2); + fovs.push(fov); + for (let j = 0; j < 3; j++) { + pushInterpolation(cInterpolations, interpolation, j); + } + pushInterpolation(qInterpolations, interpolation, 3); + for (let j = 0; j < 3; j++) { + pushInterpolation(pInterpolations, interpolation, 4); + } + pushInterpolation(fInterpolations, interpolation, 5); + } + const tracks = []; + tracks.push(this._createTrack("target.position", VectorKeyframeTrack, times, centers, cInterpolations)); + tracks.push(this._createTrack(".quaternion", QuaternionKeyframeTrack, times, quaternions, qInterpolations)); + tracks.push(this._createTrack(".position", VectorKeyframeTrack, times, positions, pInterpolations)); + tracks.push(this._createTrack(".fov", NumberKeyframeTrack, times, fovs, fInterpolations)); + return new AnimationClip("", -1, tracks); + } + // private method + _createTrack(node, typedKeyframeTrack, times, values2, interpolations) { + if (times.length > 2) { + times = times.slice(); + values2 = values2.slice(); + interpolations = interpolations.slice(); + const stride = values2.length / times.length; + const interpolateStride = interpolations.length / times.length; + let index2 = 1; + for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) { + for (let i = 0; i < stride; i++) { + if (values2[index2 * stride + i] !== values2[(index2 - 1) * stride + i] || values2[index2 * stride + i] !== values2[aheadIndex * stride + i]) { + index2++; + break; + } + } + if (aheadIndex > index2) { + times[index2] = times[aheadIndex]; + for (let i = 0; i < stride; i++) { + values2[index2 * stride + i] = values2[aheadIndex * stride + i]; + } + for (let i = 0; i < interpolateStride; i++) { + interpolations[index2 * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i]; + } + } + } + times.length = index2 + 1; + values2.length = (index2 + 1) * stride; + interpolations.length = (index2 + 1) * interpolateStride; + } + const track = new typedKeyframeTrack(node, times, values2); + track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) { + return new CubicBezierInterpolation(this.times, this.values, this.getValueSize(), result, new Float32Array(interpolations)); + }; + return track; + } +}; +var CubicBezierInterpolation = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + this.interpolationParams = params; + } + interpolate_(i1, t0, t3, t1) { + const result = this.resultBuffer; + const values2 = this.sampleValues; + const stride = this.valueSize; + const params = this.interpolationParams; + const offset1 = i1 * stride; + const offset0 = offset1 - stride; + const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t3 - t0) / (t1 - t0); + if (stride === 4) { + const x1 = params[i1 * 4 + 0]; + const x2 = params[i1 * 4 + 1]; + const y1 = params[i1 * 4 + 2]; + const y2 = params[i1 * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + Quaternion.slerpFlat(result, 0, values2, offset0, values2, offset1, ratio); + } else if (stride === 3) { + for (let i = 0; i !== stride; ++i) { + const x1 = params[i1 * 12 + i * 4 + 0]; + const x2 = params[i1 * 12 + i * 4 + 1]; + const y1 = params[i1 * 12 + i * 4 + 2]; + const y2 = params[i1 * 12 + i * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + result[i] = values2[offset0 + i] * (1 - ratio) + values2[offset1 + i] * ratio; + } + } else { + const x1 = params[i1 * 4 + 0]; + const x2 = params[i1 * 4 + 1]; + const y1 = params[i1 * 4 + 2]; + const y2 = params[i1 * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + result[0] = values2[offset0] * (1 - ratio) + values2[offset1] * ratio; + } + return result; + } + _calculate(x1, x2, y1, y2, x3) { + let c2 = 0.5; + let t3 = c2; + let s = 1 - t3; + const loop = 15; + const eps = 1e-5; + const math = Math; + let sst3, stt3, ttt; + for (let i = 0; i < loop; i++) { + sst3 = 3 * s * s * t3; + stt3 = 3 * s * t3 * t3; + ttt = t3 * t3 * t3; + const ft2 = sst3 * x1 + stt3 * x2 + ttt - x3; + if (math.abs(ft2) < eps) break; + c2 /= 2; + t3 += ft2 < 0 ? c2 : -c2; + s = 1 - t3; + } + return sst3 * y1 + stt3 * y2 + ttt; + } +}; +var MMDToonMaterial = class extends ShaderMaterial { + constructor(parameters) { + super(); + this.isMMDToonMaterial = true; + this.type = "MMDToonMaterial"; + this._matcapCombine = AddOperation; + this.emissiveIntensity = 1; + this.normalMapType = TangentSpaceNormalMap; + this.combine = MultiplyOperation; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.lights = true; + this.vertexShader = MMDToonShader.vertexShader; + this.fragmentShader = MMDToonShader.fragmentShader; + this.defines = Object.assign({}, MMDToonShader.defines); + Object.defineProperty(this, "matcapCombine", { + get: function() { + return this._matcapCombine; + }, + set: function(value2) { + this._matcapCombine = value2; + switch (value2) { + case MultiplyOperation: + this.defines.MATCAP_BLENDING_MULTIPLY = true; + delete this.defines.MATCAP_BLENDING_ADD; + break; + default: + case AddOperation: + this.defines.MATCAP_BLENDING_ADD = true; + delete this.defines.MATCAP_BLENDING_MULTIPLY; + break; + } + } + }); + this.uniforms = UniformsUtils.clone(MMDToonShader.uniforms); + const exposePropertyNames = [ + "specular", + "opacity", + "diffuse", + "map", + "matcap", + "gradientMap", + "lightMap", + "lightMapIntensity", + "aoMap", + "aoMapIntensity", + "emissive", + "emissiveMap", + "bumpMap", + "bumpScale", + "normalMap", + "normalScale", + "displacemantBias", + "displacemantMap", + "displacemantScale", + "specularMap", + "alphaMap", + "reflectivity", + "refractionRatio" + ]; + for (const propertyName of exposePropertyNames) { + Object.defineProperty(this, propertyName, { + get: function() { + return this.uniforms[propertyName].value; + }, + set: function(value2) { + this.uniforms[propertyName].value = value2; + } + }); + } + this._shininess = 30; + Object.defineProperty(this, "shininess", { + get: function() { + return this._shininess; + }, + set: function(value2) { + this._shininess = value2; + this.uniforms.shininess.value = Math.max(this._shininess, 1e-4); + } + }); + Object.defineProperty( + this, + "color", + Object.getOwnPropertyDescriptor(this, "diffuse") + ); + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.matcapCombine = source.matcapCombine; + this.emissiveIntensity = source.emissiveIntensity; + this.normalMapType = source.normalMapType; + this.combine = source.combine; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + return this; + } +}; + +// node_modules/three/examples/jsm/loaders/MTLLoader.js +var MTLLoader = class extends Loader { + constructor(manager) { + super(manager); + } + /** + * Loads and parses a MTL asset from a URL. + * + * @param {String} url - URL to the MTL file. + * @param {Function} [onLoad] - Callback invoked with the loaded object. + * @param {Function} [onProgress] - Callback for download progress. + * @param {Function} [onError] - Callback for download errors. + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to load. + */ + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterialOptions(value2) { + this.materialOptions = value2; + return this; + } + /** + * Parses a MTL file. + * + * @param {String} text - Content of MTL file + * @return {MaterialCreator} + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to parse. + */ + parse(text2, path) { + const lines = text2.split("\n"); + let info = {}; + const delimiter_pattern = /\s+/; + const materialsInfo = {}; + for (let i = 0; i < lines.length; i++) { + let line2 = lines[i]; + line2 = line2.trim(); + if (line2.length === 0 || line2.charAt(0) === "#") { + continue; + } + const pos = line2.indexOf(" "); + let key2 = pos >= 0 ? line2.substring(0, pos) : line2; + key2 = key2.toLowerCase(); + let value2 = pos >= 0 ? line2.substring(pos + 1) : ""; + value2 = value2.trim(); + if (key2 === "newmtl") { + info = { name: value2 }; + materialsInfo[value2] = info; + } else { + if (key2 === "ka" || key2 === "kd" || key2 === "ks" || key2 === "ke") { + const ss = value2.split(delimiter_pattern, 3); + info[key2] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])]; + } else { + info[key2] = value2; + } + } + } + const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions); + materialCreator.setCrossOrigin(this.crossOrigin); + materialCreator.setManager(this.manager); + materialCreator.setMaterials(materialsInfo); + return materialCreator; + } +}; +var MaterialCreator = class { + constructor(baseUrl = "", options = {}) { + this.baseUrl = baseUrl; + this.options = options; + this.materialsInfo = {}; + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + this.crossOrigin = "anonymous"; + this.side = this.options.side !== void 0 ? this.options.side : FrontSide; + this.wrap = this.options.wrap !== void 0 ? this.options.wrap : RepeatWrapping; + } + setCrossOrigin(value2) { + this.crossOrigin = value2; + return this; + } + setManager(value2) { + this.manager = value2; + } + setMaterials(materialsInfo) { + this.materialsInfo = this.convert(materialsInfo); + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + } + convert(materialsInfo) { + if (!this.options) return materialsInfo; + const converted = {}; + for (const mn in materialsInfo) { + const mat = materialsInfo[mn]; + const covmat = {}; + converted[mn] = covmat; + for (const prop in mat) { + let save = true; + let value2 = mat[prop]; + const lprop = prop.toLowerCase(); + switch (lprop) { + case "kd": + case "ka": + case "ks": + if (this.options && this.options.normalizeRGB) { + value2 = [value2[0] / 255, value2[1] / 255, value2[2] / 255]; + } + if (this.options && this.options.ignoreZeroRGBs) { + if (value2[0] === 0 && value2[1] === 0 && value2[2] === 0) { + save = false; + } + } + break; + default: + break; + } + if (save) { + covmat[lprop] = value2; + } + } + } + return converted; + } + preload() { + for (const mn in this.materialsInfo) { + this.create(mn); + } + } + getIndex(materialName) { + return this.nameLookup[materialName]; + } + getAsArray() { + let index2 = 0; + for (const mn in this.materialsInfo) { + this.materialsArray[index2] = this.create(mn); + this.nameLookup[mn] = index2; + index2++; + } + return this.materialsArray; + } + create(materialName) { + if (this.materials[materialName] === void 0) { + this.createMaterial_(materialName); + } + return this.materials[materialName]; + } + createMaterial_(materialName) { + const scope = this; + const mat = this.materialsInfo[materialName]; + const params = { + name: materialName, + side: this.side + }; + function resolveURL(baseUrl, url) { + if (typeof url !== "string" || url === "") + return ""; + if (/^https?:\/\//i.test(url)) return url; + return baseUrl + url; + } + function setMapForType(mapType, value2) { + if (params[mapType]) return; + const texParams = scope.getTextureParams(value2, params); + const map2 = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url)); + map2.repeat.copy(texParams.scale); + map2.offset.copy(texParams.offset); + map2.wrapS = scope.wrap; + map2.wrapT = scope.wrap; + if (mapType === "map" || mapType === "emissiveMap") { + map2.colorSpace = SRGBColorSpace; + } + params[mapType] = map2; + } + for (const prop in mat) { + const value2 = mat[prop]; + let n2; + if (value2 === "") continue; + switch (prop.toLowerCase()) { + case "kd": + params.color = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "ks": + params.specular = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "ke": + params.emissive = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "map_kd": + setMapForType("map", value2); + break; + case "map_ks": + setMapForType("specularMap", value2); + break; + case "map_ke": + setMapForType("emissiveMap", value2); + break; + case "norm": + setMapForType("normalMap", value2); + break; + case "map_bump": + case "bump": + setMapForType("bumpMap", value2); + break; + case "map_d": + setMapForType("alphaMap", value2); + params.transparent = true; + break; + case "ns": + params.shininess = parseFloat(value2); + break; + case "d": + n2 = parseFloat(value2); + if (n2 < 1) { + params.opacity = n2; + params.transparent = true; + } + break; + case "tr": + n2 = parseFloat(value2); + if (this.options && this.options.invertTrProperty) n2 = 1 - n2; + if (n2 > 0) { + params.opacity = 1 - n2; + params.transparent = true; + } + break; + default: + break; + } + } + this.materials[materialName] = new MeshPhongMaterial(params); + return this.materials[materialName]; + } + getTextureParams(value2, matParams) { + const texParams = { + scale: new Vector2(1, 1), + offset: new Vector2(0, 0) + }; + const items = value2.split(/\s+/); + let pos; + pos = items.indexOf("-bm"); + if (pos >= 0) { + matParams.bumpScale = parseFloat(items[pos + 1]); + items.splice(pos, 2); + } + pos = items.indexOf("-s"); + if (pos >= 0) { + texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + pos = items.indexOf("-o"); + if (pos >= 0) { + texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + texParams.url = items.join(" ").trim(); + return texParams; + } + loadTexture(url, mapping, onLoad, onProgress, onError) { + const manager = this.manager !== void 0 ? this.manager : DefaultLoadingManager; + let loader = manager.getHandler(url); + if (loader === null) { + loader = new TextureLoader(manager); + } + if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin); + const texture = loader.load(url, onLoad, onProgress, onError); + if (mapping !== void 0) texture.mapping = mapping; + return texture; + } +}; + +// node_modules/three/examples/jsm/misc/VolumeSlice.js +var VolumeSlice = class { + constructor(volume, index2, axis) { + const slice2 = this; + this.volume = volume; + index2 = index2 || 0; + Object.defineProperty(this, "index", { + get: function() { + return index2; + }, + set: function(value2) { + index2 = value2; + slice2.geometryNeedsUpdate = true; + return index2; + } + }); + this.axis = axis || "z"; + this.canvas = document.createElement("canvas"); + this.canvasBuffer = document.createElement("canvas"); + this.updateGeometry(); + const canvasMap = new Texture(this.canvas); + canvasMap.minFilter = LinearFilter; + canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping; + canvasMap.colorSpace = SRGBColorSpace; + const material = new MeshBasicMaterial({ map: canvasMap, side: DoubleSide, transparent: true }); + this.mesh = new Mesh(this.geometry, material); + this.mesh.matrixAutoUpdate = false; + this.geometryNeedsUpdate = true; + this.repaint(); + } + /** + * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true + * @memberof VolumeSlice + */ + repaint() { + if (this.geometryNeedsUpdate) { + this.updateGeometry(); + } + const iLength = this.iLength, jLength = this.jLength, sliceAccess = this.sliceAccess, volume = this.volume, canvas = this.canvasBuffer, ctx = this.ctxBuffer; + const imgData = ctx.getImageData(0, 0, iLength, jLength); + const data2 = imgData.data; + const volumeData = volume.data; + const upperThreshold = volume.upperThreshold; + const lowerThreshold = volume.lowerThreshold; + const windowLow = volume.windowLow; + const windowHigh = volume.windowHigh; + let pixelCount = 0; + if (volume.dataType === "label") { + for (let j = 0; j < jLength; j++) { + for (let i = 0; i < iLength; i++) { + let label = volumeData[sliceAccess(i, j)]; + label = label >= this.colorMap.length ? label % this.colorMap.length + 1 : label; + const color = this.colorMap[label]; + data2[4 * pixelCount] = color >> 24 & 255; + data2[4 * pixelCount + 1] = color >> 16 & 255; + data2[4 * pixelCount + 2] = color >> 8 & 255; + data2[4 * pixelCount + 3] = color & 255; + pixelCount++; + } + } + } else { + for (let j = 0; j < jLength; j++) { + for (let i = 0; i < iLength; i++) { + let value2 = volumeData[sliceAccess(i, j)]; + let alpha = 255; + alpha = upperThreshold >= value2 ? lowerThreshold <= value2 ? alpha : 0 : 0; + value2 = Math.floor(255 * (value2 - windowLow) / (windowHigh - windowLow)); + value2 = value2 > 255 ? 255 : value2 < 0 ? 0 : value2 | 0; + data2[4 * pixelCount] = value2; + data2[4 * pixelCount + 1] = value2; + data2[4 * pixelCount + 2] = value2; + data2[4 * pixelCount + 3] = alpha; + pixelCount++; + } + } + } + ctx.putImageData(imgData, 0, 0); + this.ctx.drawImage(canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height); + this.mesh.material.map.needsUpdate = true; + } + /** + * @member {Function} Refresh the geometry according to axis and index + * @see Volume.extractPerpendicularPlane + * @memberof VolumeSlice + */ + updateGeometry() { + const extracted = this.volume.extractPerpendicularPlane(this.axis, this.index); + this.sliceAccess = extracted.sliceAccess; + this.jLength = extracted.jLength; + this.iLength = extracted.iLength; + this.matrix = extracted.matrix; + this.canvas.width = extracted.planeWidth; + this.canvas.height = extracted.planeHeight; + this.canvasBuffer.width = this.iLength; + this.canvasBuffer.height = this.jLength; + this.ctx = this.canvas.getContext("2d"); + this.ctxBuffer = this.canvasBuffer.getContext("2d"); + if (this.geometry) this.geometry.dispose(); + this.geometry = new PlaneGeometry(extracted.planeWidth, extracted.planeHeight); + if (this.mesh) { + this.mesh.geometry = this.geometry; + this.mesh.matrix.identity(); + this.mesh.applyMatrix4(this.matrix); + } + this.geometryNeedsUpdate = false; + } +}; + +// node_modules/three/examples/jsm/misc/Volume.js +var Volume = class { + constructor(xLength, yLength, zLength, type, arrayBuffer) { + if (xLength !== void 0) { + this.xLength = Number(xLength) || 1; + this.yLength = Number(yLength) || 1; + this.zLength = Number(zLength) || 1; + this.axisOrder = ["x", "y", "z"]; + switch (type) { + case "Uint8": + case "uint8": + case "uchar": + case "unsigned char": + case "uint8_t": + this.data = new Uint8Array(arrayBuffer); + break; + case "Int8": + case "int8": + case "signed char": + case "int8_t": + this.data = new Int8Array(arrayBuffer); + break; + case "Int16": + case "int16": + case "short": + case "short int": + case "signed short": + case "signed short int": + case "int16_t": + this.data = new Int16Array(arrayBuffer); + break; + case "Uint16": + case "uint16": + case "ushort": + case "unsigned short": + case "unsigned short int": + case "uint16_t": + this.data = new Uint16Array(arrayBuffer); + break; + case "Int32": + case "int32": + case "int": + case "signed int": + case "int32_t": + this.data = new Int32Array(arrayBuffer); + break; + case "Uint32": + case "uint32": + case "uint": + case "unsigned int": + case "uint32_t": + this.data = new Uint32Array(arrayBuffer); + break; + case "longlong": + case "long long": + case "long long int": + case "signed long long": + case "signed long long int": + case "int64": + case "int64_t": + case "ulonglong": + case "unsigned long long": + case "unsigned long long int": + case "uint64": + case "uint64_t": + throw new Error("Error in Volume constructor : this type is not supported in JavaScript"); + break; + case "Float32": + case "float32": + case "float": + this.data = new Float32Array(arrayBuffer); + break; + case "Float64": + case "float64": + case "double": + this.data = new Float64Array(arrayBuffer); + break; + default: + this.data = new Uint8Array(arrayBuffer); + } + if (this.data.length !== this.xLength * this.yLength * this.zLength) { + throw new Error("Error in Volume constructor, lengths are not matching arrayBuffer size"); + } + } + this.spacing = [1, 1, 1]; + this.offset = [0, 0, 0]; + this.matrix = new Matrix3(); + this.matrix.identity(); + let lowerThreshold = -Infinity; + Object.defineProperty(this, "lowerThreshold", { + get: function() { + return lowerThreshold; + }, + set: function(value2) { + lowerThreshold = value2; + this.sliceList.forEach(function(slice2) { + slice2.geometryNeedsUpdate = true; + }); + } + }); + let upperThreshold = Infinity; + Object.defineProperty(this, "upperThreshold", { + get: function() { + return upperThreshold; + }, + set: function(value2) { + upperThreshold = value2; + this.sliceList.forEach(function(slice2) { + slice2.geometryNeedsUpdate = true; + }); + } + }); + this.sliceList = []; + this.segmentation = false; + } + /** + * @member {Function} getData Shortcut for data[access(i,j,k)] + * @memberof Volume + * @param {number} i First coordinate + * @param {number} j Second coordinate + * @param {number} k Third coordinate + * @returns {number} value in the data array + */ + getData(i, j, k2) { + return this.data[k2 * this.xLength * this.yLength + j * this.xLength + i]; + } + /** + * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system + * @memberof Volume + * @param {number} i First coordinate + * @param {number} j Second coordinate + * @param {number} k Third coordinate + * @returns {number} index + */ + access(i, j, k2) { + return k2 * this.xLength * this.yLength + j * this.xLength + i; + } + /** + * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data + * @memberof Volume + * @param {number} index index of the voxel + * @returns {Array} [x,y,z] + */ + reverseAccess(index2) { + const z = Math.floor(index2 / (this.yLength * this.xLength)); + const y2 = Math.floor((index2 - z * this.yLength * this.xLength) / this.xLength); + const x2 = index2 - z * this.yLength * this.xLength - y2 * this.xLength; + return [x2, y2, z]; + } + /** + * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced + * @memberof Volume + * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters : + * value of the voxel + * index of the voxel + * the data (TypedArray) + * @param {Object} context You can specify a context in which call the function, default if this Volume + * @returns {Volume} this + */ + map(functionToMap, context) { + const length2 = this.data.length; + context = context || this; + for (let i = 0; i < length2; i++) { + this.data[i] = functionToMap.call(context, this.data[i], i, this.data); + } + return this; + } + /** + * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system. + * @memberof Volume + * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' + * @param {number} index the index of the slice + * @returns {Object} an object containing all the usefull information on the geometry of the slice + */ + extractPerpendicularPlane(axis, RASIndex) { + let firstSpacing, secondSpacing, positionOffset, IJKIndex; + const axisInIJK = new Vector3(), firstDirection = new Vector3(), secondDirection = new Vector3(), planeMatrix = new Matrix4().identity(), volume = this; + const dimensions = new Vector3(this.xLength, this.yLength, this.zLength); + switch (axis) { + case "x": + axisInIJK.set(1, 0, 0); + firstDirection.set(0, 0, -1); + secondDirection.set(0, -1, 0); + firstSpacing = this.spacing[this.axisOrder.indexOf("z")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; + IJKIndex = new Vector3(RASIndex, 0, 0); + planeMatrix.multiply(new Matrix4().makeRotationY(Math.PI / 2)); + positionOffset = (volume.RASDimensions[0] - 1) / 2; + planeMatrix.setPosition(new Vector3(RASIndex - positionOffset, 0, 0)); + break; + case "y": + axisInIJK.set(0, 1, 0); + firstDirection.set(1, 0, 0); + secondDirection.set(0, 0, 1); + firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("z")]; + IJKIndex = new Vector3(0, RASIndex, 0); + planeMatrix.multiply(new Matrix4().makeRotationX(-Math.PI / 2)); + positionOffset = (volume.RASDimensions[1] - 1) / 2; + planeMatrix.setPosition(new Vector3(0, RASIndex - positionOffset, 0)); + break; + case "z": + default: + axisInIJK.set(0, 0, 1); + firstDirection.set(1, 0, 0); + secondDirection.set(0, -1, 0); + firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; + IJKIndex = new Vector3(0, 0, RASIndex); + positionOffset = (volume.RASDimensions[2] - 1) / 2; + planeMatrix.setPosition(new Vector3(0, 0, RASIndex - positionOffset)); + break; + } + if (!this.segmentation) { + firstDirection.applyMatrix4(volume.inverseMatrix).normalize(); + secondDirection.applyMatrix4(volume.inverseMatrix).normalize(); + axisInIJK.applyMatrix4(volume.inverseMatrix).normalize(); + } + firstDirection.arglet = "i"; + secondDirection.arglet = "j"; + const iLength = Math.floor(Math.abs(firstDirection.dot(dimensions))); + const jLength = Math.floor(Math.abs(secondDirection.dot(dimensions))); + const planeWidth = Math.abs(iLength * firstSpacing); + const planeHeight = Math.abs(jLength * secondSpacing); + IJKIndex = Math.abs(Math.round(IJKIndex.applyMatrix4(volume.inverseMatrix).dot(axisInIJK))); + const base = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)]; + const iDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[0])) > 0.9; + }); + const jDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[1])) > 0.9; + }); + const kDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[2])) > 0.9; + }); + function sliceAccess(i, j) { + const si = iDirection === axisInIJK ? IJKIndex : iDirection.arglet === "i" ? i : j; + const sj = jDirection === axisInIJK ? IJKIndex : jDirection.arglet === "i" ? i : j; + const sk = kDirection === axisInIJK ? IJKIndex : kDirection.arglet === "i" ? i : j; + const accessI = iDirection.dot(base[0]) > 0 ? si : volume.xLength - 1 - si; + const accessJ = jDirection.dot(base[1]) > 0 ? sj : volume.yLength - 1 - sj; + const accessK = kDirection.dot(base[2]) > 0 ? sk : volume.zLength - 1 - sk; + return volume.access(accessI, accessJ, accessK); + } + return { + iLength, + jLength, + sliceAccess, + matrix: planeMatrix, + planeWidth, + planeHeight + }; + } + /** + * @member {Function} extractSlice Returns a slice corresponding to the given axis and index + * The coordinate are given in the Right Anterior Superior coordinate format + * @memberof Volume + * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' + * @param {number} index the index of the slice + * @returns {VolumeSlice} the extracted slice + */ + extractSlice(axis, index2) { + const slice2 = new VolumeSlice(this, index2, axis); + this.sliceList.push(slice2); + return slice2; + } + /** + * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume + * @see VolumeSlice.repaint + * @memberof Volume + * @returns {Volume} this + */ + repaintAllSlices() { + this.sliceList.forEach(function(slice2) { + slice2.repaint(); + }); + return this; + } + /** + * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume + * @memberof Volume + * @returns {Array} [min,max] + */ + computeMinMax() { + let min = Infinity; + let max2 = -Infinity; + const datasize = this.data.length; + let i = 0; + for (i = 0; i < datasize; i++) { + if (!isNaN(this.data[i])) { + const value2 = this.data[i]; + min = Math.min(min, value2); + max2 = Math.max(max2, value2); + } + } + this.min = min; + this.max = max2; + return [min, max2]; + } +}; + +// node_modules/three/examples/jsm/loaders/NRRDLoader.js +var NRRDLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + /** + * + * @param {boolean} segmentation is a option for user to choose + */ + setSegmentation(segmentation) { + this.segmentation = segmentation; + } + parse(data2) { + let _data = data2; + let _dataPointer = 0; + const _nativeLittleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; + const _littleEndian = true; + const headerObject = {}; + function scan(type, chunks) { + let _chunkSize = 1; + let _array_type = Uint8Array; + switch (type) { + case "uchar": + break; + case "schar": + _array_type = Int8Array; + break; + case "ushort": + _array_type = Uint16Array; + _chunkSize = 2; + break; + case "sshort": + _array_type = Int16Array; + _chunkSize = 2; + break; + case "uint": + _array_type = Uint32Array; + _chunkSize = 4; + break; + case "sint": + _array_type = Int32Array; + _chunkSize = 4; + break; + case "float": + _array_type = Float32Array; + _chunkSize = 4; + break; + case "complex": + _array_type = Float64Array; + _chunkSize = 8; + break; + case "double": + _array_type = Float64Array; + _chunkSize = 8; + break; + } + let _bytes2 = new _array_type(_data.slice( + _dataPointer, + _dataPointer += chunks * _chunkSize + )); + if (_nativeLittleEndian != _littleEndian) { + _bytes2 = flipEndianness(_bytes2, _chunkSize); + } + return _bytes2; + } + function flipEndianness(array, chunkSize) { + const u82 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength); + for (let i2 = 0; i2 < array.byteLength; i2 += chunkSize) { + for (let j = i2 + chunkSize - 1, k2 = i2; j > k2; j--, k2++) { + const tmp = u82[k2]; + u82[k2] = u82[j]; + u82[j] = tmp; + } + } + return array; + } + function parseHeader(header) { + let data3, field, fn, i2, l2, m, _i, _len; + const lines = header.split(/\r?\n/); + for (_i = 0, _len = lines.length; _i < _len; _i++) { + l2 = lines[_i]; + if (l2.match(/NRRD\d+/)) { + headerObject.isNrrd = true; + } else if (!l2.match(/^#/) && (m = l2.match(/(.*):(.*)/))) { + field = m[1].trim(); + data3 = m[2].trim(); + fn = _fieldFunctions[field]; + if (fn) { + fn.call(headerObject, data3); + } else { + headerObject[field] = data3; + } + } + } + if (!headerObject.isNrrd) { + throw new Error("Not an NRRD file"); + } + if (headerObject.encoding === "bz2" || headerObject.encoding === "bzip2") { + throw new Error("Bzip is not supported"); + } + if (!headerObject.vectors) { + headerObject.vectors = []; + headerObject.vectors.push([1, 0, 0]); + headerObject.vectors.push([0, 1, 0]); + headerObject.vectors.push([0, 0, 1]); + if (headerObject.spacings) { + for (i2 = 0; i2 <= 2; i2++) { + if (!isNaN(headerObject.spacings[i2])) { + for (let j = 0; j <= 2; j++) { + headerObject.vectors[i2][j] *= headerObject.spacings[i2]; + } + } + } + } + } + } + function parseDataAsText(data3, start, end) { + let number = ""; + start = start || 0; + end = end || data3.length; + let value2; + const lengthOfTheResult = headerObject.sizes.reduce(function(previous, current) { + return previous * current; + }, 1); + let base = 10; + if (headerObject.encoding === "hex") { + base = 16; + } + const result = new headerObject.__array(lengthOfTheResult); + let resultIndex = 0; + let parsingFunction = parseInt; + if (headerObject.__array === Float32Array || headerObject.__array === Float64Array) { + parsingFunction = parseFloat; + } + for (let i2 = start; i2 < end; i2++) { + value2 = data3[i2]; + if ((value2 < 9 || value2 > 13) && value2 !== 32) { + number += String.fromCharCode(value2); + } else { + if (number !== "") { + result[resultIndex] = parsingFunction(number, base); + resultIndex++; + } + number = ""; + } + } + if (number !== "") { + result[resultIndex] = parsingFunction(number, base); + resultIndex++; + } + return result; + } + const _bytes = scan("uchar", data2.byteLength); + const _length = _bytes.length; + let _header = null; + let _data_start = 0; + let i; + for (i = 1; i < _length; i++) { + if (_bytes[i - 1] == 10 && _bytes[i] == 10) { + _header = this.parseChars(_bytes, 0, i - 2); + _data_start = i + 1; + break; + } + } + parseHeader(_header); + _data = _bytes.subarray(_data_start); + if (headerObject.encoding.substring(0, 2) === "gz") { + _data = gunzipSync(new Uint8Array(_data)); + } else if (headerObject.encoding === "ascii" || headerObject.encoding === "text" || headerObject.encoding === "txt" || headerObject.encoding === "hex") { + _data = parseDataAsText(_data); + } else if (headerObject.encoding === "raw") { + const _copy = new Uint8Array(_data.length); + for (let i2 = 0; i2 < _data.length; i2++) { + _copy[i2] = _data[i2]; + } + _data = _copy; + } + _data = _data.buffer; + const volume = new Volume(); + volume.header = headerObject; + volume.segmentation = this.segmentation; + volume.data = new headerObject.__array(_data); + const min_max = volume.computeMinMax(); + const min = min_max[0]; + const max2 = min_max[1]; + volume.windowLow = min; + volume.windowHigh = max2; + volume.dimensions = [headerObject.sizes[0], headerObject.sizes[1], headerObject.sizes[2]]; + volume.xLength = volume.dimensions[0]; + volume.yLength = volume.dimensions[1]; + volume.zLength = volume.dimensions[2]; + if (headerObject.vectors) { + const xIndex = headerObject.vectors.findIndex((vector) => vector[0] !== 0); + const yIndex = headerObject.vectors.findIndex((vector) => vector[1] !== 0); + const zIndex = headerObject.vectors.findIndex((vector) => vector[2] !== 0); + const axisOrder = []; + if (xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex) { + axisOrder[xIndex] = "x"; + axisOrder[yIndex] = "y"; + axisOrder[zIndex] = "z"; + } else { + axisOrder[0] = "x"; + axisOrder[1] = "y"; + axisOrder[2] = "z"; + } + volume.axisOrder = axisOrder; + } else { + volume.axisOrder = ["x", "y", "z"]; + } + const spacingX = new Vector3().fromArray(headerObject.vectors[0]).length(); + const spacingY = new Vector3().fromArray(headerObject.vectors[1]).length(); + const spacingZ = new Vector3().fromArray(headerObject.vectors[2]).length(); + volume.spacing = [spacingX, spacingY, spacingZ]; + volume.matrix = new Matrix4(); + const transitionMatrix = new Matrix4(); + if (headerObject.space === "left-posterior-superior") { + transitionMatrix.set( + -1, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + } else if (headerObject.space === "left-anterior-superior") { + transitionMatrix.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 1 + ); + } + if (!headerObject.vectors) { + volume.matrix.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + } else { + const v = headerObject.vectors; + const ijk_to_transition = new Matrix4().set( + v[0][0], + v[1][0], + v[2][0], + 0, + v[0][1], + v[1][1], + v[2][1], + 0, + v[0][2], + v[1][2], + v[2][2], + 0, + 0, + 0, + 0, + 1 + ); + const transition_to_ras = new Matrix4().multiplyMatrices(ijk_to_transition, transitionMatrix); + volume.matrix = transition_to_ras; + } + volume.inverseMatrix = new Matrix4(); + volume.inverseMatrix.copy(volume.matrix).invert(); + volume.RASDimensions = [ + Math.floor(volume.xLength * spacingX), + Math.floor(volume.yLength * spacingY), + Math.floor(volume.zLength * spacingZ) + ]; + if (volume.lowerThreshold === -Infinity) { + volume.lowerThreshold = min; + } + if (volume.upperThreshold === Infinity) { + volume.upperThreshold = max2; + } + return volume; + } + parseChars(array, start, end) { + if (start === void 0) { + start = 0; + } + if (end === void 0) { + end = array.length; + } + let output = ""; + let i = 0; + for (i = start; i < end; ++i) { + output += String.fromCharCode(array[i]); + } + return output; + } +}; +var _fieldFunctions = { + type: function(data2) { + switch (data2) { + case "uchar": + case "unsigned char": + case "uint8": + case "uint8_t": + this.__array = Uint8Array; + break; + case "signed char": + case "int8": + case "int8_t": + this.__array = Int8Array; + break; + case "short": + case "short int": + case "signed short": + case "signed short int": + case "int16": + case "int16_t": + this.__array = Int16Array; + break; + case "ushort": + case "unsigned short": + case "unsigned short int": + case "uint16": + case "uint16_t": + this.__array = Uint16Array; + break; + case "int": + case "signed int": + case "int32": + case "int32_t": + this.__array = Int32Array; + break; + case "uint": + case "unsigned int": + case "uint32": + case "uint32_t": + this.__array = Uint32Array; + break; + case "float": + this.__array = Float32Array; + break; + case "double": + this.__array = Float64Array; + break; + default: + throw new Error("Unsupported NRRD data type: " + data2); + } + return this.type = data2; + }, + endian: function(data2) { + return this.endian = data2; + }, + encoding: function(data2) { + return this.encoding = data2; + }, + dimension: function(data2) { + return this.dim = parseInt(data2, 10); + }, + sizes: function(data2) { + let i; + return this.sizes = function() { + const _ref = data2.split(/\s+/); + const _results = []; + for (let _i = 0, _len = _ref.length; _i < _len; _i++) { + i = _ref[_i]; + _results.push(parseInt(i, 10)); + } + return _results; + }(); + }, + space: function(data2) { + return this.space = data2; + }, + "space origin": function(data2) { + return this.space_origin = data2.split("(")[1].split(")")[0].split(","); + }, + "space directions": function(data2) { + let f, v; + const parts = data2.match(/\(.*?\)/g); + return this.vectors = function() { + const _results = []; + for (let _i = 0, _len = parts.length; _i < _len; _i++) { + v = parts[_i]; + _results.push(function() { + const _ref = v.slice(1, -1).split(/,/); + const _results2 = []; + for (let _j = 0, _len2 = _ref.length; _j < _len2; _j++) { + f = _ref[_j]; + _results2.push(parseFloat(f)); + } + return _results2; + }()); + } + return _results; + }(); + }, + spacings: function(data2) { + let f; + const parts = data2.split(/\s+/); + return this.spacings = function() { + const _results = []; + for (let _i = 0, _len = parts.length; _i < _len; _i++) { + f = parts[_i]; + _results.push(parseFloat(f)); + } + return _results; + }(); + } +}; + +// node_modules/three/examples/jsm/loaders/OBJLoader.js +var _object_pattern = /^[og]\s*(.+)?/; +var _material_library_pattern = /^mtllib /; +var _material_use_pattern = /^usemtl /; +var _map_use_pattern = /^usemap /; +var _face_vertex_data_separator_pattern = /\s+/; +var _vA = new Vector3(); +var _vB = new Vector3(); +var _vC = new Vector3(); +var _ab = new Vector3(); +var _cb = new Vector3(); +var _color = new Color(); +function ParserState() { + const state = { + objects: [], + object: {}, + vertices: [], + normals: [], + colors: [], + uvs: [], + materials: {}, + materialLibraries: [], + startObject: function(name2, fromDeclaration) { + if (this.object && this.object.fromDeclaration === false) { + this.object.name = name2; + this.object.fromDeclaration = fromDeclaration !== false; + return; + } + const previousMaterial = this.object && typeof this.object.currentMaterial === "function" ? this.object.currentMaterial() : void 0; + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + this.object = { + name: name2 || "", + fromDeclaration: fromDeclaration !== false, + geometry: { + vertices: [], + normals: [], + colors: [], + uvs: [], + hasUVIndices: false + }, + materials: [], + smooth: true, + startMaterial: function(name3, libraries) { + const previous = this._finalize(false); + if (previous && (previous.inherited || previous.groupCount <= 0)) { + this.materials.splice(previous.index, 1); + } + const material = { + index: this.materials.length, + name: name3 || "", + mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : "", + smooth: previous !== void 0 ? previous.smooth : this.smooth, + groupStart: previous !== void 0 ? previous.groupEnd : 0, + groupEnd: -1, + groupCount: -1, + inherited: false, + clone: function(index2) { + const cloned = { + index: typeof index2 === "number" ? index2 : this.index, + name: this.name, + mtllib: this.mtllib, + smooth: this.smooth, + groupStart: 0, + groupEnd: -1, + groupCount: -1, + inherited: false + }; + cloned.clone = this.clone.bind(cloned); + return cloned; + } + }; + this.materials.push(material); + return material; + }, + currentMaterial: function() { + if (this.materials.length > 0) { + return this.materials[this.materials.length - 1]; + } + return void 0; + }, + _finalize: function(end) { + const lastMultiMaterial = this.currentMaterial(); + if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) { + lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3; + lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart; + lastMultiMaterial.inherited = false; + } + if (end && this.materials.length > 1) { + for (let mi2 = this.materials.length - 1; mi2 >= 0; mi2--) { + if (this.materials[mi2].groupCount <= 0) { + this.materials.splice(mi2, 1); + } + } + } + if (end && this.materials.length === 0) { + this.materials.push({ + name: "", + smooth: this.smooth + }); + } + return lastMultiMaterial; + } + }; + if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === "function") { + const declared = previousMaterial.clone(0); + declared.inherited = true; + this.object.materials.push(declared); + } + this.objects.push(this.object); + }, + finalize: function() { + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + }, + parseVertexIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 3) * 3; + }, + parseNormalIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 3) * 3; + }, + parseUVIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 2) * 2; + }, + addVertex: function(a2, b3, c2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addVertexPoint: function(a2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + }, + addVertexLine: function(a2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + }, + addNormal: function(a2, b3, c2) { + const src = this.normals; + const dst = this.object.geometry.normals; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addFaceNormal: function(a2, b3, c2) { + const src = this.vertices; + const dst = this.object.geometry.normals; + _vA.fromArray(src, a2); + _vB.fromArray(src, b3); + _vC.fromArray(src, c2); + _cb.subVectors(_vC, _vB); + _ab.subVectors(_vA, _vB); + _cb.cross(_ab); + _cb.normalize(); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + }, + addColor: function(a2, b3, c2) { + const src = this.colors; + const dst = this.object.geometry.colors; + if (src[a2] !== void 0) dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + if (src[b3] !== void 0) dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + if (src[c2] !== void 0) dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addUV: function(a2, b3, c2) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a2 + 0], src[a2 + 1]); + dst.push(src[b3 + 0], src[b3 + 1]); + dst.push(src[c2 + 0], src[c2 + 1]); + }, + addDefaultUV: function() { + const dst = this.object.geometry.uvs; + dst.push(0, 0); + dst.push(0, 0); + dst.push(0, 0); + }, + addUVLine: function(a2) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a2 + 0], src[a2 + 1]); + }, + addFace: function(a2, b3, c2, ua, ub, uc, na, nb, nc) { + const vLen = this.vertices.length; + let ia2 = this.parseVertexIndex(a2, vLen); + let ib = this.parseVertexIndex(b3, vLen); + let ic = this.parseVertexIndex(c2, vLen); + this.addVertex(ia2, ib, ic); + this.addColor(ia2, ib, ic); + if (na !== void 0 && na !== "") { + const nLen = this.normals.length; + ia2 = this.parseNormalIndex(na, nLen); + ib = this.parseNormalIndex(nb, nLen); + ic = this.parseNormalIndex(nc, nLen); + this.addNormal(ia2, ib, ic); + } else { + this.addFaceNormal(ia2, ib, ic); + } + if (ua !== void 0 && ua !== "") { + const uvLen = this.uvs.length; + ia2 = this.parseUVIndex(ua, uvLen); + ib = this.parseUVIndex(ub, uvLen); + ic = this.parseUVIndex(uc, uvLen); + this.addUV(ia2, ib, ic); + this.object.geometry.hasUVIndices = true; + } else { + this.addDefaultUV(); + } + }, + addPointGeometry: function(vertices) { + this.object.geometry.type = "Points"; + const vLen = this.vertices.length; + for (let vi = 0, l2 = vertices.length; vi < l2; vi++) { + const index2 = this.parseVertexIndex(vertices[vi], vLen); + this.addVertexPoint(index2); + this.addColor(index2); + } + }, + addLineGeometry: function(vertices, uvs) { + this.object.geometry.type = "Line"; + const vLen = this.vertices.length; + const uvLen = this.uvs.length; + for (let vi = 0, l2 = vertices.length; vi < l2; vi++) { + this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen)); + } + for (let uvi = 0, l2 = uvs.length; uvi < l2; uvi++) { + this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen)); + } + } + }; + state.startObject("", false); + return state; +} +var OBJLoader = class extends Loader { + constructor(manager) { + super(manager); + this.materials = null; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterials(materials) { + this.materials = materials; + return this; + } + parse(text2) { + const state = new ParserState(); + if (text2.indexOf("\r\n") !== -1) { + text2 = text2.replace(/\r\n/g, "\n"); + } + if (text2.indexOf("\\\n") !== -1) { + text2 = text2.replace(/\\\n/g, ""); + } + const lines = text2.split("\n"); + let result = []; + for (let i = 0, l2 = lines.length; i < l2; i++) { + const line2 = lines[i].trimStart(); + if (line2.length === 0) continue; + const lineFirstChar = line2.charAt(0); + if (lineFirstChar === "#") continue; + if (lineFirstChar === "v") { + const data2 = line2.split(_face_vertex_data_separator_pattern); + switch (data2[0]) { + case "v": + state.vertices.push( + parseFloat(data2[1]), + parseFloat(data2[2]), + parseFloat(data2[3]) + ); + if (data2.length >= 7) { + _color.setRGB( + parseFloat(data2[4]), + parseFloat(data2[5]), + parseFloat(data2[6]) + ).convertSRGBToLinear(); + state.colors.push(_color.r, _color.g, _color.b); + } else { + state.colors.push(void 0, void 0, void 0); + } + break; + case "vn": + state.normals.push( + parseFloat(data2[1]), + parseFloat(data2[2]), + parseFloat(data2[3]) + ); + break; + case "vt": + state.uvs.push( + parseFloat(data2[1]), + parseFloat(data2[2]) + ); + break; + } + } else if (lineFirstChar === "f") { + const lineData = line2.slice(1).trim(); + const vertexData = lineData.split(_face_vertex_data_separator_pattern); + const faceVertices = []; + for (let j = 0, jl = vertexData.length; j < jl; j++) { + const vertex = vertexData[j]; + if (vertex.length > 0) { + const vertexParts = vertex.split("/"); + faceVertices.push(vertexParts); + } + } + const v12 = faceVertices[0]; + for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) { + const v2 = faceVertices[j]; + const v3 = faceVertices[j + 1]; + state.addFace( + v12[0], + v2[0], + v3[0], + v12[1], + v2[1], + v3[1], + v12[2], + v2[2], + v3[2] + ); + } + } else if (lineFirstChar === "l") { + const lineParts = line2.substring(1).trim().split(" "); + let lineVertices = []; + const lineUVs = []; + if (line2.indexOf("/") === -1) { + lineVertices = lineParts; + } else { + for (let li = 0, llen = lineParts.length; li < llen; li++) { + const parts = lineParts[li].split("/"); + if (parts[0] !== "") lineVertices.push(parts[0]); + if (parts[1] !== "") lineUVs.push(parts[1]); + } + } + state.addLineGeometry(lineVertices, lineUVs); + } else if (lineFirstChar === "p") { + const lineData = line2.slice(1).trim(); + const pointData = lineData.split(" "); + state.addPointGeometry(pointData); + } else if ((result = _object_pattern.exec(line2)) !== null) { + const name2 = (" " + result[0].slice(1).trim()).slice(1); + state.startObject(name2); + } else if (_material_use_pattern.test(line2)) { + state.object.startMaterial(line2.substring(7).trim(), state.materialLibraries); + } else if (_material_library_pattern.test(line2)) { + state.materialLibraries.push(line2.substring(7).trim()); + } else if (_map_use_pattern.test(line2)) { + console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.'); + } else if (lineFirstChar === "s") { + result = line2.split(" "); + if (result.length > 1) { + const value2 = result[1].trim().toLowerCase(); + state.object.smooth = value2 !== "0" && value2 !== "off"; + } else { + state.object.smooth = true; + } + const material = state.object.currentMaterial(); + if (material) material.smooth = state.object.smooth; + } else { + if (line2 === "\0") continue; + console.warn('THREE.OBJLoader: Unexpected line: "' + line2 + '"'); + } + } + state.finalize(); + const container = new Group(); + container.materialLibraries = [].concat(state.materialLibraries); + const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0); + if (hasPrimitives === true) { + for (let i = 0, l2 = state.objects.length; i < l2; i++) { + const object = state.objects[i]; + const geometry = object.geometry; + const materials = object.materials; + const isLine = geometry.type === "Line"; + const isPoints = geometry.type === "Points"; + let hasVertexColors = false; + if (geometry.vertices.length === 0) continue; + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(geometry.vertices, 3)); + if (geometry.normals.length > 0) { + buffergeometry.setAttribute("normal", new Float32BufferAttribute(geometry.normals, 3)); + } + if (geometry.colors.length > 0) { + hasVertexColors = true; + buffergeometry.setAttribute("color", new Float32BufferAttribute(geometry.colors, 3)); + } + if (geometry.hasUVIndices === true) { + buffergeometry.setAttribute("uv", new Float32BufferAttribute(geometry.uvs, 2)); + } + const createdMaterials = []; + for (let mi2 = 0, miLen = materials.length; mi2 < miLen; mi2++) { + const sourceMaterial = materials[mi2]; + const materialHash = sourceMaterial.name + "_" + sourceMaterial.smooth + "_" + hasVertexColors; + let material = state.materials[materialHash]; + if (this.materials !== null) { + material = this.materials.create(sourceMaterial.name); + if (isLine && material && !(material instanceof LineBasicMaterial)) { + const materialLine = new LineBasicMaterial(); + Material.prototype.copy.call(materialLine, material); + materialLine.color.copy(material.color); + material = materialLine; + } else if (isPoints && material && !(material instanceof PointsMaterial)) { + const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false }); + Material.prototype.copy.call(materialPoints, material); + materialPoints.color.copy(material.color); + materialPoints.map = material.map; + material = materialPoints; + } + } + if (material === void 0) { + if (isLine) { + material = new LineBasicMaterial(); + } else if (isPoints) { + material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + } else { + material = new MeshPhongMaterial(); + } + material.name = sourceMaterial.name; + material.flatShading = sourceMaterial.smooth ? false : true; + material.vertexColors = hasVertexColors; + state.materials[materialHash] = material; + } + createdMaterials.push(material); + } + let mesh; + if (createdMaterials.length > 1) { + for (let mi2 = 0, miLen = materials.length; mi2 < miLen; mi2++) { + const sourceMaterial = materials[mi2]; + buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi2); + } + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials); + } else { + mesh = new Mesh(buffergeometry, createdMaterials); + } + } else { + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials[0]); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials[0]); + } else { + mesh = new Mesh(buffergeometry, createdMaterials[0]); + } + } + mesh.name = object.name; + container.add(mesh); + } + } else { + if (state.vertices.length > 0) { + const material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(state.vertices, 3)); + if (state.colors.length > 0 && state.colors[0] !== void 0) { + buffergeometry.setAttribute("color", new Float32BufferAttribute(state.colors, 3)); + material.vertexColors = true; + } + const points = new Points(buffergeometry, material); + container.add(points); + } + } + return container; + } +}; + +// node_modules/three/examples/jsm/loaders/PCDLoader.js +var PCDLoader = class extends Loader { + constructor(manager) { + super(manager); + this.littleEndian = true; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function decompressLZF(inData, outLength) { + const inLength = inData.length; + const outData = new Uint8Array(outLength); + let inPtr = 0; + let outPtr = 0; + let ctrl; + let len; + let ref; + do { + ctrl = inData[inPtr++]; + if (ctrl < 1 << 5) { + ctrl++; + if (outPtr + ctrl > outLength) throw new Error("Output buffer is not large enough"); + if (inPtr + ctrl > inLength) throw new Error("Invalid compressed data"); + do { + outData[outPtr++] = inData[inPtr++]; + } while (--ctrl); + } else { + len = ctrl >> 5; + ref = outPtr - ((ctrl & 31) << 8) - 1; + if (inPtr >= inLength) throw new Error("Invalid compressed data"); + if (len === 7) { + len += inData[inPtr++]; + if (inPtr >= inLength) throw new Error("Invalid compressed data"); + } + ref -= inData[inPtr++]; + if (outPtr + len + 2 > outLength) throw new Error("Output buffer is not large enough"); + if (ref < 0) throw new Error("Invalid compressed data"); + if (ref >= outPtr) throw new Error("Invalid compressed data"); + do { + outData[outPtr++] = outData[ref++]; + } while (--len + 2); + } + } while (inPtr < inLength); + return outData; + } + function parseHeader(data3) { + const PCDheader2 = {}; + const result1 = data3.search(/[\r\n]DATA\s(\S*)\s/i); + const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data3.slice(result1 - 1)); + PCDheader2.data = result2[1]; + PCDheader2.headerLen = result2[0].length + result1; + PCDheader2.str = data3.slice(0, PCDheader2.headerLen); + PCDheader2.str = PCDheader2.str.replace(/#.*/gi, ""); + PCDheader2.version = /VERSION (.*)/i.exec(PCDheader2.str); + PCDheader2.fields = /FIELDS (.*)/i.exec(PCDheader2.str); + PCDheader2.size = /SIZE (.*)/i.exec(PCDheader2.str); + PCDheader2.type = /TYPE (.*)/i.exec(PCDheader2.str); + PCDheader2.count = /COUNT (.*)/i.exec(PCDheader2.str); + PCDheader2.width = /WIDTH (.*)/i.exec(PCDheader2.str); + PCDheader2.height = /HEIGHT (.*)/i.exec(PCDheader2.str); + PCDheader2.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader2.str); + PCDheader2.points = /POINTS (.*)/i.exec(PCDheader2.str); + if (PCDheader2.version !== null) + PCDheader2.version = parseFloat(PCDheader2.version[1]); + PCDheader2.fields = PCDheader2.fields !== null ? PCDheader2.fields[1].split(" ") : []; + if (PCDheader2.type !== null) + PCDheader2.type = PCDheader2.type[1].split(" "); + if (PCDheader2.width !== null) + PCDheader2.width = parseInt(PCDheader2.width[1]); + if (PCDheader2.height !== null) + PCDheader2.height = parseInt(PCDheader2.height[1]); + if (PCDheader2.viewpoint !== null) + PCDheader2.viewpoint = PCDheader2.viewpoint[1]; + if (PCDheader2.points !== null) + PCDheader2.points = parseInt(PCDheader2.points[1], 10); + if (PCDheader2.points === null) + PCDheader2.points = PCDheader2.width * PCDheader2.height; + if (PCDheader2.size !== null) { + PCDheader2.size = PCDheader2.size[1].split(" ").map(function(x2) { + return parseInt(x2, 10); + }); + } + if (PCDheader2.count !== null) { + PCDheader2.count = PCDheader2.count[1].split(" ").map(function(x2) { + return parseInt(x2, 10); + }); + } else { + PCDheader2.count = []; + for (let i = 0, l2 = PCDheader2.fields.length; i < l2; i++) { + PCDheader2.count.push(1); + } + } + PCDheader2.offset = {}; + let sizeSum = 0; + for (let i = 0, l2 = PCDheader2.fields.length; i < l2; i++) { + if (PCDheader2.data === "ascii") { + PCDheader2.offset[PCDheader2.fields[i]] = i; + } else { + PCDheader2.offset[PCDheader2.fields[i]] = sizeSum; + sizeSum += PCDheader2.size[i] * PCDheader2.count[i]; + } + } + PCDheader2.rowSize = sizeSum; + return PCDheader2; + } + const textData = new TextDecoder().decode(data2); + const PCDheader = parseHeader(textData); + const position2 = []; + const normal = []; + const color = []; + const intensity = []; + const label = []; + const c2 = new Color(); + if (PCDheader.data === "ascii") { + const offset = PCDheader.offset; + const pcdData = textData.slice(PCDheader.headerLen); + const lines = pcdData.split("\n"); + for (let i = 0, l2 = lines.length; i < l2; i++) { + if (lines[i] === "") continue; + const line2 = lines[i].split(" "); + if (offset.x !== void 0) { + position2.push(parseFloat(line2[offset.x])); + position2.push(parseFloat(line2[offset.y])); + position2.push(parseFloat(line2[offset.z])); + } + if (offset.rgb !== void 0) { + const rgb_field_index = PCDheader.fields.findIndex((field) => field === "rgb"); + const rgb_type = PCDheader.type[rgb_field_index]; + const float = parseFloat(line2[offset.rgb]); + let rgb = float; + if (rgb_type === "F") { + const farr = new Float32Array(1); + farr[0] = float; + rgb = new Int32Array(farr.buffer)[0]; + } + const r = (rgb >> 16 & 255) / 255; + const g2 = (rgb >> 8 & 255) / 255; + const b3 = (rgb >> 0 & 255) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + normal.push(parseFloat(line2[offset.normal_x])); + normal.push(parseFloat(line2[offset.normal_y])); + normal.push(parseFloat(line2[offset.normal_z])); + } + if (offset.intensity !== void 0) { + intensity.push(parseFloat(line2[offset.intensity])); + } + if (offset.label !== void 0) { + label.push(parseInt(line2[offset.label])); + } + } + } + if (PCDheader.data === "binary_compressed") { + const sizes = new Uint32Array(data2.slice(PCDheader.headerLen, PCDheader.headerLen + 8)); + const compressedSize = sizes[0]; + const decompressedSize = sizes[1]; + const decompressed = decompressLZF(new Uint8Array(data2, PCDheader.headerLen + 8, compressedSize), decompressedSize); + const dataview = new DataView(decompressed.buffer); + const offset = PCDheader.offset; + for (let i = 0; i < PCDheader.points; i++) { + if (offset.x !== void 0) { + const xIndex = PCDheader.fields.indexOf("x"); + const yIndex = PCDheader.fields.indexOf("y"); + const zIndex = PCDheader.fields.indexOf("z"); + position2.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[xIndex] * i, this.littleEndian)); + position2.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[yIndex] * i, this.littleEndian)); + position2.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[zIndex] * i, this.littleEndian)); + } + if (offset.rgb !== void 0) { + const rgbIndex = PCDheader.fields.indexOf("rgb"); + const r = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 2) / 255; + const g2 = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 1) / 255; + const b3 = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 0) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + const xIndex = PCDheader.fields.indexOf("normal_x"); + const yIndex = PCDheader.fields.indexOf("normal_y"); + const zIndex = PCDheader.fields.indexOf("normal_z"); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[xIndex] * i, this.littleEndian)); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[yIndex] * i, this.littleEndian)); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[zIndex] * i, this.littleEndian)); + } + if (offset.intensity !== void 0) { + const intensityIndex = PCDheader.fields.indexOf("intensity"); + intensity.push(dataview.getFloat32(PCDheader.points * offset.intensity + PCDheader.size[intensityIndex] * i, this.littleEndian)); + } + if (offset.label !== void 0) { + const labelIndex = PCDheader.fields.indexOf("label"); + label.push(dataview.getInt32(PCDheader.points * offset.label + PCDheader.size[labelIndex] * i, this.littleEndian)); + } + } + } + if (PCDheader.data === "binary") { + const dataview = new DataView(data2, PCDheader.headerLen); + const offset = PCDheader.offset; + for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) { + if (offset.x !== void 0) { + position2.push(dataview.getFloat32(row + offset.x, this.littleEndian)); + position2.push(dataview.getFloat32(row + offset.y, this.littleEndian)); + position2.push(dataview.getFloat32(row + offset.z, this.littleEndian)); + } + if (offset.rgb !== void 0) { + const r = dataview.getUint8(row + offset.rgb + 2) / 255; + const g2 = dataview.getUint8(row + offset.rgb + 1) / 255; + const b3 = dataview.getUint8(row + offset.rgb + 0) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian)); + normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian)); + normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian)); + } + if (offset.intensity !== void 0) { + intensity.push(dataview.getFloat32(row + offset.intensity, this.littleEndian)); + } + if (offset.label !== void 0) { + label.push(dataview.getInt32(row + offset.label, this.littleEndian)); + } + } + } + const geometry = new BufferGeometry(); + if (position2.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position2, 3)); + if (normal.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal, 3)); + if (color.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color, 3)); + if (intensity.length > 0) geometry.setAttribute("intensity", new Float32BufferAttribute(intensity, 1)); + if (label.length > 0) geometry.setAttribute("label", new Int32BufferAttribute(label, 1)); + geometry.computeBoundingSphere(); + const material = new PointsMaterial({ size: 5e-3 }); + if (color.length > 0) { + material.vertexColors = true; + } + return new Points(geometry, material); + } +}; + +// node_modules/three/examples/jsm/loaders/PDBLoader.js +var PDBLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + // Based on CanvasMol PDB parser + parse(text2) { + function trim(text3) { + return text3.replace(/^\s\s*/, "").replace(/\s\s*$/, ""); + } + function capitalize(text3) { + return text3.charAt(0).toUpperCase() + text3.slice(1).toLowerCase(); + } + function hash(s, e) { + return "s" + Math.min(s, e) + "e" + Math.max(s, e); + } + function parseBond(start, length2, satom, i) { + const eatom = parseInt(lines[i].slice(start, start + length2)); + if (eatom) { + const h = hash(satom, eatom); + if (_bhash[h] === void 0) { + _bonds.push([satom - 1, eatom - 1, 1]); + _bhash[h] = _bonds.length - 1; + } else { + } + } + } + function buildGeometry() { + const build = { + geometryAtoms: new BufferGeometry(), + geometryBonds: new BufferGeometry(), + json: { + atoms + } + }; + const geometryAtoms = build.geometryAtoms; + const geometryBonds = build.geometryBonds; + const verticesAtoms = []; + const colorsAtoms = []; + const verticesBonds = []; + const c2 = new Color(); + for (let i = 0, l2 = atoms.length; i < l2; i++) { + const atom = atoms[i]; + const x2 = atom[0]; + const y2 = atom[1]; + const z = atom[2]; + verticesAtoms.push(x2, y2, z); + const r = atom[3][0] / 255; + const g2 = atom[3][1] / 255; + const b3 = atom[3][2] / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + colorsAtoms.push(c2.r, c2.g, c2.b); + } + for (let i = 0, l2 = _bonds.length; i < l2; i++) { + const bond = _bonds[i]; + const start = bond[0]; + const end = bond[1]; + const startAtom = _atomMap[start]; + const endAtom = _atomMap[end]; + let x2 = startAtom[0]; + let y2 = startAtom[1]; + let z = startAtom[2]; + verticesBonds.push(x2, y2, z); + x2 = endAtom[0]; + y2 = endAtom[1]; + z = endAtom[2]; + verticesBonds.push(x2, y2, z); + } + geometryAtoms.setAttribute("position", new Float32BufferAttribute(verticesAtoms, 3)); + geometryAtoms.setAttribute("color", new Float32BufferAttribute(colorsAtoms, 3)); + geometryBonds.setAttribute("position", new Float32BufferAttribute(verticesBonds, 3)); + return build; + } + const CPK = { h: [255, 255, 255], he: [217, 255, 255], li: [204, 128, 255], be: [194, 255, 0], b: [255, 181, 181], c: [144, 144, 144], n: [48, 80, 248], o: [255, 13, 13], f: [144, 224, 80], ne: [179, 227, 245], na: [171, 92, 242], mg: [138, 255, 0], al: [191, 166, 166], si: [240, 200, 160], p: [255, 128, 0], s: [255, 255, 48], cl: [31, 240, 31], ar: [128, 209, 227], k: [143, 64, 212], ca: [61, 255, 0], sc: [230, 230, 230], ti: [191, 194, 199], v: [166, 166, 171], cr: [138, 153, 199], mn: [156, 122, 199], fe: [224, 102, 51], co: [240, 144, 160], ni: [80, 208, 80], cu: [200, 128, 51], zn: [125, 128, 176], ga: [194, 143, 143], ge: [102, 143, 143], as: [189, 128, 227], se: [255, 161, 0], br: [166, 41, 41], kr: [92, 184, 209], rb: [112, 46, 176], sr: [0, 255, 0], y: [148, 255, 255], zr: [148, 224, 224], nb: [115, 194, 201], mo: [84, 181, 181], tc: [59, 158, 158], ru: [36, 143, 143], rh: [10, 125, 140], pd: [0, 105, 133], ag: [192, 192, 192], cd: [255, 217, 143], in: [166, 117, 115], sn: [102, 128, 128], sb: [158, 99, 181], te: [212, 122, 0], i: [148, 0, 148], xe: [66, 158, 176], cs: [87, 23, 143], ba: [0, 201, 0], la: [112, 212, 255], ce: [255, 255, 199], pr: [217, 255, 199], nd: [199, 255, 199], pm: [163, 255, 199], sm: [143, 255, 199], eu: [97, 255, 199], gd: [69, 255, 199], tb: [48, 255, 199], dy: [31, 255, 199], ho: [0, 255, 156], er: [0, 230, 117], tm: [0, 212, 82], yb: [0, 191, 56], lu: [0, 171, 36], hf: [77, 194, 255], ta: [77, 166, 255], w: [33, 148, 214], re: [38, 125, 171], os: [38, 102, 150], ir: [23, 84, 135], pt: [208, 208, 224], au: [255, 209, 35], hg: [184, 184, 208], tl: [166, 84, 77], pb: [87, 89, 97], bi: [158, 79, 181], po: [171, 92, 0], at: [117, 79, 69], rn: [66, 130, 150], fr: [66, 0, 102], ra: [0, 125, 0], ac: [112, 171, 250], th: [0, 186, 255], pa: [0, 161, 255], u: [0, 143, 255], np: [0, 128, 255], pu: [0, 107, 255], am: [84, 92, 242], cm: [120, 92, 227], bk: [138, 79, 227], cf: [161, 54, 212], es: [179, 31, 212], fm: [179, 31, 186], md: [179, 13, 166], no: [189, 13, 135], lr: [199, 0, 102], rf: [204, 0, 89], db: [209, 0, 79], sg: [217, 0, 69], bh: [224, 0, 56], hs: [230, 0, 46], mt: [235, 0, 38], ds: [235, 0, 38], rg: [235, 0, 38], cn: [235, 0, 38], uut: [235, 0, 38], uuq: [235, 0, 38], uup: [235, 0, 38], uuh: [235, 0, 38], uus: [235, 0, 38], uuo: [235, 0, 38] }; + const atoms = []; + const _bonds = []; + const _bhash = {}; + const _atomMap = {}; + const lines = text2.split("\n"); + for (let i = 0, l2 = lines.length; i < l2; i++) { + if (lines[i].slice(0, 4) === "ATOM" || lines[i].slice(0, 6) === "HETATM") { + const x2 = parseFloat(lines[i].slice(30, 37)); + const y2 = parseFloat(lines[i].slice(38, 45)); + const z = parseFloat(lines[i].slice(46, 53)); + const index2 = parseInt(lines[i].slice(6, 11)) - 1; + let e = trim(lines[i].slice(76, 78)).toLowerCase(); + if (e === "") { + e = trim(lines[i].slice(12, 14)).toLowerCase(); + } + const atomData = [x2, y2, z, CPK[e], capitalize(e)]; + atoms.push(atomData); + _atomMap[index2] = atomData; + } else if (lines[i].slice(0, 6) === "CONECT") { + const satom = parseInt(lines[i].slice(6, 11)); + parseBond(11, 5, satom, i); + parseBond(16, 5, satom, i); + parseBond(21, 5, satom, i); + parseBond(26, 5, satom, i); + } + } + return buildGeometry(); + } +}; + +// node_modules/three/examples/jsm/loaders/PLYLoader.js +var _color2 = new Color(); +var PLYLoader = class extends Loader { + constructor(manager) { + super(manager); + this.propertyNameMapping = {}; + this.customPropertyMapping = {}; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setPropertyNameMapping(mapping) { + this.propertyNameMapping = mapping; + } + setCustomPropertyNameMapping(mapping) { + this.customPropertyMapping = mapping; + } + parse(data2) { + function parseHeader(data3, headerLength = 0) { + const patternHeader = /^ply([\s\S]*)end_header(\r\n|\r|\n)/; + let headerText = ""; + const result = patternHeader.exec(data3); + if (result !== null) { + headerText = result[1]; + } + const header = { + comments: [], + elements: [], + headerLength, + objInfo: "" + }; + const lines = headerText.split(/\r\n|\r|\n/); + let currentElement; + function make_ply_element_property(propertValues, propertyNameMapping) { + const property2 = { type: propertValues[0] }; + if (property2.type === "list") { + property2.name = propertValues[3]; + property2.countType = propertValues[1]; + property2.itemType = propertValues[2]; + } else { + property2.name = propertValues[1]; + } + if (property2.name in propertyNameMapping) { + property2.name = propertyNameMapping[property2.name]; + } + return property2; + } + for (let i = 0; i < lines.length; i++) { + let line2 = lines[i]; + line2 = line2.trim(); + if (line2 === "") continue; + const lineValues = line2.split(/\s+/); + const lineType = lineValues.shift(); + line2 = lineValues.join(" "); + switch (lineType) { + case "format": + header.format = lineValues[0]; + header.version = lineValues[1]; + break; + case "comment": + header.comments.push(line2); + break; + case "element": + if (currentElement !== void 0) { + header.elements.push(currentElement); + } + currentElement = {}; + currentElement.name = lineValues[0]; + currentElement.count = parseInt(lineValues[1]); + currentElement.properties = []; + break; + case "property": + currentElement.properties.push(make_ply_element_property(lineValues, scope.propertyNameMapping)); + break; + case "obj_info": + header.objInfo = line2; + break; + default: + console.log("unhandled", lineType, lineValues); + } + } + if (currentElement !== void 0) { + header.elements.push(currentElement); + } + return header; + } + function parseASCIINumber(n2, type) { + switch (type) { + case "char": + case "uchar": + case "short": + case "ushort": + case "int": + case "uint": + case "int8": + case "uint8": + case "int16": + case "uint16": + case "int32": + case "uint32": + return parseInt(n2); + case "float": + case "double": + case "float32": + case "float64": + return parseFloat(n2); + } + } + function parseASCIIElement(properties, tokens) { + const element = {}; + for (let i = 0; i < properties.length; i++) { + if (tokens.empty()) return null; + if (properties[i].type === "list") { + const list = []; + const n2 = parseASCIINumber(tokens.next(), properties[i].countType); + for (let j = 0; j < n2; j++) { + if (tokens.empty()) return null; + list.push(parseASCIINumber(tokens.next(), properties[i].itemType)); + } + element[properties[i].name] = list; + } else { + element[properties[i].name] = parseASCIINumber(tokens.next(), properties[i].type); + } + } + return element; + } + function createBuffer() { + const buffer = { + indices: [], + vertices: [], + normals: [], + uvs: [], + faceVertexUvs: [], + colors: [], + faceVertexColors: [] + }; + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + buffer[customProperty] = []; + } + return buffer; + } + function mapElementAttributes(properties) { + const elementNames = properties.map((property2) => { + return property2.name; + }); + function findAttrName(names) { + for (let i = 0, l2 = names.length; i < l2; i++) { + const name2 = names[i]; + if (elementNames.includes(name2)) return name2; + } + return null; + } + return { + attrX: findAttrName(["x", "px", "posx"]) || "x", + attrY: findAttrName(["y", "py", "posy"]) || "y", + attrZ: findAttrName(["z", "pz", "posz"]) || "z", + attrNX: findAttrName(["nx", "normalx"]), + attrNY: findAttrName(["ny", "normaly"]), + attrNZ: findAttrName(["nz", "normalz"]), + attrS: findAttrName(["s", "u", "texture_u", "tx"]), + attrT: findAttrName(["t", "v", "texture_v", "ty"]), + attrR: findAttrName(["red", "diffuse_red", "r", "diffuse_r"]), + attrG: findAttrName(["green", "diffuse_green", "g", "diffuse_g"]), + attrB: findAttrName(["blue", "diffuse_blue", "b", "diffuse_b"]) + }; + } + function parseASCII(data3, header) { + const buffer = createBuffer(); + const patternBody = /end_header\s+(\S[\s\S]*\S|\S)\s*$/; + let body, matches; + if ((matches = patternBody.exec(data3)) !== null) { + body = matches[1].split(/\s+/); + } else { + body = []; + } + const tokens = new ArrayStream(body); + loop: for (let i = 0; i < header.elements.length; i++) { + const elementDesc = header.elements[i]; + const attributeMap = mapElementAttributes(elementDesc.properties); + for (let j = 0; j < elementDesc.count; j++) { + const element = parseASCIIElement(elementDesc.properties, tokens); + if (!element) break loop; + handleElement(buffer, elementDesc.name, element, attributeMap); + } + } + return postProcess(buffer); + } + function postProcess(buffer) { + let geometry2 = new BufferGeometry(); + if (buffer.indices.length > 0) { + geometry2.setIndex(buffer.indices); + } + geometry2.setAttribute("position", new Float32BufferAttribute(buffer.vertices, 3)); + if (buffer.normals.length > 0) { + geometry2.setAttribute("normal", new Float32BufferAttribute(buffer.normals, 3)); + } + if (buffer.uvs.length > 0) { + geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.uvs, 2)); + } + if (buffer.colors.length > 0) { + geometry2.setAttribute("color", new Float32BufferAttribute(buffer.colors, 3)); + } + if (buffer.faceVertexUvs.length > 0 || buffer.faceVertexColors.length > 0) { + geometry2 = geometry2.toNonIndexed(); + if (buffer.faceVertexUvs.length > 0) geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.faceVertexUvs, 2)); + if (buffer.faceVertexColors.length > 0) geometry2.setAttribute("color", new Float32BufferAttribute(buffer.faceVertexColors, 3)); + } + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + if (buffer[customProperty].length > 0) { + geometry2.setAttribute( + customProperty, + new Float32BufferAttribute( + buffer[customProperty], + scope.customPropertyMapping[customProperty].length + ) + ); + } + } + geometry2.computeBoundingSphere(); + return geometry2; + } + function handleElement(buffer, elementName, element, cacheEntry) { + if (elementName === "vertex") { + buffer.vertices.push(element[cacheEntry.attrX], element[cacheEntry.attrY], element[cacheEntry.attrZ]); + if (cacheEntry.attrNX !== null && cacheEntry.attrNY !== null && cacheEntry.attrNZ !== null) { + buffer.normals.push(element[cacheEntry.attrNX], element[cacheEntry.attrNY], element[cacheEntry.attrNZ]); + } + if (cacheEntry.attrS !== null && cacheEntry.attrT !== null) { + buffer.uvs.push(element[cacheEntry.attrS], element[cacheEntry.attrT]); + } + if (cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null) { + _color2.setRGB( + element[cacheEntry.attrR] / 255, + element[cacheEntry.attrG] / 255, + element[cacheEntry.attrB] / 255 + ).convertSRGBToLinear(); + buffer.colors.push(_color2.r, _color2.g, _color2.b); + } + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + for (const elementProperty of scope.customPropertyMapping[customProperty]) { + buffer[customProperty].push(element[elementProperty]); + } + } + } else if (elementName === "face") { + const vertex_indices = element.vertex_indices || element.vertex_index; + const texcoord = element.texcoord; + if (vertex_indices.length === 3) { + buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[2]); + if (texcoord && texcoord.length === 6) { + buffer.faceVertexUvs.push(texcoord[0], texcoord[1]); + buffer.faceVertexUvs.push(texcoord[2], texcoord[3]); + buffer.faceVertexUvs.push(texcoord[4], texcoord[5]); + } + } else if (vertex_indices.length === 4) { + buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[3]); + buffer.indices.push(vertex_indices[1], vertex_indices[2], vertex_indices[3]); + } + if (cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null) { + _color2.setRGB( + element[cacheEntry.attrR] / 255, + element[cacheEntry.attrG] / 255, + element[cacheEntry.attrB] / 255 + ).convertSRGBToLinear(); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + } + } + } + function binaryReadElement(at, properties) { + const element = {}; + let read = 0; + for (let i = 0; i < properties.length; i++) { + const property2 = properties[i]; + const valueReader = property2.valueReader; + if (property2.type === "list") { + const list = []; + const n2 = property2.countReader.read(at + read); + read += property2.countReader.size; + for (let j = 0; j < n2; j++) { + list.push(valueReader.read(at + read)); + read += valueReader.size; + } + element[property2.name] = list; + } else { + element[property2.name] = valueReader.read(at + read); + read += valueReader.size; + } + } + return [element, read]; + } + function setPropertyBinaryReaders(properties, body, little_endian) { + function getBinaryReader(dataview, type, little_endian2) { + switch (type) { + case "int8": + case "char": + return { read: (at) => { + return dataview.getInt8(at); + }, size: 1 }; + case "uint8": + case "uchar": + return { read: (at) => { + return dataview.getUint8(at); + }, size: 1 }; + case "int16": + case "short": + return { read: (at) => { + return dataview.getInt16(at, little_endian2); + }, size: 2 }; + case "uint16": + case "ushort": + return { read: (at) => { + return dataview.getUint16(at, little_endian2); + }, size: 2 }; + case "int32": + case "int": + return { read: (at) => { + return dataview.getInt32(at, little_endian2); + }, size: 4 }; + case "uint32": + case "uint": + return { read: (at) => { + return dataview.getUint32(at, little_endian2); + }, size: 4 }; + case "float32": + case "float": + return { read: (at) => { + return dataview.getFloat32(at, little_endian2); + }, size: 4 }; + case "float64": + case "double": + return { read: (at) => { + return dataview.getFloat64(at, little_endian2); + }, size: 8 }; + } + } + for (let i = 0, l2 = properties.length; i < l2; i++) { + const property2 = properties[i]; + if (property2.type === "list") { + property2.countReader = getBinaryReader(body, property2.countType, little_endian); + property2.valueReader = getBinaryReader(body, property2.itemType, little_endian); + } else { + property2.valueReader = getBinaryReader(body, property2.type, little_endian); + } + } + } + function parseBinary(data3, header) { + const buffer = createBuffer(); + const little_endian = header.format === "binary_little_endian"; + const body = new DataView(data3, header.headerLength); + let result, loc = 0; + for (let currentElement = 0; currentElement < header.elements.length; currentElement++) { + const elementDesc = header.elements[currentElement]; + const properties = elementDesc.properties; + const attributeMap = mapElementAttributes(properties); + setPropertyBinaryReaders(properties, body, little_endian); + for (let currentElementCount = 0; currentElementCount < elementDesc.count; currentElementCount++) { + result = binaryReadElement(loc, properties); + loc += result[1]; + const element = result[0]; + handleElement(buffer, elementDesc.name, element, attributeMap); + } + } + return postProcess(buffer); + } + function extractHeaderText(bytes) { + let i = 0; + let cont = true; + let line2 = ""; + const lines = []; + const startLine = new TextDecoder().decode(bytes.subarray(0, 5)); + const hasCRNL = /^ply\r\n/.test(startLine); + do { + const c2 = String.fromCharCode(bytes[i++]); + if (c2 !== "\n" && c2 !== "\r") { + line2 += c2; + } else { + if (line2 === "end_header") cont = false; + if (line2 !== "") { + lines.push(line2); + line2 = ""; + } + } + } while (cont && i < bytes.length); + if (hasCRNL === true) i++; + return { headerText: lines.join("\r") + "\r", headerLength: i }; + } + let geometry; + const scope = this; + if (data2 instanceof ArrayBuffer) { + const bytes = new Uint8Array(data2); + const { headerText, headerLength } = extractHeaderText(bytes); + const header = parseHeader(headerText, headerLength); + if (header.format === "ascii") { + const text2 = new TextDecoder().decode(bytes); + geometry = parseASCII(text2, header); + } else { + geometry = parseBinary(data2, header); + } + } else { + geometry = parseASCII(data2, parseHeader(data2)); + } + return geometry; + } +}; +var ArrayStream = class { + constructor(arr) { + this.arr = arr; + this.i = 0; + } + empty() { + return this.i >= this.arr.length; + } + next() { + return this.arr[this.i++]; + } +}; + +// node_modules/three/examples/jsm/loaders/PVRLoader.js +var PVRLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const headerLengthInt = 13; + const header = new Uint32Array(buffer, 0, headerLengthInt); + const pvrDatas = { + buffer, + header, + loadMipmaps + }; + if (header[0] === 55727696) { + return _parseV3(pvrDatas); + } else if (header[11] === 559044176) { + return _parseV2(pvrDatas); + } else { + console.error("THREE.PVRLoader: Unknown PVR format."); + } + } +}; +function _parseV3(pvrDatas) { + const header = pvrDatas.header; + let bpp, format; + const metaLen = header[12], pixelFormat = header[2], height2 = header[6], width2 = header[7], numFaces = header[10], numMipmaps = header[11]; + switch (pixelFormat) { + case 0: + bpp = 2; + format = RGB_PVRTC_2BPPV1_Format; + break; + case 1: + bpp = 2; + format = RGBA_PVRTC_2BPPV1_Format; + break; + case 2: + bpp = 4; + format = RGB_PVRTC_4BPPV1_Format; + break; + case 3: + bpp = 4; + format = RGBA_PVRTC_4BPPV1_Format; + break; + default: + console.error("THREE.PVRLoader: Unsupported PVR format:", pixelFormat); + } + pvrDatas.dataPtr = 52 + metaLen; + pvrDatas.bpp = bpp; + pvrDatas.format = format; + pvrDatas.width = width2; + pvrDatas.height = height2; + pvrDatas.numSurfaces = numFaces; + pvrDatas.numMipmaps = numMipmaps; + pvrDatas.isCubemap = numFaces === 6; + return _extract(pvrDatas); +} +function _parseV2(pvrDatas) { + const header = pvrDatas.header; + const headerLength = header[0], height2 = header[1], width2 = header[2], numMipmaps = header[3], flags = header[4], bitmaskAlpha = header[10], numSurfs = header[12]; + const TYPE_MASK = 255; + const PVRTC_2 = 24, PVRTC_4 = 25; + const formatFlags = flags & TYPE_MASK; + let bpp, format; + const _hasAlpha = bitmaskAlpha > 0; + if (formatFlags === PVRTC_4) { + format = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format; + bpp = 4; + } else if (formatFlags === PVRTC_2) { + format = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format; + bpp = 2; + } else { + console.error("THREE.PVRLoader: Unknown PVR format:", formatFlags); + } + pvrDatas.dataPtr = headerLength; + pvrDatas.bpp = bpp; + pvrDatas.format = format; + pvrDatas.width = width2; + pvrDatas.height = height2; + pvrDatas.numSurfaces = numSurfs; + pvrDatas.numMipmaps = numMipmaps + 1; + pvrDatas.isCubemap = numSurfs === 6; + return _extract(pvrDatas); +} +function _extract(pvrDatas) { + const pvr = { + mipmaps: [], + width: pvrDatas.width, + height: pvrDatas.height, + format: pvrDatas.format, + mipmapCount: pvrDatas.numMipmaps, + isCubemap: pvrDatas.isCubemap + }; + const buffer = pvrDatas.buffer; + let dataOffset = pvrDatas.dataPtr, dataSize = 0, blockSize = 0, blockWidth = 0, blockHeight = 0, widthBlocks = 0, heightBlocks = 0; + const bpp = pvrDatas.bpp, numSurfs = pvrDatas.numSurfaces; + if (bpp === 2) { + blockWidth = 8; + blockHeight = 4; + } else { + blockWidth = 4; + blockHeight = 4; + } + blockSize = blockWidth * blockHeight * bpp / 8; + pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs; + let mipLevel = 0; + while (mipLevel < pvrDatas.numMipmaps) { + const sWidth = pvrDatas.width >> mipLevel, sHeight = pvrDatas.height >> mipLevel; + widthBlocks = sWidth / blockWidth; + heightBlocks = sHeight / blockHeight; + if (widthBlocks < 2) widthBlocks = 2; + if (heightBlocks < 2) heightBlocks = 2; + dataSize = widthBlocks * heightBlocks * blockSize; + for (let surfIndex = 0; surfIndex < numSurfs; surfIndex++) { + const byteArray = new Uint8Array(buffer, dataOffset, dataSize); + const mipmap = { + data: byteArray, + width: sWidth, + height: sHeight + }; + pvr.mipmaps[surfIndex * pvrDatas.numMipmaps + mipLevel] = mipmap; + dataOffset += dataSize; + } + mipLevel++; + } + return pvr; +} + +// node_modules/three/examples/jsm/loaders/UltraHDRLoader.js +var SRGB_TO_LINEAR = Array(1024).fill(0).map( + (_, value2) => Math.pow(value2 / 255 * 0.9478672986 + 0.0521327014, 2.4) +); +var UltraHDRLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + setDataType(value2) { + this.type = value2; + return this; + } + parse(buffer, onLoad) { + const xmpMetadata = { + version: null, + baseRenditionIsHDR: null, + gainMapMin: null, + gainMapMax: null, + gamma: null, + offsetSDR: null, + offsetHDR: null, + hdrCapacityMin: null, + hdrCapacityMax: null + }; + const textDecoder = new TextDecoder(); + const data2 = new DataView(buffer); + let byteOffset = 0; + const sections = []; + while (byteOffset < data2.byteLength) { + const byte = data2.getUint8(byteOffset); + if (byte === 255) { + const leadingByte = data2.getUint8(byteOffset + 1); + if ([ + /* Valid section headers */ + 216, + // SOI + 224, + // APP0 + 225, + // APP1 + 226 + // APP2 + ].includes(leadingByte)) { + sections.push({ + sectionType: leadingByte, + section: [byte, leadingByte], + sectionOffset: byteOffset + 2 + }); + byteOffset += 2; + } else { + sections[sections.length - 1].section.push(byte, leadingByte); + byteOffset += 2; + } + } else { + sections[sections.length - 1].section.push(byte); + byteOffset++; + } + } + let primaryImage, gainmapImage; + for (let i = 0; i < sections.length; i++) { + const { sectionType, section, sectionOffset } = sections[i]; + if (sectionType === 224) { + } else if (sectionType === 225) { + this._parseXMPMetadata( + textDecoder.decode(new Uint8Array(section)), + xmpMetadata + ); + } else if (sectionType === 226) { + const sectionData = new DataView( + new Uint8Array(section.slice(2)).buffer + ); + const sectionHeader = sectionData.getUint32(2, false); + if (sectionHeader === 1297106432) { + const mpfLittleEndian = sectionData.getUint32(6) === 1229531648; + const mpfBytesOffset = 60; + const primaryImageSize = sectionData.getUint32( + mpfBytesOffset, + mpfLittleEndian + ); + const primaryImageOffset = sectionData.getUint32( + mpfBytesOffset + 4, + mpfLittleEndian + ); + const gainmapImageSize = sectionData.getUint32( + mpfBytesOffset + 16, + mpfLittleEndian + ); + const gainmapImageOffset = sectionData.getUint32(mpfBytesOffset + 20, mpfLittleEndian) + sectionOffset + 6; + primaryImage = new Uint8Array( + data2.buffer, + primaryImageOffset, + primaryImageSize + ); + gainmapImage = new Uint8Array( + data2.buffer, + gainmapImageOffset, + gainmapImageSize + ); + } + } + } + if (!xmpMetadata.version) { + throw new Error("THREE.UltraHDRLoader: Not a valid UltraHDR image"); + } + if (primaryImage && gainmapImage) { + this._applyGainmapToSDR( + xmpMetadata, + primaryImage, + gainmapImage, + (hdrBuffer, width2, height2) => { + onLoad({ + width: width2, + height: height2, + data: hdrBuffer, + format: RGBAFormat, + type: this.type + }); + }, + (error) => { + throw new Error(error); + } + ); + } else { + throw new Error("THREE.UltraHDRLoader: Could not parse UltraHDR images"); + } + } + load(url, onLoad, onProgress, onError) { + const texture = new DataTexture( + this.type === HalfFloatType ? new Uint16Array() : new Float32Array(), + 0, + 0, + RGBAFormat, + this.type, + UVMapping, + ClampToEdgeWrapping, + ClampToEdgeWrapping, + LinearFilter, + LinearMipMapLinearFilter, + 1, + LinearSRGBColorSpace + ); + texture.generateMipmaps = true; + texture.flipY = true; + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setPath(this.path); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + try { + this.parse( + buffer, + (texData) => { + texture.image = { + data: texData.data, + width: texData.width, + height: texData.height + }; + texture.needsUpdate = true; + if (onLoad) onLoad(texture, texData); + } + ); + } catch (error) { + if (onError) onError(error); + console.error(error); + } + }, onProgress, onError); + return texture; + } + _parseXMPMetadata(xmpDataString, xmpMetadata) { + const domParser = new DOMParser(); + const xmpXml = domParser.parseFromString( + xmpDataString.substring( + xmpDataString.indexOf("<"), + xmpDataString.lastIndexOf(">") + 1 + ), + "text/xml" + ); + const [hasHDRContainerDescriptor] = xmpXml.getElementsByTagName( + "Container:Directory" + ); + if (hasHDRContainerDescriptor) { + } else { + const [gainmapNode] = xmpXml.getElementsByTagName("rdf:Description"); + xmpMetadata.version = gainmapNode.getAttribute("hdrgm:Version"); + xmpMetadata.baseRenditionIsHDR = gainmapNode.getAttribute("hdrgm:BaseRenditionIsHDR") === "True"; + xmpMetadata.gainMapMin = parseFloat( + gainmapNode.getAttribute("hdrgm:GainMapMin") || 0 + ); + xmpMetadata.gainMapMax = parseFloat( + gainmapNode.getAttribute("hdrgm:GainMapMax") || 1 + ); + xmpMetadata.gamma = parseFloat( + gainmapNode.getAttribute("hdrgm:Gamma") || 1 + ); + xmpMetadata.offsetSDR = parseFloat( + gainmapNode.getAttribute("hdrgm:OffsetSDR") / (1 / 64) + ); + xmpMetadata.offsetHDR = parseFloat( + gainmapNode.getAttribute("hdrgm:OffsetHDR") / (1 / 64) + ); + xmpMetadata.hdrCapacityMin = parseFloat( + gainmapNode.getAttribute("hdrgm:HDRCapacityMin") || 0 + ); + xmpMetadata.hdrCapacityMax = parseFloat( + gainmapNode.getAttribute("hdrgm:HDRCapacityMax") || 1 + ); + } + } + _srgbToLinear(value2) { + if (value2 / 255 < 0.04045) { + return value2 / 255 * 0.0773993808; + } + if (value2 < 1024) { + return SRGB_TO_LINEAR[~~value2]; + } + return Math.pow(value2 / 255 * 0.9478672986 + 0.0521327014, 2.4); + } + _applyGainmapToSDR(xmpMetadata, sdrBuffer, gainmapBuffer, onSuccess, onError) { + const getImageDataFromBuffer = (buffer) => new Promise((resolve, reject2) => { + const imageLoader = document.createElement("img"); + imageLoader.onload = () => { + const image = { + width: imageLoader.naturalWidth, + height: imageLoader.naturalHeight, + source: imageLoader + }; + URL.revokeObjectURL(imageLoader.src); + resolve(image); + }; + imageLoader.onerror = () => { + URL.revokeObjectURL(imageLoader.src); + reject2(); + }; + imageLoader.src = URL.createObjectURL( + new Blob([buffer], { type: "image/jpeg" }) + ); + }); + Promise.all([ + getImageDataFromBuffer(sdrBuffer), + getImageDataFromBuffer(gainmapBuffer) + ]).then(([sdrImage, gainmapImage]) => { + const sdrImageAspect = sdrImage.width / sdrImage.height; + const gainmapImageAspect = gainmapImage.width / gainmapImage.height; + if (sdrImageAspect !== gainmapImageAspect) { + onError( + "THREE.UltraHDRLoader Error: Aspect ratio mismatch between SDR and Gainmap images" + ); + return; + } + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { + willReadFrequently: true, + colorSpace: "srgb" + }); + canvas.width = sdrImage.width; + canvas.height = sdrImage.height; + ctx.drawImage( + gainmapImage.source, + 0, + 0, + gainmapImage.width, + gainmapImage.height, + 0, + 0, + sdrImage.width, + sdrImage.height + ); + const gainmapImageData = ctx.getImageData( + 0, + 0, + sdrImage.width, + sdrImage.height, + { colorSpace: "srgb" } + ); + ctx.drawImage(sdrImage.source, 0, 0); + const sdrImageData = ctx.getImageData( + 0, + 0, + sdrImage.width, + sdrImage.height, + { colorSpace: "srgb" } + ); + let hdrBuffer; + if (this.type === HalfFloatType) { + hdrBuffer = new Uint16Array(sdrImageData.data.length).fill(23544); + } else { + hdrBuffer = new Float32Array(sdrImageData.data.length).fill(255); + } + const maxDisplayBoost = Math.sqrt( + Math.pow( + /* 1.8 instead of 2 near-perfectly rectifies approximations introduced by precalculated SRGB_TO_LINEAR values */ + 1.8, + xmpMetadata.hdrCapacityMax + ) + ); + const unclampedWeightFactor = (Math.log2(maxDisplayBoost) - xmpMetadata.hdrCapacityMin) / (xmpMetadata.hdrCapacityMax - xmpMetadata.hdrCapacityMin); + const weightFactor = Math.min( + Math.max(unclampedWeightFactor, 0), + 1 + ); + const useGammaOne = xmpMetadata.gamma === 1; + for (let pixelIndex = 0; pixelIndex < sdrImageData.data.length; pixelIndex += 4) { + const x2 = pixelIndex / 4 % sdrImage.width; + const y2 = Math.floor(pixelIndex / 4 / sdrImage.width); + for (let channelIndex = 0; channelIndex < 3; channelIndex++) { + const sdrValue = sdrImageData.data[pixelIndex + channelIndex]; + const gainmapIndex = (y2 * sdrImage.width + x2) * 4 + channelIndex; + const gainmapValue = gainmapImageData.data[gainmapIndex] / 255; + const logRecovery = useGammaOne ? gainmapValue : Math.pow(gainmapValue, 1 / xmpMetadata.gamma); + const logBoost = xmpMetadata.gainMapMin * (1 - logRecovery) + xmpMetadata.gainMapMax * logRecovery; + const hdrValue = (sdrValue + xmpMetadata.offsetSDR) * (logBoost * weightFactor === 0 ? 1 : Math.pow(2, logBoost * weightFactor)) - xmpMetadata.offsetHDR; + const linearHDRValue = Math.min( + Math.max(this._srgbToLinear(hdrValue), 0), + 65504 + ); + hdrBuffer[pixelIndex + channelIndex] = this.type === HalfFloatType ? DataUtils.toHalfFloat(linearHDRValue) : linearHDRValue; + } + } + onSuccess(hdrBuffer, sdrImage.width, sdrImage.height); + }).catch(() => { + throw new Error( + "THREE.UltraHDRLoader Error: Could not parse UltraHDR images" + ); + }); + } +}; + +// node_modules/three/examples/jsm/loaders/RGBMLoader.js +var RGBMLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + this.maxRange = 7; + } + setDataType(value2) { + this.type = value2; + return this; + } + setMaxRange(value2) { + this.maxRange = value2; + return this; + } + loadCubemap(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + for (let i = 0; i < 6; i++) { + texture.images[i] = void 0; + } + let loaded = 0; + const scope = this; + function loadTexture(i) { + scope.load(urls[i], function(image) { + texture.images[i] = image; + loaded++; + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, void 0, onError); + } + for (let i = 0; i < urls.length; ++i) { + loadTexture(i); + } + texture.type = this.type; + texture.format = RGBAFormat; + texture.minFilter = LinearFilter; + texture.generateMipmaps = false; + return texture; + } + loadCubemapAsync(urls, onProgress) { + return new Promise((resolve, reject2) => { + this.loadCubemap(urls, resolve, onProgress, reject2); + }); + } + parse(buffer) { + const img = UPNG.decode(buffer); + const rgba = UPNG.toRGBA8(img)[0]; + const data2 = new Uint8Array(rgba); + const size2 = img.width * img.height * 4; + const output = this.type === HalfFloatType ? new Uint16Array(size2) : new Float32Array(size2); + for (let i = 0; i < data2.length; i += 4) { + const r = data2[i + 0] / 255; + const g2 = data2[i + 1] / 255; + const b3 = data2[i + 2] / 255; + const a2 = data2[i + 3] / 255; + if (this.type === HalfFloatType) { + output[i + 0] = DataUtils.toHalfFloat(Math.min(r * a2 * this.maxRange, 65504)); + output[i + 1] = DataUtils.toHalfFloat(Math.min(g2 * a2 * this.maxRange, 65504)); + output[i + 2] = DataUtils.toHalfFloat(Math.min(b3 * a2 * this.maxRange, 65504)); + output[i + 3] = DataUtils.toHalfFloat(1); + } else { + output[i + 0] = r * a2 * this.maxRange; + output[i + 1] = g2 * a2 * this.maxRange; + output[i + 2] = b3 * a2 * this.maxRange; + output[i + 3] = 1; + } + } + return { + width: img.width, + height: img.height, + data: output, + format: RGBAFormat, + type: this.type, + flipY: true + }; + } +}; +var UPNG = {}; +UPNG.toRGBA8 = function(out) { + var w = out.width, h = out.height; + if (out.tabs.acTL == null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer]; + var frms = []; + if (out.frames[0].data == null) out.frames[0].data = out.data; + var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len); + for (var i = 0; i < out.frames.length; i++) { + var frm = out.frames[i]; + var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height; + var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out); + if (i != 0) for (var j = 0; j < len; j++) prev[j] = img[j]; + if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0); + else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1); + frms.push(img.buffer.slice(0)); + if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0); + else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j]; + } + return frms; +}; +UPNG.toRGBA8.decodeImage = function(data2, w, h, out) { + var area = w * h, bpp = UPNG.decode._getBPP(out); + var bpl = Math.ceil(w * bpp / 8); + var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer); + var ctype = out.ctype, depth = out.depth; + var rs = UPNG._bin.readUshort; + if (ctype == 6) { + var qarea = area << 2; + if (depth == 8) for (var i = 0; i < qarea; i += 4) { + bf[i] = data2[i]; + bf[i + 1] = data2[i + 1]; + bf[i + 2] = data2[i + 2]; + bf[i + 3] = data2[i + 3]; + } + if (depth == 16) for (var i = 0; i < qarea; i++) { + bf[i] = data2[i << 1]; + } + } else if (ctype == 2) { + var ts = out.tabs["tRNS"]; + if (ts == null) { + if (depth == 8) for (var i = 0; i < area; i++) { + var ti = i * 3; + bf32[i] = 255 << 24 | data2[ti + 2] << 16 | data2[ti + 1] << 8 | data2[ti]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var ti = i * 6; + bf32[i] = 255 << 24 | data2[ti + 4] << 16 | data2[ti + 2] << 8 | data2[ti]; + } + } else { + var tr = ts[0], tg = ts[1], tb = ts[2]; + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + bf32[i] = 255 << 24 | data2[ti + 2] << 16 | data2[ti + 1] << 8 | data2[ti]; + if (data2[ti] == tr && data2[ti + 1] == tg && data2[ti + 2] == tb) bf[qi + 3] = 0; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 6; + bf32[i] = 255 << 24 | data2[ti + 4] << 16 | data2[ti + 2] << 8 | data2[ti]; + if (rs(data2, ti) == tr && rs(data2, ti + 2) == tg && rs(data2, ti + 4) == tb) bf[qi + 3] = 0; + } + } + } else if (ctype == 3) { + var p2 = out.tabs["PLTE"], ap = out.tabs["tRNS"], tl = ap ? ap.length : 0; + if (depth == 1) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 2) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 4) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, j = data2[i], cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } else if (ctype == 4) { + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 1, gr = data2[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data2[di + 1]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 2, gr = data2[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data2[di + 2]; + } + } else if (ctype == 0) { + var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, to = y2 * w; + if (depth == 1) for (var x2 = 0; x2 < w; x2++) { + var gr = 255 * (data2[off + (x2 >>> 3)] >>> 7 - (x2 & 7) & 1), al = gr == tr * 255 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 2) for (var x2 = 0; x2 < w; x2++) { + var gr = 85 * (data2[off + (x2 >>> 2)] >>> 6 - ((x2 & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 4) for (var x2 = 0; x2 < w; x2++) { + var gr = 17 * (data2[off + (x2 >>> 1)] >>> 4 - ((x2 & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 8) for (var x2 = 0; x2 < w; x2++) { + var gr = data2[off + x2], al = gr == tr ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 16) for (var x2 = 0; x2 < w; x2++) { + var gr = data2[off + (x2 << 1)], al = rs(data2, off + (x2 << 1)) == tr ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + } + } + return bf; +}; +UPNG.decode = function(buff) { + var data2 = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint; + var out = { tabs: {}, frames: [] }; + var dd = new Uint8Array(data2.length), doff = 0; + var fd2, foff = 0; + var text2, keyw, bfr; + var mgck = [137, 80, 78, 71, 13, 10, 26, 10]; + for (var i = 0; i < 8; i++) if (data2[i] != mgck[i]) throw new Error("The input is not a PNG file!"); + while (offset < data2.length) { + var len = bin.readUint(data2, offset); + offset += 4; + var type = bin.readASCII(data2, offset, 4); + offset += 4; + if (type == "IHDR") { + UPNG.decode._IHDR(data2, offset, out); + } else if (type == "CgBI") { + out.tabs[type] = data2.slice(offset, offset + 4); + } else if (type == "IDAT") { + for (var i = 0; i < len; i++) dd[doff + i] = data2[offset + i]; + doff += len; + } else if (type == "acTL") { + out.tabs[type] = { num_frames: rUi(data2, offset), num_plays: rUi(data2, offset + 4) }; + fd2 = new Uint8Array(data2.length); + } else if (type == "fcTL") { + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd2.slice(0, foff), fr.rect.width, fr.rect.height); + foff = 0; + } + var rct = { x: rUi(data2, offset + 12), y: rUi(data2, offset + 16), width: rUi(data2, offset + 4), height: rUi(data2, offset + 8) }; + var del = rUs(data2, offset + 22); + del = rUs(data2, offset + 20) / (del == 0 ? 100 : del); + var frm = { rect: rct, delay: Math.round(del * 1e3), dispose: data2[offset + 24], blend: data2[offset + 25] }; + out.frames.push(frm); + } else if (type == "fdAT") { + for (var i = 0; i < len - 4; i++) fd2[foff + i] = data2[offset + i + 4]; + foff += len - 4; + } else if (type == "pHYs") { + out.tabs[type] = [bin.readUint(data2, offset), bin.readUint(data2, offset + 4), data2[offset + 8]]; + } else if (type == "cHRM") { + out.tabs[type] = []; + for (var i = 0; i < 8; i++) out.tabs[type].push(bin.readUint(data2, offset + i * 4)); + } else if (type == "tEXt" || type == "zTXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = bin.nextZero(data2, offset); + keyw = bin.readASCII(data2, offset, nz - offset); + var tl = offset + len - nz - 1; + if (type == "tEXt") text2 = bin.readASCII(data2, nz + 1, tl); + else { + bfr = UPNG.decode._inflate(data2.slice(nz + 2, nz + 2 + tl)); + text2 = bin.readUTF8(bfr, 0, bfr.length); + } + out.tabs[type][keyw] = text2; + } else if (type == "iTXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = 0, off = offset; + nz = bin.nextZero(data2, off); + keyw = bin.readASCII(data2, off, nz - off); + off = nz + 1; + var cflag = data2[off]; + off += 2; + nz = bin.nextZero(data2, off); + bin.readASCII(data2, off, nz - off); + off = nz + 1; + nz = bin.nextZero(data2, off); + bin.readUTF8(data2, off, nz - off); + off = nz + 1; + var tl = len - (off - offset); + if (cflag == 0) text2 = bin.readUTF8(data2, off, tl); + else { + bfr = UPNG.decode._inflate(data2.slice(off, off + tl)); + text2 = bin.readUTF8(bfr, 0, bfr.length); + } + out.tabs[type][keyw] = text2; + } else if (type == "PLTE") { + out.tabs[type] = bin.readBytes(data2, offset, len); + } else if (type == "hIST") { + var pl = out.tabs["PLTE"].length / 3; + out.tabs[type] = []; + for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data2, offset + i * 2)); + } else if (type == "tRNS") { + if (out.ctype == 3) out.tabs[type] = bin.readBytes(data2, offset, len); + else if (out.ctype == 0) out.tabs[type] = rUs(data2, offset); + else if (out.ctype == 2) out.tabs[type] = [rUs(data2, offset), rUs(data2, offset + 2), rUs(data2, offset + 4)]; + } else if (type == "gAMA") out.tabs[type] = bin.readUint(data2, offset) / 1e5; + else if (type == "sRGB") out.tabs[type] = data2[offset]; + else if (type == "bKGD") { + if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data2, offset)]; + else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [rUs(data2, offset), rUs(data2, offset + 2), rUs(data2, offset + 4)]; + else if (out.ctype == 3) out.tabs[type] = data2[offset]; + } else if (type == "IEND") { + break; + } + offset += len; + bin.readUint(data2, offset); + offset += 4; + } + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd2.slice(0, foff), fr.rect.width, fr.rect.height); + } + out.data = UPNG.decode._decompress(out, dd, out.width, out.height); + delete out.compress; + delete out.interlace; + delete out.filter; + return out; +}; +UPNG.decode._decompress = function(out, dd, w, h) { + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h); + if (out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd, buff); + else dd = UPNG.decode._inflate(dd, buff); + if (out.interlace == 0) dd = UPNG.decode._filterZero(dd, out, 0, w, h); + else if (out.interlace == 1) dd = UPNG.decode._readInterlace(dd, out); + return dd; +}; +UPNG.decode._inflate = function(data2, buff) { + var out = UPNG["inflateRaw"](new Uint8Array(data2.buffer, 2, data2.length - 6), buff); + return out; +}; +UPNG.inflateRaw = function() { + var H = {}; + H.H = {}; + H.H.N = function(N, W) { + var R4 = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q3 = 0, X2 = 0, u = 0, w = 0, d = 0, v, C2; + if (N[0] == 3 && N[1] == 0) return W ? W : new R4(0); + var V = H.H, n2 = V.b, A2 = V.e, l2 = V.R, M = V.n, I2 = V.A, e = V.Z, b3 = V.m, Z2 = W == null; + if (Z2) W = new R4(N.length >>> 2 << 5); + while (i == 0) { + i = n2(N, d, 1); + m = n2(N, d + 1, 2); + d += 3; + if (m == 0) { + if ((d & 7) != 0) d += 8 - (d & 7); + var D = (d >>> 3) + 4, q2 = N[D - 4] | N[D - 3] << 8; + if (Z2) W = H.H.W(W, w + q2); + W.set(new R4(N.buffer, N.byteOffset + D, q2), w); + d = D + q2 << 3; + w += q2; + continue; + } + if (Z2) W = H.H.W(W, w + (1 << 17)); + if (m == 1) { + v = b3.J; + C2 = b3.h; + X2 = (1 << 9) - 1; + u = (1 << 5) - 1; + } + if (m == 2) { + J = A2(N, d, 5) + 257; + h = A2(N, d + 5, 5) + 1; + Q3 = A2(N, d + 10, 4) + 4; + d += 14; + var j = 1; + for (var c2 = 0; c2 < 38; c2 += 2) { + b3.Q[c2] = 0; + b3.Q[c2 + 1] = 0; + } + for (var c2 = 0; c2 < Q3; c2++) { + var K = A2(N, d + c2 * 3, 3); + b3.Q[(b3.X[c2] << 1) + 1] = K; + if (K > j) j = K; + } + d += 3 * Q3; + M(b3.Q, j); + I2(b3.Q, j, b3.u); + v = b3.w; + C2 = b3.d; + d = l2(b3.u, (1 << j) - 1, J + h, N, d, b3.v); + var r = V.V(b3.v, 0, J, b3.C); + X2 = (1 << r) - 1; + var S = V.V(b3.v, J, h, b3.D); + u = (1 << S) - 1; + M(b3.C, r); + I2(b3.C, r, v); + M(b3.D, S); + I2(b3.D, S, C2); + } + while (true) { + var T = v[e(N, d) & X2]; + d += T & 15; + var p2 = T >>> 4; + if (p2 >>> 8 == 0) { + W[w++] = p2; + } else if (p2 == 256) { + break; + } else { + var z = w + p2 - 254; + if (p2 > 264) { + var _ = b3.q[p2 - 257]; + z = w + (_ >>> 3) + A2(N, d, _ & 7); + d += _ & 7; + } + var $2 = C2[e(N, d) & u]; + d += $2 & 15; + var s = $2 >>> 4, Y2 = b3.c[s], a2 = (Y2 >>> 4) + n2(N, d, Y2 & 15); + d += Y2 & 15; + while (w < z) { + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + } + w = z; + } + } + } + return W.length == w ? W : W.slice(0, w); + }; + H.H.W = function(N, W) { + var R4 = N.length; + if (W <= R4) return N; + var V = new Uint8Array(R4 << 1); + V.set(N, 0); + return V; + }; + H.H.R = function(N, W, R4, V, n2, A2) { + var l2 = H.H.e, M = H.H.Z, I2 = 0; + while (I2 < R4) { + var e = N[M(V, n2) & W]; + n2 += e & 15; + var b3 = e >>> 4; + if (b3 <= 15) { + A2[I2] = b3; + I2++; + } else { + var Z2 = 0, m = 0; + if (b3 == 16) { + m = 3 + l2(V, n2, 2); + n2 += 2; + Z2 = A2[I2 - 1]; + } else if (b3 == 17) { + m = 3 + l2(V, n2, 3); + n2 += 3; + } else if (b3 == 18) { + m = 11 + l2(V, n2, 7); + n2 += 7; + } + var J = I2 + m; + while (I2 < J) { + A2[I2] = Z2; + I2++; + } + } + } + return n2; + }; + H.H.V = function(N, W, R4, V) { + var n2 = 0, A2 = 0, l2 = V.length >>> 1; + while (A2 < R4) { + var M = N[A2 + W]; + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = M; + if (M > n2) n2 = M; + A2++; + } + while (A2 < l2) { + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = 0; + A2++; + } + return n2; + }; + H.H.n = function(N, W) { + var R4 = H.H.m, V = N.length, n2, A2, l2, M, I2, e = R4.j; + for (var M = 0; M <= W; M++) e[M] = 0; + for (M = 1; M < V; M += 2) e[N[M]]++; + var b3 = R4.K; + n2 = 0; + e[0] = 0; + for (A2 = 1; A2 <= W; A2++) { + n2 = n2 + e[A2 - 1] << 1; + b3[A2] = n2; + } + for (l2 = 0; l2 < V; l2 += 2) { + I2 = N[l2 + 1]; + if (I2 != 0) { + N[l2] = b3[I2]; + b3[I2]++; + } + } + }; + H.H.A = function(N, W, R4) { + var V = N.length, n2 = H.H.m, A2 = n2.r; + for (var l2 = 0; l2 < V; l2 += 2) if (N[l2 + 1] != 0) { + var M = l2 >> 1, I2 = N[l2 + 1], e = M << 4 | I2, b3 = W - I2, Z2 = N[l2] << b3, m = Z2 + (1 << b3); + while (Z2 != m) { + var J = A2[Z2] >>> 15 - W; + R4[J] = e; + Z2++; + } + } + }; + H.H.l = function(N, W) { + var R4 = H.H.m.r, V = 15 - W; + for (var n2 = 0; n2 < N.length; n2 += 2) { + var A2 = N[n2] << W - N[n2 + 1]; + N[n2] = R4[A2] >>> V; + } + }; + H.H.M = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + }; + H.H.I = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + N[V + 2] |= R4 >>> 16; + }; + H.H.e = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.b = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.Z = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); + }; + H.H.i = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); + }; + H.H.m = function() { + var N = Uint16Array, W = Uint32Array; + return { K: new N(16), j: new N(16), X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999], T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0], q: new N(32), p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535], z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0], c: new W(32), J: new N(512), _: [], h: new N(32), $: [], w: new N(32768), C: [], v: [], d: new N(32768), D: [], u: new N(512), Q: [], r: new N(1 << 15), s: new W(286), Y: new W(30), a: new W(19), t: new W(15e3), k: new N(1 << 16), g: new N(1 << 15) }; + }(); + (function() { + var N = H.H.m, W = 1 << 15; + for (var R4 = 0; R4 < W; R4++) { + var V = R4; + V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; + V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; + V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; + V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; + N.r[R4] = (V >>> 16 | V << 16) >>> 17; + } + function n2(A2, l2, M) { + while (l2-- != 0) A2.push(0, M); + } + for (var R4 = 0; R4 < 32; R4++) { + N.q[R4] = N.S[R4] << 3 | N.T[R4]; + N.c[R4] = N.p[R4] << 4 | N.z[R4]; + } + n2(N._, 144, 8); + n2(N._, 255 - 143, 9); + n2(N._, 279 - 255, 7); + n2(N._, 287 - 279, 8); + H.H.n(N._, 9); + H.H.A(N._, 9, N.J); + H.H.l(N._, 9); + n2(N.$, 32, 5); + H.H.n(N.$, 5); + H.H.A(N.$, 5, N.h); + H.H.l(N.$, 5); + n2(N.Q, 19, 0); + n2(N.C, 286, 0); + n2(N.D, 30, 0); + n2(N.v, 320, 0); + })(); + return H.H.N; +}(); +UPNG.decode._readInterlace = function(data2, out) { + var w = out.width, h = out.height; + var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8); + var img = new Uint8Array(h * bpl); + var di = 0; + var starting_row = [0, 0, 4, 0, 2, 0, 1]; + var starting_col = [0, 4, 0, 2, 0, 1, 0]; + var row_increment = [8, 8, 8, 4, 4, 2, 2]; + var col_increment = [8, 8, 4, 4, 2, 2, 1]; + var pass = 0; + while (pass < 7) { + var ri = row_increment[pass], ci = col_increment[pass]; + var sw = 0, sh = 0; + var cr = starting_row[pass]; + while (cr < h) { + cr += ri; + sh++; + } + var cc = starting_col[pass]; + while (cc < w) { + cc += ci; + sw++; + } + var bpll = Math.ceil(sw * bpp / 8); + UPNG.decode._filterZero(data2, out, di, sw, sh); + var y2 = 0, row = starting_row[pass]; + var val2; + while (row < h) { + var col = starting_col[pass]; + var cdi = di + y2 * bpll << 3; + while (col < w) { + if (bpp == 1) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 7 - (cdi & 7) & 1; + img[row * bpl + (col >> 3)] |= val2 << 7 - ((col & 7) << 0); + } + if (bpp == 2) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 6 - (cdi & 7) & 3; + img[row * bpl + (col >> 2)] |= val2 << 6 - ((col & 3) << 1); + } + if (bpp == 4) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 4 - (cdi & 7) & 15; + img[row * bpl + (col >> 1)] |= val2 << 4 - ((col & 1) << 2); + } + if (bpp >= 8) { + var ii = row * bpl + col * cbpp; + for (var j = 0; j < cbpp; j++) img[ii + j] = data2[(cdi >> 3) + j]; + } + cdi += bpp; + col += ci; + } + y2++; + row += ri; + } + if (sw * sh != 0) di += sh * (1 + bpll); + pass = pass + 1; + } + return img; +}; +UPNG.decode._getBPP = function(out) { + var noc = [1, null, 3, 1, 2, null, 4][out.ctype]; + return noc * out.depth; +}; +UPNG.decode._filterZero = function(data2, out, off, w, h) { + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth; + bpp = Math.ceil(bpp / 8); + var i, di, type = data2[off], x2 = 0; + if (type > 1) data2[off] = [0, 0, 1][type - 2]; + if (type == 3) for (x2 = bpp; x2 < bpl; x2++) data2[x2 + 1] = data2[x2 + 1] + (data2[x2 + 1 - bpp] >>> 1) & 255; + for (var y2 = 0; y2 < h; y2++) { + i = off + y2 * bpl; + di = i + y2 + 1; + type = data2[di - 1]; + x2 = 0; + if (type == 0) for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2]; + else if (type == 1) { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2]; + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + data2[i + x2 - bpp]; + } else if (type == 2) { + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + data2[i + x2 - bpl]; + } else if (type == 3) { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2] + (data2[i + x2 - bpl] >>> 1); + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + (data2[i + x2 - bpl] + data2[i + x2 - bpp] >>> 1); + } else { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2] + paeth(0, data2[i + x2 - bpl], 0); + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + paeth(data2[i + x2 - bpp], data2[i + x2 - bpl], data2[i + x2 - bpp - bpl]); + } + } + return data2; +}; +UPNG.decode._paeth = function(a2, b3, c2) { + var p2 = a2 + b3 - c2, pa2 = p2 - a2, pb = p2 - b3, pc = p2 - c2; + if (pa2 * pa2 <= pb * pb && pa2 * pa2 <= pc * pc) return a2; + else if (pb * pb <= pc * pc) return b3; + return c2; +}; +UPNG.decode._IHDR = function(data2, offset, out) { + var bin = UPNG._bin; + out.width = bin.readUint(data2, offset); + offset += 4; + out.height = bin.readUint(data2, offset); + offset += 4; + out.depth = data2[offset]; + offset++; + out.ctype = data2[offset]; + offset++; + out.compress = data2[offset]; + offset++; + out.filter = data2[offset]; + offset++; + out.interlace = data2[offset]; + offset++; +}; +UPNG._bin = { + nextZero: function(data2, p2) { + while (data2[p2] != 0) p2++; + return p2; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + readUint: function(buff, p2) { + return buff[p2] * (256 * 256 * 256) + (buff[p2 + 1] << 16 | buff[p2 + 2] << 8 | buff[p2 + 3]); + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 & 255; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + writeASCII: function(data2, p2, s) { + for (var i = 0; i < s.length; i++) data2[p2 + i] = s.charCodeAt(i); + }, + readBytes: function(buff, p2, l2) { + var arr = []; + for (var i = 0; i < l2; i++) arr.push(buff[p2 + i]); + return arr; + }, + pad: function(n2) { + return n2.length < 2 ? "0" + n2 : n2; + }, + readUTF8: function(buff, p2, l2) { + var s = "", ns; + for (var i = 0; i < l2; i++) s += "%" + UPNG._bin.pad(buff[p2 + i].toString(16)); + try { + ns = decodeURIComponent(s); + } catch (e) { + return UPNG._bin.readASCII(buff, p2, l2); + } + return ns; + } +}; +UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) { + var w = Math.min(sw, tw), h = Math.min(sh, th); + var si = 0, ti = 0; + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + if (xoff >= 0 && yoff >= 0) { + si = y2 * sw + x2 << 2; + ti = (yoff + y2) * tw + xoff + x2 << 2; + } else { + si = (-yoff + y2) * sw - xoff + x2 << 2; + ti = y2 * tw + x2 << 2; + } + if (mode == 0) { + tb[ti] = sb[si]; + tb[ti + 1] = sb[si + 1]; + tb[ti + 2] = sb[si + 2]; + tb[ti + 3] = sb[si + 3]; + } else if (mode == 1) { + var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa; + var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba; + var ifa = 1 - fa, oa2 = fa + ba * ifa, ioa = oa2 == 0 ? 0 : 1 / oa2; + tb[ti + 3] = 255 * oa2; + tb[ti + 0] = (fr + br * ifa) * ioa; + tb[ti + 1] = (fg + bg * ifa) * ioa; + tb[ti + 2] = (fb + bb * ifa) * ioa; + } else if (mode == 2) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) { + tb[ti] = 0; + tb[ti + 1] = 0; + tb[ti + 2] = 0; + tb[ti + 3] = 0; + } else { + tb[ti] = fr; + tb[ti + 1] = fg; + tb[ti + 2] = fb; + tb[ti + 3] = fa; + } + } else if (mode == 3) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) continue; + if (fa < 220 && ba > 20) return false; + } + } + return true; +}; + +// node_modules/three/examples/jsm/loaders/STLLoader.js +var STLLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function isBinary(data3) { + const reader = new DataView(data3); + const face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8; + const n_faces = reader.getUint32(80, true); + const expect = 80 + 32 / 8 + n_faces * face_size; + if (expect === reader.byteLength) { + return true; + } + const solid = [115, 111, 108, 105, 100]; + for (let off = 0; off < 5; off++) { + if (matchDataViewAt(solid, reader, off)) return false; + } + return true; + } + function matchDataViewAt(query, reader, offset) { + for (let i = 0, il = query.length; i < il; i++) { + if (query[i] !== reader.getUint8(offset + i)) return false; + } + return true; + } + function parseBinary(data3) { + const reader = new DataView(data3); + const faces = reader.getUint32(80, true); + let r, g2, b3, hasColors = false, colors; + let defaultR, defaultG, defaultB, alpha; + for (let index2 = 0; index2 < 80 - 10; index2++) { + if (reader.getUint32(index2, false) == 1129270351 && reader.getUint8(index2 + 4) == 82 && reader.getUint8(index2 + 5) == 61) { + hasColors = true; + colors = new Float32Array(faces * 3 * 3); + defaultR = reader.getUint8(index2 + 6) / 255; + defaultG = reader.getUint8(index2 + 7) / 255; + defaultB = reader.getUint8(index2 + 8) / 255; + alpha = reader.getUint8(index2 + 9) / 255; + } + } + const dataOffset = 84; + const faceLength = 12 * 4 + 2; + const geometry = new BufferGeometry(); + const vertices = new Float32Array(faces * 3 * 3); + const normals = new Float32Array(faces * 3 * 3); + const color = new Color(); + for (let face = 0; face < faces; face++) { + const start = dataOffset + face * faceLength; + const normalX = reader.getFloat32(start, true); + const normalY = reader.getFloat32(start + 4, true); + const normalZ = reader.getFloat32(start + 8, true); + if (hasColors) { + const packedColor = reader.getUint16(start + 48, true); + if ((packedColor & 32768) === 0) { + r = (packedColor & 31) / 31; + g2 = (packedColor >> 5 & 31) / 31; + b3 = (packedColor >> 10 & 31) / 31; + } else { + r = defaultR; + g2 = defaultG; + b3 = defaultB; + } + } + for (let i = 1; i <= 3; i++) { + const vertexstart = start + i * 12; + const componentIdx = face * 3 * 3 + (i - 1) * 3; + vertices[componentIdx] = reader.getFloat32(vertexstart, true); + vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true); + vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true); + normals[componentIdx] = normalX; + normals[componentIdx + 1] = normalY; + normals[componentIdx + 2] = normalZ; + if (hasColors) { + color.set(r, g2, b3).convertSRGBToLinear(); + colors[componentIdx] = color.r; + colors[componentIdx + 1] = color.g; + colors[componentIdx + 2] = color.b; + } + } + } + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new BufferAttribute(normals, 3)); + if (hasColors) { + geometry.setAttribute("color", new BufferAttribute(colors, 3)); + geometry.hasColors = true; + geometry.alpha = alpha; + } + return geometry; + } + function parseASCII(data3) { + const geometry = new BufferGeometry(); + const patternSolid = /solid([\s\S]*?)endsolid/g; + const patternFace = /facet([\s\S]*?)endfacet/g; + const patternName = /solid\s(.+)/; + let faceCounter = 0; + const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source; + const patternVertex = new RegExp("vertex" + patternFloat + patternFloat + patternFloat, "g"); + const patternNormal = new RegExp("normal" + patternFloat + patternFloat + patternFloat, "g"); + const vertices = []; + const normals = []; + const groupNames = []; + const normal = new Vector3(); + let result; + let groupCount = 0; + let startVertex = 0; + let endVertex = 0; + while ((result = patternSolid.exec(data3)) !== null) { + startVertex = endVertex; + const solid = result[0]; + const name2 = (result = patternName.exec(solid)) !== null ? result[1] : ""; + groupNames.push(name2); + while ((result = patternFace.exec(solid)) !== null) { + let vertexCountPerFace = 0; + let normalCountPerFace = 0; + const text2 = result[0]; + while ((result = patternNormal.exec(text2)) !== null) { + normal.x = parseFloat(result[1]); + normal.y = parseFloat(result[2]); + normal.z = parseFloat(result[3]); + normalCountPerFace++; + } + while ((result = patternVertex.exec(text2)) !== null) { + vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])); + normals.push(normal.x, normal.y, normal.z); + vertexCountPerFace++; + endVertex++; + } + if (normalCountPerFace !== 1) { + console.error("THREE.STLLoader: Something isn't right with the normal of face number " + faceCounter); + } + if (vertexCountPerFace !== 3) { + console.error("THREE.STLLoader: Something isn't right with the vertices of face number " + faceCounter); + } + faceCounter++; + } + const start = startVertex; + const count = endVertex - startVertex; + geometry.userData.groupNames = groupNames; + geometry.addGroup(start, count, groupCount); + groupCount++; + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + return geometry; + } + function ensureString(buffer) { + if (typeof buffer !== "string") { + return new TextDecoder().decode(buffer); + } + return buffer; + } + function ensureBinary(buffer) { + if (typeof buffer === "string") { + const array_buffer = new Uint8Array(buffer.length); + for (let i = 0; i < buffer.length; i++) { + array_buffer[i] = buffer.charCodeAt(i) & 255; + } + return array_buffer.buffer || array_buffer; + } else { + return buffer; + } + } + const binData = ensureBinary(data2); + return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data2)); + } +}; + +// node_modules/three/examples/jsm/loaders/SVGLoader.js +var COLOR_SPACE_SVG = SRGBColorSpace; +var SVGLoader = class _SVGLoader extends Loader { + constructor(manager) { + super(manager); + this.defaultDPI = 90; + this.defaultUnit = "px"; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2) { + const scope = this; + function parseNode(node, style) { + if (node.nodeType !== 1) return; + const transform2 = getNodeTransform(node); + let isDefsNode = false; + let path = null; + switch (node.nodeName) { + case "svg": + style = parseStyle(node, style); + break; + case "style": + parseCSSStylesheet(node); + break; + case "g": + style = parseStyle(node, style); + break; + case "path": + style = parseStyle(node, style); + if (node.hasAttribute("d")) path = parsePathNode(node); + break; + case "rect": + style = parseStyle(node, style); + path = parseRectNode(node); + break; + case "polygon": + style = parseStyle(node, style); + path = parsePolygonNode(node); + break; + case "polyline": + style = parseStyle(node, style); + path = parsePolylineNode(node); + break; + case "circle": + style = parseStyle(node, style); + path = parseCircleNode(node); + break; + case "ellipse": + style = parseStyle(node, style); + path = parseEllipseNode(node); + break; + case "line": + style = parseStyle(node, style); + path = parseLineNode(node); + break; + case "defs": + isDefsNode = true; + break; + case "use": + style = parseStyle(node, style); + const href = node.getAttributeNS("http://www.w3.org/1999/xlink", "href") || ""; + const usedNodeId = href.substring(1); + const usedNode = node.viewportElement.getElementById(usedNodeId); + if (usedNode) { + parseNode(usedNode, style); + } else { + console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId); + } + break; + default: + } + if (path) { + if (style.fill !== void 0 && style.fill !== "none") { + path.color.setStyle(style.fill, COLOR_SPACE_SVG); + } + transformPath(path, currentTransform); + paths.push(path); + path.userData = { node, style }; + } + const childNodes = node.childNodes; + for (let i = 0; i < childNodes.length; i++) { + const node2 = childNodes[i]; + if (isDefsNode && node2.nodeName !== "style" && node2.nodeName !== "defs") { + continue; + } + parseNode(node2, style); + } + if (transform2) { + transformStack.pop(); + if (transformStack.length > 0) { + currentTransform.copy(transformStack[transformStack.length - 1]); + } else { + currentTransform.identity(); + } + } + } + function parsePathNode(node) { + const path = new ShapePath2(); + const point = new Vector2(); + const control = new Vector2(); + const firstPoint = new Vector2(); + let isFirstPoint = true; + let doSetFirstPoint = false; + const d = node.getAttribute("d"); + if (d === "" || d === "none") return null; + const commands = d.match(/[a-df-z][^a-df-z]*/ig); + for (let i = 0, l2 = commands.length; i < l2; i++) { + const command = commands[i]; + const type = command.charAt(0); + const data3 = command.slice(1).trim(); + if (isFirstPoint === true) { + doSetFirstPoint = true; + isFirstPoint = false; + } + let numbers; + switch (type) { + case "M": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) { + path.moveTo(point.x, point.y); + } else { + path.lineTo(point.x, point.y); + } + if (j === 0) firstPoint.copy(point); + } + break; + case "H": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "V": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "L": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "C": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo( + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + numbers[j + 5] + ); + control.x = numbers[j + 2]; + control.y = numbers[j + 3]; + point.x = numbers[j + 4]; + point.y = numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "S": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo( + getReflection(point.x, control.x), + getReflection(point.y, control.y), + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3] + ); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Q": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo( + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3] + ); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "T": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo( + rx, + ry, + numbers[j + 0], + numbers[j + 1] + ); + control.x = rx; + control.y = ry; + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "A": + numbers = parseFloats(data3, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == point.x && numbers[j + 6] == point.y) continue; + const start = point.clone(); + point.x = numbers[j + 5]; + point.y = numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand( + path, + numbers[j], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + start, + point + ); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "m": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) { + path.moveTo(point.x, point.y); + } else { + path.lineTo(point.x, point.y); + } + if (j === 0) firstPoint.copy(point); + } + break; + case "h": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "v": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "l": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "c": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo( + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3], + point.x + numbers[j + 4], + point.y + numbers[j + 5] + ); + control.x = point.x + numbers[j + 2]; + control.y = point.y + numbers[j + 3]; + point.x += numbers[j + 4]; + point.y += numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "s": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo( + getReflection(point.x, control.x), + getReflection(point.y, control.y), + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3] + ); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "q": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo( + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3] + ); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "t": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo( + rx, + ry, + point.x + numbers[j + 0], + point.y + numbers[j + 1] + ); + control.x = rx; + control.y = ry; + point.x = point.x + numbers[j + 0]; + point.y = point.y + numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "a": + numbers = parseFloats(data3, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == 0 && numbers[j + 6] == 0) continue; + const start = point.clone(); + point.x += numbers[j + 5]; + point.y += numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand( + path, + numbers[j], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + start, + point + ); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Z": + case "z": + path.currentPath.autoClose = true; + if (path.currentPath.curves.length > 0) { + point.copy(firstPoint); + path.currentPath.currentPoint.copy(point); + isFirstPoint = true; + } + break; + default: + console.warn(command); + } + doSetFirstPoint = false; + } + return path; + } + function parseCSSStylesheet(node) { + if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length) return; + for (let i = 0; i < node.sheet.cssRules.length; i++) { + const stylesheet = node.sheet.cssRules[i]; + if (stylesheet.type !== 1) continue; + const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim()); + for (let j = 0; j < selectorList.length; j++) { + const definitions = Object.fromEntries( + Object.entries(stylesheet.style).filter(([, v]) => v !== "") + ); + stylesheets[selectorList[j]] = Object.assign( + stylesheets[selectorList[j]] || {}, + definitions + ); + } + } + } + function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) { + if (rx == 0 || ry == 0) { + path.lineTo(end.x, end.y); + return; + } + x_axis_rotation = x_axis_rotation * Math.PI / 180; + rx = Math.abs(rx); + ry = Math.abs(ry); + const dx2 = (start.x - end.x) / 2; + const dy2 = (start.y - end.y) / 2; + const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2; + const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2; + let rxs = rx * rx; + let rys = ry * ry; + const x1ps = x1p * x1p; + const y1ps = y1p * y1p; + const cr = x1ps / rxs + y1ps / rys; + if (cr > 1) { + const s = Math.sqrt(cr); + rx = s * rx; + ry = s * ry; + rxs = rx * rx; + rys = ry * ry; + } + const dq = rxs * y1ps + rys * x1ps; + const pq = (rxs * rys - dq) / dq; + let q2 = Math.sqrt(Math.max(0, pq)); + if (large_arc_flag === sweep_flag) q2 = -q2; + const cxp = q2 * rx * y1p / ry; + const cyp = -q2 * ry * x1p / rx; + const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2; + const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2; + const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry); + const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2); + path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation); + } + function svgAngle(ux, uy, vx, vy) { + const dot = ux * vx + uy * vy; + const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy); + let ang = Math.acos(Math.max(-1, Math.min(1, dot / len))); + if (ux * vy - uy * vx < 0) ang = -ang; + return ang; + } + function parseRectNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("x") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("y") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0); + const w = parseFloatWithUnits(node.getAttribute("width")); + const h = parseFloatWithUnits(node.getAttribute("height")); + const bci = 1 - 0.551915024494; + const path = new ShapePath2(); + path.moveTo(x2 + rx, y2); + path.lineTo(x2 + w - rx, y2); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + w - rx * bci, + y2, + x2 + w, + y2 + ry * bci, + x2 + w, + y2 + ry + ); + } + path.lineTo(x2 + w, y2 + h - ry); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + w, + y2 + h - ry * bci, + x2 + w - rx * bci, + y2 + h, + x2 + w - rx, + y2 + h + ); + } + path.lineTo(x2 + rx, y2 + h); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + rx * bci, + y2 + h, + x2, + y2 + h - ry * bci, + x2, + y2 + h - ry + ); + } + path.lineTo(x2, y2 + ry); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo(x2, y2 + ry * bci, x2 + rx * bci, y2, x2 + rx, y2); + } + return path; + } + function parsePolygonNode(node) { + function iterator(match, a2, b3) { + const x2 = parseFloatWithUnits(a2); + const y2 = parseFloatWithUnits(b3); + if (index2 === 0) { + path.moveTo(x2, y2); + } else { + path.lineTo(x2, y2); + } + index2++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath2(); + let index2 = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = true; + return path; + } + function parsePolylineNode(node) { + function iterator(match, a2, b3) { + const x2 = parseFloatWithUnits(a2); + const y2 = parseFloatWithUnits(b3); + if (index2 === 0) { + path.moveTo(x2, y2); + } else { + path.lineTo(x2, y2); + } + index2++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath2(); + let index2 = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = false; + return path; + } + function parseCircleNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("cy") || 0); + const r = parseFloatWithUnits(node.getAttribute("r") || 0); + const subpath = new Path(); + subpath.absarc(x2, y2, r, 0, Math.PI * 2); + const path = new ShapePath2(); + path.subPaths.push(subpath); + return path; + } + function parseEllipseNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("cy") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || 0); + const subpath = new Path(); + subpath.absellipse(x2, y2, rx, ry, 0, Math.PI * 2); + const path = new ShapePath2(); + path.subPaths.push(subpath); + return path; + } + function parseLineNode(node) { + const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0); + const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0); + const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0); + const path = new ShapePath2(); + path.moveTo(x1, y1); + path.lineTo(x2, y2); + path.currentPath.autoClose = false; + return path; + } + function parseStyle(node, style) { + style = Object.assign({}, style); + let stylesheetStyles = {}; + if (node.hasAttribute("class")) { + const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim()); + for (let i = 0; i < classSelectors.length; i++) { + stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]); + } + } + if (node.hasAttribute("id")) { + stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]); + } + function addStyle(svgName, jsName, adjustFunction) { + if (adjustFunction === void 0) adjustFunction = function copy(v) { + if (v.startsWith("url")) console.warn("SVGLoader: url access in attributes is not implemented."); + return v; + }; + if (node.hasAttribute(svgName)) style[jsName] = adjustFunction(node.getAttribute(svgName)); + if (stylesheetStyles[svgName]) style[jsName] = adjustFunction(stylesheetStyles[svgName]); + if (node.style && node.style[svgName] !== "") style[jsName] = adjustFunction(node.style[svgName]); + } + function clamp2(v) { + return Math.max(0, Math.min(1, parseFloatWithUnits(v))); + } + function positive(v) { + return Math.max(0, parseFloatWithUnits(v)); + } + addStyle("fill", "fill"); + addStyle("fill-opacity", "fillOpacity", clamp2); + addStyle("fill-rule", "fillRule"); + addStyle("opacity", "opacity", clamp2); + addStyle("stroke", "stroke"); + addStyle("stroke-opacity", "strokeOpacity", clamp2); + addStyle("stroke-width", "strokeWidth", positive); + addStyle("stroke-linejoin", "strokeLineJoin"); + addStyle("stroke-linecap", "strokeLineCap"); + addStyle("stroke-miterlimit", "strokeMiterLimit", positive); + addStyle("visibility", "visibility"); + return style; + } + function getReflection(a2, b3) { + return a2 - (b3 - a2); + } + function parseFloats(input, flags, stride) { + if (typeof input !== "string") { + throw new TypeError("Invalid input: " + typeof input); + } + const RE = { + SEPARATOR: /[ \t\r\n\,.\-+]/, + WHITESPACE: /[ \t\r\n]/, + DIGIT: /[\d]/, + SIGN: /[-+]/, + POINT: /\./, + COMMA: /,/, + EXP: /e/i, + FLAGS: /[01]/ + }; + const SEP = 0; + const INT = 1; + const FLOAT = 2; + const EXP = 3; + let state = SEP; + let seenComma = true; + let number = "", exponent = ""; + const result = []; + function throwSyntaxError(current2, i, partial2) { + const error = new SyntaxError('Unexpected character "' + current2 + '" at index ' + i + "."); + error.partial = partial2; + throw error; + } + function newNumber() { + if (number !== "") { + if (exponent === "") result.push(Number(number)); + else result.push(Number(number) * Math.pow(10, Number(exponent))); + } + number = ""; + exponent = ""; + } + let current; + const length2 = input.length; + for (let i = 0; i < length2; i++) { + current = input[i]; + if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) { + state = INT; + number = current; + newNumber(); + continue; + } + if (state === SEP) { + if (RE.WHITESPACE.test(current)) { + continue; + } + if (RE.DIGIT.test(current) || RE.SIGN.test(current)) { + state = INT; + number = current; + continue; + } + if (RE.POINT.test(current)) { + state = FLOAT; + number = current; + continue; + } + if (RE.COMMA.test(current)) { + if (seenComma) { + throwSyntaxError(current, i, result); + } + seenComma = true; + } + } + if (state === INT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.POINT.test(current)) { + number += current; + state = FLOAT; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) { + throwSyntaxError(current, i, result); + } + } + if (state === FLOAT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.POINT.test(current) && number[number.length - 1] === ".") { + throwSyntaxError(current, i, result); + } + } + if (state === EXP) { + if (RE.DIGIT.test(current)) { + exponent += current; + continue; + } + if (RE.SIGN.test(current)) { + if (exponent === "") { + exponent += current; + continue; + } + if (exponent.length === 1 && RE.SIGN.test(exponent)) { + throwSyntaxError(current, i, result); + } + } + } + if (RE.WHITESPACE.test(current)) { + newNumber(); + state = SEP; + seenComma = false; + } else if (RE.COMMA.test(current)) { + newNumber(); + state = SEP; + seenComma = true; + } else if (RE.SIGN.test(current)) { + newNumber(); + state = INT; + number = current; + } else if (RE.POINT.test(current)) { + newNumber(); + state = FLOAT; + number = current; + } else { + throwSyntaxError(current, i, result); + } + } + newNumber(); + return result; + } + const units = ["mm", "cm", "in", "pt", "pc", "px"]; + const unitConversion = { + "mm": { + "mm": 1, + "cm": 0.1, + "in": 1 / 25.4, + "pt": 72 / 25.4, + "pc": 6 / 25.4, + "px": -1 + }, + "cm": { + "mm": 10, + "cm": 1, + "in": 1 / 2.54, + "pt": 72 / 2.54, + "pc": 6 / 2.54, + "px": -1 + }, + "in": { + "mm": 25.4, + "cm": 2.54, + "in": 1, + "pt": 72, + "pc": 6, + "px": -1 + }, + "pt": { + "mm": 25.4 / 72, + "cm": 2.54 / 72, + "in": 1 / 72, + "pt": 1, + "pc": 6 / 72, + "px": -1 + }, + "pc": { + "mm": 25.4 / 6, + "cm": 2.54 / 6, + "in": 1 / 6, + "pt": 72 / 6, + "pc": 1, + "px": -1 + }, + "px": { + "px": 1 + } + }; + function parseFloatWithUnits(string) { + let theUnit = "px"; + if (typeof string === "string" || string instanceof String) { + for (let i = 0, n2 = units.length; i < n2; i++) { + const u = units[i]; + if (string.endsWith(u)) { + theUnit = u; + string = string.substring(0, string.length - u.length); + break; + } + } + } + let scale2 = void 0; + if (theUnit === "px" && scope.defaultUnit !== "px") { + scale2 = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI; + } else { + scale2 = unitConversion[theUnit][scope.defaultUnit]; + if (scale2 < 0) { + scale2 = unitConversion[theUnit]["in"] * scope.defaultDPI; + } + } + return scale2 * parseFloat(string); + } + function getNodeTransform(node) { + if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) { + return null; + } + const transform2 = parseNodeTransform(node); + if (transformStack.length > 0) { + transform2.premultiply(transformStack[transformStack.length - 1]); + } + currentTransform.copy(transform2); + transformStack.push(transform2); + return transform2; + } + function parseNodeTransform(node) { + const transform2 = new Matrix3(); + const currentTransform2 = tempTransform0; + if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) { + const tx = parseFloatWithUnits(node.getAttribute("x")); + const ty = parseFloatWithUnits(node.getAttribute("y")); + transform2.translate(tx, ty); + } + if (node.hasAttribute("transform")) { + const transformsTexts = node.getAttribute("transform").split(")"); + for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) { + const transformText = transformsTexts[tIndex].trim(); + if (transformText === "") continue; + const openParPos = transformText.indexOf("("); + const closeParPos = transformText.length; + if (openParPos > 0 && openParPos < closeParPos) { + const transformType = transformText.slice(0, openParPos); + const array = parseFloats(transformText.slice(openParPos + 1)); + currentTransform2.identity(); + switch (transformType) { + case "translate": + if (array.length >= 1) { + const tx = array[0]; + let ty = 0; + if (array.length >= 2) { + ty = array[1]; + } + currentTransform2.translate(tx, ty); + } + break; + case "rotate": + if (array.length >= 1) { + let angle = 0; + let cx = 0; + let cy = 0; + angle = array[0] * Math.PI / 180; + if (array.length >= 3) { + cx = array[1]; + cy = array[2]; + } + tempTransform1.makeTranslation(-cx, -cy); + tempTransform2.makeRotation(angle); + tempTransform3.multiplyMatrices(tempTransform2, tempTransform1); + tempTransform1.makeTranslation(cx, cy); + currentTransform2.multiplyMatrices(tempTransform1, tempTransform3); + } + break; + case "scale": + if (array.length >= 1) { + const scaleX = array[0]; + let scaleY = scaleX; + if (array.length >= 2) { + scaleY = array[1]; + } + currentTransform2.scale(scaleX, scaleY); + } + break; + case "skewX": + if (array.length === 1) { + currentTransform2.set( + 1, + Math.tan(array[0] * Math.PI / 180), + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + } + break; + case "skewY": + if (array.length === 1) { + currentTransform2.set( + 1, + 0, + 0, + Math.tan(array[0] * Math.PI / 180), + 1, + 0, + 0, + 0, + 1 + ); + } + break; + case "matrix": + if (array.length === 6) { + currentTransform2.set( + array[0], + array[2], + array[4], + array[1], + array[3], + array[5], + 0, + 0, + 1 + ); + } + break; + } + } + transform2.premultiply(currentTransform2); + } + } + return transform2; + } + function transformPath(path, m) { + function transfVec2(v2) { + tempV3.set(v2.x, v2.y, 1).applyMatrix3(m); + v2.set(tempV3.x, tempV3.y); + } + function transfEllipseGeneric(curve) { + const a2 = curve.xRadius; + const b3 = curve.yRadius; + const cosTheta = Math.cos(curve.aRotation); + const sinTheta = Math.sin(curve.aRotation); + const v12 = new Vector3(a2 * cosTheta, a2 * sinTheta, 0); + const v2 = new Vector3(-b3 * sinTheta, b3 * cosTheta, 0); + const f1 = v12.applyMatrix3(m); + const f2 = v2.applyMatrix3(m); + const mF = tempTransform0.set( + f1.x, + f2.x, + 0, + f1.y, + f2.y, + 0, + 0, + 0, + 1 + ); + const mFInv = tempTransform1.copy(mF).invert(); + const mFInvT = tempTransform2.copy(mFInv).transpose(); + const mQ = mFInvT.multiply(mFInv); + const mQe = mQ.elements; + const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]); + const rt1sqrt = Math.sqrt(ed.rt1); + const rt2sqrt = Math.sqrt(ed.rt2); + curve.xRadius = 1 / rt1sqrt; + curve.yRadius = 1 / rt2sqrt; + curve.aRotation = Math.atan2(ed.sn, ed.cs); + const isFullEllipse = (curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON; + if (!isFullEllipse) { + const mDsqrt = tempTransform1.set( + rt1sqrt, + 0, + 0, + 0, + rt2sqrt, + 0, + 0, + 0, + 1 + ); + const mRT = tempTransform2.set( + ed.cs, + ed.sn, + 0, + -ed.sn, + ed.cs, + 0, + 0, + 0, + 1 + ); + const mDRF = mDsqrt.multiply(mRT).multiply(mF); + const transformAngle = (phi) => { + const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF); + return Math.atan2(sinR, cosR); + }; + curve.aStartAngle = transformAngle(curve.aStartAngle); + curve.aEndAngle = transformAngle(curve.aEndAngle); + if (isTransformFlipped(m)) { + curve.aClockwise = !curve.aClockwise; + } + } + } + function transfEllipseNoSkew(curve) { + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + curve.xRadius *= sx; + curve.yRadius *= sy; + const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]); + curve.aRotation += theta; + if (isTransformFlipped(m)) { + curve.aStartAngle *= -1; + curve.aEndAngle *= -1; + curve.aClockwise = !curve.aClockwise; + } + } + const subPaths = path.subPaths; + for (let i = 0, n2 = subPaths.length; i < n2; i++) { + const subPath = subPaths[i]; + const curves = subPath.curves; + for (let j = 0; j < curves.length; j++) { + const curve = curves[j]; + if (curve.isLineCurve) { + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isCubicBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + transfVec2(curve.v3); + } else if (curve.isQuadraticBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isEllipseCurve) { + tempV2.set(curve.aX, curve.aY); + transfVec2(tempV2); + curve.aX = tempV2.x; + curve.aY = tempV2.y; + if (isTransformSkewed(m)) { + transfEllipseGeneric(curve); + } else { + transfEllipseNoSkew(curve); + } + } + } + } + } + function isTransformFlipped(m) { + const te2 = m.elements; + return te2[0] * te2[4] - te2[1] * te2[3] < 0; + } + function isTransformSkewed(m) { + const te2 = m.elements; + const basisDot = te2[0] * te2[3] + te2[1] * te2[4]; + if (basisDot === 0) return false; + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + return Math.abs(basisDot / (sx * sy)) > Number.EPSILON; + } + function getTransformScaleX(m) { + const te2 = m.elements; + return Math.sqrt(te2[0] * te2[0] + te2[1] * te2[1]); + } + function getTransformScaleY(m) { + const te2 = m.elements; + return Math.sqrt(te2[3] * te2[3] + te2[4] * te2[4]); + } + function eigenDecomposition(A2, B2, C2) { + let rt1, rt2, cs, sn, t3; + const sm = A2 + C2; + const df = A2 - C2; + const rt = Math.sqrt(df * df + 4 * B2 * B2); + if (sm > 0) { + rt1 = 0.5 * (sm + rt); + t3 = 1 / rt1; + rt2 = A2 * t3 * C2 - B2 * t3 * B2; + } else if (sm < 0) { + rt2 = 0.5 * (sm - rt); + } else { + rt1 = 0.5 * rt; + rt2 = -0.5 * rt; + } + if (df > 0) { + cs = df + rt; + } else { + cs = df - rt; + } + if (Math.abs(cs) > 2 * Math.abs(B2)) { + t3 = -2 * B2 / cs; + sn = 1 / Math.sqrt(1 + t3 * t3); + cs = t3 * sn; + } else if (Math.abs(B2) === 0) { + cs = 1; + sn = 0; + } else { + t3 = -0.5 * cs / B2; + cs = 1 / Math.sqrt(1 + t3 * t3); + sn = t3 * cs; + } + if (df > 0) { + t3 = cs; + cs = -sn; + sn = t3; + } + return { rt1, rt2, cs, sn }; + } + const paths = []; + const stylesheets = {}; + const transformStack = []; + const tempTransform0 = new Matrix3(); + const tempTransform1 = new Matrix3(); + const tempTransform2 = new Matrix3(); + const tempTransform3 = new Matrix3(); + const tempV2 = new Vector2(); + const tempV3 = new Vector3(); + const currentTransform = new Matrix3(); + const xml = new DOMParser().parseFromString(text2, "image/svg+xml"); + parseNode(xml.documentElement, { + fill: "#000", + fillOpacity: 1, + strokeOpacity: 1, + strokeWidth: 1, + strokeLineJoin: "miter", + strokeLineCap: "butt", + strokeMiterLimit: 4 + }); + const data2 = { paths, xml: xml.documentElement }; + return data2; + } + static createShapes(shapePath) { + const BIGNUMBER = 999999999; + const IntersectionLocationType = { + ORIGIN: 0, + DESTINATION: 1, + BETWEEN: 2, + LEFT: 3, + RIGHT: 4, + BEHIND: 5, + BEYOND: 6 + }; + const classifyResult = { + loc: IntersectionLocationType.ORIGIN, + t: 0 + }; + function findEdgeIntersection(a0, a1, b0, b1) { + const x1 = a0.x; + const x2 = a1.x; + const x3 = b0.x; + const x4 = b1.x; + const y1 = a0.y; + const y2 = a1.y; + const y3 = b0.y; + const y4 = b1.y; + const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); + const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); + const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + const t1 = nom1 / denom; + const t22 = nom2 / denom; + if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t22 < 0 || t22 > 1) { + return null; + } else if (nom1 === 0 && denom === 0) { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { x: point.x, y: point.y, t: classifyResult.t }; + } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) { + const x5 = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10); + const y5 = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10); + return { x: x5, y: y5, t: classifyResult.t }; + } + } + return null; + } else { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { x: point.x, y: point.y, t: classifyResult.t }; + } + } + const x5 = +(x1 + t1 * (x2 - x1)).toPrecision(10); + const y5 = +(y1 + t1 * (y2 - y1)).toPrecision(10); + return { x: x5, y: y5, t: t1 }; + } + } + function classifyPoint(p2, edgeStart, edgeEnd) { + const ax = edgeEnd.x - edgeStart.x; + const ay = edgeEnd.y - edgeStart.y; + const bx = p2.x - edgeStart.x; + const by = p2.y - edgeStart.y; + const sa = ax * by - bx * ay; + if (p2.x === edgeStart.x && p2.y === edgeStart.y) { + classifyResult.loc = IntersectionLocationType.ORIGIN; + classifyResult.t = 0; + return; + } + if (p2.x === edgeEnd.x && p2.y === edgeEnd.y) { + classifyResult.loc = IntersectionLocationType.DESTINATION; + classifyResult.t = 1; + return; + } + if (sa < -Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.LEFT; + return; + } + if (sa > Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.RIGHT; + return; + } + if (ax * bx < 0 || ay * by < 0) { + classifyResult.loc = IntersectionLocationType.BEHIND; + return; + } + if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) { + classifyResult.loc = IntersectionLocationType.BEYOND; + return; + } + let t3; + if (ax !== 0) { + t3 = bx / ax; + } else { + t3 = by / ay; + } + classifyResult.loc = IntersectionLocationType.BETWEEN; + classifyResult.t = t3; + } + function getIntersections(path1, path2) { + const intersectionsRaw = []; + const intersections = []; + for (let index2 = 1; index2 < path1.length; index2++) { + const path1EdgeStart = path1[index2 - 1]; + const path1EdgeEnd = path1[index2]; + for (let index22 = 1; index22 < path2.length; index22++) { + const path2EdgeStart = path2[index22 - 1]; + const path2EdgeEnd = path2[index22]; + const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd); + if (intersection !== null && intersectionsRaw.find((i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON) === void 0) { + intersectionsRaw.push(intersection); + intersections.push(new Vector2(intersection.x, intersection.y)); + } + } + } + return intersections; + } + function getScanlineIntersections(scanline, boundingBox, paths) { + const center = new Vector2(); + boundingBox.getCenter(center); + const allIntersections = []; + paths.forEach((path) => { + if (path.boundingBox.containsPoint(center)) { + const intersections = getIntersections(scanline, path.points); + intersections.forEach((p2) => { + allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p2 }); + }); + } + }); + allIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + return allIntersections; + } + function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) { + if (_fillRule === null || _fillRule === void 0 || _fillRule === "") { + _fillRule = "nonzero"; + } + const centerBoundingBox = new Vector2(); + simplePath.boundingBox.getCenter(centerBoundingBox); + const scanline = [new Vector2(scanlineMinX2, centerBoundingBox.y), new Vector2(scanlineMaxX2, centerBoundingBox.y)]; + const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths); + scanlineIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + const baseIntersections = []; + const otherIntersections = []; + scanlineIntersections.forEach((i2) => { + if (i2.identifier === simplePath.identifier) { + baseIntersections.push(i2); + } else { + otherIntersections.push(i2); + } + }); + const firstXOfPath = baseIntersections[0].point.x; + const stack = []; + let i = 0; + while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) { + if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) { + stack.pop(); + } else { + stack.push(otherIntersections[i].identifier); + } + i++; + } + stack.push(simplePath.identifier); + if (_fillRule === "evenodd") { + const isHole = stack.length % 2 === 0 ? true : false; + const isHoleFor = stack[stack.length - 2]; + return { identifier: simplePath.identifier, isHole, for: isHoleFor }; + } else if (_fillRule === "nonzero") { + let isHole = true; + let isHoleFor = null; + let lastCWValue = null; + for (let i2 = 0; i2 < stack.length; i2++) { + const identifier = stack[i2]; + if (isHole) { + lastCWValue = allPaths[identifier].isCW; + isHole = false; + isHoleFor = identifier; + } else if (lastCWValue !== allPaths[identifier].isCW) { + lastCWValue = allPaths[identifier].isCW; + isHole = true; + } + } + return { identifier: simplePath.identifier, isHole, for: isHoleFor }; + } else { + console.warn('fill-rule: "' + _fillRule + '" is currently not implemented.'); + } + } + let scanlineMinX = BIGNUMBER; + let scanlineMaxX = -BIGNUMBER; + let simplePaths = shapePath.subPaths.map((p2) => { + const points = p2.getPoints(); + let maxY = -BIGNUMBER; + let minY = BIGNUMBER; + let maxX = -BIGNUMBER; + let minX = BIGNUMBER; + for (let i = 0; i < points.length; i++) { + const p3 = points[i]; + if (p3.y > maxY) { + maxY = p3.y; + } + if (p3.y < minY) { + minY = p3.y; + } + if (p3.x > maxX) { + maxX = p3.x; + } + if (p3.x < minX) { + minX = p3.x; + } + } + if (scanlineMaxX <= maxX) { + scanlineMaxX = maxX + 1; + } + if (scanlineMinX >= minX) { + scanlineMinX = minX - 1; + } + return { curves: p2.curves, points, isCW: ShapeUtils.isClockWise(points), identifier: -1, boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY)) }; + }); + simplePaths = simplePaths.filter((sp) => sp.points.length > 1); + for (let identifier = 0; identifier < simplePaths.length; identifier++) { + simplePaths[identifier].identifier = identifier; + } + const isAHole = simplePaths.map((p2) => isHoleTo(p2, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData ? shapePath.userData.style.fillRule : void 0)); + const shapesToReturn = []; + simplePaths.forEach((p2) => { + const amIAHole = isAHole[p2.identifier]; + if (!amIAHole.isHole) { + const shape = new Shape(); + shape.curves = p2.curves; + const holes = isAHole.filter((h) => h.isHole && h.for === p2.identifier); + holes.forEach((h) => { + const hole = simplePaths[h.identifier]; + const path = new Path(); + path.curves = hole.curves; + shape.holes.push(path); + }); + shapesToReturn.push(shape); + } + }); + return shapesToReturn; + } + static getStrokeStyle(width2, color, lineJoin, lineCap, miterLimit) { + width2 = width2 !== void 0 ? width2 : 1; + color = color !== void 0 ? color : "#000"; + lineJoin = lineJoin !== void 0 ? lineJoin : "miter"; + lineCap = lineCap !== void 0 ? lineCap : "butt"; + miterLimit = miterLimit !== void 0 ? miterLimit : 4; + return { + strokeColor: color, + strokeWidth: width2, + strokeLineJoin: lineJoin, + strokeLineCap: lineCap, + strokeMiterLimit: miterLimit + }; + } + static pointsToStroke(points, style, arcDivisions, minDistance) { + const vertices = []; + const normals = []; + const uvs = []; + if (_SVGLoader.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) { + return null; + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + return geometry; + } + static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) { + const tempV2_1 = new Vector2(); + const tempV2_2 = new Vector2(); + const tempV2_3 = new Vector2(); + const tempV2_4 = new Vector2(); + const tempV2_5 = new Vector2(); + const tempV2_6 = new Vector2(); + const tempV2_7 = new Vector2(); + const lastPointL = new Vector2(); + const lastPointR = new Vector2(); + const point0L = new Vector2(); + const point0R = new Vector2(); + const currentPointL = new Vector2(); + const currentPointR = new Vector2(); + const nextPointL = new Vector2(); + const nextPointR = new Vector2(); + const innerPoint = new Vector2(); + const outerPoint = new Vector2(); + arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12; + minDistance = minDistance !== void 0 ? minDistance : 1e-3; + vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0; + points = removeDuplicatedPoints(points); + const numPoints = points.length; + if (numPoints < 2) return 0; + const isClosed = points[0].equals(points[numPoints - 1]); + let currentPoint; + let previousPoint = points[0]; + let nextPoint; + const strokeWidth2 = style.strokeWidth / 2; + const deltaU = 1 / (numPoints - 1); + let u0 = 0, u1; + let innerSideModified; + let joinIsOnLeftSide; + let isMiter; + let initialJoinIsOnLeftSide = false; + let numVertices = 0; + let currentCoordinate = vertexOffset * 3; + let currentCoordinateUV = vertexOffset * 2; + getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2); + lastPointL.copy(points[0]).sub(tempV2_1); + lastPointR.copy(points[0]).add(tempV2_1); + point0L.copy(lastPointL); + point0R.copy(lastPointR); + for (let iPoint = 1; iPoint < numPoints; iPoint++) { + currentPoint = points[iPoint]; + if (iPoint === numPoints - 1) { + if (isClosed) { + nextPoint = points[1]; + } else nextPoint = void 0; + } else { + nextPoint = points[iPoint + 1]; + } + const normal1 = tempV2_1; + getNormal(previousPoint, currentPoint, normal1); + tempV2_3.copy(normal1).multiplyScalar(strokeWidth2); + currentPointL.copy(currentPoint).sub(tempV2_3); + currentPointR.copy(currentPoint).add(tempV2_3); + u1 = u0 + deltaU; + innerSideModified = false; + if (nextPoint !== void 0) { + getNormal(currentPoint, nextPoint, tempV2_2); + tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2); + nextPointL.copy(currentPoint).sub(tempV2_3); + nextPointR.copy(currentPoint).add(tempV2_3); + joinIsOnLeftSide = true; + tempV2_3.subVectors(nextPoint, previousPoint); + if (normal1.dot(tempV2_3) < 0) { + joinIsOnLeftSide = false; + } + if (iPoint === 1) initialJoinIsOnLeftSide = joinIsOnLeftSide; + tempV2_3.subVectors(nextPoint, currentPoint); + tempV2_3.normalize(); + const dot = Math.abs(normal1.dot(tempV2_3)); + if (dot > Number.EPSILON) { + const miterSide = strokeWidth2 / dot; + tempV2_3.multiplyScalar(-miterSide); + tempV2_4.subVectors(currentPoint, previousPoint); + tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3); + innerPoint.copy(tempV2_5).negate(); + const miterLength2 = tempV2_5.length(); + const segmentLengthPrev = tempV2_4.length(); + tempV2_4.divideScalar(segmentLengthPrev); + tempV2_6.subVectors(nextPoint, currentPoint); + const segmentLengthNext = tempV2_6.length(); + tempV2_6.divideScalar(segmentLengthNext); + if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) { + innerSideModified = true; + } + outerPoint.copy(tempV2_5).add(currentPoint); + innerPoint.add(currentPoint); + isMiter = false; + if (innerSideModified) { + if (joinIsOnLeftSide) { + nextPointR.copy(innerPoint); + currentPointR.copy(innerPoint); + } else { + nextPointL.copy(innerPoint); + currentPointL.copy(innerPoint); + } + } else { + makeSegmentTriangles(); + } + switch (style.strokeLineJoin) { + case "bevel": + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + case "round": + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) { + makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0); + } else { + makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1); + } + break; + case "miter": + case "miter-clip": + default: + const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2; + if (miterFraction < 1) { + if (style.strokeLineJoin !== "miter-clip") { + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + } else { + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) { + tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL); + tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL); + addVertex(currentPointL, u1, 0); + addVertex(tempV2_6, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_6, u1, 0); + addVertex(tempV2_7, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_7, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR); + tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR); + addVertex(currentPointR, u1, 1); + addVertex(tempV2_6, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_6, u1, 1); + addVertex(tempV2_7, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_7, u1, 1); + addVertex(nextPointR, u1, 1); + } + } + } else { + if (innerSideModified) { + if (joinIsOnLeftSide) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(outerPoint, u1, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(outerPoint, u1, 1); + } + if (joinIsOnLeftSide) { + nextPointL.copy(outerPoint); + } else { + nextPointR.copy(outerPoint); + } + } else { + if (joinIsOnLeftSide) { + addVertex(currentPointL, u1, 0); + addVertex(outerPoint, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(outerPoint, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + addVertex(currentPointR, u1, 1); + addVertex(outerPoint, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(outerPoint, u1, 1); + addVertex(nextPointR, u1, 1); + } + } + isMiter = true; + } + break; + } + } else { + makeSegmentTriangles(); + } + } else { + makeSegmentTriangles(); + } + if (!isClosed && iPoint === numPoints - 1) { + addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0); + } + u0 = u1; + previousPoint = currentPoint; + lastPointL.copy(nextPointL); + lastPointR.copy(nextPointR); + } + if (!isClosed) { + addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1); + } else if (innerSideModified && vertices) { + let lastOuter = outerPoint; + let lastInner = innerPoint; + if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) { + lastOuter = innerPoint; + lastInner = outerPoint; + } + if (joinIsOnLeftSide) { + if (isMiter || initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 0 * 3); + lastInner.toArray(vertices, 3 * 3); + if (isMiter) { + lastOuter.toArray(vertices, 1 * 3); + } + } + } else { + if (isMiter || !initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 1 * 3); + lastInner.toArray(vertices, 3 * 3); + if (isMiter) { + lastOuter.toArray(vertices, 0 * 3); + } + } + } + } + return numVertices; + function getNormal(p1, p2, result) { + result.subVectors(p2, p1); + return result.set(-result.y, result.x).normalize(); + } + function addVertex(position2, u, v) { + if (vertices) { + vertices[currentCoordinate] = position2.x; + vertices[currentCoordinate + 1] = position2.y; + vertices[currentCoordinate + 2] = 0; + if (normals) { + normals[currentCoordinate] = 0; + normals[currentCoordinate + 1] = 0; + normals[currentCoordinate + 2] = 1; + } + currentCoordinate += 3; + if (uvs) { + uvs[currentCoordinateUV] = u; + uvs[currentCoordinateUV + 1] = v; + currentCoordinateUV += 2; + } + } + numVertices += 3; + } + function makeCircularSector(center, p1, p2, u, v) { + tempV2_1.copy(p1).sub(center).normalize(); + tempV2_2.copy(p2).sub(center).normalize(); + let angle = Math.PI; + const dot = tempV2_1.dot(tempV2_2); + if (Math.abs(dot) < 1) angle = Math.abs(Math.acos(dot)); + angle /= arcDivisions; + tempV2_3.copy(p1); + for (let i = 0, il = arcDivisions - 1; i < il; i++) { + tempV2_4.copy(tempV2_3).rotateAround(center, angle); + addVertex(tempV2_3, u, v); + addVertex(tempV2_4, u, v); + addVertex(center, u, 0.5); + tempV2_3.copy(tempV2_4); + } + addVertex(tempV2_4, u, v); + addVertex(p2, u, v); + addVertex(center, u, 0.5); + } + function makeSegmentTriangles() { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(currentPointR, u1, 1); + } + function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) { + if (innerSideModified2) { + if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(innerPoint, u, 0.5); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u, 1); + addVertex(innerPoint, u, 0); + addVertex(nextPointR, u, 1); + } + } else { + if (joinIsOnLeftSide2) { + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(currentPoint, u, 0.5); + } else { + addVertex(currentPointR, u, 1); + addVertex(nextPointR, u, 0); + addVertex(currentPoint, u, 0.5); + } + } + } + function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) { + if (innerSideModified2) { + if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u0, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(innerPoint, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(nextPointL, u0, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u0, 1); + addVertex(innerPoint, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(innerPoint, u1, 0); + addVertex(nextPointR, u0, 1); + } + } + } + function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) { + switch (style.strokeLineCap) { + case "round": + if (start) { + makeCircularSector(center, p2, p1, u, 0.5); + } else { + makeCircularSector(center, p1, p2, u, 0.5); + } + break; + case "square": + if (start) { + tempV2_1.subVectors(p1, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, 1 * 3); + tempV2_4.toArray(vertices, 0 * 3); + tempV2_4.toArray(vertices, 3 * 3); + } else { + tempV2_3.toArray(vertices, 1 * 3); + uvs[3 * 2 + 1] === 1 ? tempV2_4.toArray(vertices, 3 * 3) : tempV2_3.toArray(vertices, 3 * 3); + tempV2_4.toArray(vertices, 0 * 3); + } + } else { + tempV2_1.subVectors(p2, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + const vl = vertices.length; + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, vl - 1 * 3); + tempV2_4.toArray(vertices, vl - 2 * 3); + tempV2_4.toArray(vertices, vl - 4 * 3); + } else { + tempV2_4.toArray(vertices, vl - 2 * 3); + tempV2_3.toArray(vertices, vl - 1 * 3); + tempV2_4.toArray(vertices, vl - 4 * 3); + } + } + break; + case "butt": + default: + break; + } + } + function removeDuplicatedPoints(points2) { + let dupPoints = false; + for (let i = 1, n2 = points2.length - 1; i < n2; i++) { + if (points2[i].distanceTo(points2[i + 1]) < minDistance) { + dupPoints = true; + break; + } + } + if (!dupPoints) return points2; + const newPoints = []; + newPoints.push(points2[0]); + for (let i = 1, n2 = points2.length - 1; i < n2; i++) { + if (points2[i].distanceTo(points2[i + 1]) >= minDistance) { + newPoints.push(points2[i]); + } + } + newPoints.push(points2[points2.length - 1]); + return newPoints; + } + } +}; + +// node_modules/three/examples/jsm/loaders/TDSLoader.js +var TDSLoader = class extends Loader { + constructor(manager) { + super(manager); + this.debug = false; + this.group = null; + this.materials = []; + this.meshes = []; + } + /** + * Load 3ds file from url. + * + * @method load + * @param {[type]} url URL for the file. + * @param {Function} onLoad onLoad callback, receives group Object3D as argument. + * @param {Function} onProgress onProgress callback. + * @param {Function} onError onError callback. + */ + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + /** + * Parse arraybuffer data and load 3ds file. + * + * @method parse + * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. + * @param {String} path Path for external resources. + * @return {Group} Group loaded from 3ds file. + */ + parse(arraybuffer, path) { + this.group = new Group(); + this.materials = []; + this.meshes = []; + this.readFile(arraybuffer, path); + for (let i = 0; i < this.meshes.length; i++) { + this.group.add(this.meshes[i]); + } + return this.group; + } + /** + * Decode file content to read 3ds data. + * + * @method readFile + * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. + * @param {String} path Path for external resources. + */ + readFile(arraybuffer, path) { + const data2 = new DataView(arraybuffer); + const chunk = new Chunk(data2, 0, this.debugMessage); + if (chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC) { + let next = chunk.readChunk(); + while (next) { + if (next.id === M3D_VERSION) { + const version = next.readDWord(); + this.debugMessage("3DS file version: " + version); + } else if (next.id === MDATA) { + this.readMeshData(next, path); + } else { + this.debugMessage("Unknown main chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + this.debugMessage("Parsed " + this.meshes.length + " meshes"); + } + /** + * Read mesh data chunk. + * + * @method readMeshData + * @param {Chunk} chunk to read mesh from + * @param {String} path Path for external resources. + */ + readMeshData(chunk, path) { + let next = chunk.readChunk(); + while (next) { + if (next.id === MESH_VERSION) { + const version = +next.readDWord(); + this.debugMessage("Mesh Version: " + version); + } else if (next.id === MASTER_SCALE) { + const scale2 = next.readFloat(); + this.debugMessage("Master scale: " + scale2); + this.group.scale.set(scale2, scale2, scale2); + } else if (next.id === NAMED_OBJECT) { + this.debugMessage("Named Object"); + this.readNamedObject(next); + } else if (next.id === MAT_ENTRY) { + this.debugMessage("Material"); + this.readMaterialEntry(next, path); + } else { + this.debugMessage("Unknown MDATA chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + /** + * Read named object chunk. + * + * @method readNamedObject + * @param {Chunk} chunk Chunk in use. + */ + readNamedObject(chunk) { + const name2 = chunk.readString(); + let next = chunk.readChunk(); + while (next) { + if (next.id === N_TRI_OBJECT) { + const mesh = this.readMesh(next); + mesh.name = name2; + this.meshes.push(mesh); + } else { + this.debugMessage("Unknown named object chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + /** + * Read material data chunk and add it to the material list. + * + * @method readMaterialEntry + * @param {Chunk} chunk Chunk in use. + * @param {String} path Path for external resources. + */ + readMaterialEntry(chunk, path) { + let next = chunk.readChunk(); + const material = new MeshPhongMaterial(); + while (next) { + if (next.id === MAT_NAME) { + material.name = next.readString(); + this.debugMessage(" Name: " + material.name); + } else if (next.id === MAT_WIRE) { + this.debugMessage(" Wireframe"); + material.wireframe = true; + } else if (next.id === MAT_WIRE_SIZE) { + const value2 = next.readByte(); + material.wireframeLinewidth = value2; + this.debugMessage(" Wireframe Thickness: " + value2); + } else if (next.id === MAT_TWO_SIDE) { + material.side = DoubleSide; + this.debugMessage(" DoubleSided"); + } else if (next.id === MAT_ADDITIVE) { + this.debugMessage(" Additive Blending"); + material.blending = AdditiveBlending; + } else if (next.id === MAT_DIFFUSE) { + this.debugMessage(" Diffuse Color"); + material.color = this.readColor(next); + } else if (next.id === MAT_SPECULAR) { + this.debugMessage(" Specular Color"); + material.specular = this.readColor(next); + } else if (next.id === MAT_AMBIENT) { + this.debugMessage(" Ambient color"); + material.color = this.readColor(next); + } else if (next.id === MAT_SHININESS) { + const shininess = this.readPercentage(next); + material.shininess = shininess * 100; + this.debugMessage(" Shininess : " + shininess); + } else if (next.id === MAT_TRANSPARENCY) { + const transparency = this.readPercentage(next); + material.opacity = 1 - transparency; + this.debugMessage(" Transparency : " + transparency); + material.transparent = material.opacity < 1 ? true : false; + } else if (next.id === MAT_TEXMAP) { + this.debugMessage(" ColorMap"); + material.map = this.readMap(next, path); + } else if (next.id === MAT_BUMPMAP) { + this.debugMessage(" BumpMap"); + material.bumpMap = this.readMap(next, path); + } else if (next.id === MAT_OPACMAP) { + this.debugMessage(" OpacityMap"); + material.alphaMap = this.readMap(next, path); + } else if (next.id === MAT_SPECMAP) { + this.debugMessage(" SpecularMap"); + material.specularMap = this.readMap(next, path); + } else { + this.debugMessage(" Unknown material chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + this.materials[material.name] = material; + } + /** + * Read mesh data chunk. + * + * @method readMesh + * @param {Chunk} chunk Chunk in use. + * @return {Mesh} The parsed mesh. + */ + readMesh(chunk) { + let next = chunk.readChunk(); + const geometry = new BufferGeometry(); + const material = new MeshPhongMaterial(); + const mesh = new Mesh(geometry, material); + mesh.name = "mesh"; + while (next) { + if (next.id === POINT_ARRAY) { + const points = next.readWord(); + this.debugMessage(" Vertex: " + points); + const vertices = []; + for (let i = 0; i < points; i++) { + vertices.push(next.readFloat()); + vertices.push(next.readFloat()); + vertices.push(next.readFloat()); + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } else if (next.id === FACE_ARRAY) { + this.readFaceArray(next, mesh); + } else if (next.id === TEX_VERTS) { + const texels = next.readWord(); + this.debugMessage(" UV: " + texels); + const uvs = []; + for (let i = 0; i < texels; i++) { + uvs.push(next.readFloat()); + uvs.push(next.readFloat()); + } + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } else if (next.id === MESH_MATRIX) { + this.debugMessage(" Tranformation Matrix (TODO)"); + const values2 = []; + for (let i = 0; i < 12; i++) { + values2[i] = next.readFloat(); + } + const matrix3 = new Matrix4(); + matrix3.elements[0] = values2[0]; + matrix3.elements[1] = values2[6]; + matrix3.elements[2] = values2[3]; + matrix3.elements[3] = values2[9]; + matrix3.elements[4] = values2[2]; + matrix3.elements[5] = values2[8]; + matrix3.elements[6] = values2[5]; + matrix3.elements[7] = values2[11]; + matrix3.elements[8] = values2[1]; + matrix3.elements[9] = values2[7]; + matrix3.elements[10] = values2[4]; + matrix3.elements[11] = values2[10]; + matrix3.elements[12] = 0; + matrix3.elements[13] = 0; + matrix3.elements[14] = 0; + matrix3.elements[15] = 1; + matrix3.transpose(); + const inverse2 = new Matrix4(); + inverse2.copy(matrix3).invert(); + geometry.applyMatrix4(inverse2); + matrix3.decompose(mesh.position, mesh.quaternion, mesh.scale); + } else { + this.debugMessage(" Unknown mesh chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + geometry.computeVertexNormals(); + return mesh; + } + /** + * Read face array data chunk. + * + * @method readFaceArray + * @param {Chunk} chunk Chunk in use. + * @param {Mesh} mesh Mesh to be filled with the data read. + */ + readFaceArray(chunk, mesh) { + const faces = chunk.readWord(); + this.debugMessage(" Faces: " + faces); + const index2 = []; + for (let i = 0; i < faces; ++i) { + index2.push(chunk.readWord(), chunk.readWord(), chunk.readWord()); + chunk.readWord(); + } + mesh.geometry.setIndex(index2); + let materialIndex = 0; + let start = 0; + while (!chunk.endOfChunk) { + const subchunk = chunk.readChunk(); + if (subchunk.id === MSH_MAT_GROUP) { + this.debugMessage(" Material Group"); + const group = this.readMaterialGroup(subchunk); + const count = group.index.length * 3; + mesh.geometry.addGroup(start, count, materialIndex); + start += count; + materialIndex++; + const material = this.materials[group.name]; + if (Array.isArray(mesh.material) === false) mesh.material = []; + if (material !== void 0) { + mesh.material.push(material); + } + } else { + this.debugMessage(" Unknown face array chunk: " + subchunk.hexId); + } + } + if (mesh.material.length === 1) mesh.material = mesh.material[0]; + } + /** + * Read texture map data chunk. + * + * @method readMap + * @param {Chunk} chunk Chunk in use. + * @param {String} path Path for external resources. + * @return {Texture} Texture read from this data chunk. + */ + readMap(chunk, path) { + let next = chunk.readChunk(); + let texture = {}; + const loader = new TextureLoader(this.manager); + loader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + while (next) { + if (next.id === MAT_MAPNAME) { + const name2 = next.readString(); + texture = loader.load(name2); + this.debugMessage(" File: " + path + name2); + } else if (next.id === MAT_MAP_UOFFSET) { + texture.offset.x = next.readFloat(); + this.debugMessage(" OffsetX: " + texture.offset.x); + } else if (next.id === MAT_MAP_VOFFSET) { + texture.offset.y = next.readFloat(); + this.debugMessage(" OffsetY: " + texture.offset.y); + } else if (next.id === MAT_MAP_USCALE) { + texture.repeat.x = next.readFloat(); + this.debugMessage(" RepeatX: " + texture.repeat.x); + } else if (next.id === MAT_MAP_VSCALE) { + texture.repeat.y = next.readFloat(); + this.debugMessage(" RepeatY: " + texture.repeat.y); + } else { + this.debugMessage(" Unknown map chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + return texture; + } + /** + * Read material group data chunk. + * + * @method readMaterialGroup + * @param {Chunk} chunk Chunk in use. + * @return {Object} Object with name and index of the object. + */ + readMaterialGroup(chunk) { + const name2 = chunk.readString(); + const numFaces = chunk.readWord(); + this.debugMessage(" Name: " + name2); + this.debugMessage(" Faces: " + numFaces); + const index2 = []; + for (let i = 0; i < numFaces; ++i) { + index2.push(chunk.readWord()); + } + return { name: name2, index: index2 }; + } + /** + * Read a color value. + * + * @method readColor + * @param {Chunk} chunk Chunk. + * @return {Color} Color value read.. + */ + readColor(chunk) { + const subChunk = chunk.readChunk(); + const color = new Color(); + if (subChunk.id === COLOR_24 || subChunk.id === LIN_COLOR_24) { + const r = subChunk.readByte(); + const g2 = subChunk.readByte(); + const b3 = subChunk.readByte(); + color.setRGB(r / 255, g2 / 255, b3 / 255); + this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); + } else if (subChunk.id === COLOR_F || subChunk.id === LIN_COLOR_F) { + const r = subChunk.readFloat(); + const g2 = subChunk.readFloat(); + const b3 = subChunk.readFloat(); + color.setRGB(r, g2, b3); + this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); + } else { + this.debugMessage(" Unknown color chunk: " + subChunk.hexId); + } + return color; + } + /** + * Read percentage value. + * + * @method readPercentage + * @param {Chunk} chunk Chunk to read data from. + * @return {Number} Data read from the dataview. + */ + readPercentage(chunk) { + const subChunk = chunk.readChunk(); + switch (subChunk.id) { + case INT_PERCENTAGE: + return subChunk.readShort() / 100; + break; + case FLOAT_PERCENTAGE: + return subChunk.readFloat(); + break; + default: + this.debugMessage(" Unknown percentage chunk: " + subChunk.hexId); + return 0; + } + } + /** + * Print debug message to the console. + * + * Is controlled by a flag to show or hide debug messages. + * + * @method debugMessage + * @param {Object} message Debug message to print to the console. + */ + debugMessage(message) { + if (this.debug) { + console.log(message); + } + } +}; +var Chunk = class _Chunk { + /** + * Create a new chunk + * + * @class Chunk + * @param {DataView} data DataView to read from. + * @param {Number} position in data. + * @param {Function} debugMessage logging callback. + */ + constructor(data2, position2, debugMessage) { + this.data = data2; + this.offset = position2; + this.position = position2; + this.debugMessage = debugMessage; + if (this.debugMessage instanceof Function) { + this.debugMessage = function() { + }; + } + this.id = this.readWord(); + this.size = this.readDWord(); + this.end = this.offset + this.size; + if (this.end > data2.byteLength) { + this.debugMessage("Bad chunk size for chunk at " + position2); + } + } + /** + * read a sub cchunk. + * + * @method readChunk + * @return {Chunk | null} next sub chunk + */ + readChunk() { + if (this.endOfChunk) { + return null; + } + try { + const next = new _Chunk(this.data, this.position, this.debugMessage); + this.position += next.size; + return next; + } catch (e) { + this.debugMessage("Unable to read chunk at " + this.position); + return null; + } + } + /** + * return the ID of this chunk as Hex + * + * @method idToString + * @return {String} hex-string of id + */ + get hexId() { + return this.id.toString(16); + } + get endOfChunk() { + return this.position >= this.end; + } + /** + * Read byte value. + * + * @method readByte + * @return {Number} Data read from the dataview. + */ + readByte() { + const v = this.data.getUint8(this.position, true); + this.position += 1; + return v; + } + /** + * Read 32 bit float value. + * + * @method readFloat + * @return {Number} Data read from the dataview. + */ + readFloat() { + try { + const v = this.data.getFloat32(this.position, true); + this.position += 4; + return v; + } catch (e) { + this.debugMessage(e + " " + this.position + " " + this.data.byteLength); + return 0; + } + } + /** + * Read 32 bit signed integer value. + * + * @method readInt + * @return {Number} Data read from the dataview. + */ + readInt() { + const v = this.data.getInt32(this.position, true); + this.position += 4; + return v; + } + /** + * Read 16 bit signed integer value. + * + * @method readShort + * @return {Number} Data read from the dataview. + */ + readShort() { + const v = this.data.getInt16(this.position, true); + this.position += 2; + return v; + } + /** + * Read 64 bit unsigned integer value. + * + * @method readDWord + * @return {Number} Data read from the dataview. + */ + readDWord() { + const v = this.data.getUint32(this.position, true); + this.position += 4; + return v; + } + /** + * Read 32 bit unsigned integer value. + * + * @method readWord + * @return {Number} Data read from the dataview. + */ + readWord() { + const v = this.data.getUint16(this.position, true); + this.position += 2; + return v; + } + /** + * Read NULL terminated ASCII string value from chunk-pos. + * + * @method readString + * @return {String} Data read from the dataview. + */ + readString() { + let s = ""; + let c2 = this.readByte(); + while (c2) { + s += String.fromCharCode(c2); + c2 = this.readByte(); + } + return s; + } +}; +var M3DMAGIC = 19789; +var MLIBMAGIC = 15786; +var CMAGIC = 49725; +var M3D_VERSION = 2; +var COLOR_F = 16; +var COLOR_24 = 17; +var LIN_COLOR_24 = 18; +var LIN_COLOR_F = 19; +var INT_PERCENTAGE = 48; +var FLOAT_PERCENTAGE = 49; +var MDATA = 15677; +var MESH_VERSION = 15678; +var MASTER_SCALE = 256; +var MAT_ENTRY = 45055; +var MAT_NAME = 40960; +var MAT_AMBIENT = 40976; +var MAT_DIFFUSE = 40992; +var MAT_SPECULAR = 41008; +var MAT_SHININESS = 41024; +var MAT_TRANSPARENCY = 41040; +var MAT_TWO_SIDE = 41089; +var MAT_ADDITIVE = 41091; +var MAT_WIRE = 41093; +var MAT_WIRE_SIZE = 41095; +var MAT_TEXMAP = 41472; +var MAT_OPACMAP = 41488; +var MAT_BUMPMAP = 41520; +var MAT_SPECMAP = 41476; +var MAT_MAPNAME = 41728; +var MAT_MAP_USCALE = 41812; +var MAT_MAP_VSCALE = 41814; +var MAT_MAP_UOFFSET = 41816; +var MAT_MAP_VOFFSET = 41818; +var NAMED_OBJECT = 16384; +var N_TRI_OBJECT = 16640; +var POINT_ARRAY = 16656; +var FACE_ARRAY = 16672; +var MSH_MAT_GROUP = 16688; +var TEX_VERTS = 16704; +var MESH_MATRIX = 16736; + +// node_modules/three/examples/jsm/libs/utif.module.js +var UTIF2 = {}; +(function() { + "use strict"; + var W = function a1() { + function W2(p2) { + this.message = "JPEG error: " + p2; + } + W2.prototype = new Error(); + W2.prototype.name = "JpegError"; + W2.constructor = W2; + return W2; + }(), ak = function ag() { + var p2 = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]), t3 = 4017, ac = 799, ah = 3406, ao = 2276, ar = 1567, ai = 3784, s = 5793, ad = 2896; + function ak2(Q3) { + if (Q3 == null) Q3 = {}; + if (Q3.w == null) Q3.w = -1; + this.V = Q3.n; + this.N = Q3.w; + } + function a5(Q3, h) { + var f = 0, G = [], n2, E2, a3 = 16, F2; + while (a3 > 0 && !Q3[a3 - 1]) { + a3--; + } + G.push({ children: [], index: 0 }); + var C2 = G[0]; + for (n2 = 0; n2 < a3; n2++) { + for (E2 = 0; E2 < Q3[n2]; E2++) { + C2 = G.pop(); + C2.children[C2.index] = h[f]; + while (C2.index > 0) { + C2 = G.pop(); + } + C2.index++; + G.push(C2); + while (G.length <= n2) { + G.push(F2 = { children: [], index: 0 }); + C2.children[C2.index] = F2.children; + C2 = F2; + } + f++; + } + if (n2 + 1 < a3) { + G.push(F2 = { children: [], index: 0 }); + C2.children[C2.index] = F2.children; + C2 = F2; + } + } + return G[0].children; + } + function a2(Q3, h, f) { + return 64 * ((Q3.P + 1) * h + f); + } + function a7(Q3, h, f, G, n2, E2, a3, C2, F2, d) { + if (d == null) d = false; + var T = f.m, U = f.Z, z = h, J = 0, V = 0, r = 0, D = 0, a8, q2 = 0, X2, O, _, N, e, K, x2 = 0, k2, g2, R4, c2; + function Y2() { + if (V > 0) { + V--; + return J >> V & 1; + } + J = Q3[h++]; + if (J === 255) { + var I2 = Q3[h++]; + if (I2) { + if (I2 === 220 && d) { + h += 2; + var l2 = Z2(Q3, h); + h += 2; + if (l2 > 0 && l2 !== f.s) { + throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", l2); + } + } else if (I2 === 217) { + if (d) { + var M = q2 * 8; + if (M > 0 && M < f.s / 10) { + throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter", M); + } + } + throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); + } + throw new W("unexpected marker"); + } + } + V = 7; + return J >>> 7; + } + function u(I2) { + var l2 = I2; + while (true) { + l2 = l2[Y2()]; + switch (typeof l2) { + case "number": + return l2; + case "object": + continue; + } + throw new W("invalid huffman sequence"); + } + } + function m(I2) { + var e2 = 0; + while (I2 > 0) { + e2 = e2 << 1 | Y2(); + I2--; + } + return e2; + } + function j(I2) { + if (I2 === 1) { + return Y2() === 1 ? 1 : -1; + } + var e2 = m(I2); + if (e2 >= 1 << I2 - 1) { + return e2; + } + return e2 + (-1 << I2) + 1; + } + function v(X3, I2) { + var l2 = u(X3.J), M = l2 === 0 ? 0 : j(l2), N2 = 1; + X3.D[I2] = X3.Q += M; + while (N2 < 64) { + var S = u(X3.i), i = S & 15, A2 = S >> 4; + if (i === 0) { + if (A2 < 15) { + break; + } + N2 += 16; + continue; + } + N2 += A2; + var o = p2[N2]; + X3.D[I2 + o] = j(i); + N2++; + } + } + function $2(X3, I2) { + var l2 = u(X3.J), M = l2 === 0 ? 0 : j(l2) << F2; + X3.D[I2] = X3.Q += M; + } + function b3(X3, I2) { + X3.D[I2] |= Y2() << F2; + } + function P(X3, I2) { + if (r > 0) { + r--; + return; + } + var N2 = E2, l2 = a3; + while (N2 <= l2) { + var M = u(X3.i), S = M & 15, i = M >> 4; + if (S === 0) { + if (i < 15) { + r = m(i) + (1 << i) - 1; + break; + } + N2 += 16; + continue; + } + N2 += i; + var A2 = p2[N2]; + X3.D[I2 + A2] = j(S) * (1 << F2); + N2++; + } + } + function a4(X3, I2) { + var N2 = E2, l2 = a3, M = 0, S, i; + while (N2 <= l2) { + var A2 = I2 + p2[N2], o = X3.D[A2] < 0 ? -1 : 1; + switch (D) { + case 0: + i = u(X3.i); + S = i & 15; + M = i >> 4; + if (S === 0) { + if (M < 15) { + r = m(M) + (1 << M); + D = 4; + } else { + M = 16; + D = 1; + } + } else { + if (S !== 1) { + throw new W("invalid ACn encoding"); + } + a8 = j(S); + D = M ? 2 : 3; + } + continue; + case 1: + case 2: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } else { + M--; + if (M === 0) { + D = D === 2 ? 3 : 0; + } + } + break; + case 3: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } else { + X3.D[A2] = a8 << F2; + D = 0; + } + break; + case 4: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } + break; + } + N2++; + } + if (D === 4) { + r--; + if (r === 0) { + D = 0; + } + } + } + function H(X3, I2, x3, l2, M) { + var S = x3 / T | 0, i = x3 % T; + q2 = S * X3.A + l2; + var A2 = i * X3.h + M, o = a2(X3, q2, A2); + I2(X3, o); + } + function w(X3, I2, x3) { + q2 = x3 / X3.P | 0; + var l2 = x3 % X3.P, M = a2(X3, q2, l2); + I2(X3, M); + } + var y2 = G.length; + if (U) { + if (E2 === 0) { + K = C2 === 0 ? $2 : b3; + } else { + K = C2 === 0 ? P : a4; + } + } else { + K = v; + } + if (y2 === 1) { + g2 = G[0].P * G[0].c; + } else { + g2 = T * f.R; + } + while (x2 <= g2) { + var L = n2 ? Math.min(g2 - x2, n2) : g2; + if (L > 0) { + for (O = 0; O < y2; O++) { + G[O].Q = 0; + } + r = 0; + if (y2 === 1) { + X2 = G[0]; + for (e = 0; e < L; e++) { + w(X2, K, x2); + x2++; + } + } else { + for (e = 0; e < L; e++) { + for (O = 0; O < y2; O++) { + X2 = G[O]; + R4 = X2.h; + c2 = X2.A; + for (_ = 0; _ < c2; _++) { + for (N = 0; N < R4; N++) { + H(X2, K, x2, _, N); + } + } + } + x2++; + } + } + } + V = 0; + k2 = an(Q3, h); + if (!k2) { + break; + } + if (k2.u) { + var a6 = L > 0 ? "unexpected" : "excessive"; + h = k2.offset; + } + if (k2.M >= 65488 && k2.M <= 65495) { + h += 2; + } else { + break; + } + } + return h - z; + } + function al(Q3, h, f) { + var G = Q3.$, n2 = Q3.D, E2, a3, C2, F2, d, T, U, z, J, V, Y2, u, m, j, v, $2, b3; + if (!G) { + throw new W("missing required Quantization Table."); + } + for (var r = 0; r < 64; r += 8) { + J = n2[h + r]; + V = n2[h + r + 1]; + Y2 = n2[h + r + 2]; + u = n2[h + r + 3]; + m = n2[h + r + 4]; + j = n2[h + r + 5]; + v = n2[h + r + 6]; + $2 = n2[h + r + 7]; + J *= G[r]; + if ((V | Y2 | u | m | j | v | $2) === 0) { + b3 = s * J + 512 >> 10; + f[r] = b3; + f[r + 1] = b3; + f[r + 2] = b3; + f[r + 3] = b3; + f[r + 4] = b3; + f[r + 5] = b3; + f[r + 6] = b3; + f[r + 7] = b3; + continue; + } + V *= G[r + 1]; + Y2 *= G[r + 2]; + u *= G[r + 3]; + m *= G[r + 4]; + j *= G[r + 5]; + v *= G[r + 6]; + $2 *= G[r + 7]; + E2 = s * J + 128 >> 8; + a3 = s * m + 128 >> 8; + C2 = Y2; + F2 = v; + d = ad * (V - $2) + 128 >> 8; + z = ad * (V + $2) + 128 >> 8; + T = u << 4; + U = j << 4; + E2 = E2 + a3 + 1 >> 1; + a3 = E2 - a3; + b3 = C2 * ai + F2 * ar + 128 >> 8; + C2 = C2 * ar - F2 * ai + 128 >> 8; + F2 = b3; + d = d + U + 1 >> 1; + U = d - U; + z = z + T + 1 >> 1; + T = z - T; + E2 = E2 + F2 + 1 >> 1; + F2 = E2 - F2; + a3 = a3 + C2 + 1 >> 1; + C2 = a3 - C2; + b3 = d * ao + z * ah + 2048 >> 12; + d = d * ah - z * ao + 2048 >> 12; + z = b3; + b3 = T * ac + U * t3 + 2048 >> 12; + T = T * t3 - U * ac + 2048 >> 12; + U = b3; + f[r] = E2 + z; + f[r + 7] = E2 - z; + f[r + 1] = a3 + U; + f[r + 6] = a3 - U; + f[r + 2] = C2 + T; + f[r + 5] = C2 - T; + f[r + 3] = F2 + d; + f[r + 4] = F2 - d; + } + for (var P = 0; P < 8; ++P) { + J = f[P]; + V = f[P + 8]; + Y2 = f[P + 16]; + u = f[P + 24]; + m = f[P + 32]; + j = f[P + 40]; + v = f[P + 48]; + $2 = f[P + 56]; + if ((V | Y2 | u | m | j | v | $2) === 0) { + b3 = s * J + 8192 >> 14; + if (b3 < -2040) { + b3 = 0; + } else if (b3 >= 2024) { + b3 = 255; + } else { + b3 = b3 + 2056 >> 4; + } + n2[h + P] = b3; + n2[h + P + 8] = b3; + n2[h + P + 16] = b3; + n2[h + P + 24] = b3; + n2[h + P + 32] = b3; + n2[h + P + 40] = b3; + n2[h + P + 48] = b3; + n2[h + P + 56] = b3; + continue; + } + E2 = s * J + 2048 >> 12; + a3 = s * m + 2048 >> 12; + C2 = Y2; + F2 = v; + d = ad * (V - $2) + 2048 >> 12; + z = ad * (V + $2) + 2048 >> 12; + T = u; + U = j; + E2 = (E2 + a3 + 1 >> 1) + 4112; + a3 = E2 - a3; + b3 = C2 * ai + F2 * ar + 2048 >> 12; + C2 = C2 * ar - F2 * ai + 2048 >> 12; + F2 = b3; + d = d + U + 1 >> 1; + U = d - U; + z = z + T + 1 >> 1; + T = z - T; + E2 = E2 + F2 + 1 >> 1; + F2 = E2 - F2; + a3 = a3 + C2 + 1 >> 1; + C2 = a3 - C2; + b3 = d * ao + z * ah + 2048 >> 12; + d = d * ah - z * ao + 2048 >> 12; + z = b3; + b3 = T * ac + U * t3 + 2048 >> 12; + T = T * t3 - U * ac + 2048 >> 12; + U = b3; + J = E2 + z; + $2 = E2 - z; + V = a3 + U; + v = a3 - U; + Y2 = C2 + T; + j = C2 - T; + u = F2 + d; + m = F2 - d; + if (J < 16) { + J = 0; + } else if (J >= 4080) { + J = 255; + } else { + J >>= 4; + } + if (V < 16) { + V = 0; + } else if (V >= 4080) { + V = 255; + } else { + V >>= 4; + } + if (Y2 < 16) { + Y2 = 0; + } else if (Y2 >= 4080) { + Y2 = 255; + } else { + Y2 >>= 4; + } + if (u < 16) { + u = 0; + } else if (u >= 4080) { + u = 255; + } else { + u >>= 4; + } + if (m < 16) { + m = 0; + } else if (m >= 4080) { + m = 255; + } else { + m >>= 4; + } + if (j < 16) { + j = 0; + } else if (j >= 4080) { + j = 255; + } else { + j >>= 4; + } + if (v < 16) { + v = 0; + } else if (v >= 4080) { + v = 255; + } else { + v >>= 4; + } + if ($2 < 16) { + $2 = 0; + } else if ($2 >= 4080) { + $2 = 255; + } else { + $2 >>= 4; + } + n2[h + P] = J; + n2[h + P + 8] = V; + n2[h + P + 16] = Y2; + n2[h + P + 24] = u; + n2[h + P + 32] = m; + n2[h + P + 40] = j; + n2[h + P + 48] = v; + n2[h + P + 56] = $2; + } + } + function a0(Q3, h) { + var f = h.P, G = h.c, n2 = new Int16Array(64); + for (var E2 = 0; E2 < G; E2++) { + for (var a3 = 0; a3 < f; a3++) { + var C2 = a2(h, E2, a3); + al(h, C2, n2); + } + } + return h.D; + } + function an(Q3, h, f) { + if (f == null) f = h; + var G = Q3.length - 1, n2 = f < h ? f : h; + if (h >= G) { + return null; + } + var E2 = Z2(Q3, h); + if (E2 >= 65472 && E2 <= 65534) { + return { u: null, M: E2, offset: h }; + } + var a3 = Z2(Q3, n2); + while (!(a3 >= 65472 && a3 <= 65534)) { + if (++n2 >= G) { + return null; + } + a3 = Z2(Q3, n2); + } + return { u: E2.toString(16), M: a3, offset: n2 }; + } + ak2.prototype = { parse(Q3, h) { + if (h == null) h = {}; + var f = h.F, E2 = 0, a3 = null, C2 = null, F2, d, T = 0; + function G() { + var o = Z2(Q3, E2); + E2 += 2; + var B2 = E2 + o - 2, V2 = an(Q3, B2, E2); + if (V2 && V2.u) { + B2 = V2.offset; + } + var ab = Q3.subarray(E2, B2); + E2 += ab.length; + return ab; + } + function n2(F3) { + var o = Math.ceil(F3.o / 8 / F3.X), B2 = Math.ceil(F3.s / 8 / F3.B); + for (var Y3 = 0; Y3 < F3.W.length; Y3++) { + R4 = F3.W[Y3]; + var ab = Math.ceil(Math.ceil(F3.o / 8) * R4.h / F3.X), af = Math.ceil(Math.ceil(F3.s / 8) * R4.A / F3.B), ap = o * R4.h, aq = B2 * R4.A, ae = 64 * aq * (ap + 1); + R4.D = new Int16Array(ae); + R4.P = ab; + R4.c = af; + } + F3.m = o; + F3.R = B2; + } + var U = [], z = [], J = [], V = Z2(Q3, E2); + E2 += 2; + if (V !== 65496) { + throw new W("SOI not found"); + } + V = Z2(Q3, E2); + E2 += 2; + markerLoop: while (V !== 65497) { + var Y2, u, m; + switch (V) { + case 65504: + case 65505: + case 65506: + case 65507: + case 65508: + case 65509: + case 65510: + case 65511: + case 65512: + case 65513: + case 65514: + case 65515: + case 65516: + case 65517: + case 65518: + case 65519: + case 65534: + var j = G(); + if (V === 65504) { + if (j[0] === 74 && j[1] === 70 && j[2] === 73 && j[3] === 70 && j[4] === 0) { + a3 = { version: { d: j[5], T: j[6] }, K: j[7], j: j[8] << 8 | j[9], H: j[10] << 8 | j[11], S: j[12], I: j[13], C: j.subarray(14, 14 + 3 * j[12] * j[13]) }; + } + } + if (V === 65518) { + if (j[0] === 65 && j[1] === 100 && j[2] === 111 && j[3] === 98 && j[4] === 101) { + C2 = { version: j[5] << 8 | j[6], k: j[7] << 8 | j[8], q: j[9] << 8 | j[10], a: j[11] }; + } + } + break; + case 65499: + var v = Z2(Q3, E2), b3; + E2 += 2; + var $2 = v + E2 - 2; + while (E2 < $2) { + var r = Q3[E2++], P = new Uint16Array(64); + if (r >> 4 === 0) { + for (u = 0; u < 64; u++) { + b3 = p2[u]; + P[b3] = Q3[E2++]; + } + } else if (r >> 4 === 1) { + for (u = 0; u < 64; u++) { + b3 = p2[u]; + P[b3] = Z2(Q3, E2); + E2 += 2; + } + } else { + throw new W("DQT - invalid table spec"); + } + U[r & 15] = P; + } + break; + case 65472: + case 65473: + case 65474: + if (F2) { + throw new W("Only single frame JPEGs supported"); + } + E2 += 2; + F2 = {}; + F2.G = V === 65473; + F2.Z = V === 65474; + F2.precision = Q3[E2++]; + var D = Z2(Q3, E2), a4, q2 = 0, H = 0; + E2 += 2; + F2.s = f || D; + F2.o = Z2(Q3, E2); + E2 += 2; + F2.W = []; + F2._ = {}; + var a8 = Q3[E2++]; + for (Y2 = 0; Y2 < a8; Y2++) { + a4 = Q3[E2]; + var w = Q3[E2 + 1] >> 4, y2 = Q3[E2 + 1] & 15; + if (q2 < w) { + q2 = w; + } + if (H < y2) { + H = y2; + } + var X2 = Q3[E2 + 2]; + m = F2.W.push({ h: w, A: y2, L: X2, $: null }); + F2._[a4] = m - 1; + E2 += 3; + } + F2.X = q2; + F2.B = H; + n2(F2); + break; + case 65476: + var O = Z2(Q3, E2); + E2 += 2; + for (Y2 = 2; Y2 < O; ) { + var _ = Q3[E2++], N = new Uint8Array(16), e = 0; + for (u = 0; u < 16; u++, E2++) { + e += N[u] = Q3[E2]; + } + var K = new Uint8Array(e); + for (u = 0; u < e; u++, E2++) { + K[u] = Q3[E2]; + } + Y2 += 17 + e; + (_ >> 4 === 0 ? J : z)[_ & 15] = a5(N, K); + } + break; + case 65501: + E2 += 2; + d = Z2(Q3, E2); + E2 += 2; + break; + case 65498: + var x2 = ++T === 1 && !f, R4; + E2 += 2; + var k2 = Q3[E2++], g2 = []; + for (Y2 = 0; Y2 < k2; Y2++) { + var c2 = Q3[E2++], L = F2._[c2]; + R4 = F2.W[L]; + R4.index = c2; + var a6 = Q3[E2++]; + R4.J = J[a6 >> 4]; + R4.i = z[a6 & 15]; + g2.push(R4); + } + var I2 = Q3[E2++], l2 = Q3[E2++], M = Q3[E2++]; + try { + var S = a7(Q3, E2, F2, g2, d, I2, l2, M >> 4, M & 15, x2); + E2 += S; + } catch (ex) { + if (ex instanceof DNLMarkerError) { + return this.parse(Q3, { F: ex.s }); + } else if (ex instanceof EOIMarkerError) { + break markerLoop; + } + throw ex; + } + break; + case 65500: + E2 += 4; + break; + case 65535: + if (Q3[E2] !== 255) { + E2--; + } + break; + default: + var i = an(Q3, E2 - 2, E2 - 3); + if (i && i.u) { + E2 = i.offset; + break; + } + if (E2 >= Q3.length - 1) { + break markerLoop; + } + throw new W("JpegImage.parse - unknown marker: " + V.toString(16)); + } + V = Z2(Q3, E2); + E2 += 2; + } + this.width = F2.o; + this.height = F2.s; + this.g = a3; + this.b = C2; + this.W = []; + for (Y2 = 0; Y2 < F2.W.length; Y2++) { + R4 = F2.W[Y2]; + var A2 = U[R4.L]; + if (A2) { + R4.$ = A2; + } + this.W.push({ index: R4.index, e: a0(F2, R4), l: R4.h / F2.X, t: R4.A / F2.B, P: R4.P, c: R4.c }); + } + this.p = this.W.length; + return void 0; + }, Y(Q3, h, f) { + if (f == null) f = false; + var G = this.width / Q3, n2 = this.height / h, E2, a3, C2, F2, d, T, U, z, J, V, Y2 = 0, u, m = this.W.length, j = Q3 * h * m, v = new Uint8ClampedArray(j), $2 = new Uint32Array(Q3), b3 = 4294967288, r; + for (U = 0; U < m; U++) { + E2 = this.W[U]; + a3 = E2.l * G; + C2 = E2.t * n2; + Y2 = U; + u = E2.e; + F2 = E2.P + 1 << 3; + if (a3 !== r) { + for (d = 0; d < Q3; d++) { + z = 0 | d * a3; + $2[d] = (z & b3) << 3 | z & 7; + } + r = a3; + } + for (T = 0; T < h; T++) { + z = 0 | T * C2; + V = F2 * (z & b3) | (z & 7) << 3; + for (d = 0; d < Q3; d++) { + v[Y2] = u[V + $2[d]]; + Y2 += m; + } + } + } + var P = this.V; + if (!f && m === 4 && !P) { + P = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); + } + if (P) { + for (U = 0; U < j; ) { + for (z = 0, J = 0; z < m; z++, U++, J += 2) { + v[U] = (v[U] * P[J] >> 8) + P[J + 1]; + } + } + } + return v; + }, get f() { + if (this.b) { + return !!this.b.a; + } + if (this.p === 3) { + if (this.N === 0) { + return false; + } else if (this.W[0].index === 82 && this.W[1].index === 71 && this.W[2].index === 66) { + return false; + } + return true; + } + if (this.N === 1) { + return true; + } + return false; + }, z: function aj(Q3) { + var h, f, G; + for (var n2 = 0, E2 = Q3.length; n2 < E2; n2 += 3) { + h = Q3[n2]; + f = Q3[n2 + 1]; + G = Q3[n2 + 2]; + Q3[n2] = h - 179.456 + 1.402 * G; + Q3[n2 + 1] = h + 135.459 - 0.344 * f - 0.714 * G; + Q3[n2 + 2] = h - 226.816 + 1.772 * f; + } + return Q3; + }, O: function aa(Q3) { + var h, f, G, n2, E2 = 0; + for (var a3 = 0, C2 = Q3.length; a3 < C2; a3 += 4) { + h = Q3[a3]; + f = Q3[a3 + 1]; + G = Q3[a3 + 2]; + n2 = Q3[a3 + 3]; + Q3[E2++] = -122.67195406894 + f * (-660635669420364e-19 * f + 437130475926232e-18 * G - 54080610064599e-18 * h + 48449797120281e-17 * n2 - 0.154362151871126) + G * (-957964378445773e-18 * G + 817076911346625e-18 * h - 0.00477271405408747 * n2 + 1.53380253221734) + h * (961250184130688e-18 * h - 0.00266257332283933 * n2 + 0.48357088451265) + n2 * (-336197177618394e-18 * n2 + 0.484791561490776); + Q3[E2++] = 107.268039397724 + f * (219927104525741e-19 * f - 640992018297945e-18 * G + 659397001245577e-18 * h + 426105652938837e-18 * n2 - 0.176491792462875) + G * (-778269941513683e-18 * G + 0.00130872261408275 * h + 770482631801132e-18 * n2 - 0.151051492775562) + h * (0.00126935368114843 * h - 0.00265090189010898 * n2 + 0.25802910206845) + n2 * (-318913117588328e-18 * n2 - 0.213742400323665); + Q3[E2++] = -20.810012546947 + f * (-570115196973677e-18 * f - 263409051004589e-19 * G + 0.0020741088115012 * h - 0.00288260236853442 * n2 + 0.814272968359295) + G * (-153496057440975e-19 * G - 132689043961446e-18 * h + 560833691242812e-18 * n2 - 0.195152027534049) + h * (0.00174418132927582 * h - 0.00255243321439347 * n2 + 0.116935020465145) + n2 * (-343531996510555e-18 * n2 + 0.24165260232407); + } + return Q3.subarray(0, E2); + }, r: function a3(Q3) { + var h, f, G; + for (var n2 = 0, E2 = Q3.length; n2 < E2; n2 += 4) { + h = Q3[n2]; + f = Q3[n2 + 1]; + G = Q3[n2 + 2]; + Q3[n2] = 434.456 - h - 1.402 * G; + Q3[n2 + 1] = 119.541 - h + 0.344 * f + 0.714 * G; + Q3[n2 + 2] = 481.816 - h - 1.772 * f; + } + return Q3; + }, U: function as(Q3) { + var h, f, G, n2, E2 = 0; + for (var a3 = 0, C2 = Q3.length; a3 < C2; a3 += 4) { + h = Q3[a3]; + f = Q3[a3 + 1]; + G = Q3[a3 + 2]; + n2 = Q3[a3 + 3]; + Q3[E2++] = 255 + h * (-6747147073602441e-20 * h + 8379262121013727e-19 * f + 2894718188643294e-19 * G + 0.003264231057537806 * n2 - 1.1185611867203937) + f * (26374107616089405e-21 * f - 8626949158638572e-20 * G - 2748769067499491e-19 * n2 - 0.02155688794978967) + G * (-3878099212869363e-20 * G - 3267808279485286e-19 * n2 + 0.0686742238595345) - n2 * (3361971776183937e-19 * n2 + 0.7430659151342254); + Q3[E2++] = 255 + h * (13596372813588848e-20 * h + 924537132573585e-18 * f + 10567359618683593e-20 * G + 4791864687436512e-19 * n2 - 0.3109689587515875) + f * (-23545346108370344e-20 * f + 2702845253534714e-19 * G + 0.0020200308977307156 * n2 - 0.7488052167015494) + G * (6834815998235662e-20 * G + 15168452363460973e-20 * n2 - 0.09751927774728933) - n2 * (3189131175883281e-19 * n2 + 0.7364883807733168); + Q3[E2++] = 255 + h * (13598650411385307e-21 * h + 12423956175490851e-20 * f + 4751985097583589e-19 * G - 36729317476630422e-22 * n2 - 0.05562186980264034) + f * (16141380598724676e-20 * f + 9692239130725186e-19 * G + 7782692450036253e-19 * n2 - 0.44015232367526463) + G * (5068882914068769e-22 * G + 0.0017778369011375071 * n2 - 0.7591454649749609) - n2 * (3435319965105553e-19 * n2 + 0.7063770186160144); + } + return Q3.subarray(0, E2); + }, getData: function(Q3) { + var h = Q3.width, f = Q3.height, G = Q3.forceRGB, n2 = Q3.isSourcePDF; + if (this.p > 4) { + throw new W("Unsupported color mode"); + } + var E2 = this.Y(h, f, n2); + if (this.p === 1 && G) { + var a3 = E2.length, C2 = new Uint8ClampedArray(a3 * 3), F2 = 0; + for (var d = 0; d < a3; d++) { + var T = E2[d]; + C2[F2++] = T; + C2[F2++] = T; + C2[F2++] = T; + } + return C2; + } else if (this.p === 3 && this.f) { + return this.z(E2); + } else if (this.p === 4) { + if (this.f) { + if (G) { + return this.O(E2); + } + return this.r(E2); + } else if (G) { + return this.U(E2); + } + } + return E2; + } }; + return ak2; + }(); + function a9(p2, t3) { + return p2[t3] << 24 >> 24; + } + function Z2(p2, t3) { + return p2[t3] << 8 | p2[t3 + 1]; + } + function am(p2, t3) { + return (p2[t3] << 24 | p2[t3 + 1] << 16 | p2[t3 + 2] << 8 | p2[t3 + 3]) >>> 0; + } + UTIF2.JpegDecoder = ak; +})(); +UTIF2.encodeImage = function(rgba, w, h, metadata) { + var idf = { + "t256": [w], + "t257": [h], + "t258": [8, 8, 8, 8], + "t259": [1], + "t262": [2], + "t273": [1e3], + // strips offset + "t277": [4], + "t278": [h], + /* rows per strip */ + "t279": [w * h * 4], + // strip byte counts + "t282": [[72, 1]], + "t283": [[72, 1]], + "t284": [1], + "t286": [[0, 1]], + "t287": [[0, 1]], + "t296": [1], + "t305": ["Photopea (UTIF.js)"], + "t338": [1] + }; + if (metadata) for (var i in metadata) idf[i] = metadata[i]; + var prfx = new Uint8Array(UTIF2.encode([idf])); + var img = new Uint8Array(rgba); + var data2 = new Uint8Array(1e3 + w * h * 4); + for (var i = 0; i < prfx.length; i++) data2[i] = prfx[i]; + for (var i = 0; i < img.length; i++) data2[1e3 + i] = img[i]; + return data2.buffer; +}; +UTIF2.encode = function(ifds) { + var LE = false; + var data2 = new Uint8Array(2e4), offset = 4, bin = LE ? UTIF2._binLE : UTIF2._binBE; + data2[0] = data2[1] = LE ? 73 : 77; + bin.writeUshort(data2, 2, 42); + var ifdo = 8; + bin.writeUint(data2, offset, ifdo); + offset += 4; + for (var i = 0; i < ifds.length; i++) { + var noffs = UTIF2._writeIFD(bin, UTIF2._types.basic, data2, ifdo, ifds[i]); + ifdo = noffs[1]; + if (i < ifds.length - 1) { + if ((ifdo & 3) != 0) ifdo += 4 - (ifdo & 3); + bin.writeUint(data2, noffs[0], ifdo); + } + } + return data2.slice(0, ifdo).buffer; +}; +UTIF2.decode = function(buff, prm) { + if (prm == null) prm = { parseMN: true, debug: false }; + var data2 = new Uint8Array(buff), offset = 0; + var id = UTIF2._binBE.readASCII(data2, offset, 2); + offset += 2; + var bin = id == "II" ? UTIF2._binLE : UTIF2._binBE; + var num = bin.readUshort(data2, offset); + offset += 2; + var ifdo = bin.readUint(data2, offset); + offset += 4; + var ifds = []; + while (true) { + var cnt = bin.readUshort(data2, ifdo), typ = bin.readUshort(data2, ifdo + 4); + if (cnt != 0) { + if (typ < 1 || 13 < typ) { + log("error in TIFF"); + break; + } + } + ; + UTIF2._readIFD(bin, data2, ifdo, ifds, 0, prm); + ifdo = bin.readUint(data2, ifdo + 2 + cnt * 12); + if (ifdo == 0) break; + } + return ifds; +}; +UTIF2.decodeImage = function(buff, img, ifds) { + if (img.data) return; + var data2 = new Uint8Array(buff); + var id = UTIF2._binBE.readASCII(data2, 0, 2); + if (img["t256"] == null) return; + img.isLE = id == "II"; + img.width = img["t256"][0]; + img.height = img["t257"][0]; + var cmpr = img["t259"] ? img["t259"][0] : 1; + var fo = img["t266"] ? img["t266"][0] : 1; + if (img["t284"] && img["t284"][0] == 2) log("PlanarConfiguration 2 should not be used!"); + if (cmpr == 7 && img["t258"] && img["t258"].length > 3) img["t258"] = img["t258"].slice(0, 3); + var spp = img["t277"] ? img["t277"][0] : 1; + var bps = img["t258"] ? img["t258"][0] : 1; + var bipp = bps * spp; + if (cmpr == 1 && img["t279"] != null && img["t278"] && img["t262"][0] == 32803) { + bipp = Math.round(img["t279"][0] * 8 / (img.width * img["t278"][0])); + } + if (img["t50885"] && img["t50885"][0] == 4) bipp = img["t258"][0] * 3; + var bipl = Math.ceil(img.width * bipp / 8) * 8; + var soff = img["t273"]; + if (soff == null || img["t322"]) soff = img["t324"]; + var bcnt = img["t279"]; + if (cmpr == 1 && soff.length == 1) bcnt = [img.height * (bipl >>> 3)]; + if (bcnt == null || img["t322"]) bcnt = img["t325"]; + var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0; + if (img["t322"] != null) { + var tw = img["t322"][0], th = img["t323"][0]; + var tx = Math.floor((img.width + tw - 1) / tw); + var ty = Math.floor((img.height + th - 1) / th); + var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0); + console.log("====", tx, ty); + for (var y2 = 0; y2 < ty; y2++) + for (var x2 = 0; x2 < tx; x2++) { + var i = y2 * tx + x2; + tbuff.fill(0); + UTIF2.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, tbuff, 0, fo, tw, th); + if (cmpr == 6) bytes = tbuff; + else UTIF2._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x2 * tw * bipp / 8) | 0, y2 * th); + } + bilen = bytes.length * 8; + } else { + if (soff == null) return; + var rps = img["t278"] ? img["t278"][0] : img.height; + rps = Math.min(rps, img.height); + for (var i = 0; i < soff.length; i++) { + UTIF2.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo, img.width, rps); + bilen += bipl * rps; + } + bilen = Math.min(bilen, bytes.length * 8); + } + img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0); +}; +UTIF2.decode._decompress = function(img, ifds, data2, off, len, cmpr, tgt, toff, fo, w, h) { + if (img["t271"] && img["t271"][0] == "Panasonic" && img["t45"] && img["t45"][0] == 6) cmpr = 34316; + if (false) { + } else if (cmpr == 1) for (var j = 0; j < len; j++) tgt[toff + j] = data2[off + j]; + else if (cmpr == 2) UTIF2.decode._decodeG2(data2, off, len, tgt, toff, w, fo); + else if (cmpr == 3) UTIF2.decode._decodeG3(data2, off, len, tgt, toff, w, fo, img["t292"] ? (img["t292"][0] & 1) == 1 : false); + else if (cmpr == 4) UTIF2.decode._decodeG4(data2, off, len, tgt, toff, w, fo); + else if (cmpr == 5) UTIF2.decode._decodeLZW(data2, off, len, tgt, toff, 8); + else if (cmpr == 6) UTIF2.decode._decodeOldJPEG(img, data2, off, len, tgt, toff); + else if (cmpr == 7 || cmpr == 34892) UTIF2.decode._decodeNewJPEG(img, data2, off, len, tgt, toff); + else if (cmpr == 8 || cmpr == 32946) { + var src = new Uint8Array(data2.buffer, off + 2, len - 6); + var bin = UTIF2._inflateRaw(src); + if (toff + bin.length <= tgt.length) tgt.set(bin, toff); + } else if (cmpr == 9) UTIF2.decode._decodeVC5(data2, off, len, tgt, toff, img["t33422"]); + else if (cmpr == 32767) UTIF2.decode._decodeARW(img, data2, off, len, tgt, toff); + else if (cmpr == 32773) UTIF2.decode._decodePackBits(data2, off, len, tgt, toff); + else if (cmpr == 32809) UTIF2.decode._decodeThunder(data2, off, len, tgt, toff); + else if (cmpr == 34316) UTIF2.decode._decodePanasonic(img, data2, off, len, tgt, toff); + else if (cmpr == 34713) + UTIF2.decode._decodeNikon(img, ifds, data2, off, len, tgt, toff); + else if (cmpr == 34676) UTIF2.decode._decodeLogLuv32(img, data2, off, len, tgt, toff); + else log("Unknown compression", cmpr); + var bps = img["t258"] ? Math.min(32, img["t258"][0]) : 1; + var noc = img["t277"] ? img["t277"][0] : 1, bpp = bps * noc >>> 3, bpl = Math.ceil(bps * noc * w / 8); + if (bps == 16 && !img.isLE && img["t33422"] == null) + for (var y2 = 0; y2 < h; y2++) { + var roff = toff + y2 * bpl; + for (var x2 = 1; x2 < bpl; x2 += 2) { + var t3 = tgt[roff + x2]; + tgt[roff + x2] = tgt[roff + x2 - 1]; + tgt[roff + x2 - 1] = t3; + } + } + if (img["t317"] && img["t317"][0] == 2) { + for (var y2 = 0; y2 < h; y2++) { + var ntoff = toff + y2 * bpl; + if (bps == 16) for (var j = bpp; j < bpl; j += 2) { + var nv = (tgt[ntoff + j + 1] << 8 | tgt[ntoff + j]) + (tgt[ntoff + j - bpp + 1] << 8 | tgt[ntoff + j - bpp]); + tgt[ntoff + j] = nv & 255; + tgt[ntoff + j + 1] = nv >>> 8 & 255; + } + else if (noc == 3) for (var j = 3; j < bpl; j += 3) { + tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - 3] & 255; + tgt[ntoff + j + 1] = tgt[ntoff + j + 1] + tgt[ntoff + j - 2] & 255; + tgt[ntoff + j + 2] = tgt[ntoff + j + 2] + tgt[ntoff + j - 1] & 255; + } + else for (var j = bpp; j < bpl; j++) tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - bpp] & 255; + } + } +}; +UTIF2.decode._decodePanasonic = function(img, data2, off, len, tgt, toff) { + var img_buffer = data2.buffer; + var rawWidth = img["t2"][0]; + var rawHeight = img["t3"][0]; + var bitsPerSample = img["t10"][0]; + var RW2_Format = img["t45"][0]; + var bidx = 0; + var imageIndex = 0; + var vpos = 0; + var byte = 0; + var arr_a, arr_b; + var bytes = RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16); + var i, j, sh, pred = [0, 0], nonz = [0, 0], isOdd, idx = 0, pixel_base; + var row, col, crow; + var buffer = new Uint8Array(16384); + var result = new Uint16Array(tgt.buffer); + function getDataRaw(bits2) { + if (vpos == 0) { + var arr_a2 = new Uint8Array(img_buffer, off + imageIndex + 8184, 16384 - 8184); + var arr_b2 = new Uint8Array(img_buffer, off + imageIndex, 8184); + buffer.set(arr_a2); + buffer.set(arr_b2, arr_a2.length); + imageIndex += 16384; + } + if (RW2_Format == 5) { + for (i = 0; i < 16; i++) { + bytes[i] = buffer[vpos++]; + vpos &= 16383; + } + } else { + vpos = vpos - bits2 & 131071; + byte = vpos >> 3 ^ 16368; + return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~(-1 << bits2); + } + } + function getBufferDataRW6(i2) { + return buffer[vpos + 15 - i2]; + } + function readPageRW6() { + bytes[0] = getBufferDataRW6(0) << 6 | getBufferDataRW6(1) >> 2; + bytes[1] = ((getBufferDataRW6(1) & 3) << 12 | getBufferDataRW6(2) << 4 | getBufferDataRW6(3) >> 4) & 16383; + bytes[2] = getBufferDataRW6(3) >> 2 & 3; + bytes[3] = (getBufferDataRW6(3) & 3) << 8 | getBufferDataRW6(4); + bytes[4] = getBufferDataRW6(5) << 2 | getBufferDataRW6(6) >> 6; + bytes[5] = (getBufferDataRW6(6) & 63) << 4 | getBufferDataRW6(7) >> 4; + bytes[6] = getBufferDataRW6(7) >> 2 & 3; + bytes[7] = (getBufferDataRW6(7) & 3) << 8 | getBufferDataRW6(8); + bytes[8] = getBufferDataRW6(9) << 2 & 1020 | getBufferDataRW6(10) >> 6; + bytes[9] = (getBufferDataRW6(10) << 4 | getBufferDataRW6(11) >> 4) & 1023; + bytes[10] = getBufferDataRW6(11) >> 2 & 3; + bytes[11] = (getBufferDataRW6(11) & 3) << 8 | getBufferDataRW6(12); + bytes[12] = (getBufferDataRW6(13) << 2 & 1020 | getBufferDataRW6(14) >> 6) & 1023; + bytes[13] = (getBufferDataRW6(14) << 4 | getBufferDataRW6(15) >> 4) & 1023; + vpos += 16; + byte = 0; + } + function readPageRw6_bps12() { + bytes[0] = getBufferDataRW6(0) << 4 | getBufferDataRW6(1) >> 4; + bytes[1] = ((getBufferDataRW6(1) & 15) << 8 | getBufferDataRW6(2)) & 4095; + bytes[2] = getBufferDataRW6(3) >> 6 & 3; + bytes[3] = (getBufferDataRW6(3) & 63) << 2 | getBufferDataRW6(4) >> 6; + bytes[4] = (getBufferDataRW6(4) & 63) << 2 | getBufferDataRW6(5) >> 6; + bytes[5] = (getBufferDataRW6(5) & 63) << 2 | getBufferDataRW6(6) >> 6; + bytes[6] = getBufferDataRW6(6) >> 4 & 3; + bytes[7] = (getBufferDataRW6(6) & 15) << 4 | getBufferDataRW6(7) >> 4; + bytes[8] = (getBufferDataRW6(7) & 15) << 4 | getBufferDataRW6(8) >> 4; + bytes[9] = (getBufferDataRW6(8) & 15) << 4 | getBufferDataRW6(9) >> 4; + bytes[10] = getBufferDataRW6(9) >> 2 & 3; + bytes[11] = (getBufferDataRW6(9) & 3) << 6 | getBufferDataRW6(10) >> 2; + bytes[12] = (getBufferDataRW6(10) & 3) << 6 | getBufferDataRW6(11) >> 2; + bytes[13] = (getBufferDataRW6(11) & 3) << 6 | getBufferDataRW6(12) >> 2; + bytes[14] = getBufferDataRW6(12) & 3; + bytes[15] = getBufferDataRW6(13); + bytes[16] = getBufferDataRW6(14); + bytes[17] = getBufferDataRW6(15); + vpos += 16; + byte = 0; + } + function resetPredNonzeros() { + pred[0] = 0; + pred[1] = 0; + nonz[0] = 0; + nonz[1] = 0; + } + if (RW2_Format == 7) { + throw RW2_Format; + } else if (RW2_Format == 6) { + var is12bit = bitsPerSample == 12, readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6, pixelsPerBlock = is12bit ? 14 : 11, pixelbase0 = is12bit ? 128 : 512, pixelbase_compare = is12bit ? 2048 : 8192, spix_compare = is12bit ? 16383 : 65535, pixel_mask = is12bit ? 4095 : 16383, blocksperrow = rawWidth / pixelsPerBlock, rowbytes = blocksperrow * 16, bufferSize = is12bit ? 18 : 14; + for (row = 0; row < rawHeight - 15; row += 16) { + var rowstoread = Math.min(16, rawHeight - row); + var readlen = rowbytes * rowstoread; + buffer = new Uint8Array(img_buffer, off + bidx, readlen); + vpos = 0; + bidx += readlen; + for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) { + idx = (row + crow) * rawWidth; + for (var rblock = 0; rblock < blocksperrow; rblock++) { + readPageRw6Fn(); + resetPredNonzeros(); + sh = 0; + pixel_base = 0; + for (i = 0; i < pixelsPerBlock; i++) { + isOdd = i & 1; + if (i % 3 == 2) { + var base = byte < bufferSize ? bytes[byte++] : 0; + if (base == 3) base = 4; + pixel_base = pixelbase0 << base; + sh = 1 << base; + } + var epixel = byte < bufferSize ? bytes[byte++] : 0; + if (pred[isOdd]) { + epixel *= sh; + if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base) + epixel += nonz[isOdd] - pixel_base; + nonz[isOdd] = epixel; + } else { + pred[isOdd] = epixel; + if (epixel) + nonz[isOdd] = epixel; + else + epixel = nonz[isOdd]; + } + result[idx + col++] = epixel - 15 <= spix_compare ? epixel - 15 & spix_compare : epixel + 2147483633 >> 31 & pixel_mask; + } + } + } + } + } else if (RW2_Format == 5) { + var blockSize = bitsPerSample == 12 ? 10 : 9; + for (row = 0; row < rawHeight; row++) { + for (col = 0; col < rawWidth; col += blockSize) { + getDataRaw(0); + if (bitsPerSample == 12) { + result[idx++] = ((bytes[1] & 15) << 8) + bytes[0]; + result[idx++] = 16 * bytes[2] + (bytes[1] >> 4); + result[idx++] = ((bytes[4] & 15) << 8) + bytes[3]; + result[idx++] = 16 * bytes[5] + (bytes[4] >> 4); + result[idx++] = ((bytes[7] & 15) << 8) + bytes[6]; + result[idx++] = 16 * bytes[8] + (bytes[7] >> 4); + result[idx++] = ((bytes[10] & 15) << 8) + bytes[9]; + result[idx++] = 16 * bytes[11] + (bytes[10] >> 4); + result[idx++] = ((bytes[13] & 15) << 8) + bytes[12]; + result[idx++] = 16 * bytes[14] + (bytes[13] >> 4); + } else if (bitsPerSample == 14) { + result[idx++] = bytes[0] + ((bytes[1] & 63) << 8); + result[idx++] = (bytes[1] >> 6) + 4 * bytes[2] + ((bytes[3] & 15) << 10); + result[idx++] = (bytes[3] >> 4) + 16 * bytes[4] + ((bytes[5] & 3) << 12); + result[idx++] = ((bytes[5] & 252) >> 2) + (bytes[6] << 6); + result[idx++] = bytes[7] + ((bytes[8] & 63) << 8); + result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 15) << 10); + result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12); + result[idx++] = ((bytes[12] & 252) >> 2) + (bytes[13] << 6); + result[idx++] = bytes[14] + ((bytes[15] & 63) << 8); + } + } + } + } else if (RW2_Format == 4) { + for (row = 0; row < rawHeight; row++) { + for (col = 0; col < rawWidth; col++) { + i = col % 14; + isOdd = i & 1; + if (i == 0) resetPredNonzeros(); + if (i % 3 == 2) + sh = 4 >> 3 - getDataRaw(2); + if (nonz[isOdd]) { + j = getDataRaw(8); + if (j != 0) { + pred[isOdd] -= 128 << sh; + if (pred[isOdd] < 0 || sh == 4) + pred[isOdd] &= ~(-1 << sh); + pred[isOdd] += j << sh; + } + } else { + nonz[isOdd] = getDataRaw(8); + if (nonz[isOdd] || i > 11) + pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4); + } + result[idx++] = pred[col & 1]; + } + } + } else throw RW2_Format; +}; +UTIF2.decode._decodeVC5 = function() { + var x2 = [1, 0, 1, 0, 2, 2, 1, 1, 3, 7, 1, 2, 5, 25, 1, 3, 6, 48, 1, 4, 6, 54, 1, 5, 7, 111, 1, 8, 7, 99, 1, 6, 7, 105, 12, 0, 7, 107, 1, 7, 8, 209, 20, 0, 8, 212, 1, 9, 8, 220, 1, 10, 9, 393, 1, 11, 9, 394, 32, 0, 9, 416, 1, 12, 9, 427, 1, 13, 10, 887, 1, 18, 10, 784, 1, 14, 10, 790, 1, 15, 10, 835, 60, 0, 10, 852, 1, 16, 10, 885, 1, 17, 11, 1571, 1, 19, 11, 1668, 1, 20, 11, 1669, 100, 0, 11, 1707, 1, 21, 11, 1772, 1, 22, 12, 3547, 1, 29, 12, 3164, 1, 24, 12, 3166, 1, 25, 12, 3140, 1, 23, 12, 3413, 1, 26, 12, 3537, 1, 27, 12, 3539, 1, 28, 13, 7093, 1, 35, 13, 6283, 1, 30, 13, 6331, 1, 31, 13, 6335, 180, 0, 13, 6824, 1, 32, 13, 7072, 1, 33, 13, 7077, 320, 0, 13, 7076, 1, 34, 14, 12565, 1, 36, 14, 12661, 1, 37, 14, 12669, 1, 38, 14, 13651, 1, 39, 14, 14184, 1, 40, 15, 28295, 1, 46, 15, 28371, 1, 47, 15, 25320, 1, 42, 15, 25336, 1, 43, 15, 25128, 1, 41, 15, 27300, 1, 44, 15, 28293, 1, 45, 16, 50259, 1, 48, 16, 50643, 1, 49, 16, 50675, 1, 50, 16, 56740, 1, 53, 16, 56584, 1, 51, 16, 56588, 1, 52, 17, 113483, 1, 61, 17, 113482, 1, 60, 17, 101285, 1, 55, 17, 101349, 1, 56, 17, 109205, 1, 57, 17, 109207, 1, 58, 17, 100516, 1, 54, 17, 113171, 1, 59, 18, 202568, 1, 62, 18, 202696, 1, 63, 18, 218408, 1, 64, 18, 218412, 1, 65, 18, 226340, 1, 66, 18, 226356, 1, 67, 18, 226358, 1, 68, 19, 402068, 1, 69, 19, 405138, 1, 70, 19, 405394, 1, 71, 19, 436818, 1, 72, 19, 436826, 1, 73, 19, 452714, 1, 75, 19, 452718, 1, 76, 19, 452682, 1, 74, 20, 804138, 1, 77, 20, 810279, 1, 78, 20, 810790, 1, 79, 20, 873638, 1, 80, 20, 873654, 1, 81, 20, 905366, 1, 82, 20, 905430, 1, 83, 20, 905438, 1, 84, 21, 1608278, 1, 85, 21, 1620557, 1, 86, 21, 1621582, 1, 87, 21, 1621583, 1, 88, 21, 1747310, 1, 89, 21, 1810734, 1, 90, 21, 1810735, 1, 91, 21, 1810863, 1, 92, 21, 1810879, 1, 93, 22, 3621725, 1, 99, 22, 3621757, 1, 100, 22, 3241112, 1, 94, 22, 3494556, 1, 95, 22, 3494557, 1, 96, 22, 3494622, 1, 97, 22, 3494623, 1, 98, 23, 6482227, 1, 102, 23, 6433117, 1, 101, 23, 6989117, 1, 103, 23, 6989119, 1, 105, 23, 6989118, 1, 104, 23, 7243449, 1, 106, 23, 7243512, 1, 107, 24, 13978233, 1, 111, 24, 12964453, 1, 109, 24, 12866232, 1, 108, 24, 14486897, 1, 113, 24, 13978232, 1, 110, 24, 14486896, 1, 112, 24, 14487026, 1, 114, 24, 14487027, 1, 115, 25, 25732598, 1, 225, 25, 25732597, 1, 189, 25, 25732596, 1, 188, 25, 25732595, 1, 203, 25, 25732594, 1, 202, 25, 25732593, 1, 197, 25, 25732592, 1, 207, 25, 25732591, 1, 169, 25, 25732590, 1, 223, 25, 25732589, 1, 159, 25, 25732522, 1, 235, 25, 25732579, 1, 152, 25, 25732575, 1, 192, 25, 25732489, 1, 179, 25, 25732573, 1, 201, 25, 25732472, 1, 172, 25, 25732576, 1, 149, 25, 25732488, 1, 178, 25, 25732566, 1, 120, 25, 25732571, 1, 219, 25, 25732577, 1, 150, 25, 25732487, 1, 127, 25, 25732506, 1, 211, 25, 25732548, 1, 125, 25, 25732588, 1, 158, 25, 25732486, 1, 247, 25, 25732467, 1, 238, 25, 25732508, 1, 163, 25, 25732552, 1, 228, 25, 25732603, 1, 183, 25, 25732513, 1, 217, 25, 25732587, 1, 168, 25, 25732520, 1, 122, 25, 25732484, 1, 128, 25, 25732562, 1, 249, 25, 25732505, 1, 187, 25, 25732504, 1, 186, 25, 25732483, 1, 136, 25, 25928905, 1, 181, 25, 25732560, 1, 255, 25, 25732500, 1, 230, 25, 25732482, 1, 135, 25, 25732555, 1, 233, 25, 25732568, 1, 222, 25, 25732583, 1, 145, 25, 25732481, 1, 134, 25, 25732586, 1, 167, 25, 25732521, 1, 248, 25, 25732518, 1, 209, 25, 25732480, 1, 243, 25, 25732512, 1, 216, 25, 25732509, 1, 164, 25, 25732547, 1, 140, 25, 25732479, 1, 157, 25, 25732544, 1, 239, 25, 25732574, 1, 191, 25, 25732564, 1, 251, 25, 25732478, 1, 156, 25, 25732546, 1, 139, 25, 25732498, 1, 242, 25, 25732557, 1, 133, 25, 25732477, 1, 162, 25, 25732515, 1, 213, 25, 25732584, 1, 165, 25, 25732514, 1, 212, 25, 25732476, 1, 227, 25, 25732494, 1, 198, 25, 25732531, 1, 236, 25, 25732530, 1, 234, 25, 25732529, 1, 117, 25, 25732528, 1, 215, 25, 25732527, 1, 124, 25, 25732526, 1, 123, 25, 25732525, 1, 254, 25, 25732524, 1, 253, 25, 25732523, 1, 148, 25, 25732570, 1, 218, 25, 25732580, 1, 146, 25, 25732581, 1, 147, 25, 25732569, 1, 224, 25, 25732533, 1, 143, 25, 25732540, 1, 184, 25, 25732541, 1, 185, 25, 25732585, 1, 166, 25, 25732556, 1, 132, 25, 25732485, 1, 129, 25, 25732563, 1, 250, 25, 25732578, 1, 151, 25, 25732501, 1, 119, 25, 25732502, 1, 193, 25, 25732536, 1, 176, 25, 25732496, 1, 245, 25, 25732553, 1, 229, 25, 25732516, 1, 206, 25, 25732582, 1, 144, 25, 25732517, 1, 208, 25, 25732558, 1, 137, 25, 25732543, 1, 241, 25, 25732466, 1, 237, 25, 25732507, 1, 190, 25, 25732542, 1, 240, 25, 25732551, 1, 131, 25, 25732554, 1, 232, 25, 25732565, 1, 252, 25, 25732475, 1, 171, 25, 25732493, 1, 205, 25, 25732492, 1, 204, 25, 25732491, 1, 118, 25, 25732490, 1, 214, 25, 25928904, 1, 180, 25, 25732549, 1, 126, 25, 25732602, 1, 182, 25, 25732539, 1, 175, 25, 25732545, 1, 141, 25, 25732559, 1, 138, 25, 25732537, 1, 177, 25, 25732534, 1, 153, 25, 25732503, 1, 194, 25, 25732606, 1, 160, 25, 25732567, 1, 121, 25, 25732538, 1, 174, 25, 25732497, 1, 246, 25, 25732550, 1, 130, 25, 25732572, 1, 200, 25, 25732474, 1, 170, 25, 25732511, 1, 221, 25, 25732601, 1, 196, 25, 25732532, 1, 142, 25, 25732519, 1, 210, 25, 25732495, 1, 199, 25, 25732605, 1, 155, 25, 25732535, 1, 154, 25, 25732499, 1, 244, 25, 25732510, 1, 220, 25, 25732600, 1, 195, 25, 25732607, 1, 161, 25, 25732604, 1, 231, 25, 25732473, 1, 173, 25, 25732599, 1, 226, 26, 51465122, 1, 116, 26, 51465123, 0, 1], o, C2, k2, P = [3, 3, 3, 3, 2, 2, 2, 1, 1, 1], V = 24576, ar = 16384, H = 8192, az = ar | H; + function d(t3) { + var E2 = t3[1], h = t3[0][E2 >>> 3] >>> 7 - (E2 & 7) & 1; + t3[1]++; + return h; + } + function ag(t3, E2) { + if (o == null) { + o = {}; + for (var h = 0; h < x2.length; h += 4) o[x2[h + 1]] = x2.slice(h, h + 4); + } + var L = d(t3), g2 = o[L]; + while (g2 == null) { + L = L << 1 | d(t3); + g2 = o[L]; + } + var n2 = g2[3]; + if (n2 != 0) n2 = d(t3) == 0 ? n2 : -n2; + E2[0] = g2[2]; + E2[1] = n2; + } + function m(t3, E2) { + for (var h = 0; h < E2; h++) { + if ((t3 & 1) == 1) t3++; + t3 = t3 >>> 1; + } + return t3; + } + function A2(t3, E2) { + return t3 >> E2; + } + function O(t3, E2, h, L, g2, n2) { + E2[h] = A2(A2(11 * t3[g2] - 4 * t3[g2 + n2] + t3[g2 + n2 + n2] + 4, 3) + t3[L], 1); + E2[h + n2] = A2(A2(5 * t3[g2] + 4 * t3[g2 + n2] - t3[g2 + n2 + n2] + 4, 3) - t3[L], 1); + } + function J(t3, E2, h, L, g2, n2) { + var W = t3[g2 - n2] - t3[g2 + n2], j = t3[g2], $2 = t3[L]; + E2[h] = A2(A2(W + 4, 3) + j + $2, 1); + E2[h + n2] = A2(A2(-W + 4, 3) + j - $2, 1); + } + function y2(t3, E2, h, L, g2, n2) { + E2[h] = A2(A2(5 * t3[g2] + 4 * t3[g2 - n2] - t3[g2 - n2 - n2] + 4, 3) + t3[L], 1); + E2[h + n2] = A2(A2(11 * t3[g2] - 4 * t3[g2 - n2] + t3[g2 - n2 - n2] + 4, 3) - t3[L], 1); + } + function q2(t3) { + t3 = t3 < 0 ? 0 : t3 > 4095 ? 4095 : t3; + t3 = k2[t3] >>> 2; + return t3; + } + function av(t3, E2, h, L, g2, n2) { + L = new Uint16Array(L.buffer); + var W = Date.now(), j = UTIF2._binBE, $2 = E2 + h, r, u, X2, I2, ax, a3, R4, ai, aa, ap, ah, ae, aD, al, i, aE, T, B2; + E2 += 4; + var a5 = n2[0] == 1; + while (E2 < $2) { + var S = j.readShort(t3, E2), s = j.readUshort(t3, E2 + 2); + E2 += 4; + if (S == 12) r = s; + else if (S == 20) u = s; + else if (S == 21) X2 = s; + else if (S == 48) I2 = s; + else if (S == 53) ax = s; + else if (S == 35) a3 = s; + else if (S == 62) R4 = s; + else if (S == 101) ai = s; + else if (S == 109) aa = s; + else if (S == 84) ap = s; + else if (S == 106) ah = s; + else if (S == 107) ae = s; + else if (S == 108) aD = s; + else if (S == 102) al = s; + else if (S == 104) i = s; + else if (S == 105) aE = s; + else { + var F2 = S < 0 ? -S : S, D = F2 & 65280, _ = 0; + if (F2 & az) { + if (F2 & H) { + _ = s & 65535; + _ += (F2 & 255) << 16; + } else { + _ = s & 65535; + } + } + if ((F2 & V) == V) { + if (T == null) { + T = []; + for (var M = 0; M < 4; M++) T[M] = new Int16Array((u >>> 1) * (X2 >>> 1)); + B2 = new Int16Array((u >>> 1) * (X2 >>> 1)); + C2 = new Int16Array(1024); + for (var M = 0; M < 1024; M++) { + var aG = M - 512, p2 = Math.abs(aG), r = Math.floor(768 * p2 * p2 * p2 / (255 * 255 * 255)) + p2; + C2[M] = Math.sign(aG) * r; + } + k2 = new Uint16Array(4096); + var aA = (1 << 16) - 1; + for (var M = 0; M < 4096; M++) { + var at = M, a1 = aA * (Math.pow(113, at / 4095) - 1) / 112; + k2[M] = Math.min(a1, aA); + } + } + var w = T[R4], v = m(u, 1 + P[I2]), N = m(X2, 1 + P[I2]); + if (I2 == 0) { + for (var b3 = 0; b3 < N; b3++) for (var G = 0; G < v; G++) { + var c2 = E2 + (b3 * v + G) * 2; + w[b3 * (u >>> 1) + G] = t3[c2] << 8 | t3[c2 + 1]; + } + } else { + var a7 = [t3, E2 * 8], a4 = [], ay = 0, aw = v * N, f = [0, 0], Q3 = 0, s = 0; + while (ay < aw) { + ag(a7, f); + Q3 = f[0]; + s = f[1]; + while (Q3 > 0) { + a4[ay++] = s; + Q3--; + } + } + var l2 = (I2 - 1) % 3, aF = l2 != 1 ? v : 0, a2 = l2 != 0 ? N : 0; + for (var b3 = 0; b3 < N; b3++) { + var af = (b3 + a2) * (u >>> 1) + aF, au = b3 * v; + for (var G = 0; G < v; G++) w[af + G] = C2[a4[au + G] + 512] * ax; + } + if (l2 == 2) { + var i = u >>> 1, an = v * 2, a9 = N * 2; + for (var b3 = 0; b3 < N; b3++) { + for (var G = 0; G < an; G++) { + var M = b3 * 2 * i + G, a6 = b3 * i + G, e = N * i + a6; + if (b3 == 0) O(w, B2, M, e, a6, i); + else if (b3 == N - 1) y2(w, B2, M, e, a6, i); + else J(w, B2, M, e, a6, i); + } + } + var Z2 = w; + w = B2; + B2 = Z2; + for (var b3 = 0; b3 < a9; b3++) { + for (var G = 0; G < v; G++) { + var M = b3 * i + 2 * G, a6 = b3 * i + G, e = v + a6; + if (G == 0) O(w, B2, M, e, a6, 1); + else if (G == v - 1) y2(w, B2, M, e, a6, 1); + else J(w, B2, M, e, a6, 1); + } + } + var Z2 = w; + w = B2; + B2 = Z2; + var aC = [], aB = 2 - ~~((I2 - 1) / 3); + for (var K = 0; K < 3; K++) aC[K] = aa >> 14 - K * 2 & 3; + var a62 = aC[aB]; + if (a62 != 0) for (var b3 = 0; b3 < a9; b3++) for (var G = 0; G < an; G++) { + var M = b3 * i + G; + w[M] = w[M] << a62; + } + } + } + if (I2 == 9 && R4 == 3) { + var a8 = T[0], ab = T[1], aq = T[2], as = T[3]; + for (var b3 = 0; b3 < X2; b3 += 2) for (var G = 0; G < u; G += 2) { + var U = b3 * u + G, c2 = (b3 >>> 1) * (u >>> 1) + (G >>> 1), z = a8[c2], ao = ab[c2] - 2048, ak = aq[c2] - 2048, ad = as[c2] - 2048, aj = (ao << 1) + z, a0 = (ak << 1) + z, aH = z + ad, am = z - ad; + if (a5) { + L[U] = q2(aH); + L[U + 1] = q2(a0); + L[U + u] = q2(aj); + L[U + u + 1] = q2(am); + } else { + L[U] = q2(aj); + L[U + 1] = q2(aH); + L[U + u] = q2(am); + L[U + u + 1] = q2(a0); + } + } + } + E2 += _ * 4; + } else if (F2 == 16388) { + E2 += _ * 4; + } else if (D == 8192 || D == 8448 || D == 9216) { + } else throw F2.toString(16); + } + } + console.log(Date.now() - W); + } + return av; +}(); +UTIF2.decode._decodeLogLuv32 = function(img, data2, off, len, tgt, toff) { + var w = img.width, qw = w * 4; + var io = 0, out = new Uint8Array(qw); + while (io < len) { + var oo = 0; + while (oo < qw) { + var c2 = data2[off + io]; + io++; + if (c2 < 128) { + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io + j]; + oo += c2; + io += c2; + } else { + c2 = c2 - 126; + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io]; + oo += c2; + io++; + } + } + for (var x2 = 0; x2 < w; x2++) { + tgt[toff + 0] = out[x2]; + tgt[toff + 1] = out[x2 + w]; + tgt[toff + 2] = out[x2 + w * 2]; + tgt[toff + 4] = out[x2 + w * 3]; + toff += 6; + } + } +}; +UTIF2.decode._ljpeg_diff = function(data2, prm, huff) { + var getbithuff = UTIF2.decode._getbithuff; + var len, diff; + len = getbithuff(data2, prm, huff[0], huff); + diff = getbithuff(data2, prm, len, 0); + if ((diff & 1 << len - 1) == 0) diff -= (1 << len) - 1; + return diff; +}; +UTIF2.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) { + var raw_width = img["t256"][0], height2 = img["t257"][0], tiff_bps = img["t258"][0]; + var bin = img.isLE ? UTIF2._binLE : UTIF2._binBE; + var arw2 = raw_width * height2 == src_length || raw_width * height2 * 1.5 == src_length; + if (!arw2) { + height2 += 8; + var prm = [off, 0, 0, 0]; + var huff = new Uint16Array(32770); + var tab = [ + 3857, + 3856, + 3599, + 3342, + 3085, + 2828, + 2571, + 2314, + 2057, + 1800, + 1543, + 1286, + 1029, + 772, + 771, + 768, + 514, + 513 + ]; + var i, c2, n2, col, row, sum2 = 0; + var ljpeg_diff = UTIF2.decode._ljpeg_diff; + huff[0] = 15; + for (n2 = i = 0; i < 18; i++) { + var lim = 32768 >>> (tab[i] >>> 8); + for (var c2 = 0; c2 < lim; c2++) huff[++n2] = tab[i]; + } + for (col = raw_width; col--; ) + for (row = 0; row < height2 + 1; row += 2) { + if (row == height2) row = 1; + sum2 += ljpeg_diff(inp, prm, huff); + if (row < height2) { + var clr = sum2 & 4095; + UTIF2.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << 16 - tiff_bps); + } + } + return; + } + if (raw_width * height2 * 1.5 == src_length) { + for (var i = 0; i < src_length; i += 3) { + var b0 = inp[off + i + 0], b1 = inp[off + i + 1], b22 = inp[off + i + 2]; + tgt[toff + i] = b1 << 4 | b0 >>> 4; + tgt[toff + i + 1] = b0 << 4 | b22 >>> 4; + tgt[toff + i + 2] = b22 << 4 | b1 >>> 4; + } + return; + } + var pix = new Uint16Array(16); + var row, col, val2, max2, min, imax, imin, sh, bit, i, dp; + var data2 = new Uint8Array(raw_width + 1); + for (row = 0; row < height2; row++) { + for (var j = 0; j < raw_width; j++) data2[j] = inp[off++]; + for (dp = 0, col = 0; col < raw_width - 30; dp += 16) { + max2 = 2047 & (val2 = bin.readUint(data2, dp)); + min = 2047 & val2 >>> 11; + imax = 15 & val2 >>> 22; + imin = 15 & val2 >>> 26; + for (sh = 0; sh < 4 && 128 << sh <= max2 - min; sh++) ; + for (bit = 30, i = 0; i < 16; i++) + if (i == imax) pix[i] = max2; + else if (i == imin) pix[i] = min; + else { + pix[i] = ((bin.readUshort(data2, dp + (bit >> 3)) >>> (bit & 7) & 127) << sh) + min; + if (pix[i] > 2047) pix[i] = 2047; + bit += 7; + } + for (i = 0; i < 16; i++, col += 2) { + var clr = pix[i] << 1; + UTIF2.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << 16 - tiff_bps); + } + col -= col & 1 ? 1 : 31; + } + } +}; +UTIF2.decode._decodeNikon = function(img, imgs, data2, off, src_length, tgt, toff) { + var nikon_tree = [ + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossy */ + 5, + 4, + 3, + 6, + 2, + 7, + 1, + 0, + 8, + 9, + 11, + 10, + 12 + ], + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossy after split */ + 57, + 90, + 56, + 39, + 22, + 5, + 4, + 3, + 2, + 1, + 0, + 11, + 12, + 12 + ], + [ + 0, + 0, + 1, + 4, + 2, + 3, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossless */ + 5, + 4, + 6, + 3, + 7, + 2, + 8, + 1, + 9, + 0, + 10, + 11, + 12 + ], + [ + 0, + 0, + 1, + 4, + 3, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossy */ + 5, + 6, + 4, + 7, + 8, + 3, + 9, + 2, + 1, + 0, + 10, + 11, + 12, + 13, + 14 + ], + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossy after split */ + 8, + 92, + 75, + 58, + 41, + 7, + 6, + 5, + 4, + 3, + 2, + 1, + 0, + 13, + 14 + ], + [ + 0, + 0, + 1, + 4, + 2, + 2, + 3, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossless */ + 7, + 6, + 8, + 5, + 9, + 4, + 10, + 3, + 11, + 12, + 2, + 0, + 1, + 13, + 14 + ] + ]; + var raw_width = img["t256"][0], height2 = img["t257"][0], tiff_bps = img["t258"][0]; + var tree = 0, split = 0; + var make_decoder = UTIF2.decode._make_decoder; + var getbithuff = UTIF2.decode._getbithuff; + var mn = imgs[0].exifIFD.makerNote, md = mn["t150"] ? mn["t150"] : mn["t140"], mdo = 0; + var ver0 = md[mdo++], ver1 = md[mdo++]; + if (ver0 == 73 || ver1 == 88) mdo += 2110; + if (ver0 == 70) tree = 2; + if (tiff_bps == 14) tree += 3; + var vpred = [[0, 0], [0, 0]], bin = img.isLE ? UTIF2._binLE : UTIF2._binBE; + for (var i = 0; i < 2; i++) for (var j = 0; j < 2; j++) { + vpred[i][j] = bin.readShort(md, mdo); + mdo += 2; + } + var max2 = 1 << tiff_bps & 32767, step = 0; + var csize = bin.readShort(md, mdo); + mdo += 2; + if (csize > 1) step = Math.floor(max2 / (csize - 1)); + if (ver0 == 68 && ver1 == 32 && step > 0) split = bin.readShort(md, 562); + var i; + var row, col; + var len, shl, diff; + var min_v = 0; + var hpred = [0, 0]; + var huff = make_decoder(nikon_tree[tree]); + var prm = [off, 0, 0, 0]; + for (min_v = row = 0; row < height2; row++) { + if (split && row == split) { + huff = make_decoder(nikon_tree[tree + 1]); + } + for (col = 0; col < raw_width; col++) { + i = getbithuff(data2, prm, huff[0], huff); + len = i & 15; + shl = i >>> 4; + diff = (getbithuff(data2, prm, len - shl, 0) << 1) + 1 << shl >>> 1; + if ((diff & 1 << len - 1) == 0) + diff -= (1 << len) - (shl == 0 ? 1 : 0); + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + var clr = Math.min(Math.max(hpred[col & 1], 0), (1 << tiff_bps) - 1); + var bti = (row * raw_width + col) * tiff_bps; + UTIF2.decode._putsF(tgt, bti, clr << 16 - tiff_bps); + } + } +}; +UTIF2.decode._putsF = function(dt2, pos, val2) { + val2 = val2 << 8 - (pos & 7); + var o = pos >>> 3; + dt2[o] |= val2 >>> 16; + dt2[o + 1] |= val2 >>> 8; + dt2[o + 2] |= val2; +}; +UTIF2.decode._getbithuff = function(data2, prm, nbits, huff) { + var zero_after_ff = 0; + var get_byte = UTIF2.decode._get_byte; + var c2; + var off = prm[0], bitbuf = prm[1], vbits = prm[2], reset = prm[3]; + if (nbits == 0 || vbits < 0) return 0; + while (!reset && vbits < nbits && (c2 = data2[off++]) != -1 && !(reset = zero_after_ff && c2 == 255 && data2[off++])) { + bitbuf = (bitbuf << 8) + c2; + vbits += 8; + } + c2 = bitbuf << 32 - vbits >>> 32 - nbits; + if (huff) { + vbits -= huff[c2 + 1] >>> 8; + c2 = huff[c2 + 1] & 255; + } else + vbits -= nbits; + if (vbits < 0) throw "e"; + prm[0] = off; + prm[1] = bitbuf; + prm[2] = vbits; + prm[3] = reset; + return c2; +}; +UTIF2.decode._make_decoder = function(source) { + var max2, len, h, i, j; + var huff = []; + for (max2 = 16; max2 != 0 && !source[max2]; max2--) ; + var si = 17; + huff[0] = max2; + for (h = len = 1; len <= max2; len++) + for (i = 0; i < source[len]; i++, ++si) + for (j = 0; j < 1 << max2 - len; j++) + if (h <= 1 << max2) + huff[h++] = len << 8 | source[si]; + return huff; +}; +UTIF2.decode._decodeNewJPEG = function(img, data2, off, len, tgt, toff) { + len = Math.min(len, data2.length - off); + var tables = img["t347"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len); + if (tables) { + var SOI = 216, EOI2 = 217, boff = 0; + for (var i = 0; i < tlen - 1; i++) { + if (tables[i] == 255 && tables[i + 1] == EOI2) break; + buff[boff++] = tables[i]; + } + var byte1 = data2[off], byte2 = data2[off + 1]; + if (byte1 != 255 || byte2 != SOI) { + buff[boff++] = byte1; + buff[boff++] = byte2; + } + for (var i = 2; i < len; i++) buff[boff++] = data2[off + i]; + } else for (var i = 0; i < len; i++) buff[i] = data2[off + i]; + if (img["t262"][0] == 32803 || img["t259"][0] == 7 && img["t262"][0] == 34892) { + var bps = img["t258"][0]; + var out = UTIF2.LosslessJpegDecode(buff), olen = out.length; + if (false) { + } else if (bps == 16) { + if (img.isLE) for (var i = 0; i < olen; i++) { + tgt[toff + (i << 1)] = out[i] & 255; + tgt[toff + (i << 1) + 1] = out[i] >>> 8; + } + else for (var i = 0; i < olen; i++) { + tgt[toff + (i << 1)] = out[i] >>> 8; + tgt[toff + (i << 1) + 1] = out[i] & 255; + } + } else if (bps == 14 || bps == 12 || bps == 10) { + var rst = 16 - bps; + for (var i = 0; i < olen; i++) UTIF2.decode._putsF(tgt, i * bps, out[i] << rst); + } else if (bps == 8) { + for (var i = 0; i < olen; i++) tgt[toff + i] = out[i]; + } else throw new Error("unsupported bit depth " + bps); + } else { + var parser = new UTIF2.JpegDecoder(); + parser.parse(buff); + var decoded = parser.getData({ "width": parser.width, "height": parser.height, "forceRGB": true, "isSourcePDF": false }); + for (var i = 0; i < decoded.length; i++) tgt[toff + i] = decoded[i]; + } + if (img["t262"][0] == 6) img["t262"][0] = 2; +}; +UTIF2.decode._decodeOldJPEGInit = function(img, data2, off, len) { + var SOI = 216, EOI2 = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS2 = 218; + var joff = 0, soff = 0, tables, sosMarker2, isTiled = false, i, j, k2; + var jpgIchgFmt = img["t513"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0; + var jpgIchgFmtLen = img["t514"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0; + var soffTag = img["t324"] || img["t273"] || jpgIchgFmt; + var ycbcrss = img["t530"], ssx = 0, ssy = 0; + var spp = img["t277"] ? img["t277"][0] : 1; + var jpgresint = img["t515"]; + if (soffTag) { + soff = soffTag[0]; + isTiled = soffTag.length > 1; + } + if (!isTiled) { + if (data2[off] == 255 && data2[off + 1] == SOI) return { jpegOffset: off }; + if (jpgIchgFmt != null) { + if (data2[off + jifoff] == 255 && data2[off + jifoff + 1] == SOI) joff = off + jifoff; + else log("JPEGInterchangeFormat does not point to SOI"); + if (jpgIchgFmtLen == null) log("JPEGInterchangeFormatLength field is missing"); + else if (jifoff >= soff || jifoff + jiflen <= soff) log("JPEGInterchangeFormatLength field value is invalid"); + if (joff != null) return { jpegOffset: joff }; + } + } + if (ycbcrss != null) { + ssx = ycbcrss[0]; + ssy = ycbcrss[1]; + } + if (jpgIchgFmt != null) { + if (jpgIchgFmtLen != null) + if (jiflen >= 2 && jifoff + jiflen <= soff) { + if (data2[off + jifoff + jiflen - 2] == 255 && data2[off + jifoff + jiflen - 1] == SOI) tables = new Uint8Array(jiflen - 2); + else tables = new Uint8Array(jiflen); + for (i = 0; i < tables.length; i++) tables[i] = data2[off + jifoff + i]; + log("Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables"); + } else log("JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile"); + } + if (tables == null) { + var ooff = 0, out = []; + out[ooff++] = 255; + out[ooff++] = SOI; + var qtables = img["t519"]; + if (qtables == null) throw new Error("JPEGQTables tag is missing"); + for (i = 0; i < qtables.length; i++) { + out[ooff++] = 255; + out[ooff++] = DQT; + out[ooff++] = 0; + out[ooff++] = 67; + out[ooff++] = i; + for (j = 0; j < 64; j++) out[ooff++] = data2[off + qtables[i] + j]; + } + for (k2 = 0; k2 < 2; k2++) { + var htables = img[k2 == 0 ? "t520" : "t521"]; + if (htables == null) throw new Error((k2 == 0 ? "JPEGDCTables" : "JPEGACTables") + " tag is missing"); + for (i = 0; i < htables.length; i++) { + out[ooff++] = 255; + out[ooff++] = DHT; + var nc = 19; + for (j = 0; j < 16; j++) nc += data2[off + htables[i] + j]; + out[ooff++] = nc >>> 8; + out[ooff++] = nc & 255; + out[ooff++] = i | k2 << 4; + for (j = 0; j < 16; j++) out[ooff++] = data2[off + htables[i] + j]; + for (j = 0; j < nc; j++) out[ooff++] = data2[off + htables[i] + 16 + j]; + } + } + out[ooff++] = 255; + out[ooff++] = SOF0; + out[ooff++] = 0; + out[ooff++] = 8 + 3 * spp; + out[ooff++] = 8; + out[ooff++] = img.height >>> 8 & 255; + out[ooff++] = img.height & 255; + out[ooff++] = img.width >>> 8 & 255; + out[ooff++] = img.width & 255; + out[ooff++] = spp; + if (spp == 1) { + out[ooff++] = 1; + out[ooff++] = 17; + out[ooff++] = 0; + } else for (i = 0; i < 3; i++) { + out[ooff++] = i + 1; + out[ooff++] = i != 0 ? 17 : (ssx & 15) << 4 | ssy & 15; + out[ooff++] = i; + } + if (jpgresint != null && jpgresint[0] != 0) { + out[ooff++] = 255; + out[ooff++] = DRI; + out[ooff++] = 0; + out[ooff++] = 4; + out[ooff++] = jpgresint[0] >>> 8 & 255; + out[ooff++] = jpgresint[0] & 255; + } + tables = new Uint8Array(out); + } + var sofpos = -1; + i = 0; + while (i < tables.length - 1) { + if (tables[i] == 255 && tables[i + 1] == SOF0) { + sofpos = i; + break; + } + i++; + } + if (sofpos == -1) { + var tmptab = new Uint8Array(tables.length + 10 + 3 * spp); + tmptab.set(tables); + var tmpoff = tables.length; + sofpos = tables.length; + tables = tmptab; + tables[tmpoff++] = 255; + tables[tmpoff++] = SOF0; + tables[tmpoff++] = 0; + tables[tmpoff++] = 8 + 3 * spp; + tables[tmpoff++] = 8; + tables[tmpoff++] = img.height >>> 8 & 255; + tables[tmpoff++] = img.height & 255; + tables[tmpoff++] = img.width >>> 8 & 255; + tables[tmpoff++] = img.width & 255; + tables[tmpoff++] = spp; + if (spp == 1) { + tables[tmpoff++] = 1; + tables[tmpoff++] = 17; + tables[tmpoff++] = 0; + } else for (i = 0; i < 3; i++) { + tables[tmpoff++] = i + 1; + tables[tmpoff++] = i != 0 ? 17 : (ssx & 15) << 4 | ssy & 15; + tables[tmpoff++] = i; + } + } + if (data2[soff] == 255 && data2[soff + 1] == SOS2) { + var soslen = data2[soff + 2] << 8 | data2[soff + 3]; + sosMarker2 = new Uint8Array(soslen + 2); + sosMarker2[0] = data2[soff]; + sosMarker2[1] = data2[soff + 1]; + sosMarker2[2] = data2[soff + 2]; + sosMarker2[3] = data2[soff + 3]; + for (i = 0; i < soslen - 2; i++) sosMarker2[i + 4] = data2[soff + i + 4]; + } else { + sosMarker2 = new Uint8Array(2 + 6 + 2 * spp); + var sosoff = 0; + sosMarker2[sosoff++] = 255; + sosMarker2[sosoff++] = SOS2; + sosMarker2[sosoff++] = 0; + sosMarker2[sosoff++] = 6 + 2 * spp; + sosMarker2[sosoff++] = spp; + if (spp == 1) { + sosMarker2[sosoff++] = 1; + sosMarker2[sosoff++] = 0; + } else for (i = 0; i < 3; i++) { + sosMarker2[sosoff++] = i + 1; + sosMarker2[sosoff++] = i << 4 | i; + } + sosMarker2[sosoff++] = 0; + sosMarker2[sosoff++] = 63; + sosMarker2[sosoff++] = 0; + } + return { jpegOffset: off, tables, sosMarker: sosMarker2, sofPosition: sofpos }; +}; +UTIF2.decode._decodeOldJPEG = function(img, data2, off, len, tgt, toff) { + var i, dlen, tlen, buff, buffoff; + var jpegData = UTIF2.decode._decodeOldJPEGInit(img, data2, off, len); + if (jpegData.jpegOffset != null) { + dlen = off + len - jpegData.jpegOffset; + buff = new Uint8Array(dlen); + for (i = 0; i < dlen; i++) buff[i] = data2[jpegData.jpegOffset + i]; + } else { + tlen = jpegData.tables.length; + buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2); + buff.set(jpegData.tables); + buffoff = tlen; + buff[jpegData.sofPosition + 5] = img.height >>> 8 & 255; + buff[jpegData.sofPosition + 6] = img.height & 255; + buff[jpegData.sofPosition + 7] = img.width >>> 8 & 255; + buff[jpegData.sofPosition + 8] = img.width & 255; + if (data2[off] != 255 || data2[off + 1] != SOS) { + buff.set(jpegData.sosMarker, buffoff); + buffoff += sosMarker.length; + } + for (i = 0; i < len; i++) buff[buffoff++] = data2[off + i]; + buff[buffoff++] = 255; + buff[buffoff++] = EOI; + } + var parser = new UTIF2.JpegDecoder(); + parser.parse(buff); + var decoded = parser.getData({ "width": parser.width, "height": parser.height, "forceRGB": true, "isSourcePDF": false }); + for (var i = 0; i < decoded.length; i++) tgt[toff + i] = decoded[i]; + if (img["t262"] && img["t262"][0] == 6) img["t262"][0] = 2; +}; +UTIF2.decode._decodePackBits = function(data2, off, len, tgt, toff) { + var sa = new Int8Array(data2.buffer), ta = new Int8Array(tgt.buffer), lim = off + len; + while (off < lim) { + var n2 = sa[off]; + off++; + if (n2 >= 0 && n2 < 128) for (var i = 0; i < n2 + 1; i++) { + ta[toff] = sa[off]; + toff++; + off++; + } + if (n2 >= -127 && n2 < 0) { + for (var i = 0; i < -n2 + 1; i++) { + ta[toff] = sa[off]; + toff++; + } + off++; + } + } + return toff; +}; +UTIF2.decode._decodeThunder = function(data2, off, len, tgt, toff) { + var d2 = [0, 1, 0, -1], d3 = [0, 1, 2, 3, 0, -3, -2, -1]; + var lim = off + len, qoff = toff * 2, px = 0; + while (off < lim) { + var b3 = data2[off], msk = b3 >>> 6, n2 = b3 & 63; + off++; + if (msk == 3) { + px = n2 & 15; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + if (msk == 0) for (var i = 0; i < n2; i++) { + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + if (msk == 2) for (var i = 0; i < 2; i++) { + var d = n2 >>> 3 * (1 - i) & 7; + if (d != 4) { + px += d3[d]; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + } + if (msk == 1) for (var i = 0; i < 3; i++) { + var d = n2 >>> 2 * (2 - i) & 3; + if (d != 2) { + px += d2[d]; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + } + } +}; +UTIF2.decode._dmap = { "1": 0, "011": 1, "000011": 2, "0000011": 3, "010": -1, "000010": -2, "0000010": -3 }; +UTIF2.decode._lens = function() { + var addKeys = function(lens, arr, i0, inc) { + for (var i = 0; i < arr.length; i++) lens[arr[i]] = i0 + i * inc; + }; + var termW = "00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100"; + var termB = "0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111"; + var makeW = "11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011"; + var makeB = "0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,0000001011011,0000001100100,0000001100101"; + var makeA = "00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111"; + termW = termW.split(","); + termB = termB.split(","); + makeW = makeW.split(","); + makeB = makeB.split(","); + makeA = makeA.split(","); + var lensW = {}, lensB = {}; + addKeys(lensW, termW, 0, 1); + addKeys(lensW, makeW, 64, 64); + addKeys(lensW, makeA, 1792, 64); + addKeys(lensB, termB, 0, 1); + addKeys(lensB, makeB, 64, 64); + addKeys(lensB, makeA, 1792, 64); + return [lensW, lensB]; +}(); +UTIF2.decode._decodeG4 = function(data2, off, slen, tgt, toff, w, fo) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = [], pline = []; + for (var i = 0; i < w; i++) pline.push(0); + pline = U._makeDiff(pline); + var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b22 = 0, clr = 0; + var y2 = 0, mode = "", toRead = 0; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b22 = U._findDiff(pline, b1, clr); + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + if (mode == "H") { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + a0 += len; + clr = 1 - clr; + len = 0; + toRead--; + if (toRead == 0) mode = ""; + } + } + } else { + if (wrd == "0001") { + wrd = ""; + U._addNtimes(line2, b22 - a0, clr); + a0 = b22; + } + if (wrd == "001") { + wrd = ""; + mode = "H"; + toRead = 2; + } + if (U._dmap[wrd] != null) { + a1 = b1 + U._dmap[wrd]; + U._addNtimes(line2, a1 - a0, clr); + a0 = a1; + wrd = ""; + clr = 1 - clr; + } + } + if (line2.length == w && mode == "") { + U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + clr = 0; + y2++; + a0 = 0; + pline = U._makeDiff(line2); + line2 = []; + } + } +}; +UTIF2.decode._findDiff = function(line2, x2, clr) { + for (var i = 0; i < line2.length; i += 2) if (line2[i] >= x2 && line2[i + 1] == clr) return line2[i]; +}; +UTIF2.decode._makeDiff = function(line2) { + var out = []; + if (line2[0] == 1) out.push(0, 1); + for (var i = 1; i < line2.length; i++) if (line2[i - 1] != line2[i]) out.push(i, line2[i]); + out.push(line2.length, 0, line2.length, 1); + return out; +}; +UTIF2.decode._decodeG2 = function(data2, off, slen, tgt, toff, w, fo) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = []; + var clr = 0; + var y2 = 0; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + len = U._lens[clr][wrd]; + if (len != null) { + U._addNtimes(line2, len, clr); + wrd = ""; + if (len < 64) clr = 1 - clr; + if (line2.length == w) { + U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + line2 = []; + y2++; + clr = 0; + if ((boff & 7) != 0) boff += 8 - (boff & 7); + if (len >= 64) boff += 8; + } + } + } +}; +UTIF2.decode._decodeG3 = function(data2, off, slen, tgt, toff, w, fo, twoDim) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = [], pline = []; + for (var i = 0; i < w; i++) line2.push(0); + var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b22 = 0, clr = 0; + var y2 = -1, mode = "", toRead = 0, is1D = true; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b22 = U._findDiff(pline, b1, clr); + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + if (is1D) { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + clr = 1 - clr; + len = 0; + } + } + } else { + if (mode == "H") { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + a0 += len; + clr = 1 - clr; + len = 0; + toRead--; + if (toRead == 0) mode = ""; + } + } + } else { + if (wrd == "0001") { + wrd = ""; + U._addNtimes(line2, b22 - a0, clr); + a0 = b22; + } + if (wrd == "001") { + wrd = ""; + mode = "H"; + toRead = 2; + } + if (U._dmap[wrd] != null) { + a1 = b1 + U._dmap[wrd]; + U._addNtimes(line2, a1 - a0, clr); + a0 = a1; + wrd = ""; + clr = 1 - clr; + } + } + } + if (wrd.endsWith("000000000001")) { + if (y2 >= 0) U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + if (twoDim) { + if (fo == 1) is1D = (data2[boff >>> 3] >>> 7 - (boff & 7) & 1) == 1; + if (fo == 2) is1D = (data2[boff >>> 3] >>> (boff & 7) & 1) == 1; + boff++; + } + wrd = ""; + clr = 0; + y2++; + a0 = 0; + pline = U._makeDiff(line2); + line2 = []; + } + } + if (line2.length == w) U._writeBits(line2, tgt, toff * 8 + y2 * bipl); +}; +UTIF2.decode._addNtimes = function(arr, n2, val2) { + for (var i = 0; i < n2; i++) arr.push(val2); +}; +UTIF2.decode._writeBits = function(bits2, tgt, boff) { + for (var i = 0; i < bits2.length; i++) tgt[boff + i >>> 3] |= bits2[i] << 7 - (boff + i & 7); +}; +UTIF2.decode._decodeLZW = UTIF2.decode._decodeLZW = function() { + var e, U, Z2, u, K = 0, V = 0, g2 = 0, N = 0, O = function() { + var S = e >>> 3, A2 = U[S] << 16 | U[S + 1] << 8 | U[S + 2], j = A2 >>> 24 - (e & 7) - V & (1 << V) - 1; + e += V; + return j; + }, h = new Uint32Array(4096 * 4), w = 0, m = function(S) { + if (S == w) return; + w = S; + g2 = 1 << S; + N = g2 + 1; + for (var A2 = 0; A2 < N + 1; A2++) { + h[4 * A2] = h[4 * A2 + 3] = A2; + h[4 * A2 + 1] = 65535; + h[4 * A2 + 2] = 1; + } + }, i = function(S) { + V = S + 1; + K = N + 1; + }, D = function(S) { + var A2 = S << 2, j = h[A2 + 2], a2 = u + j - 1; + while (A2 != 65535) { + Z2[a2--] = h[A2]; + A2 = h[A2 + 1]; + } + u += j; + }, L = function(S, A2) { + var j = K << 2, a2 = S << 2; + h[j] = h[(A2 << 2) + 3]; + h[j + 1] = a2; + h[j + 2] = h[a2 + 2] + 1; + h[j + 3] = h[a2 + 3]; + K++; + if (K + 1 == 1 << V && V != 12) V++; + }, T = function(S, A2, j, a2, n2, q2) { + e = A2 << 3; + U = S; + Z2 = a2; + u = n2; + var B2 = A2 + j << 3, _ = 0, t3 = 0; + m(q2); + i(q2); + while (e < B2 && (_ = O()) != N) { + if (_ == g2) { + i(q2); + _ = O(); + if (_ == N) break; + D(_); + } else { + if (_ < K) { + D(_); + L(t3, _); + } else { + L(t3, t3); + D(K - 1); + } + } + t3 = _; + } + return u; + }; + return T; +}(); +UTIF2.tags = {}; +UTIF2._types = function() { + var main = new Array(250); + main.fill(0); + main = main.concat([0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + var rest = { 33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7 }; + return { + basic: { + main, + rest + }, + gps: { + main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9], + rest: { 18: 2, 29: 2 } + } + }; +}(); +UTIF2._readIFD = function(bin, data2, offset, ifds, depth, prm) { + var cnt = bin.readUshort(data2, offset); + offset += 2; + var ifd = {}; + if (prm.debug) log(" ".repeat(depth), ifds.length - 1, ">>>----------------"); + for (var i = 0; i < cnt; i++) { + var tag = bin.readUshort(data2, offset); + offset += 2; + var type = bin.readUshort(data2, offset); + offset += 2; + var num = bin.readUint(data2, offset); + offset += 4; + var voff = bin.readUint(data2, offset); + offset += 4; + var arr = []; + if (type == 1 || type == 7) { + var no = num < 5 ? offset - 4 : voff; + if (no + num > data2.buffer.byteLength) num = data2.buffer.byteLength - no; + arr = new Uint8Array(data2.buffer, no, num); + } + if (type == 2) { + var o0 = num < 5 ? offset - 4 : voff, c2 = data2[o0], len = Math.max(0, Math.min(num - 1, data2.length - o0)); + if (c2 < 128 || len == 0) arr.push(bin.readASCII(data2, o0, len)); + else arr = new Uint8Array(data2.buffer, o0, len); + } + if (type == 3) { + for (var j = 0; j < num; j++) arr.push(bin.readUshort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 4 || type == 13) { + for (var j = 0; j < num; j++) arr.push(bin.readUint(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 5 || type == 10) { + var ri = type == 5 ? bin.readUint : bin.readInt; + for (var j = 0; j < num; j++) arr.push([ri(data2, voff + j * 8), ri(data2, voff + j * 8 + 4)]); + } + if (type == 8) { + for (var j = 0; j < num; j++) arr.push(bin.readShort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 9) { + for (var j = 0; j < num; j++) arr.push(bin.readInt(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 11) { + for (var j = 0; j < num; j++) arr.push(bin.readFloat(data2, voff + j * 4)); + } + if (type == 12) { + for (var j = 0; j < num; j++) arr.push(bin.readDouble(data2, voff + j * 8)); + } + if (num != 0 && arr.length == 0) { + log(tag, "unknown TIFF tag type: ", type, "num:", num); + if (i == 0) return; + continue; + } + if (prm.debug) log(" ".repeat(depth), tag, type, UTIF2.tags[tag], arr); + ifd["t" + tag] = arr; + if (tag == 330 && ifd["t272"] && ifd["t272"][0] == "DSLR-A100") { + } else if (tag == 330 || tag == 34665 || tag == 34853 || tag == 50740 && bin.readUshort(data2, bin.readUint(arr, 0)) < 300 || tag == 61440) { + var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr; + var subfd = []; + for (var j = 0; j < oarr.length; j++) UTIF2._readIFD(bin, data2, oarr[j], subfd, depth + 1, prm); + if (tag == 330) ifd.subIFD = subfd; + if (tag == 34665) ifd.exifIFD = subfd[0]; + if (tag == 34853) ifd.gpsiIFD = subfd[0]; + if (tag == 50740) ifd.dngPrvt = subfd[0]; + if (tag == 61440) ifd.fujiIFD = subfd[0]; + } + if (tag == 37500 && prm.parseMN) { + var mn = arr; + if (bin.readASCII(mn, 0, 5) == "Nikon") ifd.makerNote = UTIF2["decode"](mn.slice(10).buffer)[0]; + else if (bin.readASCII(mn, 0, 5) == "OLYMP" || bin.readASCII(mn, 0, 9) == "OM SYSTEM") { + var inds = [8208, 8224, 8240, 8256, 8272]; + var subsub = []; + UTIF2._readIFD(bin, mn, mn[1] == 77 ? 16 : mn[5] == 85 ? 12 : 8, subsub, depth + 1, prm); + var obj = ifd.makerNote = subsub.pop(); + for (var j = 0; j < inds.length; j++) { + var k2 = "t" + inds[j]; + if (obj[k2] == null) continue; + UTIF2._readIFD(bin, mn, obj[k2][0], subsub, depth + 1, prm); + obj[k2] = subsub.pop(); + } + if (obj["t12288"]) { + UTIF2._readIFD(bin, obj["t12288"], 0, subsub, depth + 1, prm); + obj["t12288"] = subsub.pop(); + } + } else if (bin.readUshort(data2, voff) < 300 && bin.readUshort(data2, voff + 4) <= 12) { + var subsub = []; + UTIF2._readIFD(bin, data2, voff, subsub, depth + 1, prm); + ifd.makerNote = subsub[0]; + } + } + } + ifds.push(ifd); + if (prm.debug) log(" ".repeat(depth), "<<<---------------"); + return offset; +}; +UTIF2._writeIFD = function(bin, types, data2, offset, ifd) { + var keys2 = Object.keys(ifd), knum = keys2.length; + if (ifd["exifIFD"]) knum--; + if (ifd["gpsiIFD"]) knum--; + bin.writeUshort(data2, offset, knum); + offset += 2; + var eoff = offset + knum * 12 + 4; + for (var ki = 0; ki < keys2.length; ki++) { + var key2 = keys2[ki]; + if (key2 == "t34665" || key2 == "t34853") continue; + if (key2 == "exifIFD") key2 = "t34665"; + if (key2 == "gpsiIFD") key2 = "t34853"; + var tag = parseInt(key2.slice(1)), type = types.main[tag]; + if (type == null) type = types.rest[tag]; + if (type == null || type == 0) throw new Error("unknown type of tag: " + tag); + var val2 = ifd[key2]; + if (tag == 34665) { + var outp = UTIF2._writeIFD(bin, types, data2, eoff, ifd["exifIFD"]); + val2 = [eoff]; + eoff = outp[1]; + } + if (tag == 34853) { + var outp = UTIF2._writeIFD(bin, UTIF2._types.gps, data2, eoff, ifd["gpsiIFD"]); + val2 = [eoff]; + eoff = outp[1]; + } + if (type == 2) val2 = val2[0] + "\0"; + var num = val2.length; + bin.writeUshort(data2, offset, tag); + offset += 2; + bin.writeUshort(data2, offset, type); + offset += 2; + bin.writeUint(data2, offset, num); + offset += 4; + var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num; + var toff = offset; + if (dlen > 4) { + bin.writeUint(data2, offset, eoff); + toff = eoff; + } + if (type == 1 || type == 7) { + for (var i = 0; i < num; i++) data2[toff + i] = val2[i]; + } else if (type == 2) { + bin.writeASCII(data2, toff, val2); + } else if (type == 3) { + for (var i = 0; i < num; i++) bin.writeUshort(data2, toff + 2 * i, val2[i]); + } else if (type == 4) { + for (var i = 0; i < num; i++) bin.writeUint(data2, toff + 4 * i, val2[i]); + } else if (type == 5 || type == 10) { + var wr = type == 5 ? bin.writeUint : bin.writeInt; + for (var i = 0; i < num; i++) { + var v = val2[i], nu = v[0], de2 = v[1]; + if (nu == null) throw "e"; + wr(data2, toff + 8 * i, nu); + wr(data2, toff + 8 * i + 4, de2); + } + } else if (type == 9) { + for (var i = 0; i < num; i++) bin.writeInt(data2, toff + 4 * i, val2[i]); + } else if (type == 12) { + for (var i = 0; i < num; i++) bin.writeDouble(data2, toff + 8 * i, val2[i]); + } else throw type; + if (dlen > 4) { + dlen += dlen & 1; + eoff += dlen; + } + offset += 4; + } + return [offset, eoff]; +}; +UTIF2.toRGBA8 = function(out, scl) { + function gamma(x3) { + return x3 < 31308e-7 ? 12.92 * x3 : 1.055 * Math.pow(x3, 1 / 2.4) - 0.055; + } + var w = out.width, h = out.height, area = w * h, qarea = area * 4, data2 = out.data; + var img = new Uint8Array(area * 4); + var intp = out["t262"] ? out["t262"][0] : 2, bps = out["t258"] ? Math.min(32, out["t258"][0]) : 1; + if (out["t262"] == null && bps == 1) intp = 0; + var smpls = out["t277"] ? out["t277"][0] : out["t258"] ? out["t258"].length : [1, 1, 3, 1, 1, 4, 3][intp]; + var sfmt = out["t339"] ? out["t339"][0] : null; + if (intp == 1 && bps == 32 && sfmt != 3) throw "e"; + var bpl = Math.ceil(smpls * bps * w / 8); + if (false) { + } else if (intp == 0) { + scl = 1 / 256; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, io = y2 * w; + if (bps == 1) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 3)] >> 7 - (i & 7) & 1; + img[qi] = img[qi + 1] = img[qi + 2] = (1 - px) * 255; + img[qi + 3] = 255; + } + if (bps == 4) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 1)] >> 4 - 4 * (i & 1) & 15; + img[qi] = img[qi + 1] = img[qi + 2] = (15 - px) * 17; + img[qi + 3] = 255; + } + if (bps == 8) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + i]; + img[qi] = img[qi + 1] = img[qi + 2] = 255 - px; + img[qi + 3] = 255; + } + if (bps == 16) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = off + 2 * i, px = data2[o + 1] << 8 | data2[o]; + img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, 255 - ~~(px * scl)); + img[qi + 3] = 255; + } + } + } else if (intp == 1) { + if (scl == null) scl = 1 / 256; + var f32 = (data2.length & 3) == 0 ? new Float32Array(data2.buffer) : null; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, io = y2 * w; + if (bps == 1) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 3)] >> 7 - (i & 7) & 1; + img[qi] = img[qi + 1] = img[qi + 2] = px * 255; + img[qi + 3] = 255; + } + if (bps == 2) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 2)] >> 6 - 2 * (i & 3) & 3; + img[qi] = img[qi + 1] = img[qi + 2] = px * 85; + img[qi + 3] = 255; + } + if (bps == 8) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + i * smpls]; + img[qi] = img[qi + 1] = img[qi + 2] = px; + img[qi + 3] = 255; + } + if (bps == 16) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = off + 2 * i, px = data2[o + 1] << 8 | data2[o]; + img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, ~~(px * scl)); + img[qi + 3] = 255; + } + if (bps == 32) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = (off >>> 2) + i, px = f32[o]; + img[qi] = img[qi + 1] = img[qi + 2] = ~~(0.5 + 255 * px); + img[qi + 3] = 255; + } + } + } else if (intp == 2) { + if (bps == 8) { + if (smpls == 1) for (var i = 0; i < area; i++) { + img[4 * i] = img[4 * i + 1] = img[4 * i + 2] = data2[i]; + img[4 * i + 3] = 255; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 1]; + img[qi + 2] = data2[ti + 2]; + img[qi + 3] = 255; + } + if (smpls >= 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * smpls; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 1]; + img[qi + 2] = data2[ti + 2]; + img[qi + 3] = data2[ti + 3]; + } + } else if (bps == 16) { + if (smpls == 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 8 + 1; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 2]; + img[qi + 2] = data2[ti + 4]; + img[qi + 3] = data2[ti + 6]; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 6 + 1; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 2]; + img[qi + 2] = data2[ti + 4]; + img[qi + 3] = 255; + } + } else if (bps == 32) { + var ndt = new Float32Array(data2.buffer); + var min = 0; + for (var i = 0; i < ndt.length; i++) min = Math.min(min, ndt[i]); + if (min < 0) for (var i = 0; i < data2.length; i += 4) { + var t3 = data2[i]; + data2[i] = data2[i + 3]; + data2[i + 3] = t3; + t3 = data2[i + 1]; + data2[i + 1] = data2[i + 2]; + data2[i + 2] = t3; + } + var pmap = []; + for (var i = 0; i < 65536; i++) pmap.push(gamma(i / 65535)); + for (var i = 0; i < ndt.length; i++) { + var cv = Math.max(0, Math.min(1, ndt[i])); + ndt[i] = pmap[~~(0.5 + cv * 65535)]; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + img[qi] = ~~(0.5 + ndt[ti] * 255); + img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255); + img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255); + img[qi + 3] = 255; + } + else if (smpls == 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 4; + img[qi] = ~~(0.5 + ndt[ti] * 255); + img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255); + img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255); + img[qi + 3] = ~~(0.5 + ndt[ti + 3] * 255); + } + else throw smpls; + } else throw bps; + } else if (intp == 3) { + var map2 = out["t320"]; + var cn = 1 << bps; + var nexta = bps == 8 && smpls > 1 && out["t338"] && out["t338"][0] != 0; + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + var i = y2 * w + x2; + var qi = i << 2, mi2 = 0; + var dof = y2 * bpl; + if (false) { + } else if (bps == 1) mi2 = data2[dof + (x2 >>> 3)] >>> 7 - (x2 & 7) & 1; + else if (bps == 2) mi2 = data2[dof + (x2 >>> 2)] >>> 6 - 2 * (x2 & 3) & 3; + else if (bps == 4) mi2 = data2[dof + (x2 >>> 1)] >>> 4 - 4 * (x2 & 1) & 15; + else if (bps == 8) mi2 = data2[dof + x2 * smpls]; + else throw bps; + img[qi] = map2[mi2] >> 8; + img[qi + 1] = map2[cn + mi2] >> 8; + img[qi + 2] = map2[cn + cn + mi2] >> 8; + img[qi + 3] = nexta ? data2[dof + x2 * smpls + 1] : 255; + } + } else if (intp == 5) { + var gotAlpha = smpls > 4 ? 1 : 0; + for (var i = 0; i < area; i++) { + var qi = i << 2, si = i * smpls; + if (window.UDOC) { + var C2 = data2[si], M = data2[si + 1], Y2 = data2[si + 2], K = data2[si + 3]; + var c2 = UDOC.C.cmykToRgb([C2 * (1 / 255), M * (1 / 255), Y2 * (1 / 255), K * (1 / 255)]); + img[qi] = ~~(0.5 + 255 * c2[0]); + img[qi + 1] = ~~(0.5 + 255 * c2[1]); + img[qi + 2] = ~~(0.5 + 255 * c2[2]); + } else { + var C2 = 255 - data2[si], M = 255 - data2[si + 1], Y2 = 255 - data2[si + 2], K = (255 - data2[si + 3]) * (1 / 255); + img[qi] = ~~(C2 * K + 0.5); + img[qi + 1] = ~~(M * K + 0.5); + img[qi + 2] = ~~(Y2 * K + 0.5); + } + img[qi + 3] = 255 * (1 - gotAlpha) + data2[si + 4] * gotAlpha; + } + } else if (intp == 6 && out["t278"]) { + var rps = out["t278"][0]; + for (var y2 = 0; y2 < h; y2 += rps) { + var i = y2 * w, len = rps * w; + for (var j = 0; j < len; j++) { + var qi = 4 * (i + j), si = 3 * i + 4 * (j >>> 1); + var Y2 = data2[si + (j & 1)], Cb = data2[si + 2] - 128, Cr = data2[si + 3] - 128; + var r = Y2 + ((Cr >> 2) + (Cr >> 3) + (Cr >> 5)); + var g2 = Y2 - ((Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ((Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5)); + var b3 = Y2 + (Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6)); + img[qi] = Math.max(0, Math.min(255, r)); + img[qi + 1] = Math.max(0, Math.min(255, g2)); + img[qi + 2] = Math.max(0, Math.min(255, b3)); + img[qi + 3] = 255; + } + } + } else if (intp == 32845) { + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + var si = (y2 * w + x2) * 6, qi = (y2 * w + x2) * 4; + var L = data2[si + 1] << 8 | data2[si]; + var L = Math.pow(2, (L + 0.5) / 256 - 64); + var u = (data2[si + 3] + 0.5) / 410; + var v = (data2[si + 5] + 0.5) / 410; + var sX = 9 * u / (6 * u - 16 * v + 12); + var sY = 4 * v / (6 * u - 16 * v + 12); + var bY = L; + var X2 = sX * bY / sY, Y2 = bY, Z2 = (1 - sX - sY) * bY / sY; + var r = 2.69 * X2 - 1.276 * Y2 - 0.414 * Z2; + var g2 = -1.022 * X2 + 1.978 * Y2 + 0.044 * Z2; + var b3 = 0.061 * X2 - 0.224 * Y2 + 1.163 * Z2; + img[qi] = gamma(Math.min(r, 1)) * 255; + img[qi + 1] = gamma(Math.min(g2, 1)) * 255; + img[qi + 2] = gamma(Math.min(b3, 1)) * 255; + img[qi + 3] = 255; + } + } else log("Unknown Photometric interpretation: " + intp); + return img; +}; +UTIF2.replaceIMG = function(imgs) { + if (imgs == null) imgs = document.getElementsByTagName("img"); + var sufs = ["tif", "tiff", "dng", "cr2", "nef"]; + for (var i = 0; i < imgs.length; i++) { + var img = imgs[i], src = img.getAttribute("src"); + if (src == null) continue; + var suff = src.split(".").pop().toLowerCase(); + if (sufs.indexOf(suff) == -1) continue; + var xhr = new XMLHttpRequest(); + UTIF2._xhrs.push(xhr); + UTIF2._imgs.push(img); + xhr.open("GET", src); + xhr.responseType = "arraybuffer"; + xhr.onload = UTIF2._imgLoaded; + xhr.send(); + } +}; +UTIF2._xhrs = []; +UTIF2._imgs = []; +UTIF2._imgLoaded = function(e) { + var ind = UTIF2._xhrs.indexOf(e.target), img = UTIF2._imgs[ind]; + UTIF2._xhrs.splice(ind, 1); + UTIF2._imgs.splice(ind, 1); + img.setAttribute("src", UTIF2.bufferToURI(e.target.response)); +}; +UTIF2.bufferToURI = function(buff) { + var ifds = UTIF2.decode(buff); + var vsns = ifds, ma = 0, page = vsns[0]; + if (ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD); + for (var i = 0; i < vsns.length; i++) { + var img = vsns[i]; + if (img["t258"] == null || img["t258"].length < 3) continue; + var ar = img["t256"] * img["t257"]; + if (ar > ma) { + ma = ar; + page = img; + } + } + UTIF2.decodeImage(buff, page, ifds); + var rgba = UTIF2.toRGBA8(page), w = page.width, h = page.height; + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer), w, h); + ctx.putImageData(imgd, 0, 0); + return cnv.toDataURL(); +}; +UTIF2._binBE = { + nextZero: function(data2, o) { + while (data2[o] != 0) o++; + return o; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + readShort: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 1]; + a2[1] = buff[p2 + 0]; + return UTIF2._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF2._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF2._binBE.ui32[0]; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + readFloat: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + 3 - i]; + return UTIF2._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + 7 - i]; + return UTIF2._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF2._binBE.ui8; + UTIF2._binBE.i32[0] = n2; + buff[p2 + 3] = a2[0]; + buff[p2 + 2] = a2[1]; + buff[p2 + 1] = a2[2]; + buff[p2 + 0] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 >> 0 & 255; + }, + writeASCII: function(buff, p2, s) { + for (var i = 0; i < s.length; i++) buff[p2 + i] = s.charCodeAt(i); + }, + writeDouble: function(buff, p2, n2) { + UTIF2._binBE.fl64[0] = n2; + for (var i = 0; i < 8; i++) buff[p2 + i] = UTIF2._binBE.ui8[7 - i]; + } +}; +UTIF2._binBE.ui8 = new Uint8Array(8); +UTIF2._binBE.i16 = new Int16Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.i32 = new Int32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.ui32 = new Uint32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.fl32 = new Float32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.fl64 = new Float64Array(UTIF2._binBE.ui8.buffer); +UTIF2._binLE = { + nextZero: UTIF2._binBE.nextZero, + readUshort: function(buff, p2) { + return buff[p2 + 1] << 8 | buff[p2]; + }, + readShort: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + return UTIF2._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF2._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF2._binBE.ui32[0]; + }, + readASCII: UTIF2._binBE.readASCII, + readFloat: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + i]; + return UTIF2._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + i]; + return UTIF2._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 & 255; + buff[p2 + 1] = n2 >> 8 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF2._binBE.ui8; + UTIF2._binBE.i32[0] = n2; + buff[p2 + 0] = a2[0]; + buff[p2 + 1] = a2[1]; + buff[p2 + 2] = a2[2]; + buff[p2 + 3] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >>> 0 & 255; + buff[p2 + 1] = n2 >>> 8 & 255; + buff[p2 + 2] = n2 >>> 16 & 255; + buff[p2 + 3] = n2 >>> 24 & 255; + }, + writeASCII: UTIF2._binBE.writeASCII +}; +UTIF2._copyTile = function(tb, tw, th, b3, w, h, xoff, yoff) { + var xlim = Math.min(tw, w - xoff); + var ylim = Math.min(th, h - yoff); + for (var y2 = 0; y2 < ylim; y2++) { + var tof = (yoff + y2) * w + xoff; + var sof = y2 * tw; + for (var x2 = 0; x2 < xlim; x2++) b3[tof + x2] = tb[sof + x2]; + } +}; +UTIF2._inflateRaw = function() { + var H = {}; + H.H = {}; + H.H.N = function(N, W) { + var R4 = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q3 = 0, X2 = 0, u = 0, w = 0, d = 0, v, C2; + if (N[0] == 3 && N[1] == 0) return W ? W : new R4(0); + var V = H.H, n2 = V.b, A2 = V.e, l2 = V.R, M = V.n, I2 = V.A, e = V.Z, b3 = V.m, Z2 = W == null; + if (Z2) W = new R4(N.length >>> 2 << 5); + while (i == 0) { + i = n2(N, d, 1); + m = n2(N, d + 1, 2); + d += 3; + if (m == 0) { + if ((d & 7) != 0) d += 8 - (d & 7); + var D = (d >>> 3) + 4, q2 = N[D - 4] | N[D - 3] << 8; + if (Z2) W = H.H.W(W, w + q2); + W.set(new R4(N.buffer, N.byteOffset + D, q2), w); + d = D + q2 << 3; + w += q2; + continue; + } + if (Z2) W = H.H.W(W, w + (1 << 17)); + if (m == 1) { + v = b3.J; + C2 = b3.h; + X2 = (1 << 9) - 1; + u = (1 << 5) - 1; + } + if (m == 2) { + J = A2(N, d, 5) + 257; + h = A2(N, d + 5, 5) + 1; + Q3 = A2(N, d + 10, 4) + 4; + d += 14; + var E2 = d, j = 1; + for (var c2 = 0; c2 < 38; c2 += 2) { + b3.Q[c2] = 0; + b3.Q[c2 + 1] = 0; + } + for (var c2 = 0; c2 < Q3; c2++) { + var K = A2(N, d + c2 * 3, 3); + b3.Q[(b3.X[c2] << 1) + 1] = K; + if (K > j) j = K; + } + d += 3 * Q3; + M(b3.Q, j); + I2(b3.Q, j, b3.u); + v = b3.w; + C2 = b3.d; + d = l2(b3.u, (1 << j) - 1, J + h, N, d, b3.v); + var r = V.V(b3.v, 0, J, b3.C); + X2 = (1 << r) - 1; + var S = V.V(b3.v, J, h, b3.D); + u = (1 << S) - 1; + M(b3.C, r); + I2(b3.C, r, v); + M(b3.D, S); + I2(b3.D, S, C2); + } + while (true) { + var T = v[e(N, d) & X2]; + d += T & 15; + var p2 = T >>> 4; + if (p2 >>> 8 == 0) { + W[w++] = p2; + } else if (p2 == 256) { + break; + } else { + var z = w + p2 - 254; + if (p2 > 264) { + var _ = b3.q[p2 - 257]; + z = w + (_ >>> 3) + A2(N, d, _ & 7); + d += _ & 7; + } + var $2 = C2[e(N, d) & u]; + d += $2 & 15; + var s = $2 >>> 4, Y2 = b3.c[s], a2 = (Y2 >>> 4) + n2(N, d, Y2 & 15); + d += Y2 & 15; + while (w < z) { + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + } + w = z; + } + } + } + return W.length == w ? W : W.slice(0, w); + }; + H.H.W = function(N, W) { + var R4 = N.length; + if (W <= R4) return N; + var V = new Uint8Array(R4 << 1); + V.set(N, 0); + return V; + }; + H.H.R = function(N, W, R4, V, n2, A2) { + var l2 = H.H.e, M = H.H.Z, I2 = 0; + while (I2 < R4) { + var e = N[M(V, n2) & W]; + n2 += e & 15; + var b3 = e >>> 4; + if (b3 <= 15) { + A2[I2] = b3; + I2++; + } else { + var Z2 = 0, m = 0; + if (b3 == 16) { + m = 3 + l2(V, n2, 2); + n2 += 2; + Z2 = A2[I2 - 1]; + } else if (b3 == 17) { + m = 3 + l2(V, n2, 3); + n2 += 3; + } else if (b3 == 18) { + m = 11 + l2(V, n2, 7); + n2 += 7; + } + var J = I2 + m; + while (I2 < J) { + A2[I2] = Z2; + I2++; + } + } + } + return n2; + }; + H.H.V = function(N, W, R4, V) { + var n2 = 0, A2 = 0, l2 = V.length >>> 1; + while (A2 < R4) { + var M = N[A2 + W]; + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = M; + if (M > n2) n2 = M; + A2++; + } + while (A2 < l2) { + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = 0; + A2++; + } + return n2; + }; + H.H.n = function(N, W) { + var R4 = H.H.m, V = N.length, n2, A2, l2, M, I2, e = R4.j; + for (var M = 0; M <= W; M++) e[M] = 0; + for (M = 1; M < V; M += 2) e[N[M]]++; + var b3 = R4.K; + n2 = 0; + e[0] = 0; + for (A2 = 1; A2 <= W; A2++) { + n2 = n2 + e[A2 - 1] << 1; + b3[A2] = n2; + } + for (l2 = 0; l2 < V; l2 += 2) { + I2 = N[l2 + 1]; + if (I2 != 0) { + N[l2] = b3[I2]; + b3[I2]++; + } + } + }; + H.H.A = function(N, W, R4) { + var V = N.length, n2 = H.H.m, A2 = n2.r; + for (var l2 = 0; l2 < V; l2 += 2) if (N[l2 + 1] != 0) { + var M = l2 >> 1, I2 = N[l2 + 1], e = M << 4 | I2, b3 = W - I2, Z2 = N[l2] << b3, m = Z2 + (1 << b3); + while (Z2 != m) { + var J = A2[Z2] >>> 15 - W; + R4[J] = e; + Z2++; + } + } + }; + H.H.l = function(N, W) { + var R4 = H.H.m.r, V = 15 - W; + for (var n2 = 0; n2 < N.length; n2 += 2) { + var A2 = N[n2] << W - N[n2 + 1]; + N[n2] = R4[A2] >>> V; + } + }; + H.H.M = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + }; + H.H.I = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + N[V + 2] |= R4 >>> 16; + }; + H.H.e = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.b = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.Z = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); + }; + H.H.i = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); + }; + H.H.m = function() { + var N = Uint16Array, W = Uint32Array; + return { K: new N(16), j: new N(16), X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999], T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0], q: new N(32), p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535], z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0], c: new W(32), J: new N(512), _: [], h: new N(32), $: [], w: new N(32768), C: [], v: [], d: new N(32768), D: [], u: new N(512), Q: [], r: new N(1 << 15), s: new W(286), Y: new W(30), a: new W(19), t: new W(15e3), k: new N(1 << 16), g: new N(1 << 15) }; + }(); + (function() { + var N = H.H.m, W = 1 << 15; + for (var R4 = 0; R4 < W; R4++) { + var V = R4; + V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; + V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; + V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; + V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; + N.r[R4] = (V >>> 16 | V << 16) >>> 17; + } + function n2(A2, l2, M) { + while (l2-- != 0) A2.push(0, M); + } + for (var R4 = 0; R4 < 32; R4++) { + N.q[R4] = N.S[R4] << 3 | N.T[R4]; + N.c[R4] = N.p[R4] << 4 | N.z[R4]; + } + n2(N._, 144, 8); + n2(N._, 255 - 143, 9); + n2(N._, 279 - 255, 7); + n2(N._, 287 - 279, 8); + H.H.n(N._, 9); + H.H.A(N._, 9, N.J); + H.H.l(N._, 9); + n2(N.$, 32, 5); + H.H.n(N.$, 5); + H.H.A(N.$, 5, N.h); + H.H.l(N.$, 5); + n2(N.Q, 19, 0); + n2(N.C, 286, 0); + n2(N.D, 30, 0); + n2(N.v, 320, 0); + })(); + return H.H.N; +}(); +UTIF2.LosslessJpegDecode = /* @__PURE__ */ function() { + var b3, O; + function l2() { + return b3[O++]; + } + function m() { + return b3[O++] << 8 | b3[O++]; + } + function a0(h) { + var V = l2(), I2 = [0, 0, 0, 255], f = [], G = 8; + for (var w = 0; w < 16; w++) f[w] = l2(); + for (var w = 0; w < 16; w++) { + for (var x2 = 0; x2 < f[w]; x2++) { + var T = z(I2, 0, w + 1, 1); + I2[T + 3] = l2(); + } + } + var E2 = new Uint8Array(1 << G); + h[V] = [new Uint8Array(I2), E2]; + for (var w = 0; w < 1 << G; w++) { + var s = G, _ = w, Y2 = 0, F2 = 0; + while (I2[Y2 + 3] == 255 && s != 0) { + F2 = _ >> --s & 1; + Y2 = I2[Y2 + F2]; + } + E2[w] = Y2; + } + } + function z(h, V, I2, f) { + if (h[V + 3] != 255) return 0; + if (I2 == 0) return V; + for (var w = 0; w < 2; w++) { + if (h[V + w] == 0) { + h[V + w] = h.length; + h.push(0, 0, f, 255); + } + var x2 = z(h, h[V + w], I2 - 1, f + 1); + if (x2 != 0) return x2; + } + return 0; + } + function i(h) { + var V = h.b, I2 = h.f; + while (V < 25 && h.a < h.d) { + var f = h.data[h.a++]; + if (f == 255 && !h.c) h.a++; + I2 = I2 << 8 | f; + V += 8; + } + if (V < 0) throw "e"; + h.b = V; + h.f = I2; + } + function H(h, V) { + if (V.b < h) i(V); + return V.f >> (V.b -= h) & 65535 >> 16 - h; + } + function g2(h, V) { + var I2 = h[0], f = 0, w = 255, x2 = 0; + if (V.b < 16) i(V); + var T = V.f >> V.b - 8 & 255; + f = h[1][T]; + w = I2[f + 3]; + V.b -= I2[f + 2]; + while (w == 255) { + x2 = V.f >> --V.b & 1; + f = I2[f + x2]; + w = I2[f + 3]; + } + return w; + } + function P(h, V) { + if (h < 32768 >> 16 - V) h += -(1 << V) + 1; + return h; + } + function a2(h, V) { + var I2 = g2(h, V); + if (I2 == 0) return 0; + if (I2 == 16) return -32768; + var f = H(I2, V); + return P(f, I2); + } + function X2(h, V, I2, f, w, x2) { + var T = 0; + for (var G = 0; G < x2; G++) { + var s = G * V; + for (var _ = 0; _ < V; _ += w) { + T++; + for (var Y2 = 0; Y2 < w; Y2++) h[s + _ + Y2] = a2(f[Y2], I2); + } + if (I2.e != 0 && T % I2.e == 0 && G != 0) { + var F2 = I2.a, t3 = I2.data; + while (t3[F2] != 255 || !(208 <= t3[F2 + 1] && t3[F2 + 1] <= 215)) F2--; + I2.a = F2 + 2; + I2.f = 0; + I2.b = 0; + } + } + } + function o(h, V) { + return P(H(h, V), h); + } + function a1(h, V, I2, f, w) { + var x2 = b3.length - O; + for (var T = 0; T < x2; T += 4) { + var G = b3[O + T]; + b3[O + T] = b3[O + T + 3]; + b3[O + T + 3] = G; + var G = b3[O + T + 1]; + b3[O + T + 1] = b3[O + T + 2]; + b3[O + T + 2] = G; + } + for (var E2 = 0; E2 < w; E2++) { + var s = 32768, _ = 32768; + for (var Y2 = 0; Y2 < V; Y2 += 2) { + var F2 = g2(f, I2), t3 = g2(f, I2); + if (F2 != 0) s += o(F2, I2); + if (t3 != 0) _ += o(t3, I2); + h[E2 * V + Y2] = s & 65535; + h[E2 * V + Y2 + 1] = _ & 65535; + } + } + } + function C2(h) { + b3 = h; + O = 0; + if (m() != 65496) throw "e"; + var V = [], I2 = 0, f = 0, w = 0, x2 = [], T = [], G = [], E2 = 0, s = 0, _ = 0; + while (true) { + var Y2 = m(); + if (Y2 == 65535) { + O--; + continue; + } + var F2 = m(); + if (Y2 == 65475) { + f = l2(); + s = m(); + _ = m(); + E2 = l2(); + for (var t3 = 0; t3 < E2; t3++) { + var a3 = l2(), J = l2(), r = l2(); + if (r != 0) throw "e"; + V[a3] = [t3, J >> 4, J & 15]; + } + } else if (Y2 == 65476) { + var a32 = O + F2 - 2; + while (O < a32) a0(T); + } else if (Y2 == 65498) { + O++; + for (var t3 = 0; t3 < E2; t3++) { + var a5 = l2(), v = V[a5]; + G[v[0]] = T[l2() >>> 4]; + x2[v[0]] = v.slice(1); + } + I2 = l2(); + O += 2; + break; + } else if (Y2 == 65501) { + w = m(); + } else { + O += F2 - 2; + } + } + var a4 = f > 8 ? Uint16Array : Uint8Array, $2 = new a4(s * _ * E2), M = { b: 0, f: 0, c: I2 == 8, a: O, data: b3, d: b3.length, e: w }; + if (M.c) a1($2, _ * E2, M, G[0], s); + else { + var c2 = [], p2 = 0, D = 0; + for (var t3 = 0; t3 < E2; t3++) { + var N = x2[t3], S = N[0], K = N[1]; + if (S > p2) p2 = S; + if (K > D) D = K; + c2.push(S * K); + } + if (p2 != 1 || D != 1) { + if (E2 != 3 || c2[1] != 1 || c2[2] != 1) throw "e"; + if (p2 != 2 || D != 1 && D != 2) throw "e"; + var u = [], Z2 = 0; + for (var t3 = 0; t3 < E2; t3++) { + for (var R4 = 0; R4 < c2[t3]; R4++) u.push(G[t3]); + Z2 += c2[t3]; + } + var B2 = _ / p2, e = s / D, d = B2 * e; + X2($2, B2 * Z2, M, u, Z2, e); + j($2, I2, B2, e, Z2 - 2, Z2, Z2, f); + var A2 = new Uint16Array(d * c2[0]); + if (p2 == 2 && D == 2) { + for (var t3 = 0; t3 < d; t3++) { + A2[4 * t3] = $2[6 * t3]; + A2[4 * t3 + 1] = $2[6 * t3 + 1]; + A2[4 * t3 + 2] = $2[6 * t3 + 2]; + A2[4 * t3 + 3] = $2[6 * t3 + 3]; + } + j(A2, I2, B2 * 4, e, 0, 1, 1, f); + for (var t3 = 0; t3 < d; t3++) { + $2[6 * t3] = A2[4 * t3]; + $2[6 * t3 + 1] = A2[4 * t3 + 1]; + $2[6 * t3 + 2] = A2[4 * t3 + 2]; + $2[6 * t3 + 3] = A2[4 * t3 + 3]; + } + } + if (p2 == 2 && D == 1) { + for (var t3 = 0; t3 < d; t3++) { + A2[2 * t3] = $2[4 * t3]; + A2[2 * t3 + 1] = $2[4 * t3 + 1]; + } + j(A2, I2, B2 * 2, e, 0, 1, 1, f); + for (var t3 = 0; t3 < d; t3++) { + $2[4 * t3] = A2[2 * t3]; + $2[4 * t3 + 1] = A2[2 * t3 + 1]; + } + } + var n2 = $2.slice(0); + for (var K = 0; K < s; K++) { + if (D == 2) for (var S = 0; S < _; S++) { + var q2 = (K * _ + S) * E2, k2 = ((K >>> 1) * B2 + (S >>> 1)) * Z2, y2 = (K & 1) * 2 + (S & 1); + $2[q2] = n2[k2 + y2]; + $2[q2 + 1] = n2[k2 + 4]; + $2[q2 + 2] = n2[k2 + 5]; + } + else for (var S = 0; S < _; S++) { + var q2 = (K * _ + S) * E2, k2 = (K * B2 + (S >>> 1)) * Z2, y2 = S & 1; + $2[q2] = n2[k2 + y2]; + $2[q2 + 1] = n2[k2 + 2]; + $2[q2 + 2] = n2[k2 + 3]; + } + } + } else { + X2($2, _ * E2, M, G, E2, s); + if (w == 0) j($2, I2, _, s, 0, E2, E2, f); + else { + var U = Math.floor(w / _); + for (var K = 0; K < s; K += U) { + var L = $2.slice(K * _ * E2, (K + U) * _ * E2); + j(L, I2, _, U, 0, E2, E2, f); + $2.set(L, K * _ * E2); + } + } + } + } + return $2; + } + function j(h, V, I2, f, w, x2, G, E2) { + var s = I2 * G; + for (var _ = w; _ < x2; _++) h[_] += 1 << E2 - 1; + for (var Y2 = G; Y2 < s; Y2 += G) for (var _ = w; _ < x2; _++) h[Y2 + _] += h[Y2 + _ - G]; + for (var F2 = 1; F2 < f; F2++) { + var t3 = F2 * s; + for (var _ = w; _ < x2; _++) h[t3 + _] += h[t3 + _ - s]; + for (var Y2 = G; Y2 < s; Y2 += G) { + for (var _ = w; _ < x2; _++) { + var a3 = t3 + Y2 + _, J = a3 - s, r = h[a3 - G], Q3 = 0; + if (V == 0) Q3 = 0; + else if (V == 1) Q3 = r; + else if (V == 2) Q3 = h[J]; + else if (V == 3) Q3 = h[J - G]; + else if (V == 4) Q3 = r + (h[J] - h[J - G]); + else if (V == 5) Q3 = r + (h[J] - h[J - G] >>> 1); + else if (V == 6) Q3 = h[J] + (r - h[J - G] >>> 1); + else if (V == 7) Q3 = r + h[J] >>> 1; + else throw V; + h[a3] += Q3; + } + } + } + } + return C2; +}(); +(function() { + var G = 0, F2 = 1, i = 2, b3 = 3, J = 4, N = 5, E2 = 6, s = 7, c2 = 8, T = 9, a3 = 10, f = 11, q2 = 12, M = 13, m = 14, x2 = 15, L = 16, $2 = 17, p2 = 18; + function a5(t3) { + var Z2 = UTIF2._binBE.readUshort, u = { b: Z2(t3, 0), i: t3[2], C: t3[3], u: t3[4], q: Z2(t3, 5), k: Z2(t3, 7), e: Z2(t3, 9), l: Z2(t3, 11), s: t3[13], d: Z2(t3, 14) }; + if (u.b != 18771 || u.i > 1 || u.q < 6 || u.q % 6 || u.e < 768 || u.e % 24 || u.l != 768 || u.k < u.l || u.k % u.l || u.k - u.e >= u.l || u.s > 16 || u.s != u.k / u.l || u.s != Math.ceil(u.e / u.l) || u.d != u.q / 6 || u.u != 12 && u.u != 14 && u.u != 16 || u.C != 16 && u.C != 0) { + throw "Invalid data"; + } + if (u.i == 0) { + throw "Not implemented. We need this file!"; + } + u.h = u.C == 16; + u.m = (u.h ? u.l * 2 / 3 : u.l >>> 1) | 0; + u.A = u.m + 2; + u.f = 64; + u.g = (1 << u.u) - 1; + u.n = 4 * u.u; + return u; + } + function a7(t3, Z2) { + var u = new Array(Z2.s), e = 4 * Z2.s, Q3 = 16 + e; + if (e & 12) Q3 += 16 - (e & 12); + for (var V = 0, O = 16; V < Z2.s; O += 4) { + var o = UTIF2._binBE.readUint(t3, O); + u[V] = t3.slice(Q3, Q3 + o); + u[V].j = 0; + u[V].a = 0; + Q3 += o; + V++; + } + if (Q3 != t3.length) throw "Invalid data"; + return u; + } + function a6(t3, Z2) { + for (var u = -Z2[4], e = 0; u <= Z2[4]; e++, u++) { + t3[e] = u <= -Z2[3] ? -4 : u <= -Z2[2] ? -3 : u <= -Z2[1] ? -2 : u < -Z2[0] ? -1 : u <= Z2[0] ? 0 : u < Z2[1] ? 1 : u < Z2[2] ? 2 : u < Z2[3] ? 3 : 4; + } + } + function a1(t3, Z2, u) { + var e = [Z2, 3 * Z2 + 18, 5 * Z2 + 67, 7 * Z2 + 276, u]; + t3.o = Z2; + t3.w = (e[4] + 2 * Z2) / (2 * Z2 + 1) + 1 | 0; + t3.v = Math.ceil(Math.log2(t3.w)); + t3.t = 9; + a6(t3.c, e); + } + function a2(t3) { + var Z2 = { c: new Int8Array(2 << t3.u) }; + a1(Z2, 0, t3.g); + return Z2; + } + function D(t3) { + var Z2 = [[], [], []], u = Math.max(2, t3.w + 32 >>> 6); + for (var e = 0; e < 3; e++) { + for (var Q3 = 0; Q3 < 41; Q3++) { + Z2[e][Q3] = [u, 1]; + } + } + return Z2; + } + function a4(t3) { + for (var Z2 = -1, u = 0; !u; Z2++) { + u = t3[t3.j] >>> 7 - t3.a & 1; + t3.a++; + t3.a &= 7; + if (!t3.a) t3.j++; + } + return Z2; + } + function K(t3, Z2) { + var u = 0, e = 8 - t3.a, Q3 = t3.j, V = t3.a; + if (Z2) { + if (Z2 >= e) { + do { + u <<= e; + Z2 -= e; + u |= t3[t3.j] & (1 << e) - 1; + t3.j++; + e = 8; + } while (Z2 >= 8); + } + if (Z2) { + u <<= Z2; + e -= Z2; + u |= t3[t3.j] >>> e & (1 << Z2) - 1; + } + t3.a = 8 - e; + } + return u; + } + function a0(t3, Z2) { + var u = 0; + if (Z2 < t3) { + while (u <= 14 && Z2 << ++u < t3) ; + } + return u; + } + function r(t3, Z2, u, e, Q3, V, O, o) { + if (o == null) o = 0; + var X2 = V + 1, k2 = X2 % 2, j = 0, I2 = 0, a10 = 0, l2, R4, w = e[Q3], S = e[Q3 - 1], H = e[Q3 - 2][X2], g2 = S[X2 - 1], Y2 = S[X2], P = S[X2 + 1], A2 = w[X2 - 1], v = w[X2 + 1], y2 = Math.abs, d, C2, n2, h; + if (k2) { + d = y2(P - Y2); + C2 = y2(H - Y2); + n2 = y2(g2 - Y2); + } + if (k2) { + h = d > n2 && C2 < d ? H + g2 : d < n2 && C2 < n2 ? H + P : P + g2; + h = h + 2 * Y2 >>> 2; + if (o) { + w[X2] = h; + return; + } + l2 = Z2.t * Z2.c[t3.g + Y2 - H] + Z2.c[t3.g + g2 - Y2]; + } else { + h = Y2 > g2 && Y2 > P || Y2 < g2 && Y2 < P ? v + A2 + 2 * Y2 >>> 2 : A2 + v >>> 1; + l2 = Z2.t * Z2.c[t3.g + Y2 - g2] + Z2.c[t3.g + g2 - A2]; + } + R4 = y2(l2); + var W = a4(u); + if (W < t3.n - Z2.v - 1) { + var z = a0(O[R4][0], O[R4][1]); + a10 = K(u, z) + (W << z); + } else { + a10 = K(u, Z2.v) + 1; + } + a10 = a10 & 1 ? -1 - (a10 >>> 1) : a10 >>> 1; + O[R4][0] += y2(a10); + if (O[R4][1] == t3.f) { + O[R4][0] >>>= 1; + O[R4][1] >>>= 1; + } + O[R4][1]++; + h = l2 < 0 ? h - a10 : h + a10; + if (t3.i) { + if (h < 0) h += Z2.w; + else if (h > t3.g) h -= Z2.w; + } + w[X2] = h >= 0 ? Math.min(h, t3.g) : 0; + } + function U(t3, Z2, u) { + var e = t3[0].length; + for (var Q3 = Z2; Q3 <= u; Q3++) { + t3[Q3][0] = t3[Q3 - 1][1]; + t3[Q3][e - 1] = t3[Q3 - 1][e - 2]; + } + } + function B2(t3) { + U(t3, s, q2); + U(t3, i, J); + U(t3, x2, $2); + } + function _(t3, Z2, u, e, Q3, V, O, o, X2, k2, j, I2, a10) { + var l2 = 0, R4 = 1, w = Q3 < M && Q3 > J; + while (R4 < t3.m) { + if (l2 < t3.m) { + r(t3, Z2, u, e, Q3, l2, O[X2], t3.h && (w && k2 || !w && (j || (l2 & I2) == a10))); + r(t3, Z2, u, e, V, l2, O[X2], t3.h && (!w && k2 || w && (j || (l2 & I2) == a10))); + l2 += 2; + } + if (l2 > 8) { + r(t3, Z2, u, e, Q3, R4, o[X2]); + r(t3, Z2, u, e, V, R4, o[X2]); + R4 += 2; + } + } + B2(e); + } + function a8(t3, Z2, u, e, Q3, V) { + _(t3, Z2, u, e, i, s, Q3, V, 0, 0, 1, 0, 8); + _(t3, Z2, u, e, c2, x2, Q3, V, 1, 0, 1, 0, 8); + _(t3, Z2, u, e, b3, T, Q3, V, 2, 1, 0, 3, 0); + _(t3, Z2, u, e, a3, L, Q3, V, 0, 0, 0, 3, 2); + _(t3, Z2, u, e, J, f, Q3, V, 1, 0, 0, 3, 2); + _(t3, Z2, u, e, q2, $2, Q3, V, 2, 1, 0, 3, 0); + } + function a9(t3, Z2, u, e, Q3, V) { + var O = V.length, o = t3.l; + if (Q3 + 1 == t3.s) o = t3.e - Q3 * t3.l; + var X2 = 6 * t3.e * e + Q3 * t3.l; + for (var k2 = 0; k2 < 6; k2++) { + for (var j = 0; j < o; j++) { + var I2 = V[k2 % O][j % O], a10; + if (I2 == 0) { + a10 = i + (k2 >>> 1); + } else if (I2 == 2) { + a10 = x2 + (k2 >>> 1); + } else { + a10 = s + k2; + } + var l2 = t3.h ? (j * 2 / 3 & 2147483646 | j % 3 & 1) + (j % 3 >>> 1) : j >>> 1; + Z2[X2 + j] = u[a10][l2 + 1]; + } + X2 += t3.e; + } + } + UTIF2._decompressRAF = function(t3, Z2) { + var u = a5(t3), e = a7(t3, u), Q3 = a2(u), V = new Int16Array(u.e * u.q); + if (Z2 == null) { + Z2 = u.h ? [[1, 1, 0, 1, 1, 2], [1, 1, 2, 1, 1, 0], [2, 0, 1, 0, 2, 1], [1, 1, 2, 1, 1, 0], [1, 1, 0, 1, 1, 2], [0, 2, 1, 2, 0, 1]] : [[0, 1], [3, 2]]; + } + var O = [[G, b3], [F2, J], [N, f], [E2, q2], [M, L], [m, $2]], o = []; + for (var X2 = 0; X2 < p2; X2++) { + o[X2] = new Uint16Array(u.A); + } + for (var k2 = 0; k2 < u.s; k2++) { + var j = D(Q3), I2 = D(Q3); + for (var X2 = 0; X2 < p2; X2++) { + for (var a10 = 0; a10 < u.A; a10++) { + o[X2][a10] = 0; + } + } + for (var l2 = 0; l2 < u.d; l2++) { + a8(u, Q3, e[k2], o, j, I2); + for (var X2 = 0; X2 < 6; X2++) { + for (var a10 = 0; a10 < u.A; a10++) { + o[O[X2][0]][a10] = o[O[X2][1]][a10]; + } + } + a9(u, V, o, l2, k2, Z2); + for (var X2 = i; X2 < p2; X2++) { + if ([N, E2, M, m].indexOf(X2) == -1) { + for (var a10 = 0; a10 < u.A; a10++) { + o[X2][a10] = 0; + } + } + } + B2(o); + } + } + return V; + }; +})(); +var utif_module_default = UTIF2; + +// node_modules/three/examples/jsm/loaders/TIFFLoader.js +var TIFFLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer) { + const ifds = utif_module_default.decode(buffer); + utif_module_default.decodeImage(buffer, ifds[0]); + const rgba = utif_module_default.toRGBA8(ifds[0]); + return { + width: ifds[0].width, + height: ifds[0].height, + data: rgba, + flipY: true, + magFilter: LinearFilter, + minFilter: LinearMipmapLinearFilter + }; + } +}; + +// node_modules/three/examples/jsm/libs/opentype.module.js +if (!String.prototype.codePointAt) { + (function() { + var defineProperty = function() { + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }(); + var codePointAt = function(position2) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size2 = string.length; + var index2 = position2 ? Number(position2) : 0; + if (index2 != index2) { + index2 = 0; + } + if (index2 < 0 || index2 >= size2) { + return void 0; + } + var first2 = string.charCodeAt(index2); + var second; + if ( + // check if it’s the start of a surrogate pair + first2 >= 55296 && first2 <= 56319 && // high surrogate + size2 > index2 + 1 + ) { + second = string.charCodeAt(index2 + 1); + if (second >= 56320 && second <= 57343) { + return (first2 - 55296) * 1024 + second - 56320 + 65536; + } + } + return first2; + }; + if (defineProperty) { + defineProperty(String.prototype, "codePointAt", { + "value": codePointAt, + "configurable": true, + "writable": true + }); + } else { + String.prototype.codePointAt = codePointAt; + } + })(); +} +var TINF_OK = 0; +var TINF_DATA_ERROR = -3; +function Tree() { + this.table = new Uint16Array(16); + this.trans = new Uint16Array(288); +} +function Data(source, dest) { + this.source = source; + this.sourceIndex = 0; + this.tag = 0; + this.bitcount = 0; + this.dest = dest; + this.destLen = 0; + this.ltree = new Tree(); + this.dtree = new Tree(); +} +var sltree = new Tree(); +var sdtree = new Tree(); +var length_bits = new Uint8Array(30); +var length_base = new Uint16Array(30); +var dist_bits = new Uint8Array(30); +var dist_base = new Uint16Array(30); +var clcidx = new Uint8Array([ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 +]); +var code_tree = new Tree(); +var lengths = new Uint8Array(288 + 32); +function tinf_build_bits_base(bits2, base, delta, first2) { + var i, sum2; + for (i = 0; i < delta; ++i) { + bits2[i] = 0; + } + for (i = 0; i < 30 - delta; ++i) { + bits2[i + delta] = i / delta | 0; + } + for (sum2 = first2, i = 0; i < 30; ++i) { + base[i] = sum2; + sum2 += 1 << bits2[i]; + } +} +function tinf_build_fixed_trees(lt, dt2) { + var i; + for (i = 0; i < 7; ++i) { + lt.table[i] = 0; + } + lt.table[7] = 24; + lt.table[8] = 152; + lt.table[9] = 112; + for (i = 0; i < 24; ++i) { + lt.trans[i] = 256 + i; + } + for (i = 0; i < 144; ++i) { + lt.trans[24 + i] = i; + } + for (i = 0; i < 8; ++i) { + lt.trans[24 + 144 + i] = 280 + i; + } + for (i = 0; i < 112; ++i) { + lt.trans[24 + 144 + 8 + i] = 144 + i; + } + for (i = 0; i < 5; ++i) { + dt2.table[i] = 0; + } + dt2.table[5] = 32; + for (i = 0; i < 32; ++i) { + dt2.trans[i] = i; + } +} +var offs = new Uint16Array(16); +function tinf_build_tree(t3, lengths2, off, num) { + var i, sum2; + for (i = 0; i < 16; ++i) { + t3.table[i] = 0; + } + for (i = 0; i < num; ++i) { + t3.table[lengths2[off + i]]++; + } + t3.table[0] = 0; + for (sum2 = 0, i = 0; i < 16; ++i) { + offs[i] = sum2; + sum2 += t3.table[i]; + } + for (i = 0; i < num; ++i) { + if (lengths2[off + i]) { + t3.trans[offs[lengths2[off + i]]++] = i; + } + } +} +function tinf_getbit(d) { + if (!d.bitcount--) { + d.tag = d.source[d.sourceIndex++]; + d.bitcount = 7; + } + var bit = d.tag & 1; + d.tag >>>= 1; + return bit; +} +function tinf_read_bits(d, num, base) { + if (!num) { + return base; + } + while (d.bitcount < 24) { + d.tag |= d.source[d.sourceIndex++] << d.bitcount; + d.bitcount += 8; + } + var val2 = d.tag & 65535 >>> 16 - num; + d.tag >>>= num; + d.bitcount -= num; + return val2 + base; +} +function tinf_decode_symbol(d, t3) { + while (d.bitcount < 24) { + d.tag |= d.source[d.sourceIndex++] << d.bitcount; + d.bitcount += 8; + } + var sum2 = 0, cur = 0, len = 0; + var tag = d.tag; + do { + cur = 2 * cur + (tag & 1); + tag >>>= 1; + ++len; + sum2 += t3.table[len]; + cur -= t3.table[len]; + } while (cur >= 0); + d.tag = tag; + d.bitcount -= len; + return t3.trans[sum2 + cur]; +} +function tinf_decode_trees(d, lt, dt2) { + var hlit, hdist, hclen; + var i, num, length2; + hlit = tinf_read_bits(d, 5, 257); + hdist = tinf_read_bits(d, 5, 1); + hclen = tinf_read_bits(d, 4, 4); + for (i = 0; i < 19; ++i) { + lengths[i] = 0; + } + for (i = 0; i < hclen; ++i) { + var clen2 = tinf_read_bits(d, 3, 0); + lengths[clcidx[i]] = clen2; + } + tinf_build_tree(code_tree, lengths, 0, 19); + for (num = 0; num < hlit + hdist; ) { + var sym = tinf_decode_symbol(d, code_tree); + switch (sym) { + case 16: + var prev = lengths[num - 1]; + for (length2 = tinf_read_bits(d, 2, 3); length2; --length2) { + lengths[num++] = prev; + } + break; + case 17: + for (length2 = tinf_read_bits(d, 3, 3); length2; --length2) { + lengths[num++] = 0; + } + break; + case 18: + for (length2 = tinf_read_bits(d, 7, 11); length2; --length2) { + lengths[num++] = 0; + } + break; + default: + lengths[num++] = sym; + break; + } + } + tinf_build_tree(lt, lengths, 0, hlit); + tinf_build_tree(dt2, lengths, hlit, hdist); +} +function tinf_inflate_block_data(d, lt, dt2) { + while (1) { + var sym = tinf_decode_symbol(d, lt); + if (sym === 256) { + return TINF_OK; + } + if (sym < 256) { + d.dest[d.destLen++] = sym; + } else { + var length2, dist, offs2; + var i; + sym -= 257; + length2 = tinf_read_bits(d, length_bits[sym], length_base[sym]); + dist = tinf_decode_symbol(d, dt2); + offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); + for (i = offs2; i < offs2 + length2; ++i) { + d.dest[d.destLen++] = d.dest[i]; + } + } + } +} +function tinf_inflate_uncompressed_block(d) { + var length2, invlength; + var i; + while (d.bitcount > 8) { + d.sourceIndex--; + d.bitcount -= 8; + } + length2 = d.source[d.sourceIndex + 1]; + length2 = 256 * length2 + d.source[d.sourceIndex]; + invlength = d.source[d.sourceIndex + 3]; + invlength = 256 * invlength + d.source[d.sourceIndex + 2]; + if (length2 !== (~invlength & 65535)) { + return TINF_DATA_ERROR; + } + d.sourceIndex += 4; + for (i = length2; i; --i) { + d.dest[d.destLen++] = d.source[d.sourceIndex++]; + } + d.bitcount = 0; + return TINF_OK; +} +function tinf_uncompress(source, dest) { + var d = new Data(source, dest); + var bfinal, btype, res; + do { + bfinal = tinf_getbit(d); + btype = tinf_read_bits(d, 2, 0); + switch (btype) { + case 0: + res = tinf_inflate_uncompressed_block(d); + break; + case 1: + res = tinf_inflate_block_data(d, sltree, sdtree); + break; + case 2: + tinf_decode_trees(d, d.ltree, d.dtree); + res = tinf_inflate_block_data(d, d.ltree, d.dtree); + break; + default: + res = TINF_DATA_ERROR; + } + if (res !== TINF_OK) { + throw new Error("Data error"); + } + } while (!bfinal); + if (d.destLen < d.dest.length) { + if (typeof d.dest.slice === "function") { + return d.dest.slice(0, d.destLen); + } else { + return d.dest.subarray(0, d.destLen); + } + } + return d.dest; +} +tinf_build_fixed_trees(sltree, sdtree); +tinf_build_bits_base(length_bits, length_base, 4, 3); +tinf_build_bits_base(dist_bits, dist_base, 2, 1); +length_bits[28] = 0; +length_base[28] = 258; +var tinyInflate = tinf_uncompress; +function derive(v0, v12, v2, v3, t3) { + return Math.pow(1 - t3, 3) * v0 + 3 * Math.pow(1 - t3, 2) * t3 * v12 + 3 * (1 - t3) * Math.pow(t3, 2) * v2 + Math.pow(t3, 3) * v3; +} +function BoundingBox() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; +} +BoundingBox.prototype.isEmpty = function() { + return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2); +}; +BoundingBox.prototype.addPoint = function(x2, y2) { + if (typeof x2 === "number") { + if (isNaN(this.x1) || isNaN(this.x2)) { + this.x1 = x2; + this.x2 = x2; + } + if (x2 < this.x1) { + this.x1 = x2; + } + if (x2 > this.x2) { + this.x2 = x2; + } + } + if (typeof y2 === "number") { + if (isNaN(this.y1) || isNaN(this.y2)) { + this.y1 = y2; + this.y2 = y2; + } + if (y2 < this.y1) { + this.y1 = y2; + } + if (y2 > this.y2) { + this.y2 = y2; + } + } +}; +BoundingBox.prototype.addX = function(x2) { + this.addPoint(x2, null); +}; +BoundingBox.prototype.addY = function(y2) { + this.addPoint(null, y2); +}; +BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x3, y3) { + var p0 = [x0, y0]; + var p1 = [x1, y1]; + var p2 = [x2, y2]; + var p3 = [x3, y3]; + this.addPoint(x0, y0); + this.addPoint(x3, y3); + for (var i = 0; i <= 1; i++) { + var b3 = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + var a2 = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + var c2 = 3 * p1[i] - 3 * p0[i]; + if (a2 === 0) { + if (b3 === 0) { + continue; + } + var t3 = -c2 / b3; + if (0 < t3 && t3 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t3)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t3)); + } + } + continue; + } + var b2ac = Math.pow(b3, 2) - 4 * c2 * a2; + if (b2ac < 0) { + continue; + } + var t1 = (-b3 + Math.sqrt(b2ac)) / (2 * a2); + if (0 < t1 && t1 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1)); + } + } + var t22 = (-b3 - Math.sqrt(b2ac)) / (2 * a2); + if (0 < t22 && t22 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t22)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t22)); + } + } + } +}; +BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x2, y2) { + var cp1x = x0 + 2 / 3 * (x1 - x0); + var cp1y = y0 + 2 / 3 * (y1 - y0); + var cp2x = cp1x + 1 / 3 * (x2 - x0); + var cp2y = cp1y + 1 / 3 * (y2 - y0); + this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x2, y2); +}; +function Path2() { + this.commands = []; + this.fill = "black"; + this.stroke = null; + this.strokeWidth = 1; +} +Path2.prototype.moveTo = function(x2, y2) { + this.commands.push({ + type: "M", + x: x2, + y: y2 + }); +}; +Path2.prototype.lineTo = function(x2, y2) { + this.commands.push({ + type: "L", + x: x2, + y: y2 + }); +}; +Path2.prototype.curveTo = Path2.prototype.bezierCurveTo = function(x1, y1, x2, y2, x3, y3) { + this.commands.push({ + type: "C", + x1, + y1, + x2, + y2, + x: x3, + y: y3 + }); +}; +Path2.prototype.quadTo = Path2.prototype.quadraticCurveTo = function(x1, y1, x2, y2) { + this.commands.push({ + type: "Q", + x1, + y1, + x: x2, + y: y2 + }); +}; +Path2.prototype.close = Path2.prototype.closePath = function() { + this.commands.push({ + type: "Z" + }); +}; +Path2.prototype.extend = function(pathOrCommands) { + if (pathOrCommands.commands) { + pathOrCommands = pathOrCommands.commands; + } else if (pathOrCommands instanceof BoundingBox) { + var box = pathOrCommands; + this.moveTo(box.x1, box.y1); + this.lineTo(box.x2, box.y1); + this.lineTo(box.x2, box.y2); + this.lineTo(box.x1, box.y2); + this.close(); + return; + } + Array.prototype.push.apply(this.commands, pathOrCommands); +}; +Path2.prototype.getBoundingBox = function() { + var box = new BoundingBox(); + var startX = 0; + var startY = 0; + var prevX = 0; + var prevY = 0; + for (var i = 0; i < this.commands.length; i++) { + var cmd = this.commands[i]; + switch (cmd.type) { + case "M": + box.addPoint(cmd.x, cmd.y); + startX = prevX = cmd.x; + startY = prevY = cmd.y; + break; + case "L": + box.addPoint(cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "Q": + box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "C": + box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "Z": + prevX = startX; + prevY = startY; + break; + default: + throw new Error("Unexpected path command " + cmd.type); + } + } + if (box.isEmpty()) { + box.addPoint(0, 0); + } + return box; +}; +Path2.prototype.draw = function(ctx) { + ctx.beginPath(); + for (var i = 0; i < this.commands.length; i += 1) { + var cmd = this.commands[i]; + if (cmd.type === "M") { + ctx.moveTo(cmd.x, cmd.y); + } else if (cmd.type === "L") { + ctx.lineTo(cmd.x, cmd.y); + } else if (cmd.type === "C") { + ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + } else if (cmd.type === "Q") { + ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y); + } else if (cmd.type === "Z") { + ctx.closePath(); + } + } + if (this.fill) { + ctx.fillStyle = this.fill; + ctx.fill(); + } + if (this.stroke) { + ctx.strokeStyle = this.stroke; + ctx.lineWidth = this.strokeWidth; + ctx.stroke(); + } +}; +Path2.prototype.toPathData = function(decimalPlaces) { + decimalPlaces = decimalPlaces !== void 0 ? decimalPlaces : 2; + function floatToString(v) { + if (Math.round(v) === v) { + return "" + Math.round(v); + } else { + return v.toFixed(decimalPlaces); + } + } + function packValues() { + var arguments$1 = arguments; + var s = ""; + for (var i2 = 0; i2 < arguments.length; i2 += 1) { + var v = arguments$1[i2]; + if (v >= 0 && i2 > 0) { + s += " "; + } + s += floatToString(v); + } + return s; + } + var d = ""; + for (var i = 0; i < this.commands.length; i += 1) { + var cmd = this.commands[i]; + if (cmd.type === "M") { + d += "M" + packValues(cmd.x, cmd.y); + } else if (cmd.type === "L") { + d += "L" + packValues(cmd.x, cmd.y); + } else if (cmd.type === "C") { + d += "C" + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + } else if (cmd.type === "Q") { + d += "Q" + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y); + } else if (cmd.type === "Z") { + d += "Z"; + } + } + return d; +}; +Path2.prototype.toSVG = function(decimalPlaces) { + var svg = '= 0 && v <= 255, "Byte value should be between 0 and 255."); + return [v]; +}; +sizeOf.BYTE = constant(1); +encode.CHAR = function(v) { + return [v.charCodeAt(0)]; +}; +sizeOf.CHAR = constant(1); +encode.CHARARRAY = function(v) { + if (typeof v === "undefined") { + v = ""; + console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."); + } + var b3 = []; + for (var i = 0; i < v.length; i += 1) { + b3[i] = v.charCodeAt(i); + } + return b3; +}; +sizeOf.CHARARRAY = function(v) { + if (typeof v === "undefined") { + return 0; + } + return v.length; +}; +encode.USHORT = function(v) { + return [v >> 8 & 255, v & 255]; +}; +sizeOf.USHORT = constant(2); +encode.SHORT = function(v) { + if (v >= LIMIT16) { + v = -(2 * LIMIT16 - v); + } + return [v >> 8 & 255, v & 255]; +}; +sizeOf.SHORT = constant(2); +encode.UINT24 = function(v) { + return [v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.UINT24 = constant(3); +encode.ULONG = function(v) { + return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.ULONG = constant(4); +encode.LONG = function(v) { + if (v >= LIMIT32) { + v = -(2 * LIMIT32 - v); + } + return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.LONG = constant(4); +encode.FIXED = encode.ULONG; +sizeOf.FIXED = sizeOf.ULONG; +encode.FWORD = encode.SHORT; +sizeOf.FWORD = sizeOf.SHORT; +encode.UFWORD = encode.USHORT; +sizeOf.UFWORD = sizeOf.USHORT; +encode.LONGDATETIME = function(v) { + return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.LONGDATETIME = constant(8); +encode.TAG = function(v) { + check.argument(v.length === 4, "Tag should be exactly 4 ASCII characters."); + return [ + v.charCodeAt(0), + v.charCodeAt(1), + v.charCodeAt(2), + v.charCodeAt(3) + ]; +}; +sizeOf.TAG = constant(4); +encode.Card8 = encode.BYTE; +sizeOf.Card8 = sizeOf.BYTE; +encode.Card16 = encode.USHORT; +sizeOf.Card16 = sizeOf.USHORT; +encode.OffSize = encode.BYTE; +sizeOf.OffSize = sizeOf.BYTE; +encode.SID = encode.USHORT; +sizeOf.SID = sizeOf.USHORT; +encode.NUMBER = function(v) { + if (v >= -107 && v <= 107) { + return [v + 139]; + } else if (v >= 108 && v <= 1131) { + v = v - 108; + return [(v >> 8) + 247, v & 255]; + } else if (v >= -1131 && v <= -108) { + v = -v - 108; + return [(v >> 8) + 251, v & 255]; + } else if (v >= -32768 && v <= 32767) { + return encode.NUMBER16(v); + } else { + return encode.NUMBER32(v); + } +}; +sizeOf.NUMBER = function(v) { + return encode.NUMBER(v).length; +}; +encode.NUMBER16 = function(v) { + return [28, v >> 8 & 255, v & 255]; +}; +sizeOf.NUMBER16 = constant(3); +encode.NUMBER32 = function(v) { + return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.NUMBER32 = constant(5); +encode.REAL = function(v) { + var value2 = v.toString(); + var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value2); + if (m) { + var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); + value2 = (Math.round(v * epsilon) / epsilon).toString(); + } + var nibbles = ""; + for (var i = 0, ii = value2.length; i < ii; i += 1) { + var c2 = value2[i]; + if (c2 === "e") { + nibbles += value2[++i] === "-" ? "c" : "b"; + } else if (c2 === ".") { + nibbles += "a"; + } else if (c2 === "-") { + nibbles += "e"; + } else { + nibbles += c2; + } + } + nibbles += nibbles.length & 1 ? "f" : "ff"; + var out = [30]; + for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) { + out.push(parseInt(nibbles.substr(i$1, 2), 16)); + } + return out; +}; +sizeOf.REAL = function(v) { + return encode.REAL(v).length; +}; +encode.NAME = encode.CHARARRAY; +sizeOf.NAME = sizeOf.CHARARRAY; +encode.STRING = encode.CHARARRAY; +sizeOf.STRING = sizeOf.CHARARRAY; +decode.UTF8 = function(data2, offset, numBytes) { + var codePoints = []; + var numChars = numBytes; + for (var j = 0; j < numChars; j++, offset += 1) { + codePoints[j] = data2.getUint8(offset); + } + return String.fromCharCode.apply(null, codePoints); +}; +decode.UTF16 = function(data2, offset, numBytes) { + var codePoints = []; + var numChars = numBytes / 2; + for (var j = 0; j < numChars; j++, offset += 2) { + codePoints[j] = data2.getUint16(offset); + } + return String.fromCharCode.apply(null, codePoints); +}; +encode.UTF16 = function(v) { + var b3 = []; + for (var i = 0; i < v.length; i += 1) { + var codepoint = v.charCodeAt(i); + b3[b3.length] = codepoint >> 8 & 255; + b3[b3.length] = codepoint & 255; + } + return b3; +}; +sizeOf.UTF16 = function(v) { + return v.length * 2; +}; +var eightBitMacEncodings = { + "x-mac-croatian": ( + // Python: 'mac_croatian' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" + ), + "x-mac-cyrillic": ( + // Python: 'mac_cyrillic' + "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю" + ), + "x-mac-gaelic": ( + // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ" + ), + "x-mac-greek": ( + // Python: 'mac_greek' + "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­" + ), + "x-mac-icelandic": ( + // Python: 'mac_iceland' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-inuit": ( + // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT + "ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł" + ), + "x-mac-ce": ( + // Python: 'mac_latin2' + "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" + ), + macintosh: ( + // Python: 'mac_roman' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-romanian": ( + // Python: 'mac_romanian' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-turkish": ( + // Python: 'mac_turkish' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ" + ) +}; +decode.MACSTRING = function(dataView, offset, dataLength, encoding) { + var table2 = eightBitMacEncodings[encoding]; + if (table2 === void 0) { + return void 0; + } + var result = ""; + for (var i = 0; i < dataLength; i++) { + var c2 = dataView.getUint8(offset + i); + if (c2 <= 127) { + result += String.fromCharCode(c2); + } else { + result += table2[c2 & 127]; + } + } + return result; +}; +var macEncodingTableCache = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); +var macEncodingCacheKeys; +var getMacEncodingTable = function(encoding) { + if (!macEncodingCacheKeys) { + macEncodingCacheKeys = {}; + for (var e in eightBitMacEncodings) { + macEncodingCacheKeys[e] = new String(e); + } + } + var cacheKey = macEncodingCacheKeys[encoding]; + if (cacheKey === void 0) { + return void 0; + } + if (macEncodingTableCache) { + var cachedTable = macEncodingTableCache.get(cacheKey); + if (cachedTable !== void 0) { + return cachedTable; + } + } + var decodingTable = eightBitMacEncodings[encoding]; + if (decodingTable === void 0) { + return void 0; + } + var encodingTable = {}; + for (var i = 0; i < decodingTable.length; i++) { + encodingTable[decodingTable.charCodeAt(i)] = i + 128; + } + if (macEncodingTableCache) { + macEncodingTableCache.set(cacheKey, encodingTable); + } + return encodingTable; +}; +encode.MACSTRING = function(str, encoding) { + var table2 = getMacEncodingTable(encoding); + if (table2 === void 0) { + return void 0; + } + var result = []; + for (var i = 0; i < str.length; i++) { + var c2 = str.charCodeAt(i); + if (c2 >= 128) { + c2 = table2[c2]; + if (c2 === void 0) { + return void 0; + } + } + result[i] = c2; + } + return result; +}; +sizeOf.MACSTRING = function(str, encoding) { + var b3 = encode.MACSTRING(str, encoding); + if (b3 !== void 0) { + return b3.length; + } else { + return 0; + } +}; +function isByteEncodable(value2) { + return value2 >= -128 && value2 <= 127; +} +function encodeVarDeltaRunAsZeroes(deltas, pos, result) { + var runLength = 0; + var numDeltas = deltas.length; + while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) { + ++pos; + ++runLength; + } + result.push(128 | runLength - 1); + return pos; +} +function encodeVarDeltaRunAsBytes(deltas, offset, result) { + var runLength = 0; + var numDeltas = deltas.length; + var pos = offset; + while (pos < numDeltas && runLength < 64) { + var value2 = deltas[pos]; + if (!isByteEncodable(value2)) { + break; + } + if (value2 === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) { + break; + } + ++pos; + ++runLength; + } + result.push(runLength - 1); + for (var i = offset; i < pos; ++i) { + result.push(deltas[i] + 256 & 255); + } + return pos; +} +function encodeVarDeltaRunAsWords(deltas, offset, result) { + var runLength = 0; + var numDeltas = deltas.length; + var pos = offset; + while (pos < numDeltas && runLength < 64) { + var value2 = deltas[pos]; + if (value2 === 0) { + break; + } + if (isByteEncodable(value2) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) { + break; + } + ++pos; + ++runLength; + } + result.push(64 | runLength - 1); + for (var i = offset; i < pos; ++i) { + var val2 = deltas[i]; + result.push(val2 + 65536 >> 8 & 255, val2 + 256 & 255); + } + return pos; +} +encode.VARDELTAS = function(deltas) { + var pos = 0; + var result = []; + while (pos < deltas.length) { + var value2 = deltas[pos]; + if (value2 === 0) { + pos = encodeVarDeltaRunAsZeroes(deltas, pos, result); + } else if (value2 >= -128 && value2 <= 127) { + pos = encodeVarDeltaRunAsBytes(deltas, pos, result); + } else { + pos = encodeVarDeltaRunAsWords(deltas, pos, result); + } + } + return result; +}; +encode.INDEX = function(l2) { + var offset = 1; + var offsets = [offset]; + var data2 = []; + for (var i = 0; i < l2.length; i += 1) { + var v = encode.OBJECT(l2[i]); + Array.prototype.push.apply(data2, v); + offset += v.length; + offsets.push(offset); + } + if (data2.length === 0) { + return [0, 0]; + } + var encodedOffsets = []; + var offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0; + var offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize]; + for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) { + var encodedOffset = offsetEncoder(offsets[i$1]); + Array.prototype.push.apply(encodedOffsets, encodedOffset); + } + return Array.prototype.concat( + encode.Card16(l2.length), + encode.OffSize(offSize), + encodedOffsets, + data2 + ); +}; +sizeOf.INDEX = function(v) { + return encode.INDEX(v).length; +}; +encode.DICT = function(m) { + var d = []; + var keys2 = Object.keys(m); + var length2 = keys2.length; + for (var i = 0; i < length2; i += 1) { + var k2 = parseInt(keys2[i], 0); + var v = m[k2]; + d = d.concat(encode.OPERAND(v.value, v.type)); + d = d.concat(encode.OPERATOR(k2)); + } + return d; +}; +sizeOf.DICT = function(m) { + return encode.DICT(m).length; +}; +encode.OPERATOR = function(v) { + if (v < 1200) { + return [v]; + } else { + return [12, v - 1200]; + } +}; +encode.OPERAND = function(v, type) { + var d = []; + if (Array.isArray(type)) { + for (var i = 0; i < type.length; i += 1) { + check.argument(v.length === type.length, "Not enough arguments given for type" + type); + d = d.concat(encode.OPERAND(v[i], type[i])); + } + } else { + if (type === "SID") { + d = d.concat(encode.NUMBER(v)); + } else if (type === "offset") { + d = d.concat(encode.NUMBER32(v)); + } else if (type === "number") { + d = d.concat(encode.NUMBER(v)); + } else if (type === "real") { + d = d.concat(encode.REAL(v)); + } else { + throw new Error("Unknown operand type " + type); + } + } + return d; +}; +encode.OP = encode.BYTE; +sizeOf.OP = sizeOf.BYTE; +var wmm = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); +encode.CHARSTRING = function(ops) { + if (wmm) { + var cachedValue = wmm.get(ops); + if (cachedValue !== void 0) { + return cachedValue; + } + } + var d = []; + var length2 = ops.length; + for (var i = 0; i < length2; i += 1) { + var op = ops[i]; + d = d.concat(encode[op.type](op.value)); + } + if (wmm) { + wmm.set(ops, d); + } + return d; +}; +sizeOf.CHARSTRING = function(ops) { + return encode.CHARSTRING(ops).length; +}; +encode.OBJECT = function(v) { + var encodingFunction = encode[v.type]; + check.argument(encodingFunction !== void 0, "No encoding function for type " + v.type); + return encodingFunction(v.value); +}; +sizeOf.OBJECT = function(v) { + var sizeOfFunction = sizeOf[v.type]; + check.argument(sizeOfFunction !== void 0, "No sizeOf function for type " + v.type); + return sizeOfFunction(v.value); +}; +encode.TABLE = function(table2) { + var d = []; + var length2 = table2.fields.length; + var subtables = []; + var subtableOffsets = []; + for (var i = 0; i < length2; i += 1) { + var field = table2.fields[i]; + var encodingFunction = encode[field.type]; + check.argument(encodingFunction !== void 0, "No encoding function for field type " + field.type + " (" + field.name + ")"); + var value2 = table2[field.name]; + if (value2 === void 0) { + value2 = field.value; + } + var bytes = encodingFunction(value2); + if (field.type === "TABLE") { + subtableOffsets.push(d.length); + d = d.concat([0, 0]); + subtables.push(bytes); + } else { + d = d.concat(bytes); + } + } + for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) { + var o = subtableOffsets[i$1]; + var offset = d.length; + check.argument(offset < 65536, "Table " + table2.tableName + " too big."); + d[o] = offset >> 8; + d[o + 1] = offset & 255; + d = d.concat(subtables[i$1]); + } + return d; +}; +sizeOf.TABLE = function(table2) { + var numBytes = 0; + var length2 = table2.fields.length; + for (var i = 0; i < length2; i += 1) { + var field = table2.fields[i]; + var sizeOfFunction = sizeOf[field.type]; + check.argument(sizeOfFunction !== void 0, "No sizeOf function for field type " + field.type + " (" + field.name + ")"); + var value2 = table2[field.name]; + if (value2 === void 0) { + value2 = field.value; + } + numBytes += sizeOfFunction(value2); + if (field.type === "TABLE") { + numBytes += 2; + } + } + return numBytes; +}; +encode.RECORD = encode.TABLE; +sizeOf.RECORD = sizeOf.TABLE; +encode.LITERAL = function(v) { + return v; +}; +sizeOf.LITERAL = function(v) { + return v.length; +}; +function Table(tableName, fields, options) { + if (fields.length && (fields[0].name !== "coverageFormat" || fields[0].value === 1)) { + for (var i = 0; i < fields.length; i += 1) { + var field = fields[i]; + this[field.name] = field.value; + } + } + this.tableName = tableName; + this.fields = fields; + if (options) { + var optionKeys = Object.keys(options); + for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) { + var k2 = optionKeys[i$1]; + var v = options[k2]; + if (this[k2] !== void 0) { + this[k2] = v; + } + } + } +} +Table.prototype.encode = function() { + return encode.TABLE(this); +}; +Table.prototype.sizeOf = function() { + return sizeOf.TABLE(this); +}; +function ushortList(itemName, list, count) { + if (count === void 0) { + count = list.length; + } + var fields = new Array(list.length + 1); + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < list.length; i++) { + fields[i + 1] = { name: itemName + i, type: "USHORT", value: list[i] }; + } + return fields; +} +function tableList(itemName, records, itemCallback) { + var count = records.length; + var fields = new Array(count + 1); + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < count; i++) { + fields[i + 1] = { name: itemName + i, type: "TABLE", value: itemCallback(records[i], i) }; + } + return fields; +} +function recordList(itemName, records, itemCallback) { + var count = records.length; + var fields = []; + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < count; i++) { + fields = fields.concat(itemCallback(records[i], i)); + } + return fields; +} +function Coverage(coverageTable) { + if (coverageTable.format === 1) { + Table.call( + this, + "coverageTable", + [{ name: "coverageFormat", type: "USHORT", value: 1 }].concat(ushortList("glyph", coverageTable.glyphs)) + ); + } else if (coverageTable.format === 2) { + Table.call( + this, + "coverageTable", + [{ name: "coverageFormat", type: "USHORT", value: 2 }].concat(recordList("rangeRecord", coverageTable.ranges, function(RangeRecord) { + return [ + { name: "startGlyphID", type: "USHORT", value: RangeRecord.start }, + { name: "endGlyphID", type: "USHORT", value: RangeRecord.end }, + { name: "startCoverageIndex", type: "USHORT", value: RangeRecord.index } + ]; + })) + ); + } else { + check.assert(false, "Coverage format must be 1 or 2."); + } +} +Coverage.prototype = Object.create(Table.prototype); +Coverage.prototype.constructor = Coverage; +function ScriptList(scriptListTable) { + Table.call( + this, + "scriptListTable", + recordList("scriptRecord", scriptListTable, function(scriptRecord, i) { + var script = scriptRecord.script; + var defaultLangSys = script.defaultLangSys; + check.assert(!!defaultLangSys, "Unable to write GSUB: script " + scriptRecord.tag + " has no default language system."); + return [ + { name: "scriptTag" + i, type: "TAG", value: scriptRecord.tag }, + { name: "script" + i, type: "TABLE", value: new Table("scriptTable", [ + { name: "defaultLangSys", type: "TABLE", value: new Table("defaultLangSys", [ + { name: "lookupOrder", type: "USHORT", value: 0 }, + { name: "reqFeatureIndex", type: "USHORT", value: defaultLangSys.reqFeatureIndex } + ].concat(ushortList("featureIndex", defaultLangSys.featureIndexes))) } + ].concat(recordList("langSys", script.langSysRecords, function(langSysRecord, i2) { + var langSys = langSysRecord.langSys; + return [ + { name: "langSysTag" + i2, type: "TAG", value: langSysRecord.tag }, + { name: "langSys" + i2, type: "TABLE", value: new Table("langSys", [ + { name: "lookupOrder", type: "USHORT", value: 0 }, + { name: "reqFeatureIndex", type: "USHORT", value: langSys.reqFeatureIndex } + ].concat(ushortList("featureIndex", langSys.featureIndexes))) } + ]; + }))) } + ]; + }) + ); +} +ScriptList.prototype = Object.create(Table.prototype); +ScriptList.prototype.constructor = ScriptList; +function FeatureList(featureListTable) { + Table.call( + this, + "featureListTable", + recordList("featureRecord", featureListTable, function(featureRecord, i) { + var feature = featureRecord.feature; + return [ + { name: "featureTag" + i, type: "TAG", value: featureRecord.tag }, + { name: "feature" + i, type: "TABLE", value: new Table("featureTable", [ + { name: "featureParams", type: "USHORT", value: feature.featureParams } + ].concat(ushortList("lookupListIndex", feature.lookupListIndexes))) } + ]; + }) + ); +} +FeatureList.prototype = Object.create(Table.prototype); +FeatureList.prototype.constructor = FeatureList; +function LookupList(lookupListTable, subtableMakers2) { + Table.call(this, "lookupListTable", tableList("lookup", lookupListTable, function(lookupTable) { + var subtableCallback = subtableMakers2[lookupTable.lookupType]; + check.assert(!!subtableCallback, "Unable to write GSUB lookup type " + lookupTable.lookupType + " tables."); + return new Table("lookupTable", [ + { name: "lookupType", type: "USHORT", value: lookupTable.lookupType }, + { name: "lookupFlag", type: "USHORT", value: lookupTable.lookupFlag } + ].concat(tableList("subtable", lookupTable.subtables, subtableCallback))); + })); +} +LookupList.prototype = Object.create(Table.prototype); +LookupList.prototype.constructor = LookupList; +var table = { + Table, + Record: Table, + Coverage, + ScriptList, + FeatureList, + LookupList, + ushortList, + tableList, + recordList +}; +function getByte(dataView, offset) { + return dataView.getUint8(offset); +} +function getUShort(dataView, offset) { + return dataView.getUint16(offset, false); +} +function getShort(dataView, offset) { + return dataView.getInt16(offset, false); +} +function getULong(dataView, offset) { + return dataView.getUint32(offset, false); +} +function getFixed(dataView, offset) { + var decimal = dataView.getInt16(offset, false); + var fraction = dataView.getUint16(offset + 2, false); + return decimal + fraction / 65535; +} +function getTag(dataView, offset) { + var tag = ""; + for (var i = offset; i < offset + 4; i += 1) { + tag += String.fromCharCode(dataView.getInt8(i)); + } + return tag; +} +function getOffset(dataView, offset, offSize) { + var v = 0; + for (var i = 0; i < offSize; i += 1) { + v <<= 8; + v += dataView.getUint8(offset + i); + } + return v; +} +function getBytes(dataView, startOffset, endOffset) { + var bytes = []; + for (var i = startOffset; i < endOffset; i += 1) { + bytes.push(dataView.getUint8(i)); + } + return bytes; +} +function bytesToString(bytes) { + var s = ""; + for (var i = 0; i < bytes.length; i += 1) { + s += String.fromCharCode(bytes[i]); + } + return s; +} +var typeOffsets = { + byte: 1, + uShort: 2, + short: 2, + uLong: 4, + fixed: 4, + longDateTime: 8, + tag: 4 +}; +function Parser2(data2, offset) { + this.data = data2; + this.offset = offset; + this.relativeOffset = 0; +} +Parser2.prototype.parseByte = function() { + var v = this.data.getUint8(this.offset + this.relativeOffset); + this.relativeOffset += 1; + return v; +}; +Parser2.prototype.parseChar = function() { + var v = this.data.getInt8(this.offset + this.relativeOffset); + this.relativeOffset += 1; + return v; +}; +Parser2.prototype.parseCard8 = Parser2.prototype.parseByte; +Parser2.prototype.parseUShort = function() { + var v = this.data.getUint16(this.offset + this.relativeOffset); + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseCard16 = Parser2.prototype.parseUShort; +Parser2.prototype.parseSID = Parser2.prototype.parseUShort; +Parser2.prototype.parseOffset16 = Parser2.prototype.parseUShort; +Parser2.prototype.parseShort = function() { + var v = this.data.getInt16(this.offset + this.relativeOffset); + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseF2Dot14 = function() { + var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384; + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseULong = function() { + var v = getULong(this.data, this.offset + this.relativeOffset); + this.relativeOffset += 4; + return v; +}; +Parser2.prototype.parseOffset32 = Parser2.prototype.parseULong; +Parser2.prototype.parseFixed = function() { + var v = getFixed(this.data, this.offset + this.relativeOffset); + this.relativeOffset += 4; + return v; +}; +Parser2.prototype.parseString = function(length2) { + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + var string = ""; + this.relativeOffset += length2; + for (var i = 0; i < length2; i++) { + string += String.fromCharCode(dataView.getUint8(offset + i)); + } + return string; +}; +Parser2.prototype.parseTag = function() { + return this.parseString(4); +}; +Parser2.prototype.parseLongDateTime = function() { + var v = getULong(this.data, this.offset + this.relativeOffset + 4); + v -= 2082844800; + this.relativeOffset += 8; + return v; +}; +Parser2.prototype.parseVersion = function(minorBase) { + var major = getUShort(this.data, this.offset + this.relativeOffset); + var minor = getUShort(this.data, this.offset + this.relativeOffset + 2); + this.relativeOffset += 4; + if (minorBase === void 0) { + minorBase = 4096; + } + return major + minor / minorBase / 10; +}; +Parser2.prototype.skip = function(type, amount) { + if (amount === void 0) { + amount = 1; + } + this.relativeOffset += typeOffsets[type] * amount; +}; +Parser2.prototype.parseULongList = function(count) { + if (count === void 0) { + count = this.parseULong(); + } + var offsets = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + offsets[i] = dataView.getUint32(offset); + offset += 4; + } + this.relativeOffset += count * 4; + return offsets; +}; +Parser2.prototype.parseOffset16List = Parser2.prototype.parseUShortList = function(count) { + if (count === void 0) { + count = this.parseUShort(); + } + var offsets = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + offsets[i] = dataView.getUint16(offset); + offset += 2; + } + this.relativeOffset += count * 2; + return offsets; +}; +Parser2.prototype.parseShortList = function(count) { + var list = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + list[i] = dataView.getInt16(offset); + offset += 2; + } + this.relativeOffset += count * 2; + return list; +}; +Parser2.prototype.parseByteList = function(count) { + var list = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + list[i] = dataView.getUint8(offset++); + } + this.relativeOffset += count; + return list; +}; +Parser2.prototype.parseList = function(count, itemCallback) { + if (!itemCallback) { + itemCallback = count; + count = this.parseUShort(); + } + var list = new Array(count); + for (var i = 0; i < count; i++) { + list[i] = itemCallback.call(this); + } + return list; +}; +Parser2.prototype.parseList32 = function(count, itemCallback) { + if (!itemCallback) { + itemCallback = count; + count = this.parseULong(); + } + var list = new Array(count); + for (var i = 0; i < count; i++) { + list[i] = itemCallback.call(this); + } + return list; +}; +Parser2.prototype.parseRecordList = function(count, recordDescription) { + if (!recordDescription) { + recordDescription = count; + count = this.parseUShort(); + } + var records = new Array(count); + var fields = Object.keys(recordDescription); + for (var i = 0; i < count; i++) { + var rec = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = recordDescription[fieldName]; + rec[fieldName] = fieldType.call(this); + } + records[i] = rec; + } + return records; +}; +Parser2.prototype.parseRecordList32 = function(count, recordDescription) { + if (!recordDescription) { + recordDescription = count; + count = this.parseULong(); + } + var records = new Array(count); + var fields = Object.keys(recordDescription); + for (var i = 0; i < count; i++) { + var rec = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = recordDescription[fieldName]; + rec[fieldName] = fieldType.call(this); + } + records[i] = rec; + } + return records; +}; +Parser2.prototype.parseStruct = function(description) { + if (typeof description === "function") { + return description.call(this); + } else { + var fields = Object.keys(description); + var struct = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = description[fieldName]; + struct[fieldName] = fieldType.call(this); + } + return struct; + } +}; +Parser2.prototype.parseValueRecord = function(valueFormat) { + if (valueFormat === void 0) { + valueFormat = this.parseUShort(); + } + if (valueFormat === 0) { + return; + } + var valueRecord = {}; + if (valueFormat & 1) { + valueRecord.xPlacement = this.parseShort(); + } + if (valueFormat & 2) { + valueRecord.yPlacement = this.parseShort(); + } + if (valueFormat & 4) { + valueRecord.xAdvance = this.parseShort(); + } + if (valueFormat & 8) { + valueRecord.yAdvance = this.parseShort(); + } + if (valueFormat & 16) { + valueRecord.xPlaDevice = void 0; + this.parseShort(); + } + if (valueFormat & 32) { + valueRecord.yPlaDevice = void 0; + this.parseShort(); + } + if (valueFormat & 64) { + valueRecord.xAdvDevice = void 0; + this.parseShort(); + } + if (valueFormat & 128) { + valueRecord.yAdvDevice = void 0; + this.parseShort(); + } + return valueRecord; +}; +Parser2.prototype.parseValueRecordList = function() { + var valueFormat = this.parseUShort(); + var valueCount = this.parseUShort(); + var values2 = new Array(valueCount); + for (var i = 0; i < valueCount; i++) { + values2[i] = this.parseValueRecord(valueFormat); + } + return values2; +}; +Parser2.prototype.parsePointer = function(description) { + var structOffset = this.parseOffset16(); + if (structOffset > 0) { + return new Parser2(this.data, this.offset + structOffset).parseStruct(description); + } + return void 0; +}; +Parser2.prototype.parsePointer32 = function(description) { + var structOffset = this.parseOffset32(); + if (structOffset > 0) { + return new Parser2(this.data, this.offset + structOffset).parseStruct(description); + } + return void 0; +}; +Parser2.prototype.parseListOfLists = function(itemCallback) { + var offsets = this.parseOffset16List(); + var count = offsets.length; + var relativeOffset = this.relativeOffset; + var list = new Array(count); + for (var i = 0; i < count; i++) { + var start = offsets[i]; + if (start === 0) { + list[i] = void 0; + continue; + } + this.relativeOffset = start; + if (itemCallback) { + var subOffsets = this.parseOffset16List(); + var subList = new Array(subOffsets.length); + for (var j = 0; j < subOffsets.length; j++) { + this.relativeOffset = start + subOffsets[j]; + subList[j] = itemCallback.call(this); + } + list[i] = subList; + } else { + list[i] = this.parseUShortList(); + } + } + this.relativeOffset = relativeOffset; + return list; +}; +Parser2.prototype.parseCoverage = function() { + var startOffset = this.offset + this.relativeOffset; + var format = this.parseUShort(); + var count = this.parseUShort(); + if (format === 1) { + return { + format: 1, + glyphs: this.parseUShortList(count) + }; + } else if (format === 2) { + var ranges = new Array(count); + for (var i = 0; i < count; i++) { + ranges[i] = { + start: this.parseUShort(), + end: this.parseUShort(), + index: this.parseUShort() + }; + } + return { + format: 2, + ranges + }; + } + throw new Error("0x" + startOffset.toString(16) + ": Coverage format must be 1 or 2."); +}; +Parser2.prototype.parseClassDef = function() { + var startOffset = this.offset + this.relativeOffset; + var format = this.parseUShort(); + if (format === 1) { + return { + format: 1, + startGlyph: this.parseUShort(), + classes: this.parseUShortList() + }; + } else if (format === 2) { + return { + format: 2, + ranges: this.parseRecordList({ + start: Parser2.uShort, + end: Parser2.uShort, + classId: Parser2.uShort + }) + }; + } + throw new Error("0x" + startOffset.toString(16) + ": ClassDef format must be 1 or 2."); +}; +Parser2.list = function(count, itemCallback) { + return function() { + return this.parseList(count, itemCallback); + }; +}; +Parser2.list32 = function(count, itemCallback) { + return function() { + return this.parseList32(count, itemCallback); + }; +}; +Parser2.recordList = function(count, recordDescription) { + return function() { + return this.parseRecordList(count, recordDescription); + }; +}; +Parser2.recordList32 = function(count, recordDescription) { + return function() { + return this.parseRecordList32(count, recordDescription); + }; +}; +Parser2.pointer = function(description) { + return function() { + return this.parsePointer(description); + }; +}; +Parser2.pointer32 = function(description) { + return function() { + return this.parsePointer32(description); + }; +}; +Parser2.tag = Parser2.prototype.parseTag; +Parser2.byte = Parser2.prototype.parseByte; +Parser2.uShort = Parser2.offset16 = Parser2.prototype.parseUShort; +Parser2.uShortList = Parser2.prototype.parseUShortList; +Parser2.uLong = Parser2.offset32 = Parser2.prototype.parseULong; +Parser2.uLongList = Parser2.prototype.parseULongList; +Parser2.struct = Parser2.prototype.parseStruct; +Parser2.coverage = Parser2.prototype.parseCoverage; +Parser2.classDef = Parser2.prototype.parseClassDef; +var langSysTable = { + reserved: Parser2.uShort, + reqFeatureIndex: Parser2.uShort, + featureIndexes: Parser2.uShortList +}; +Parser2.prototype.parseScriptList = function() { + return this.parsePointer(Parser2.recordList({ + tag: Parser2.tag, + script: Parser2.pointer({ + defaultLangSys: Parser2.pointer(langSysTable), + langSysRecords: Parser2.recordList({ + tag: Parser2.tag, + langSys: Parser2.pointer(langSysTable) + }) + }) + })) || []; +}; +Parser2.prototype.parseFeatureList = function() { + return this.parsePointer(Parser2.recordList({ + tag: Parser2.tag, + feature: Parser2.pointer({ + featureParams: Parser2.offset16, + lookupListIndexes: Parser2.uShortList + }) + })) || []; +}; +Parser2.prototype.parseLookupList = function(lookupTableParsers) { + return this.parsePointer(Parser2.list(Parser2.pointer(function() { + var lookupType = this.parseUShort(); + check.argument(1 <= lookupType && lookupType <= 9, "GPOS/GSUB lookup type " + lookupType + " unknown."); + var lookupFlag = this.parseUShort(); + var useMarkFilteringSet = lookupFlag & 16; + return { + lookupType, + lookupFlag, + subtables: this.parseList(Parser2.pointer(lookupTableParsers[lookupType])), + markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0 + }; + }))) || []; +}; +Parser2.prototype.parseFeatureVariationsList = function() { + return this.parsePointer32(function() { + var majorVersion = this.parseUShort(); + var minorVersion = this.parseUShort(); + check.argument(majorVersion === 1 && minorVersion < 1, "GPOS/GSUB feature variations table unknown."); + var featureVariations = this.parseRecordList32({ + conditionSetOffset: Parser2.offset32, + featureTableSubstitutionOffset: Parser2.offset32 + }); + return featureVariations; + }) || []; +}; +var parse = { + getByte, + getCard8: getByte, + getUShort, + getCard16: getUShort, + getShort, + getULong, + getFixed, + getTag, + getOffset, + getBytes, + bytesToString, + Parser: Parser2 +}; +function parseCmapTableFormat12(cmap2, p2) { + p2.parseUShort(); + cmap2.length = p2.parseULong(); + cmap2.language = p2.parseULong(); + var groupCount; + cmap2.groupCount = groupCount = p2.parseULong(); + cmap2.glyphIndexMap = {}; + for (var i = 0; i < groupCount; i += 1) { + var startCharCode = p2.parseULong(); + var endCharCode = p2.parseULong(); + var startGlyphId = p2.parseULong(); + for (var c2 = startCharCode; c2 <= endCharCode; c2 += 1) { + cmap2.glyphIndexMap[c2] = startGlyphId; + startGlyphId++; + } + } +} +function parseCmapTableFormat4(cmap2, p2, data2, start, offset) { + cmap2.length = p2.parseUShort(); + cmap2.language = p2.parseUShort(); + var segCount; + cmap2.segCount = segCount = p2.parseUShort() >> 1; + p2.skip("uShort", 3); + cmap2.glyphIndexMap = {}; + var endCountParser = new parse.Parser(data2, start + offset + 14); + var startCountParser = new parse.Parser(data2, start + offset + 16 + segCount * 2); + var idDeltaParser = new parse.Parser(data2, start + offset + 16 + segCount * 4); + var idRangeOffsetParser = new parse.Parser(data2, start + offset + 16 + segCount * 6); + var glyphIndexOffset = start + offset + 16 + segCount * 8; + for (var i = 0; i < segCount - 1; i += 1) { + var glyphIndex = void 0; + var endCount = endCountParser.parseUShort(); + var startCount = startCountParser.parseUShort(); + var idDelta = idDeltaParser.parseShort(); + var idRangeOffset = idRangeOffsetParser.parseUShort(); + for (var c2 = startCount; c2 <= endCount; c2 += 1) { + if (idRangeOffset !== 0) { + glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2; + glyphIndexOffset += idRangeOffset; + glyphIndexOffset += (c2 - startCount) * 2; + glyphIndex = parse.getUShort(data2, glyphIndexOffset); + if (glyphIndex !== 0) { + glyphIndex = glyphIndex + idDelta & 65535; + } + } else { + glyphIndex = c2 + idDelta & 65535; + } + cmap2.glyphIndexMap[c2] = glyphIndex; + } + } +} +function parseCmapTable(data2, start) { + var cmap2 = {}; + cmap2.version = parse.getUShort(data2, start); + check.argument(cmap2.version === 0, "cmap table version should be 0."); + cmap2.numTables = parse.getUShort(data2, start + 2); + var offset = -1; + for (var i = cmap2.numTables - 1; i >= 0; i -= 1) { + var platformId = parse.getUShort(data2, start + 4 + i * 8); + var encodingId = parse.getUShort(data2, start + 4 + i * 8 + 2); + if (platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10) || platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4)) { + offset = parse.getULong(data2, start + 4 + i * 8 + 4); + break; + } + } + if (offset === -1) { + throw new Error("No valid cmap sub-tables found."); + } + var p2 = new parse.Parser(data2, start + offset); + cmap2.format = p2.parseUShort(); + if (cmap2.format === 12) { + parseCmapTableFormat12(cmap2, p2); + } else if (cmap2.format === 4) { + parseCmapTableFormat4(cmap2, p2, data2, start, offset); + } else { + throw new Error("Only format 4 and 12 cmap tables are supported (found format " + cmap2.format + ")."); + } + return cmap2; +} +function addSegment(t3, code, glyphIndex) { + t3.segments.push({ + end: code, + start: code, + delta: -(code - glyphIndex), + offset: 0, + glyphIndex + }); +} +function addTerminatorSegment(t3) { + t3.segments.push({ + end: 65535, + start: 65535, + delta: 1, + offset: 0 + }); +} +function makeCmapTable(glyphs) { + var isPlan0Only = true; + var i; + for (i = glyphs.length - 1; i > 0; i -= 1) { + var g2 = glyphs.get(i); + if (g2.unicode > 65535) { + console.log("Adding CMAP format 12 (needed!)"); + isPlan0Only = false; + break; + } + } + var cmapTable = [ + { name: "version", type: "USHORT", value: 0 }, + { name: "numTables", type: "USHORT", value: isPlan0Only ? 1 : 2 }, + // CMAP 4 header + { name: "platformID", type: "USHORT", value: 3 }, + { name: "encodingID", type: "USHORT", value: 1 }, + { name: "offset", type: "ULONG", value: isPlan0Only ? 12 : 12 + 8 } + ]; + if (!isPlan0Only) { + cmapTable = cmapTable.concat([ + // CMAP 12 header + { name: "cmap12PlatformID", type: "USHORT", value: 3 }, + // We encode only for PlatformID = 3 (Windows) because it is supported everywhere + { name: "cmap12EncodingID", type: "USHORT", value: 10 }, + { name: "cmap12Offset", type: "ULONG", value: 0 } + ]); + } + cmapTable = cmapTable.concat([ + // CMAP 4 Subtable + { name: "format", type: "USHORT", value: 4 }, + { name: "cmap4Length", type: "USHORT", value: 0 }, + { name: "language", type: "USHORT", value: 0 }, + { name: "segCountX2", type: "USHORT", value: 0 }, + { name: "searchRange", type: "USHORT", value: 0 }, + { name: "entrySelector", type: "USHORT", value: 0 }, + { name: "rangeShift", type: "USHORT", value: 0 } + ]); + var t3 = new table.Table("cmap", cmapTable); + t3.segments = []; + for (i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + for (var j = 0; j < glyph.unicodes.length; j += 1) { + addSegment(t3, glyph.unicodes[j], i); + } + t3.segments = t3.segments.sort(function(a2, b3) { + return a2.start - b3.start; + }); + } + addTerminatorSegment(t3); + var segCount = t3.segments.length; + var segCountToRemove = 0; + var endCounts = []; + var startCounts = []; + var idDeltas = []; + var idRangeOffsets = []; + var glyphIds = []; + var cmap12Groups = []; + for (i = 0; i < segCount; i += 1) { + var segment = t3.segments[i]; + if (segment.end <= 65535 && segment.start <= 65535) { + endCounts = endCounts.concat({ name: "end_" + i, type: "USHORT", value: segment.end }); + startCounts = startCounts.concat({ name: "start_" + i, type: "USHORT", value: segment.start }); + idDeltas = idDeltas.concat({ name: "idDelta_" + i, type: "SHORT", value: segment.delta }); + idRangeOffsets = idRangeOffsets.concat({ name: "idRangeOffset_" + i, type: "USHORT", value: segment.offset }); + if (segment.glyphId !== void 0) { + glyphIds = glyphIds.concat({ name: "glyph_" + i, type: "USHORT", value: segment.glyphId }); + } + } else { + segCountToRemove += 1; + } + if (!isPlan0Only && segment.glyphIndex !== void 0) { + cmap12Groups = cmap12Groups.concat({ name: "cmap12Start_" + i, type: "ULONG", value: segment.start }); + cmap12Groups = cmap12Groups.concat({ name: "cmap12End_" + i, type: "ULONG", value: segment.end }); + cmap12Groups = cmap12Groups.concat({ name: "cmap12Glyph_" + i, type: "ULONG", value: segment.glyphIndex }); + } + } + t3.segCountX2 = (segCount - segCountToRemove) * 2; + t3.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2; + t3.entrySelector = Math.log(t3.searchRange / 2) / Math.log(2); + t3.rangeShift = t3.segCountX2 - t3.searchRange; + t3.fields = t3.fields.concat(endCounts); + t3.fields.push({ name: "reservedPad", type: "USHORT", value: 0 }); + t3.fields = t3.fields.concat(startCounts); + t3.fields = t3.fields.concat(idDeltas); + t3.fields = t3.fields.concat(idRangeOffsets); + t3.fields = t3.fields.concat(glyphIds); + t3.cmap4Length = 14 + // Subtable header + endCounts.length * 2 + 2 + // reservedPad + startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2; + if (!isPlan0Only) { + var cmap12Length = 16 + // Subtable header + cmap12Groups.length * 4; + t3.cmap12Offset = 12 + 2 * 2 + 4 + t3.cmap4Length; + t3.fields = t3.fields.concat([ + { name: "cmap12Format", type: "USHORT", value: 12 }, + { name: "cmap12Reserved", type: "USHORT", value: 0 }, + { name: "cmap12Length", type: "ULONG", value: cmap12Length }, + { name: "cmap12Language", type: "ULONG", value: 0 }, + { name: "cmap12nGroups", type: "ULONG", value: cmap12Groups.length / 3 } + ]); + t3.fields = t3.fields.concat(cmap12Groups); + } + return t3; +} +var cmap = { parse: parseCmapTable, make: makeCmapTable }; +var cffStandardStrings = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "266 ff", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold" +]; +var cffStandardEncoding = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "", + "questiondown", + "", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "", + "ring", + "cedilla", + "", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "AE", + "", + "ordfeminine", + "", + "", + "", + "", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "", + "", + "", + "", + "", + "ae", + "", + "", + "", + "dotlessi", + "", + "", + "lslash", + "oslash", + "oe", + "germandbls" +]; +var cffExpertEncoding = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclamsmall", + "Hungarumlautsmall", + "", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "", + "", + "isuperior", + "", + "", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "", + "", + "rsuperior", + "ssuperior", + "tsuperior", + "", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "", + "", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "", + "Dotaccentsmall", + "", + "", + "Macronsmall", + "", + "", + "figuredash", + "hypheninferior", + "", + "", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "", + "", + "", + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "", + "", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall" +]; +var standardNames = [ + ".notdef", + ".null", + "nonmarkingreturn", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "Adieresis", + "Aring", + "Ccedilla", + "Eacute", + "Ntilde", + "Odieresis", + "Udieresis", + "aacute", + "agrave", + "acircumflex", + "adieresis", + "atilde", + "aring", + "ccedilla", + "eacute", + "egrave", + "ecircumflex", + "edieresis", + "iacute", + "igrave", + "icircumflex", + "idieresis", + "ntilde", + "oacute", + "ograve", + "ocircumflex", + "odieresis", + "otilde", + "uacute", + "ugrave", + "ucircumflex", + "udieresis", + "dagger", + "degree", + "cent", + "sterling", + "section", + "bullet", + "paragraph", + "germandbls", + "registered", + "copyright", + "trademark", + "acute", + "dieresis", + "notequal", + "AE", + "Oslash", + "infinity", + "plusminus", + "lessequal", + "greaterequal", + "yen", + "mu", + "partialdiff", + "summation", + "product", + "pi", + "integral", + "ordfeminine", + "ordmasculine", + "Omega", + "ae", + "oslash", + "questiondown", + "exclamdown", + "logicalnot", + "radical", + "florin", + "approxequal", + "Delta", + "guillemotleft", + "guillemotright", + "ellipsis", + "nonbreakingspace", + "Agrave", + "Atilde", + "Otilde", + "OE", + "oe", + "endash", + "emdash", + "quotedblleft", + "quotedblright", + "quoteleft", + "quoteright", + "divide", + "lozenge", + "ydieresis", + "Ydieresis", + "fraction", + "currency", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "daggerdbl", + "periodcentered", + "quotesinglbase", + "quotedblbase", + "perthousand", + "Acircumflex", + "Ecircumflex", + "Aacute", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Oacute", + "Ocircumflex", + "apple", + "Ograve", + "Uacute", + "Ucircumflex", + "Ugrave", + "dotlessi", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "Lslash", + "lslash", + "Scaron", + "scaron", + "Zcaron", + "zcaron", + "brokenbar", + "Eth", + "eth", + "Yacute", + "yacute", + "Thorn", + "thorn", + "minus", + "multiply", + "onesuperior", + "twosuperior", + "threesuperior", + "onehalf", + "onequarter", + "threequarters", + "franc", + "Gbreve", + "gbreve", + "Idotaccent", + "Scedilla", + "scedilla", + "Cacute", + "cacute", + "Ccaron", + "ccaron", + "dcroat" +]; +function DefaultEncoding(font) { + this.font = font; +} +DefaultEncoding.prototype.charToGlyphIndex = function(c2) { + var code = c2.codePointAt(0); + var glyphs = this.font.glyphs; + if (glyphs) { + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + for (var j = 0; j < glyph.unicodes.length; j += 1) { + if (glyph.unicodes[j] === code) { + return i; + } + } + } + } + return null; +}; +function CmapEncoding(cmap2) { + this.cmap = cmap2; +} +CmapEncoding.prototype.charToGlyphIndex = function(c2) { + return this.cmap.glyphIndexMap[c2.codePointAt(0)] || 0; +}; +function CffEncoding(encoding, charset) { + this.encoding = encoding; + this.charset = charset; +} +CffEncoding.prototype.charToGlyphIndex = function(s) { + var code = s.codePointAt(0); + var charName = this.encoding[code]; + return this.charset.indexOf(charName); +}; +function GlyphNames(post2) { + switch (post2.version) { + case 1: + this.names = standardNames.slice(); + break; + case 2: + this.names = new Array(post2.numberOfGlyphs); + for (var i = 0; i < post2.numberOfGlyphs; i++) { + if (post2.glyphNameIndex[i] < standardNames.length) { + this.names[i] = standardNames[post2.glyphNameIndex[i]]; + } else { + this.names[i] = post2.names[post2.glyphNameIndex[i] - standardNames.length]; + } + } + break; + case 2.5: + this.names = new Array(post2.numberOfGlyphs); + for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) { + this.names[i$1] = standardNames[i$1 + post2.glyphNameIndex[i$1]]; + } + break; + case 3: + this.names = []; + break; + default: + this.names = []; + break; + } +} +GlyphNames.prototype.nameToGlyphIndex = function(name2) { + return this.names.indexOf(name2); +}; +GlyphNames.prototype.glyphIndexToName = function(gid) { + return this.names[gid]; +}; +function addGlyphNamesAll(font) { + var glyph; + var glyphIndexMap = font.tables.cmap.glyphIndexMap; + var charCodes = Object.keys(glyphIndexMap); + for (var i = 0; i < charCodes.length; i += 1) { + var c2 = charCodes[i]; + var glyphIndex = glyphIndexMap[c2]; + glyph = font.glyphs.get(glyphIndex); + glyph.addUnicode(parseInt(c2)); + } + for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) { + glyph = font.glyphs.get(i$1); + if (font.cffEncoding) { + if (font.isCIDFont) { + glyph.name = "gid" + i$1; + } else { + glyph.name = font.cffEncoding.charset[i$1]; + } + } else if (font.glyphNames.names) { + glyph.name = font.glyphNames.glyphIndexToName(i$1); + } + } +} +function addGlyphNamesToUnicodeMap(font) { + font._IndexToUnicodeMap = {}; + var glyphIndexMap = font.tables.cmap.glyphIndexMap; + var charCodes = Object.keys(glyphIndexMap); + for (var i = 0; i < charCodes.length; i += 1) { + var c2 = charCodes[i]; + var glyphIndex = glyphIndexMap[c2]; + if (font._IndexToUnicodeMap[glyphIndex] === void 0) { + font._IndexToUnicodeMap[glyphIndex] = { + unicodes: [parseInt(c2)] + }; + } else { + font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c2)); + } + } +} +function addGlyphNames(font, opt) { + if (opt.lowMemory) { + addGlyphNamesToUnicodeMap(font); + } else { + addGlyphNamesAll(font); + } +} +function line(ctx, x1, y1, x2, y2) { + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); +} +var draw = { line }; +function getPathDefinition(glyph, path) { + var _path = path || new Path2(); + return { + configurable: true, + get: function() { + if (typeof _path === "function") { + _path = _path(); + } + return _path; + }, + set: function(p2) { + _path = p2; + } + }; +} +function Glyph(options) { + this.bindConstructorValues(options); +} +Glyph.prototype.bindConstructorValues = function(options) { + this.index = options.index || 0; + this.name = options.name || null; + this.unicode = options.unicode || void 0; + this.unicodes = options.unicodes || options.unicode !== void 0 ? [options.unicode] : []; + if ("xMin" in options) { + this.xMin = options.xMin; + } + if ("yMin" in options) { + this.yMin = options.yMin; + } + if ("xMax" in options) { + this.xMax = options.xMax; + } + if ("yMax" in options) { + this.yMax = options.yMax; + } + if ("advanceWidth" in options) { + this.advanceWidth = options.advanceWidth; + } + Object.defineProperty(this, "path", getPathDefinition(this, options.path)); +}; +Glyph.prototype.addUnicode = function(unicode) { + if (this.unicodes.length === 0) { + this.unicode = unicode; + } + this.unicodes.push(unicode); +}; +Glyph.prototype.getBoundingBox = function() { + return this.path.getBoundingBox(); +}; +Glyph.prototype.getPath = function(x2, y2, fontSize, options, font) { + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 72; + var commands; + var hPoints; + if (!options) { + options = {}; + } + var xScale = options.xScale; + var yScale = options.yScale; + if (options.hinting && font && font.hinting) { + hPoints = this.path && font.hinting.exec(this, fontSize); + } + if (hPoints) { + commands = font.hinting.getCommands(hPoints); + x2 = Math.round(x2); + y2 = Math.round(y2); + xScale = yScale = 1; + } else { + commands = this.path.commands; + var scale2 = 1 / (this.path.unitsPerEm || 1e3) * fontSize; + if (xScale === void 0) { + xScale = scale2; + } + if (yScale === void 0) { + yScale = scale2; + } + } + var p2 = new Path2(); + for (var i = 0; i < commands.length; i += 1) { + var cmd = commands[i]; + if (cmd.type === "M") { + p2.moveTo(x2 + cmd.x * xScale, y2 + -cmd.y * yScale); + } else if (cmd.type === "L") { + p2.lineTo(x2 + cmd.x * xScale, y2 + -cmd.y * yScale); + } else if (cmd.type === "Q") { + p2.quadraticCurveTo( + x2 + cmd.x1 * xScale, + y2 + -cmd.y1 * yScale, + x2 + cmd.x * xScale, + y2 + -cmd.y * yScale + ); + } else if (cmd.type === "C") { + p2.curveTo( + x2 + cmd.x1 * xScale, + y2 + -cmd.y1 * yScale, + x2 + cmd.x2 * xScale, + y2 + -cmd.y2 * yScale, + x2 + cmd.x * xScale, + y2 + -cmd.y * yScale + ); + } else if (cmd.type === "Z") { + p2.closePath(); + } + } + return p2; +}; +Glyph.prototype.getContours = function() { + if (this.points === void 0) { + return []; + } + var contours = []; + var currentContour = []; + for (var i = 0; i < this.points.length; i += 1) { + var pt = this.points[i]; + currentContour.push(pt); + if (pt.lastPointOfContour) { + contours.push(currentContour); + currentContour = []; + } + } + check.argument(currentContour.length === 0, "There are still points left in the current contour."); + return contours; +}; +Glyph.prototype.getMetrics = function() { + var commands = this.path.commands; + var xCoords = []; + var yCoords = []; + for (var i = 0; i < commands.length; i += 1) { + var cmd = commands[i]; + if (cmd.type !== "Z") { + xCoords.push(cmd.x); + yCoords.push(cmd.y); + } + if (cmd.type === "Q" || cmd.type === "C") { + xCoords.push(cmd.x1); + yCoords.push(cmd.y1); + } + if (cmd.type === "C") { + xCoords.push(cmd.x2); + yCoords.push(cmd.y2); + } + } + var metrics = { + xMin: Math.min.apply(null, xCoords), + yMin: Math.min.apply(null, yCoords), + xMax: Math.max.apply(null, xCoords), + yMax: Math.max.apply(null, yCoords), + leftSideBearing: this.leftSideBearing + }; + if (!isFinite(metrics.xMin)) { + metrics.xMin = 0; + } + if (!isFinite(metrics.xMax)) { + metrics.xMax = this.advanceWidth; + } + if (!isFinite(metrics.yMin)) { + metrics.yMin = 0; + } + if (!isFinite(metrics.yMax)) { + metrics.yMax = 0; + } + metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin); + return metrics; +}; +Glyph.prototype.draw = function(ctx, x2, y2, fontSize, options) { + this.getPath(x2, y2, fontSize, options).draw(ctx); +}; +Glyph.prototype.drawPoints = function(ctx, x2, y2, fontSize) { + function drawCircles(l2, x3, y3, scale3) { + ctx.beginPath(); + for (var j = 0; j < l2.length; j += 1) { + ctx.moveTo(x3 + l2[j].x * scale3, y3 + l2[j].y * scale3); + ctx.arc(x3 + l2[j].x * scale3, y3 + l2[j].y * scale3, 2, 0, Math.PI * 2, false); + } + ctx.closePath(); + ctx.fill(); + } + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 24; + var scale2 = 1 / this.path.unitsPerEm * fontSize; + var blueCircles = []; + var redCircles = []; + var path = this.path; + for (var i = 0; i < path.commands.length; i += 1) { + var cmd = path.commands[i]; + if (cmd.x !== void 0) { + blueCircles.push({ x: cmd.x, y: -cmd.y }); + } + if (cmd.x1 !== void 0) { + redCircles.push({ x: cmd.x1, y: -cmd.y1 }); + } + if (cmd.x2 !== void 0) { + redCircles.push({ x: cmd.x2, y: -cmd.y2 }); + } + } + ctx.fillStyle = "blue"; + drawCircles(blueCircles, x2, y2, scale2); + ctx.fillStyle = "red"; + drawCircles(redCircles, x2, y2, scale2); +}; +Glyph.prototype.drawMetrics = function(ctx, x2, y2, fontSize) { + var scale2; + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 24; + scale2 = 1 / this.path.unitsPerEm * fontSize; + ctx.lineWidth = 1; + ctx.strokeStyle = "black"; + draw.line(ctx, x2, -1e4, x2, 1e4); + draw.line(ctx, -1e4, y2, 1e4, y2); + var xMin = this.xMin || 0; + var yMin = this.yMin || 0; + var xMax = this.xMax || 0; + var yMax = this.yMax || 0; + var advanceWidth = this.advanceWidth || 0; + ctx.strokeStyle = "blue"; + draw.line(ctx, x2 + xMin * scale2, -1e4, x2 + xMin * scale2, 1e4); + draw.line(ctx, x2 + xMax * scale2, -1e4, x2 + xMax * scale2, 1e4); + draw.line(ctx, -1e4, y2 + -yMin * scale2, 1e4, y2 + -yMin * scale2); + draw.line(ctx, -1e4, y2 + -yMax * scale2, 1e4, y2 + -yMax * scale2); + ctx.strokeStyle = "green"; + draw.line(ctx, x2 + advanceWidth * scale2, -1e4, x2 + advanceWidth * scale2, 1e4); +}; +function defineDependentProperty(glyph, externalName, internalName) { + Object.defineProperty(glyph, externalName, { + get: function() { + glyph.path; + return glyph[internalName]; + }, + set: function(newValue) { + glyph[internalName] = newValue; + }, + enumerable: true, + configurable: true + }); +} +function GlyphSet(font, glyphs) { + this.font = font; + this.glyphs = {}; + if (Array.isArray(glyphs)) { + for (var i = 0; i < glyphs.length; i++) { + var glyph = glyphs[i]; + glyph.path.unitsPerEm = font.unitsPerEm; + this.glyphs[i] = glyph; + } + } + this.length = glyphs && glyphs.length || 0; +} +GlyphSet.prototype.get = function(index2) { + if (this.glyphs[index2] === void 0) { + this.font._push(index2); + if (typeof this.glyphs[index2] === "function") { + this.glyphs[index2] = this.glyphs[index2](); + } + var glyph = this.glyphs[index2]; + var unicodeObj = this.font._IndexToUnicodeMap[index2]; + if (unicodeObj) { + for (var j = 0; j < unicodeObj.unicodes.length; j++) { + glyph.addUnicode(unicodeObj.unicodes[j]); + } + } + if (this.font.cffEncoding) { + if (this.font.isCIDFont) { + glyph.name = "gid" + index2; + } else { + glyph.name = this.font.cffEncoding.charset[index2]; + } + } else if (this.font.glyphNames.names) { + glyph.name = this.font.glyphNames.glyphIndexToName(index2); + } + this.glyphs[index2].advanceWidth = this.font._hmtxTableData[index2].advanceWidth; + this.glyphs[index2].leftSideBearing = this.font._hmtxTableData[index2].leftSideBearing; + } else { + if (typeof this.glyphs[index2] === "function") { + this.glyphs[index2] = this.glyphs[index2](); + } + } + return this.glyphs[index2]; +}; +GlyphSet.prototype.push = function(index2, loader) { + this.glyphs[index2] = loader; + this.length++; +}; +function glyphLoader(font, index2) { + return new Glyph({ index: index2, font }); +} +function ttfGlyphLoader(font, index2, parseGlyph2, data2, position2, buildPath2) { + return function() { + var glyph = new Glyph({ index: index2, font }); + glyph.path = function() { + parseGlyph2(glyph, data2, position2); + var path = buildPath2(font.glyphs, glyph); + path.unitsPerEm = font.unitsPerEm; + return path; + }; + defineDependentProperty(glyph, "xMin", "_xMin"); + defineDependentProperty(glyph, "xMax", "_xMax"); + defineDependentProperty(glyph, "yMin", "_yMin"); + defineDependentProperty(glyph, "yMax", "_yMax"); + return glyph; + }; +} +function cffGlyphLoader(font, index2, parseCFFCharstring2, charstring) { + return function() { + var glyph = new Glyph({ index: index2, font }); + glyph.path = function() { + var path = parseCFFCharstring2(font, glyph, charstring); + path.unitsPerEm = font.unitsPerEm; + return path; + }; + return glyph; + }; +} +var glyphset = { GlyphSet, glyphLoader, ttfGlyphLoader, cffGlyphLoader }; +function equals(a2, b3) { + if (a2 === b3) { + return true; + } else if (Array.isArray(a2) && Array.isArray(b3)) { + if (a2.length !== b3.length) { + return false; + } + for (var i = 0; i < a2.length; i += 1) { + if (!equals(a2[i], b3[i])) { + return false; + } + } + return true; + } else { + return false; + } +} +function calcCFFSubroutineBias(subrs) { + var bias; + if (subrs.length < 1240) { + bias = 107; + } else if (subrs.length < 33900) { + bias = 1131; + } else { + bias = 32768; + } + return bias; +} +function parseCFFIndex(data2, start, conversionFn) { + var offsets = []; + var objects = []; + var count = parse.getCard16(data2, start); + var objectOffset; + var endOffset; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + var pos = start + 3; + for (var i = 0; i < count + 1; i += 1) { + offsets.push(parse.getOffset(data2, pos, offsetSize)); + pos += offsetSize; + } + endOffset = objectOffset + offsets[count]; + } else { + endOffset = start + 2; + } + for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) { + var value2 = parse.getBytes(data2, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]); + if (conversionFn) { + value2 = conversionFn(value2); + } + objects.push(value2); + } + return { objects, startOffset: start, endOffset }; +} +function parseCFFIndexLowMemory(data2, start) { + var offsets = []; + var count = parse.getCard16(data2, start); + var objectOffset; + var endOffset; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + var pos = start + 3; + for (var i = 0; i < count + 1; i += 1) { + offsets.push(parse.getOffset(data2, pos, offsetSize)); + pos += offsetSize; + } + endOffset = objectOffset + offsets[count]; + } else { + endOffset = start + 2; + } + return { offsets, startOffset: start, endOffset }; +} +function getCffIndexObject(i, offsets, data2, start, conversionFn) { + var count = parse.getCard16(data2, start); + var objectOffset = 0; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + } + var value2 = parse.getBytes(data2, objectOffset + offsets[i], objectOffset + offsets[i + 1]); + if (conversionFn) { + value2 = conversionFn(value2); + } + return value2; +} +function parseFloatOperand(parser) { + var s = ""; + var eof = 15; + var lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; + while (true) { + var b3 = parser.parseByte(); + var n1 = b3 >> 4; + var n2 = b3 & 15; + if (n1 === eof) { + break; + } + s += lookup[n1]; + if (n2 === eof) { + break; + } + s += lookup[n2]; + } + return parseFloat(s); +} +function parseOperand(parser, b0) { + var b1; + var b22; + var b3; + var b42; + if (b0 === 28) { + b1 = parser.parseByte(); + b22 = parser.parseByte(); + return b1 << 8 | b22; + } + if (b0 === 29) { + b1 = parser.parseByte(); + b22 = parser.parseByte(); + b3 = parser.parseByte(); + b42 = parser.parseByte(); + return b1 << 24 | b22 << 16 | b3 << 8 | b42; + } + if (b0 === 30) { + return parseFloatOperand(parser); + } + if (b0 >= 32 && b0 <= 246) { + return b0 - 139; + } + if (b0 >= 247 && b0 <= 250) { + b1 = parser.parseByte(); + return (b0 - 247) * 256 + b1 + 108; + } + if (b0 >= 251 && b0 <= 254) { + b1 = parser.parseByte(); + return -(b0 - 251) * 256 - b1 - 108; + } + throw new Error("Invalid b0 " + b0); +} +function entriesToObject(entries) { + var o = {}; + for (var i = 0; i < entries.length; i += 1) { + var key2 = entries[i][0]; + var values2 = entries[i][1]; + var value2 = void 0; + if (values2.length === 1) { + value2 = values2[0]; + } else { + value2 = values2; + } + if (o.hasOwnProperty(key2) && !isNaN(o[key2])) { + throw new Error("Object " + o + " already has key " + key2); + } + o[key2] = value2; + } + return o; +} +function parseCFFDict(data2, start, size2) { + start = start !== void 0 ? start : 0; + var parser = new parse.Parser(data2, start); + var entries = []; + var operands = []; + size2 = size2 !== void 0 ? size2 : data2.length; + while (parser.relativeOffset < size2) { + var op = parser.parseByte(); + if (op <= 21) { + if (op === 12) { + op = 1200 + parser.parseByte(); + } + entries.push([op, operands]); + operands = []; + } else { + operands.push(parseOperand(parser, op)); + } + } + return entriesToObject(entries); +} +function getCFFString(strings, index2) { + if (index2 <= 390) { + index2 = cffStandardStrings[index2]; + } else { + index2 = strings[index2 - 391]; + } + return index2; +} +function interpretDict(dict, meta2, strings) { + var newDict = {}; + var value2; + for (var i = 0; i < meta2.length; i += 1) { + var m = meta2[i]; + if (Array.isArray(m.type)) { + var values2 = []; + values2.length = m.type.length; + for (var j = 0; j < m.type.length; j++) { + value2 = dict[m.op] !== void 0 ? dict[m.op][j] : void 0; + if (value2 === void 0) { + value2 = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null; + } + if (m.type[j] === "SID") { + value2 = getCFFString(strings, value2); + } + values2[j] = value2; + } + newDict[m.name] = values2; + } else { + value2 = dict[m.op]; + if (value2 === void 0) { + value2 = m.value !== void 0 ? m.value : null; + } + if (m.type === "SID") { + value2 = getCFFString(strings, value2); + } + newDict[m.name] = value2; + } + } + return newDict; +} +function parseCFFHeader(data2, start) { + var header = {}; + header.formatMajor = parse.getCard8(data2, start); + header.formatMinor = parse.getCard8(data2, start + 1); + header.size = parse.getCard8(data2, start + 2); + header.offsetSize = parse.getCard8(data2, start + 3); + header.startOffset = start; + header.endOffset = start + 4; + return header; +} +var TOP_DICT_META = [ + { name: "version", op: 0, type: "SID" }, + { name: "notice", op: 1, type: "SID" }, + { name: "copyright", op: 1200, type: "SID" }, + { name: "fullName", op: 2, type: "SID" }, + { name: "familyName", op: 3, type: "SID" }, + { name: "weight", op: 4, type: "SID" }, + { name: "isFixedPitch", op: 1201, type: "number", value: 0 }, + { name: "italicAngle", op: 1202, type: "number", value: 0 }, + { name: "underlinePosition", op: 1203, type: "number", value: -100 }, + { name: "underlineThickness", op: 1204, type: "number", value: 50 }, + { name: "paintType", op: 1205, type: "number", value: 0 }, + { name: "charstringType", op: 1206, type: "number", value: 2 }, + { + name: "fontMatrix", + op: 1207, + type: ["real", "real", "real", "real", "real", "real"], + value: [1e-3, 0, 0, 1e-3, 0, 0] + }, + { name: "uniqueId", op: 13, type: "number" }, + { name: "fontBBox", op: 5, type: ["number", "number", "number", "number"], value: [0, 0, 0, 0] }, + { name: "strokeWidth", op: 1208, type: "number", value: 0 }, + { name: "xuid", op: 14, type: [], value: null }, + { name: "charset", op: 15, type: "offset", value: 0 }, + { name: "encoding", op: 16, type: "offset", value: 0 }, + { name: "charStrings", op: 17, type: "offset", value: 0 }, + { name: "private", op: 18, type: ["number", "offset"], value: [0, 0] }, + { name: "ros", op: 1230, type: ["SID", "SID", "number"] }, + { name: "cidFontVersion", op: 1231, type: "number", value: 0 }, + { name: "cidFontRevision", op: 1232, type: "number", value: 0 }, + { name: "cidFontType", op: 1233, type: "number", value: 0 }, + { name: "cidCount", op: 1234, type: "number", value: 8720 }, + { name: "uidBase", op: 1235, type: "number" }, + { name: "fdArray", op: 1236, type: "offset" }, + { name: "fdSelect", op: 1237, type: "offset" }, + { name: "fontName", op: 1238, type: "SID" } +]; +var PRIVATE_DICT_META = [ + { name: "subrs", op: 19, type: "offset", value: 0 }, + { name: "defaultWidthX", op: 20, type: "number", value: 0 }, + { name: "nominalWidthX", op: 21, type: "number", value: 0 } +]; +function parseCFFTopDict(data2, strings) { + var dict = parseCFFDict(data2, 0, data2.byteLength); + return interpretDict(dict, TOP_DICT_META, strings); +} +function parseCFFPrivateDict(data2, start, size2, strings) { + var dict = parseCFFDict(data2, start, size2); + return interpretDict(dict, PRIVATE_DICT_META, strings); +} +function gatherCFFTopDicts(data2, start, cffIndex, strings) { + var topDictArray = []; + for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) { + var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer); + var topDict = parseCFFTopDict(topDictData, strings); + topDict._subrs = []; + topDict._subrsBias = 0; + topDict._defaultWidthX = 0; + topDict._nominalWidthX = 0; + var privateSize = topDict.private[0]; + var privateOffset = topDict.private[1]; + if (privateSize !== 0 && privateOffset !== 0) { + var privateDict = parseCFFPrivateDict(data2, privateOffset + start, privateSize, strings); + topDict._defaultWidthX = privateDict.defaultWidthX; + topDict._nominalWidthX = privateDict.nominalWidthX; + if (privateDict.subrs !== 0) { + var subrOffset = privateOffset + privateDict.subrs; + var subrIndex = parseCFFIndex(data2, subrOffset + start); + topDict._subrs = subrIndex.objects; + topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs); + } + topDict._privateDict = privateDict; + } + topDictArray.push(topDict); + } + return topDictArray; +} +function parseCFFCharset(data2, start, nGlyphs, strings) { + var sid; + var count; + var parser = new parse.Parser(data2, start); + nGlyphs -= 1; + var charset = [".notdef"]; + var format = parser.parseCard8(); + if (format === 0) { + for (var i = 0; i < nGlyphs; i += 1) { + sid = parser.parseSID(); + charset.push(getCFFString(strings, sid)); + } + } else if (format === 1) { + while (charset.length <= nGlyphs) { + sid = parser.parseSID(); + count = parser.parseCard8(); + for (var i$1 = 0; i$1 <= count; i$1 += 1) { + charset.push(getCFFString(strings, sid)); + sid += 1; + } + } + } else if (format === 2) { + while (charset.length <= nGlyphs) { + sid = parser.parseSID(); + count = parser.parseCard16(); + for (var i$2 = 0; i$2 <= count; i$2 += 1) { + charset.push(getCFFString(strings, sid)); + sid += 1; + } + } + } else { + throw new Error("Unknown charset format " + format); + } + return charset; +} +function parseCFFEncoding(data2, start, charset) { + var code; + var enc = {}; + var parser = new parse.Parser(data2, start); + var format = parser.parseCard8(); + if (format === 0) { + var nCodes = parser.parseCard8(); + for (var i = 0; i < nCodes; i += 1) { + code = parser.parseCard8(); + enc[code] = i; + } + } else if (format === 1) { + var nRanges = parser.parseCard8(); + code = 1; + for (var i$1 = 0; i$1 < nRanges; i$1 += 1) { + var first2 = parser.parseCard8(); + var nLeft = parser.parseCard8(); + for (var j = first2; j <= first2 + nLeft; j += 1) { + enc[j] = code; + code += 1; + } + } + } else { + throw new Error("Unknown encoding format " + format); + } + return new CffEncoding(enc, charset); +} +function parseCFFCharstring(font, glyph, code) { + var c1x; + var c1y; + var c2x; + var c2y; + var p2 = new Path2(); + var stack = []; + var nStems = 0; + var haveWidth = false; + var open = false; + var x2 = 0; + var y2 = 0; + var subrs; + var subrsBias; + var defaultWidthX; + var nominalWidthX; + if (font.isCIDFont) { + var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index]; + var fdDict = font.tables.cff.topDict._fdArray[fdIndex]; + subrs = fdDict._subrs; + subrsBias = fdDict._subrsBias; + defaultWidthX = fdDict._defaultWidthX; + nominalWidthX = fdDict._nominalWidthX; + } else { + subrs = font.tables.cff.topDict._subrs; + subrsBias = font.tables.cff.topDict._subrsBias; + defaultWidthX = font.tables.cff.topDict._defaultWidthX; + nominalWidthX = font.tables.cff.topDict._nominalWidthX; + } + var width2 = defaultWidthX; + function newContour(x3, y3) { + if (open) { + p2.closePath(); + } + p2.moveTo(x3, y3); + open = true; + } + function parseStems() { + var hasWidthArg; + hasWidthArg = stack.length % 2 !== 0; + if (hasWidthArg && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + } + nStems += stack.length >> 1; + stack.length = 0; + haveWidth = true; + } + function parse2(code2) { + var b1; + var b22; + var b3; + var b42; + var codeIndex; + var subrCode; + var jpx; + var jpy; + var c3x; + var c3y; + var c4x; + var c4y; + var i = 0; + while (i < code2.length) { + var v = code2[i]; + i += 1; + switch (v) { + case 1: + parseStems(); + break; + case 3: + parseStems(); + break; + case 4: + if (stack.length > 1 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + y2 += stack.pop(); + newContour(x2, y2); + break; + case 5: + while (stack.length > 0) { + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 6: + while (stack.length > 0) { + x2 += stack.shift(); + p2.lineTo(x2, y2); + if (stack.length === 0) { + break; + } + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 7: + while (stack.length > 0) { + y2 += stack.shift(); + p2.lineTo(x2, y2); + if (stack.length === 0) { + break; + } + x2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 8: + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 10: + codeIndex = stack.pop() + subrsBias; + subrCode = subrs[codeIndex]; + if (subrCode) { + parse2(subrCode); + } + break; + case 11: + return; + case 12: + v = code2[i]; + i += 1; + switch (v) { + case 35: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y + stack.shift(); + c3x = jpx + stack.shift(); + c3y = jpy + stack.shift(); + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + x2 = c4x + stack.shift(); + y2 = c4y + stack.shift(); + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 34: + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y; + c3x = jpx + stack.shift(); + c3y = c2y; + c4x = c3x + stack.shift(); + c4y = y2; + x2 = c4x + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 36: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y; + c3x = jpx + stack.shift(); + c3y = c2y; + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + x2 = c4x + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 37: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y + stack.shift(); + c3x = jpx + stack.shift(); + c3y = jpy + stack.shift(); + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + if (Math.abs(c4x - x2) > Math.abs(c4y - y2)) { + x2 = c4x + stack.shift(); + } else { + y2 = c4y + stack.shift(); + } + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + default: + console.log("Glyph " + glyph.index + ": unknown operator 1200" + v); + stack.length = 0; + } + break; + case 14: + if (stack.length > 0 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + if (open) { + p2.closePath(); + open = false; + } + break; + case 18: + parseStems(); + break; + case 19: + case 20: + parseStems(); + i += nStems + 7 >> 3; + break; + case 21: + if (stack.length > 2 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + y2 += stack.pop(); + x2 += stack.pop(); + newContour(x2, y2); + break; + case 22: + if (stack.length > 1 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + x2 += stack.pop(); + newContour(x2, y2); + break; + case 23: + parseStems(); + break; + case 24: + while (stack.length > 2) { + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + break; + case 25: + while (stack.length > 6) { + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + break; + case 26: + if (stack.length % 2) { + x2 += stack.shift(); + } + while (stack.length > 0) { + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x; + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 27: + if (stack.length % 2) { + y2 += stack.shift(); + } + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y; + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 28: + b1 = code2[i]; + b22 = code2[i + 1]; + stack.push((b1 << 24 | b22 << 16) >> 16); + i += 2; + break; + case 29: + codeIndex = stack.pop() + font.gsubrsBias; + subrCode = font.gsubrs[codeIndex]; + if (subrCode) { + parse2(subrCode); + } + break; + case 30: + while (stack.length > 0) { + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + if (stack.length === 0) { + break; + } + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + y2 = c2y + stack.shift(); + x2 = c2x + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 31: + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + y2 = c2y + stack.shift(); + x2 = c2x + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + if (stack.length === 0) { + break; + } + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + default: + if (v < 32) { + console.log("Glyph " + glyph.index + ": unknown operator " + v); + } else if (v < 247) { + stack.push(v - 139); + } else if (v < 251) { + b1 = code2[i]; + i += 1; + stack.push((v - 247) * 256 + b1 + 108); + } else if (v < 255) { + b1 = code2[i]; + i += 1; + stack.push(-(v - 251) * 256 - b1 - 108); + } else { + b1 = code2[i]; + b22 = code2[i + 1]; + b3 = code2[i + 2]; + b42 = code2[i + 3]; + i += 4; + stack.push((b1 << 24 | b22 << 16 | b3 << 8 | b42) / 65536); + } + } + } + } + parse2(code); + glyph.advanceWidth = width2; + return p2; +} +function parseCFFFDSelect(data2, start, nGlyphs, fdArrayCount) { + var fdSelect = []; + var fdIndex; + var parser = new parse.Parser(data2, start); + var format = parser.parseCard8(); + if (format === 0) { + for (var iGid = 0; iGid < nGlyphs; iGid++) { + fdIndex = parser.parseCard8(); + if (fdIndex >= fdArrayCount) { + throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); + } + fdSelect.push(fdIndex); + } + } else if (format === 3) { + var nRanges = parser.parseCard16(); + var first2 = parser.parseCard16(); + if (first2 !== 0) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID " + first2); + } + var next; + for (var iRange = 0; iRange < nRanges; iRange++) { + fdIndex = parser.parseCard8(); + next = parser.parseCard16(); + if (fdIndex >= fdArrayCount) { + throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); + } + if (next > nGlyphs) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID " + next); + } + for (; first2 < next; first2++) { + fdSelect.push(fdIndex); + } + first2 = next; + } + if (next !== nGlyphs) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID " + next); + } + } else { + throw new Error("CFF Table CID Font FDSelect table has unsupported format " + format); + } + return fdSelect; +} +function parseCFFTable(data2, start, font, opt) { + font.tables.cff = {}; + var header = parseCFFHeader(data2, start); + var nameIndex = parseCFFIndex(data2, header.endOffset, parse.bytesToString); + var topDictIndex = parseCFFIndex(data2, nameIndex.endOffset); + var stringIndex = parseCFFIndex(data2, topDictIndex.endOffset, parse.bytesToString); + var globalSubrIndex = parseCFFIndex(data2, stringIndex.endOffset); + font.gsubrs = globalSubrIndex.objects; + font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs); + var topDictArray = gatherCFFTopDicts(data2, start, topDictIndex.objects, stringIndex.objects); + if (topDictArray.length !== 1) { + throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = " + topDictArray.length); + } + var topDict = topDictArray[0]; + font.tables.cff.topDict = topDict; + if (topDict._privateDict) { + font.defaultWidthX = topDict._privateDict.defaultWidthX; + font.nominalWidthX = topDict._privateDict.nominalWidthX; + } + if (topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) { + font.isCIDFont = true; + } + if (font.isCIDFont) { + var fdArrayOffset = topDict.fdArray; + var fdSelectOffset = topDict.fdSelect; + if (fdArrayOffset === 0 || fdSelectOffset === 0) { + throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing"); + } + fdArrayOffset += start; + var fdArrayIndex = parseCFFIndex(data2, fdArrayOffset); + var fdArray = gatherCFFTopDicts(data2, start, fdArrayIndex.objects, stringIndex.objects); + topDict._fdArray = fdArray; + fdSelectOffset += start; + topDict._fdSelect = parseCFFFDSelect(data2, fdSelectOffset, font.numGlyphs, fdArray.length); + } + var privateDictOffset = start + topDict.private[1]; + var privateDict = parseCFFPrivateDict(data2, privateDictOffset, topDict.private[0], stringIndex.objects); + font.defaultWidthX = privateDict.defaultWidthX; + font.nominalWidthX = privateDict.nominalWidthX; + if (privateDict.subrs !== 0) { + var subrOffset = privateDictOffset + privateDict.subrs; + var subrIndex = parseCFFIndex(data2, subrOffset); + font.subrs = subrIndex.objects; + font.subrsBias = calcCFFSubroutineBias(font.subrs); + } else { + font.subrs = []; + font.subrsBias = 0; + } + var charStringsIndex; + if (opt.lowMemory) { + charStringsIndex = parseCFFIndexLowMemory(data2, start + topDict.charStrings); + font.nGlyphs = charStringsIndex.offsets.length; + } else { + charStringsIndex = parseCFFIndex(data2, start + topDict.charStrings); + font.nGlyphs = charStringsIndex.objects.length; + } + var charset = parseCFFCharset(data2, start + topDict.charset, font.nGlyphs, stringIndex.objects); + if (topDict.encoding === 0) { + font.cffEncoding = new CffEncoding(cffStandardEncoding, charset); + } else if (topDict.encoding === 1) { + font.cffEncoding = new CffEncoding(cffExpertEncoding, charset); + } else { + font.cffEncoding = parseCFFEncoding(data2, start + topDict.encoding, charset); + } + font.encoding = font.encoding || font.cffEncoding; + font.glyphs = new glyphset.GlyphSet(font); + if (opt.lowMemory) { + font._push = function(i2) { + var charString2 = getCffIndexObject(i2, charStringsIndex.offsets, data2, start + topDict.charStrings); + font.glyphs.push(i2, glyphset.cffGlyphLoader(font, i2, parseCFFCharstring, charString2)); + }; + } else { + for (var i = 0; i < font.nGlyphs; i += 1) { + var charString = charStringsIndex.objects[i]; + font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString)); + } + } +} +function encodeString(s, strings) { + var sid; + var i = cffStandardStrings.indexOf(s); + if (i >= 0) { + sid = i; + } + i = strings.indexOf(s); + if (i >= 0) { + sid = i + cffStandardStrings.length; + } else { + sid = cffStandardStrings.length + strings.length; + strings.push(s); + } + return sid; +} +function makeHeader() { + return new table.Record("Header", [ + { name: "major", type: "Card8", value: 1 }, + { name: "minor", type: "Card8", value: 0 }, + { name: "hdrSize", type: "Card8", value: 4 }, + { name: "major", type: "Card8", value: 1 } + ]); +} +function makeNameIndex(fontNames) { + var t3 = new table.Record("Name INDEX", [ + { name: "names", type: "INDEX", value: [] } + ]); + t3.names = []; + for (var i = 0; i < fontNames.length; i += 1) { + t3.names.push({ name: "name_" + i, type: "NAME", value: fontNames[i] }); + } + return t3; +} +function makeDict(meta2, attrs, strings) { + var m = {}; + for (var i = 0; i < meta2.length; i += 1) { + var entry = meta2[i]; + var value2 = attrs[entry.name]; + if (value2 !== void 0 && !equals(value2, entry.value)) { + if (entry.type === "SID") { + value2 = encodeString(value2, strings); + } + m[entry.op] = { name: entry.name, type: entry.type, value: value2 }; + } + } + return m; +} +function makeTopDict(attrs, strings) { + var t3 = new table.Record("Top DICT", [ + { name: "dict", type: "DICT", value: {} } + ]); + t3.dict = makeDict(TOP_DICT_META, attrs, strings); + return t3; +} +function makeTopDictIndex(topDict) { + var t3 = new table.Record("Top DICT INDEX", [ + { name: "topDicts", type: "INDEX", value: [] } + ]); + t3.topDicts = [{ name: "topDict_0", type: "TABLE", value: topDict }]; + return t3; +} +function makeStringIndex(strings) { + var t3 = new table.Record("String INDEX", [ + { name: "strings", type: "INDEX", value: [] } + ]); + t3.strings = []; + for (var i = 0; i < strings.length; i += 1) { + t3.strings.push({ name: "string_" + i, type: "STRING", value: strings[i] }); + } + return t3; +} +function makeGlobalSubrIndex() { + return new table.Record("Global Subr INDEX", [ + { name: "subrs", type: "INDEX", value: [] } + ]); +} +function makeCharsets(glyphNames, strings) { + var t3 = new table.Record("Charsets", [ + { name: "format", type: "Card8", value: 0 } + ]); + for (var i = 0; i < glyphNames.length; i += 1) { + var glyphName = glyphNames[i]; + var glyphSID = encodeString(glyphName, strings); + t3.fields.push({ name: "glyph_" + i, type: "SID", value: glyphSID }); + } + return t3; +} +function glyphToOps(glyph) { + var ops = []; + var path = glyph.path; + ops.push({ name: "width", type: "NUMBER", value: glyph.advanceWidth }); + var x2 = 0; + var y2 = 0; + for (var i = 0; i < path.commands.length; i += 1) { + var dx = void 0; + var dy = void 0; + var cmd = path.commands[i]; + if (cmd.type === "Q") { + var _13 = 1 / 3; + var _23 = 2 / 3; + cmd = { + type: "C", + x: cmd.x, + y: cmd.y, + x1: Math.round(_13 * x2 + _23 * cmd.x1), + y1: Math.round(_13 * y2 + _23 * cmd.y1), + x2: Math.round(_13 * cmd.x + _23 * cmd.x1), + y2: Math.round(_13 * cmd.y + _23 * cmd.y1) + }; + } + if (cmd.type === "M") { + dx = Math.round(cmd.x - x2); + dy = Math.round(cmd.y - y2); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rmoveto", type: "OP", value: 21 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } else if (cmd.type === "L") { + dx = Math.round(cmd.x - x2); + dy = Math.round(cmd.y - y2); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rlineto", type: "OP", value: 5 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } else if (cmd.type === "C") { + var dx1 = Math.round(cmd.x1 - x2); + var dy1 = Math.round(cmd.y1 - y2); + var dx2 = Math.round(cmd.x2 - cmd.x1); + var dy2 = Math.round(cmd.y2 - cmd.y1); + dx = Math.round(cmd.x - cmd.x2); + dy = Math.round(cmd.y - cmd.y2); + ops.push({ name: "dx1", type: "NUMBER", value: dx1 }); + ops.push({ name: "dy1", type: "NUMBER", value: dy1 }); + ops.push({ name: "dx2", type: "NUMBER", value: dx2 }); + ops.push({ name: "dy2", type: "NUMBER", value: dy2 }); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rrcurveto", type: "OP", value: 8 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } + } + ops.push({ name: "endchar", type: "OP", value: 14 }); + return ops; +} +function makeCharStringsIndex(glyphs) { + var t3 = new table.Record("CharStrings INDEX", [ + { name: "charStrings", type: "INDEX", value: [] } + ]); + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + var ops = glyphToOps(glyph); + t3.charStrings.push({ name: glyph.name, type: "CHARSTRING", value: ops }); + } + return t3; +} +function makePrivateDict(attrs, strings) { + var t3 = new table.Record("Private DICT", [ + { name: "dict", type: "DICT", value: {} } + ]); + t3.dict = makeDict(PRIVATE_DICT_META, attrs, strings); + return t3; +} +function makeCFFTable(glyphs, options) { + var t3 = new table.Table("CFF ", [ + { name: "header", type: "RECORD" }, + { name: "nameIndex", type: "RECORD" }, + { name: "topDictIndex", type: "RECORD" }, + { name: "stringIndex", type: "RECORD" }, + { name: "globalSubrIndex", type: "RECORD" }, + { name: "charsets", type: "RECORD" }, + { name: "charStringsIndex", type: "RECORD" }, + { name: "privateDict", type: "RECORD" } + ]); + var fontScale = 1 / options.unitsPerEm; + var attrs = { + version: options.version, + fullName: options.fullName, + familyName: options.familyName, + weight: options.weightName, + fontBBox: options.fontBBox || [0, 0, 0, 0], + fontMatrix: [fontScale, 0, 0, fontScale, 0, 0], + charset: 999, + encoding: 0, + charStrings: 999, + private: [0, 999] + }; + var privateAttrs = {}; + var glyphNames = []; + var glyph; + for (var i = 1; i < glyphs.length; i += 1) { + glyph = glyphs.get(i); + glyphNames.push(glyph.name); + } + var strings = []; + t3.header = makeHeader(); + t3.nameIndex = makeNameIndex([options.postScriptName]); + var topDict = makeTopDict(attrs, strings); + t3.topDictIndex = makeTopDictIndex(topDict); + t3.globalSubrIndex = makeGlobalSubrIndex(); + t3.charsets = makeCharsets(glyphNames, strings); + t3.charStringsIndex = makeCharStringsIndex(glyphs); + t3.privateDict = makePrivateDict(privateAttrs, strings); + t3.stringIndex = makeStringIndex(strings); + var startOffset = t3.header.sizeOf() + t3.nameIndex.sizeOf() + t3.topDictIndex.sizeOf() + t3.stringIndex.sizeOf() + t3.globalSubrIndex.sizeOf(); + attrs.charset = startOffset; + attrs.encoding = 0; + attrs.charStrings = attrs.charset + t3.charsets.sizeOf(); + attrs.private[1] = attrs.charStrings + t3.charStringsIndex.sizeOf(); + topDict = makeTopDict(attrs, strings); + t3.topDictIndex = makeTopDictIndex(topDict); + return t3; +} +var cff = { parse: parseCFFTable, make: makeCFFTable }; +function parseHeadTable(data2, start) { + var head2 = {}; + var p2 = new parse.Parser(data2, start); + head2.version = p2.parseVersion(); + head2.fontRevision = Math.round(p2.parseFixed() * 1e3) / 1e3; + head2.checkSumAdjustment = p2.parseULong(); + head2.magicNumber = p2.parseULong(); + check.argument(head2.magicNumber === 1594834165, "Font header has wrong magic number."); + head2.flags = p2.parseUShort(); + head2.unitsPerEm = p2.parseUShort(); + head2.created = p2.parseLongDateTime(); + head2.modified = p2.parseLongDateTime(); + head2.xMin = p2.parseShort(); + head2.yMin = p2.parseShort(); + head2.xMax = p2.parseShort(); + head2.yMax = p2.parseShort(); + head2.macStyle = p2.parseUShort(); + head2.lowestRecPPEM = p2.parseUShort(); + head2.fontDirectionHint = p2.parseShort(); + head2.indexToLocFormat = p2.parseShort(); + head2.glyphDataFormat = p2.parseShort(); + return head2; +} +function makeHeadTable(options) { + var timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800; + var createdTimestamp = timestamp; + if (options.createdTimestamp) { + createdTimestamp = options.createdTimestamp + 2082844800; + } + return new table.Table("head", [ + { name: "version", type: "FIXED", value: 65536 }, + { name: "fontRevision", type: "FIXED", value: 65536 }, + { name: "checkSumAdjustment", type: "ULONG", value: 0 }, + { name: "magicNumber", type: "ULONG", value: 1594834165 }, + { name: "flags", type: "USHORT", value: 0 }, + { name: "unitsPerEm", type: "USHORT", value: 1e3 }, + { name: "created", type: "LONGDATETIME", value: createdTimestamp }, + { name: "modified", type: "LONGDATETIME", value: timestamp }, + { name: "xMin", type: "SHORT", value: 0 }, + { name: "yMin", type: "SHORT", value: 0 }, + { name: "xMax", type: "SHORT", value: 0 }, + { name: "yMax", type: "SHORT", value: 0 }, + { name: "macStyle", type: "USHORT", value: 0 }, + { name: "lowestRecPPEM", type: "USHORT", value: 0 }, + { name: "fontDirectionHint", type: "SHORT", value: 2 }, + { name: "indexToLocFormat", type: "SHORT", value: 0 }, + { name: "glyphDataFormat", type: "SHORT", value: 0 } + ], options); +} +var head = { parse: parseHeadTable, make: makeHeadTable }; +function parseHheaTable(data2, start) { + var hhea2 = {}; + var p2 = new parse.Parser(data2, start); + hhea2.version = p2.parseVersion(); + hhea2.ascender = p2.parseShort(); + hhea2.descender = p2.parseShort(); + hhea2.lineGap = p2.parseShort(); + hhea2.advanceWidthMax = p2.parseUShort(); + hhea2.minLeftSideBearing = p2.parseShort(); + hhea2.minRightSideBearing = p2.parseShort(); + hhea2.xMaxExtent = p2.parseShort(); + hhea2.caretSlopeRise = p2.parseShort(); + hhea2.caretSlopeRun = p2.parseShort(); + hhea2.caretOffset = p2.parseShort(); + p2.relativeOffset += 8; + hhea2.metricDataFormat = p2.parseShort(); + hhea2.numberOfHMetrics = p2.parseUShort(); + return hhea2; +} +function makeHheaTable(options) { + return new table.Table("hhea", [ + { name: "version", type: "FIXED", value: 65536 }, + { name: "ascender", type: "FWORD", value: 0 }, + { name: "descender", type: "FWORD", value: 0 }, + { name: "lineGap", type: "FWORD", value: 0 }, + { name: "advanceWidthMax", type: "UFWORD", value: 0 }, + { name: "minLeftSideBearing", type: "FWORD", value: 0 }, + { name: "minRightSideBearing", type: "FWORD", value: 0 }, + { name: "xMaxExtent", type: "FWORD", value: 0 }, + { name: "caretSlopeRise", type: "SHORT", value: 1 }, + { name: "caretSlopeRun", type: "SHORT", value: 0 }, + { name: "caretOffset", type: "SHORT", value: 0 }, + { name: "reserved1", type: "SHORT", value: 0 }, + { name: "reserved2", type: "SHORT", value: 0 }, + { name: "reserved3", type: "SHORT", value: 0 }, + { name: "reserved4", type: "SHORT", value: 0 }, + { name: "metricDataFormat", type: "SHORT", value: 0 }, + { name: "numberOfHMetrics", type: "USHORT", value: 0 } + ], options); +} +var hhea = { parse: parseHheaTable, make: makeHheaTable }; +function parseHmtxTableAll(data2, start, numMetrics, numGlyphs, glyphs) { + var advanceWidth; + var leftSideBearing; + var p2 = new parse.Parser(data2, start); + for (var i = 0; i < numGlyphs; i += 1) { + if (i < numMetrics) { + advanceWidth = p2.parseUShort(); + leftSideBearing = p2.parseShort(); + } + var glyph = glyphs.get(i); + glyph.advanceWidth = advanceWidth; + glyph.leftSideBearing = leftSideBearing; + } +} +function parseHmtxTableOnLowMemory(font, data2, start, numMetrics, numGlyphs) { + font._hmtxTableData = {}; + var advanceWidth; + var leftSideBearing; + var p2 = new parse.Parser(data2, start); + for (var i = 0; i < numGlyphs; i += 1) { + if (i < numMetrics) { + advanceWidth = p2.parseUShort(); + leftSideBearing = p2.parseShort(); + } + font._hmtxTableData[i] = { + advanceWidth, + leftSideBearing + }; + } +} +function parseHmtxTable(font, data2, start, numMetrics, numGlyphs, glyphs, opt) { + if (opt.lowMemory) { + parseHmtxTableOnLowMemory(font, data2, start, numMetrics, numGlyphs); + } else { + parseHmtxTableAll(data2, start, numMetrics, numGlyphs, glyphs); + } +} +function makeHmtxTable(glyphs) { + var t3 = new table.Table("hmtx", []); + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + var advanceWidth = glyph.advanceWidth || 0; + var leftSideBearing = glyph.leftSideBearing || 0; + t3.fields.push({ name: "advanceWidth_" + i, type: "USHORT", value: advanceWidth }); + t3.fields.push({ name: "leftSideBearing_" + i, type: "SHORT", value: leftSideBearing }); + } + return t3; +} +var hmtx = { parse: parseHmtxTable, make: makeHmtxTable }; +function makeLtagTable(tags) { + var result = new table.Table("ltag", [ + { name: "version", type: "ULONG", value: 1 }, + { name: "flags", type: "ULONG", value: 0 }, + { name: "numTags", type: "ULONG", value: tags.length } + ]); + var stringPool = ""; + var stringPoolOffset = 12 + tags.length * 4; + for (var i = 0; i < tags.length; ++i) { + var pos = stringPool.indexOf(tags[i]); + if (pos < 0) { + pos = stringPool.length; + stringPool += tags[i]; + } + result.fields.push({ name: "offset " + i, type: "USHORT", value: stringPoolOffset + pos }); + result.fields.push({ name: "length " + i, type: "USHORT", value: tags[i].length }); + } + result.fields.push({ name: "stringPool", type: "CHARARRAY", value: stringPool }); + return result; +} +function parseLtagTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 1, "Unsupported ltag table version."); + p2.skip("uLong", 1); + var numTags = p2.parseULong(); + var tags = []; + for (var i = 0; i < numTags; i++) { + var tag = ""; + var offset = start + p2.parseUShort(); + var length2 = p2.parseUShort(); + for (var j = offset; j < offset + length2; ++j) { + tag += String.fromCharCode(data2.getInt8(j)); + } + tags.push(tag); + } + return tags; +} +var ltag = { make: makeLtagTable, parse: parseLtagTable }; +function parseMaxpTable(data2, start) { + var maxp2 = {}; + var p2 = new parse.Parser(data2, start); + maxp2.version = p2.parseVersion(); + maxp2.numGlyphs = p2.parseUShort(); + if (maxp2.version === 1) { + maxp2.maxPoints = p2.parseUShort(); + maxp2.maxContours = p2.parseUShort(); + maxp2.maxCompositePoints = p2.parseUShort(); + maxp2.maxCompositeContours = p2.parseUShort(); + maxp2.maxZones = p2.parseUShort(); + maxp2.maxTwilightPoints = p2.parseUShort(); + maxp2.maxStorage = p2.parseUShort(); + maxp2.maxFunctionDefs = p2.parseUShort(); + maxp2.maxInstructionDefs = p2.parseUShort(); + maxp2.maxStackElements = p2.parseUShort(); + maxp2.maxSizeOfInstructions = p2.parseUShort(); + maxp2.maxComponentElements = p2.parseUShort(); + maxp2.maxComponentDepth = p2.parseUShort(); + } + return maxp2; +} +function makeMaxpTable(numGlyphs) { + return new table.Table("maxp", [ + { name: "version", type: "FIXED", value: 20480 }, + { name: "numGlyphs", type: "USHORT", value: numGlyphs } + ]); +} +var maxp = { parse: parseMaxpTable, make: makeMaxpTable }; +var nameTableNames = [ + "copyright", + // 0 + "fontFamily", + // 1 + "fontSubfamily", + // 2 + "uniqueID", + // 3 + "fullName", + // 4 + "version", + // 5 + "postScriptName", + // 6 + "trademark", + // 7 + "manufacturer", + // 8 + "designer", + // 9 + "description", + // 10 + "manufacturerURL", + // 11 + "designerURL", + // 12 + "license", + // 13 + "licenseURL", + // 14 + "reserved", + // 15 + "preferredFamily", + // 16 + "preferredSubfamily", + // 17 + "compatibleFullName", + // 18 + "sampleText", + // 19 + "postScriptFindFontName", + // 20 + "wwsFamily", + // 21 + "wwsSubfamily" + // 22 +]; +var macLanguages = { + 0: "en", + 1: "fr", + 2: "de", + 3: "it", + 4: "nl", + 5: "sv", + 6: "es", + 7: "da", + 8: "pt", + 9: "no", + 10: "he", + 11: "ja", + 12: "ar", + 13: "fi", + 14: "el", + 15: "is", + 16: "mt", + 17: "tr", + 18: "hr", + 19: "zh-Hant", + 20: "ur", + 21: "hi", + 22: "th", + 23: "ko", + 24: "lt", + 25: "pl", + 26: "hu", + 27: "es", + 28: "lv", + 29: "se", + 30: "fo", + 31: "fa", + 32: "ru", + 33: "zh", + 34: "nl-BE", + 35: "ga", + 36: "sq", + 37: "ro", + 38: "cz", + 39: "sk", + 40: "si", + 41: "yi", + 42: "sr", + 43: "mk", + 44: "bg", + 45: "uk", + 46: "be", + 47: "uz", + 48: "kk", + 49: "az-Cyrl", + 50: "az-Arab", + 51: "hy", + 52: "ka", + 53: "mo", + 54: "ky", + 55: "tg", + 56: "tk", + 57: "mn-CN", + 58: "mn", + 59: "ps", + 60: "ks", + 61: "ku", + 62: "sd", + 63: "bo", + 64: "ne", + 65: "sa", + 66: "mr", + 67: "bn", + 68: "as", + 69: "gu", + 70: "pa", + 71: "or", + 72: "ml", + 73: "kn", + 74: "ta", + 75: "te", + 76: "si", + 77: "my", + 78: "km", + 79: "lo", + 80: "vi", + 81: "id", + 82: "tl", + 83: "ms", + 84: "ms-Arab", + 85: "am", + 86: "ti", + 87: "om", + 88: "so", + 89: "sw", + 90: "rw", + 91: "rn", + 92: "ny", + 93: "mg", + 94: "eo", + 128: "cy", + 129: "eu", + 130: "ca", + 131: "la", + 132: "qu", + 133: "gn", + 134: "ay", + 135: "tt", + 136: "ug", + 137: "dz", + 138: "jv", + 139: "su", + 140: "gl", + 141: "af", + 142: "br", + 143: "iu", + 144: "gd", + 145: "gv", + 146: "ga", + 147: "to", + 148: "el-polyton", + 149: "kl", + 150: "az", + 151: "nn" +}; +var macLanguageToScript = { + 0: 0, + // langEnglish → smRoman + 1: 0, + // langFrench → smRoman + 2: 0, + // langGerman → smRoman + 3: 0, + // langItalian → smRoman + 4: 0, + // langDutch → smRoman + 5: 0, + // langSwedish → smRoman + 6: 0, + // langSpanish → smRoman + 7: 0, + // langDanish → smRoman + 8: 0, + // langPortuguese → smRoman + 9: 0, + // langNorwegian → smRoman + 10: 5, + // langHebrew → smHebrew + 11: 1, + // langJapanese → smJapanese + 12: 4, + // langArabic → smArabic + 13: 0, + // langFinnish → smRoman + 14: 6, + // langGreek → smGreek + 15: 0, + // langIcelandic → smRoman (modified) + 16: 0, + // langMaltese → smRoman + 17: 0, + // langTurkish → smRoman (modified) + 18: 0, + // langCroatian → smRoman (modified) + 19: 2, + // langTradChinese → smTradChinese + 20: 4, + // langUrdu → smArabic + 21: 9, + // langHindi → smDevanagari + 22: 21, + // langThai → smThai + 23: 3, + // langKorean → smKorean + 24: 29, + // langLithuanian → smCentralEuroRoman + 25: 29, + // langPolish → smCentralEuroRoman + 26: 29, + // langHungarian → smCentralEuroRoman + 27: 29, + // langEstonian → smCentralEuroRoman + 28: 29, + // langLatvian → smCentralEuroRoman + 29: 0, + // langSami → smRoman + 30: 0, + // langFaroese → smRoman (modified) + 31: 4, + // langFarsi → smArabic (modified) + 32: 7, + // langRussian → smCyrillic + 33: 25, + // langSimpChinese → smSimpChinese + 34: 0, + // langFlemish → smRoman + 35: 0, + // langIrishGaelic → smRoman (modified) + 36: 0, + // langAlbanian → smRoman + 37: 0, + // langRomanian → smRoman (modified) + 38: 29, + // langCzech → smCentralEuroRoman + 39: 29, + // langSlovak → smCentralEuroRoman + 40: 0, + // langSlovenian → smRoman (modified) + 41: 5, + // langYiddish → smHebrew + 42: 7, + // langSerbian → smCyrillic + 43: 7, + // langMacedonian → smCyrillic + 44: 7, + // langBulgarian → smCyrillic + 45: 7, + // langUkrainian → smCyrillic (modified) + 46: 7, + // langByelorussian → smCyrillic + 47: 7, + // langUzbek → smCyrillic + 48: 7, + // langKazakh → smCyrillic + 49: 7, + // langAzerbaijani → smCyrillic + 50: 4, + // langAzerbaijanAr → smArabic + 51: 24, + // langArmenian → smArmenian + 52: 23, + // langGeorgian → smGeorgian + 53: 7, + // langMoldavian → smCyrillic + 54: 7, + // langKirghiz → smCyrillic + 55: 7, + // langTajiki → smCyrillic + 56: 7, + // langTurkmen → smCyrillic + 57: 27, + // langMongolian → smMongolian + 58: 7, + // langMongolianCyr → smCyrillic + 59: 4, + // langPashto → smArabic + 60: 4, + // langKurdish → smArabic + 61: 4, + // langKashmiri → smArabic + 62: 4, + // langSindhi → smArabic + 63: 26, + // langTibetan → smTibetan + 64: 9, + // langNepali → smDevanagari + 65: 9, + // langSanskrit → smDevanagari + 66: 9, + // langMarathi → smDevanagari + 67: 13, + // langBengali → smBengali + 68: 13, + // langAssamese → smBengali + 69: 11, + // langGujarati → smGujarati + 70: 10, + // langPunjabi → smGurmukhi + 71: 12, + // langOriya → smOriya + 72: 17, + // langMalayalam → smMalayalam + 73: 16, + // langKannada → smKannada + 74: 14, + // langTamil → smTamil + 75: 15, + // langTelugu → smTelugu + 76: 18, + // langSinhalese → smSinhalese + 77: 19, + // langBurmese → smBurmese + 78: 20, + // langKhmer → smKhmer + 79: 22, + // langLao → smLao + 80: 30, + // langVietnamese → smVietnamese + 81: 0, + // langIndonesian → smRoman + 82: 0, + // langTagalog → smRoman + 83: 0, + // langMalayRoman → smRoman + 84: 4, + // langMalayArabic → smArabic + 85: 28, + // langAmharic → smEthiopic + 86: 28, + // langTigrinya → smEthiopic + 87: 28, + // langOromo → smEthiopic + 88: 0, + // langSomali → smRoman + 89: 0, + // langSwahili → smRoman + 90: 0, + // langKinyarwanda → smRoman + 91: 0, + // langRundi → smRoman + 92: 0, + // langNyanja → smRoman + 93: 0, + // langMalagasy → smRoman + 94: 0, + // langEsperanto → smRoman + 128: 0, + // langWelsh → smRoman (modified) + 129: 0, + // langBasque → smRoman + 130: 0, + // langCatalan → smRoman + 131: 0, + // langLatin → smRoman + 132: 0, + // langQuechua → smRoman + 133: 0, + // langGuarani → smRoman + 134: 0, + // langAymara → smRoman + 135: 7, + // langTatar → smCyrillic + 136: 4, + // langUighur → smArabic + 137: 26, + // langDzongkha → smTibetan + 138: 0, + // langJavaneseRom → smRoman + 139: 0, + // langSundaneseRom → smRoman + 140: 0, + // langGalician → smRoman + 141: 0, + // langAfrikaans → smRoman + 142: 0, + // langBreton → smRoman (modified) + 143: 28, + // langInuktitut → smEthiopic (modified) + 144: 0, + // langScottishGaelic → smRoman (modified) + 145: 0, + // langManxGaelic → smRoman (modified) + 146: 0, + // langIrishGaelicScript → smRoman (modified) + 147: 0, + // langTongan → smRoman + 148: 6, + // langGreekAncient → smRoman + 149: 0, + // langGreenlandic → smRoman + 150: 0, + // langAzerbaijanRoman → smRoman + 151: 0 + // langNynorsk → smRoman +}; +var windowsLanguages = { + 1078: "af", + 1052: "sq", + 1156: "gsw", + 1118: "am", + 5121: "ar-DZ", + 15361: "ar-BH", + 3073: "ar", + 2049: "ar-IQ", + 11265: "ar-JO", + 13313: "ar-KW", + 12289: "ar-LB", + 4097: "ar-LY", + 6145: "ary", + 8193: "ar-OM", + 16385: "ar-QA", + 1025: "ar-SA", + 10241: "ar-SY", + 7169: "aeb", + 14337: "ar-AE", + 9217: "ar-YE", + 1067: "hy", + 1101: "as", + 2092: "az-Cyrl", + 1068: "az", + 1133: "ba", + 1069: "eu", + 1059: "be", + 2117: "bn", + 1093: "bn-IN", + 8218: "bs-Cyrl", + 5146: "bs", + 1150: "br", + 1026: "bg", + 1027: "ca", + 3076: "zh-HK", + 5124: "zh-MO", + 2052: "zh", + 4100: "zh-SG", + 1028: "zh-TW", + 1155: "co", + 1050: "hr", + 4122: "hr-BA", + 1029: "cs", + 1030: "da", + 1164: "prs", + 1125: "dv", + 2067: "nl-BE", + 1043: "nl", + 3081: "en-AU", + 10249: "en-BZ", + 4105: "en-CA", + 9225: "en-029", + 16393: "en-IN", + 6153: "en-IE", + 8201: "en-JM", + 17417: "en-MY", + 5129: "en-NZ", + 13321: "en-PH", + 18441: "en-SG", + 7177: "en-ZA", + 11273: "en-TT", + 2057: "en-GB", + 1033: "en", + 12297: "en-ZW", + 1061: "et", + 1080: "fo", + 1124: "fil", + 1035: "fi", + 2060: "fr-BE", + 3084: "fr-CA", + 1036: "fr", + 5132: "fr-LU", + 6156: "fr-MC", + 4108: "fr-CH", + 1122: "fy", + 1110: "gl", + 1079: "ka", + 3079: "de-AT", + 1031: "de", + 5127: "de-LI", + 4103: "de-LU", + 2055: "de-CH", + 1032: "el", + 1135: "kl", + 1095: "gu", + 1128: "ha", + 1037: "he", + 1081: "hi", + 1038: "hu", + 1039: "is", + 1136: "ig", + 1057: "id", + 1117: "iu", + 2141: "iu-Latn", + 2108: "ga", + 1076: "xh", + 1077: "zu", + 1040: "it", + 2064: "it-CH", + 1041: "ja", + 1099: "kn", + 1087: "kk", + 1107: "km", + 1158: "quc", + 1159: "rw", + 1089: "sw", + 1111: "kok", + 1042: "ko", + 1088: "ky", + 1108: "lo", + 1062: "lv", + 1063: "lt", + 2094: "dsb", + 1134: "lb", + 1071: "mk", + 2110: "ms-BN", + 1086: "ms", + 1100: "ml", + 1082: "mt", + 1153: "mi", + 1146: "arn", + 1102: "mr", + 1148: "moh", + 1104: "mn", + 2128: "mn-CN", + 1121: "ne", + 1044: "nb", + 2068: "nn", + 1154: "oc", + 1096: "or", + 1123: "ps", + 1045: "pl", + 1046: "pt", + 2070: "pt-PT", + 1094: "pa", + 1131: "qu-BO", + 2155: "qu-EC", + 3179: "qu", + 1048: "ro", + 1047: "rm", + 1049: "ru", + 9275: "smn", + 4155: "smj-NO", + 5179: "smj", + 3131: "se-FI", + 1083: "se", + 2107: "se-SE", + 8251: "sms", + 6203: "sma-NO", + 7227: "sms", + 1103: "sa", + 7194: "sr-Cyrl-BA", + 3098: "sr", + 6170: "sr-Latn-BA", + 2074: "sr-Latn", + 1132: "nso", + 1074: "tn", + 1115: "si", + 1051: "sk", + 1060: "sl", + 11274: "es-AR", + 16394: "es-BO", + 13322: "es-CL", + 9226: "es-CO", + 5130: "es-CR", + 7178: "es-DO", + 12298: "es-EC", + 17418: "es-SV", + 4106: "es-GT", + 18442: "es-HN", + 2058: "es-MX", + 19466: "es-NI", + 6154: "es-PA", + 15370: "es-PY", + 10250: "es-PE", + 20490: "es-PR", + // Microsoft has defined two different language codes for + // “Spanish with modern sorting” and “Spanish with traditional + // sorting”. This makes sense for collation APIs, and it would be + // possible to express this in BCP 47 language tags via Unicode + // extensions (eg., es-u-co-trad is Spanish with traditional + // sorting). However, for storing names in fonts, the distinction + // does not make sense, so we give “es” in both cases. + 3082: "es", + 1034: "es", + 21514: "es-US", + 14346: "es-UY", + 8202: "es-VE", + 2077: "sv-FI", + 1053: "sv", + 1114: "syr", + 1064: "tg", + 2143: "tzm", + 1097: "ta", + 1092: "tt", + 1098: "te", + 1054: "th", + 1105: "bo", + 1055: "tr", + 1090: "tk", + 1152: "ug", + 1058: "uk", + 1070: "hsb", + 1056: "ur", + 2115: "uz-Cyrl", + 1091: "uz", + 1066: "vi", + 1106: "cy", + 1160: "wo", + 1157: "sah", + 1144: "ii", + 1130: "yo" +}; +function getLanguageCode(platformID, languageID, ltag2) { + switch (platformID) { + case 0: + if (languageID === 65535) { + return "und"; + } else if (ltag2) { + return ltag2[languageID]; + } + break; + case 1: + return macLanguages[languageID]; + case 3: + return windowsLanguages[languageID]; + } + return void 0; +} +var utf16 = "utf-16"; +var macScriptEncodings = { + 0: "macintosh", + // smRoman + 1: "x-mac-japanese", + // smJapanese + 2: "x-mac-chinesetrad", + // smTradChinese + 3: "x-mac-korean", + // smKorean + 6: "x-mac-greek", + // smGreek + 7: "x-mac-cyrillic", + // smCyrillic + 9: "x-mac-devanagai", + // smDevanagari + 10: "x-mac-gurmukhi", + // smGurmukhi + 11: "x-mac-gujarati", + // smGujarati + 12: "x-mac-oriya", + // smOriya + 13: "x-mac-bengali", + // smBengali + 14: "x-mac-tamil", + // smTamil + 15: "x-mac-telugu", + // smTelugu + 16: "x-mac-kannada", + // smKannada + 17: "x-mac-malayalam", + // smMalayalam + 18: "x-mac-sinhalese", + // smSinhalese + 19: "x-mac-burmese", + // smBurmese + 20: "x-mac-khmer", + // smKhmer + 21: "x-mac-thai", + // smThai + 22: "x-mac-lao", + // smLao + 23: "x-mac-georgian", + // smGeorgian + 24: "x-mac-armenian", + // smArmenian + 25: "x-mac-chinesesimp", + // smSimpChinese + 26: "x-mac-tibetan", + // smTibetan + 27: "x-mac-mongolian", + // smMongolian + 28: "x-mac-ethiopic", + // smEthiopic + 29: "x-mac-ce", + // smCentralEuroRoman + 30: "x-mac-vietnamese", + // smVietnamese + 31: "x-mac-extarabic" + // smExtArabic +}; +var macLanguageEncodings = { + 15: "x-mac-icelandic", + // langIcelandic + 17: "x-mac-turkish", + // langTurkish + 18: "x-mac-croatian", + // langCroatian + 24: "x-mac-ce", + // langLithuanian + 25: "x-mac-ce", + // langPolish + 26: "x-mac-ce", + // langHungarian + 27: "x-mac-ce", + // langEstonian + 28: "x-mac-ce", + // langLatvian + 30: "x-mac-icelandic", + // langFaroese + 37: "x-mac-romanian", + // langRomanian + 38: "x-mac-ce", + // langCzech + 39: "x-mac-ce", + // langSlovak + 40: "x-mac-ce", + // langSlovenian + 143: "x-mac-inuit", + // langInuktitut + 146: "x-mac-gaelic" + // langIrishGaelicScript +}; +function getEncoding(platformID, encodingID, languageID) { + switch (platformID) { + case 0: + return utf16; + case 1: + return macLanguageEncodings[languageID] || macScriptEncodings[encodingID]; + case 3: + if (encodingID === 1 || encodingID === 10) { + return utf16; + } + break; + } + return void 0; +} +function parseNameTable(data2, start, ltag2) { + var name2 = {}; + var p2 = new parse.Parser(data2, start); + var format = p2.parseUShort(); + var count = p2.parseUShort(); + var stringOffset2 = p2.offset + p2.parseUShort(); + for (var i = 0; i < count; i++) { + var platformID = p2.parseUShort(); + var encodingID = p2.parseUShort(); + var languageID = p2.parseUShort(); + var nameID = p2.parseUShort(); + var property2 = nameTableNames[nameID] || nameID; + var byteLength = p2.parseUShort(); + var offset = p2.parseUShort(); + var language = getLanguageCode(platformID, languageID, ltag2); + var encoding = getEncoding(platformID, encodingID, languageID); + if (encoding !== void 0 && language !== void 0) { + var text2 = void 0; + if (encoding === utf16) { + text2 = decode.UTF16(data2, stringOffset2 + offset, byteLength); + } else { + text2 = decode.MACSTRING(data2, stringOffset2 + offset, byteLength, encoding); + } + if (text2) { + var translations = name2[property2]; + if (translations === void 0) { + translations = name2[property2] = {}; + } + translations[language] = text2; + } + } + } + var langTagCount = 0; + if (format === 1) { + langTagCount = p2.parseUShort(); + } + return name2; +} +function reverseDict(dict) { + var result = {}; + for (var key2 in dict) { + result[dict[key2]] = parseInt(key2); + } + return result; +} +function makeNameRecord(platformID, encodingID, languageID, nameID, length2, offset) { + return new table.Record("NameRecord", [ + { name: "platformID", type: "USHORT", value: platformID }, + { name: "encodingID", type: "USHORT", value: encodingID }, + { name: "languageID", type: "USHORT", value: languageID }, + { name: "nameID", type: "USHORT", value: nameID }, + { name: "length", type: "USHORT", value: length2 }, + { name: "offset", type: "USHORT", value: offset } + ]); +} +function findSubArray(needle, haystack) { + var needleLength = needle.length; + var limit = haystack.length - needleLength + 1; + loop: + for (var pos = 0; pos < limit; pos++) { + for (; pos < limit; pos++) { + for (var k2 = 0; k2 < needleLength; k2++) { + if (haystack[pos + k2] !== needle[k2]) { + continue loop; + } + } + return pos; + } + } + return -1; +} +function addStringToPool(s, pool) { + var offset = findSubArray(s, pool); + if (offset < 0) { + offset = pool.length; + var i = 0; + var len = s.length; + for (; i < len; ++i) { + pool.push(s[i]); + } + } + return offset; +} +function makeNameTable(names, ltag2) { + var nameID; + var nameIDs = []; + var namesWithNumericKeys = {}; + var nameTableIds = reverseDict(nameTableNames); + for (var key2 in names) { + var id = nameTableIds[key2]; + if (id === void 0) { + id = key2; + } + nameID = parseInt(id); + if (isNaN(nameID)) { + throw new Error('Name table entry "' + key2 + '" does not exist, see nameTableNames for complete list.'); + } + namesWithNumericKeys[nameID] = names[key2]; + nameIDs.push(nameID); + } + var macLanguageIds = reverseDict(macLanguages); + var windowsLanguageIds = reverseDict(windowsLanguages); + var nameRecords = []; + var stringPool = []; + for (var i = 0; i < nameIDs.length; i++) { + nameID = nameIDs[i]; + var translations = namesWithNumericKeys[nameID]; + for (var lang in translations) { + var text2 = translations[lang]; + var macPlatform = 1; + var macLanguage = macLanguageIds[lang]; + var macScript = macLanguageToScript[macLanguage]; + var macEncoding = getEncoding(macPlatform, macScript, macLanguage); + var macName = encode.MACSTRING(text2, macEncoding); + if (macName === void 0) { + macPlatform = 0; + macLanguage = ltag2.indexOf(lang); + if (macLanguage < 0) { + macLanguage = ltag2.length; + ltag2.push(lang); + } + macScript = 4; + macName = encode.UTF16(text2); + } + var macNameOffset = addStringToPool(macName, stringPool); + nameRecords.push(makeNameRecord( + macPlatform, + macScript, + macLanguage, + nameID, + macName.length, + macNameOffset + )); + var winLanguage = windowsLanguageIds[lang]; + if (winLanguage !== void 0) { + var winName = encode.UTF16(text2); + var winNameOffset = addStringToPool(winName, stringPool); + nameRecords.push(makeNameRecord( + 3, + 1, + winLanguage, + nameID, + winName.length, + winNameOffset + )); + } + } + } + nameRecords.sort(function(a2, b3) { + return a2.platformID - b3.platformID || a2.encodingID - b3.encodingID || a2.languageID - b3.languageID || a2.nameID - b3.nameID; + }); + var t3 = new table.Table("name", [ + { name: "format", type: "USHORT", value: 0 }, + { name: "count", type: "USHORT", value: nameRecords.length }, + { name: "stringOffset", type: "USHORT", value: 6 + nameRecords.length * 12 } + ]); + for (var r = 0; r < nameRecords.length; r++) { + t3.fields.push({ name: "record_" + r, type: "RECORD", value: nameRecords[r] }); + } + t3.fields.push({ name: "strings", type: "LITERAL", value: stringPool }); + return t3; +} +var _name = { parse: parseNameTable, make: makeNameTable }; +var unicodeRanges = [ + { begin: 0, end: 127 }, + // Basic Latin + { begin: 128, end: 255 }, + // Latin-1 Supplement + { begin: 256, end: 383 }, + // Latin Extended-A + { begin: 384, end: 591 }, + // Latin Extended-B + { begin: 592, end: 687 }, + // IPA Extensions + { begin: 688, end: 767 }, + // Spacing Modifier Letters + { begin: 768, end: 879 }, + // Combining Diacritical Marks + { begin: 880, end: 1023 }, + // Greek and Coptic + { begin: 11392, end: 11519 }, + // Coptic + { begin: 1024, end: 1279 }, + // Cyrillic + { begin: 1328, end: 1423 }, + // Armenian + { begin: 1424, end: 1535 }, + // Hebrew + { begin: 42240, end: 42559 }, + // Vai + { begin: 1536, end: 1791 }, + // Arabic + { begin: 1984, end: 2047 }, + // NKo + { begin: 2304, end: 2431 }, + // Devanagari + { begin: 2432, end: 2559 }, + // Bengali + { begin: 2560, end: 2687 }, + // Gurmukhi + { begin: 2688, end: 2815 }, + // Gujarati + { begin: 2816, end: 2943 }, + // Oriya + { begin: 2944, end: 3071 }, + // Tamil + { begin: 3072, end: 3199 }, + // Telugu + { begin: 3200, end: 3327 }, + // Kannada + { begin: 3328, end: 3455 }, + // Malayalam + { begin: 3584, end: 3711 }, + // Thai + { begin: 3712, end: 3839 }, + // Lao + { begin: 4256, end: 4351 }, + // Georgian + { begin: 6912, end: 7039 }, + // Balinese + { begin: 4352, end: 4607 }, + // Hangul Jamo + { begin: 7680, end: 7935 }, + // Latin Extended Additional + { begin: 7936, end: 8191 }, + // Greek Extended + { begin: 8192, end: 8303 }, + // General Punctuation + { begin: 8304, end: 8351 }, + // Superscripts And Subscripts + { begin: 8352, end: 8399 }, + // Currency Symbol + { begin: 8400, end: 8447 }, + // Combining Diacritical Marks For Symbols + { begin: 8448, end: 8527 }, + // Letterlike Symbols + { begin: 8528, end: 8591 }, + // Number Forms + { begin: 8592, end: 8703 }, + // Arrows + { begin: 8704, end: 8959 }, + // Mathematical Operators + { begin: 8960, end: 9215 }, + // Miscellaneous Technical + { begin: 9216, end: 9279 }, + // Control Pictures + { begin: 9280, end: 9311 }, + // Optical Character Recognition + { begin: 9312, end: 9471 }, + // Enclosed Alphanumerics + { begin: 9472, end: 9599 }, + // Box Drawing + { begin: 9600, end: 9631 }, + // Block Elements + { begin: 9632, end: 9727 }, + // Geometric Shapes + { begin: 9728, end: 9983 }, + // Miscellaneous Symbols + { begin: 9984, end: 10175 }, + // Dingbats + { begin: 12288, end: 12351 }, + // CJK Symbols And Punctuation + { begin: 12352, end: 12447 }, + // Hiragana + { begin: 12448, end: 12543 }, + // Katakana + { begin: 12544, end: 12591 }, + // Bopomofo + { begin: 12592, end: 12687 }, + // Hangul Compatibility Jamo + { begin: 43072, end: 43135 }, + // Phags-pa + { begin: 12800, end: 13055 }, + // Enclosed CJK Letters And Months + { begin: 13056, end: 13311 }, + // CJK Compatibility + { begin: 44032, end: 55215 }, + // Hangul Syllables + { begin: 55296, end: 57343 }, + // Non-Plane 0 * + { begin: 67840, end: 67871 }, + // Phoenicia + { begin: 19968, end: 40959 }, + // CJK Unified Ideographs + { begin: 57344, end: 63743 }, + // Private Use Area (plane 0) + { begin: 12736, end: 12783 }, + // CJK Strokes + { begin: 64256, end: 64335 }, + // Alphabetic Presentation Forms + { begin: 64336, end: 65023 }, + // Arabic Presentation Forms-A + { begin: 65056, end: 65071 }, + // Combining Half Marks + { begin: 65040, end: 65055 }, + // Vertical Forms + { begin: 65104, end: 65135 }, + // Small Form Variants + { begin: 65136, end: 65279 }, + // Arabic Presentation Forms-B + { begin: 65280, end: 65519 }, + // Halfwidth And Fullwidth Forms + { begin: 65520, end: 65535 }, + // Specials + { begin: 3840, end: 4095 }, + // Tibetan + { begin: 1792, end: 1871 }, + // Syriac + { begin: 1920, end: 1983 }, + // Thaana + { begin: 3456, end: 3583 }, + // Sinhala + { begin: 4096, end: 4255 }, + // Myanmar + { begin: 4608, end: 4991 }, + // Ethiopic + { begin: 5024, end: 5119 }, + // Cherokee + { begin: 5120, end: 5759 }, + // Unified Canadian Aboriginal Syllabics + { begin: 5760, end: 5791 }, + // Ogham + { begin: 5792, end: 5887 }, + // Runic + { begin: 6016, end: 6143 }, + // Khmer + { begin: 6144, end: 6319 }, + // Mongolian + { begin: 10240, end: 10495 }, + // Braille Patterns + { begin: 40960, end: 42127 }, + // Yi Syllables + { begin: 5888, end: 5919 }, + // Tagalog + { begin: 66304, end: 66351 }, + // Old Italic + { begin: 66352, end: 66383 }, + // Gothic + { begin: 66560, end: 66639 }, + // Deseret + { begin: 118784, end: 119039 }, + // Byzantine Musical Symbols + { begin: 119808, end: 120831 }, + // Mathematical Alphanumeric Symbols + { begin: 1044480, end: 1048573 }, + // Private Use (plane 15) + { begin: 65024, end: 65039 }, + // Variation Selectors + { begin: 917504, end: 917631 }, + // Tags + { begin: 6400, end: 6479 }, + // Limbu + { begin: 6480, end: 6527 }, + // Tai Le + { begin: 6528, end: 6623 }, + // New Tai Lue + { begin: 6656, end: 6687 }, + // Buginese + { begin: 11264, end: 11359 }, + // Glagolitic + { begin: 11568, end: 11647 }, + // Tifinagh + { begin: 19904, end: 19967 }, + // Yijing Hexagram Symbols + { begin: 43008, end: 43055 }, + // Syloti Nagri + { begin: 65536, end: 65663 }, + // Linear B Syllabary + { begin: 65856, end: 65935 }, + // Ancient Greek Numbers + { begin: 66432, end: 66463 }, + // Ugaritic + { begin: 66464, end: 66527 }, + // Old Persian + { begin: 66640, end: 66687 }, + // Shavian + { begin: 66688, end: 66735 }, + // Osmanya + { begin: 67584, end: 67647 }, + // Cypriot Syllabary + { begin: 68096, end: 68191 }, + // Kharoshthi + { begin: 119552, end: 119647 }, + // Tai Xuan Jing Symbols + { begin: 73728, end: 74751 }, + // Cuneiform + { begin: 119648, end: 119679 }, + // Counting Rod Numerals + { begin: 7040, end: 7103 }, + // Sundanese + { begin: 7168, end: 7247 }, + // Lepcha + { begin: 7248, end: 7295 }, + // Ol Chiki + { begin: 43136, end: 43231 }, + // Saurashtra + { begin: 43264, end: 43311 }, + // Kayah Li + { begin: 43312, end: 43359 }, + // Rejang + { begin: 43520, end: 43615 }, + // Cham + { begin: 65936, end: 65999 }, + // Ancient Symbols + { begin: 66e3, end: 66047 }, + // Phaistos Disc + { begin: 66208, end: 66271 }, + // Carian + { begin: 127024, end: 127135 } + // Domino Tiles +]; +function getUnicodeRange(unicode) { + for (var i = 0; i < unicodeRanges.length; i += 1) { + var range = unicodeRanges[i]; + if (unicode >= range.begin && unicode < range.end) { + return i; + } + } + return -1; +} +function parseOS2Table(data2, start) { + var os22 = {}; + var p2 = new parse.Parser(data2, start); + os22.version = p2.parseUShort(); + os22.xAvgCharWidth = p2.parseShort(); + os22.usWeightClass = p2.parseUShort(); + os22.usWidthClass = p2.parseUShort(); + os22.fsType = p2.parseUShort(); + os22.ySubscriptXSize = p2.parseShort(); + os22.ySubscriptYSize = p2.parseShort(); + os22.ySubscriptXOffset = p2.parseShort(); + os22.ySubscriptYOffset = p2.parseShort(); + os22.ySuperscriptXSize = p2.parseShort(); + os22.ySuperscriptYSize = p2.parseShort(); + os22.ySuperscriptXOffset = p2.parseShort(); + os22.ySuperscriptYOffset = p2.parseShort(); + os22.yStrikeoutSize = p2.parseShort(); + os22.yStrikeoutPosition = p2.parseShort(); + os22.sFamilyClass = p2.parseShort(); + os22.panose = []; + for (var i = 0; i < 10; i++) { + os22.panose[i] = p2.parseByte(); + } + os22.ulUnicodeRange1 = p2.parseULong(); + os22.ulUnicodeRange2 = p2.parseULong(); + os22.ulUnicodeRange3 = p2.parseULong(); + os22.ulUnicodeRange4 = p2.parseULong(); + os22.achVendID = String.fromCharCode(p2.parseByte(), p2.parseByte(), p2.parseByte(), p2.parseByte()); + os22.fsSelection = p2.parseUShort(); + os22.usFirstCharIndex = p2.parseUShort(); + os22.usLastCharIndex = p2.parseUShort(); + os22.sTypoAscender = p2.parseShort(); + os22.sTypoDescender = p2.parseShort(); + os22.sTypoLineGap = p2.parseShort(); + os22.usWinAscent = p2.parseUShort(); + os22.usWinDescent = p2.parseUShort(); + if (os22.version >= 1) { + os22.ulCodePageRange1 = p2.parseULong(); + os22.ulCodePageRange2 = p2.parseULong(); + } + if (os22.version >= 2) { + os22.sxHeight = p2.parseShort(); + os22.sCapHeight = p2.parseShort(); + os22.usDefaultChar = p2.parseUShort(); + os22.usBreakChar = p2.parseUShort(); + os22.usMaxContent = p2.parseUShort(); + } + return os22; +} +function makeOS2Table(options) { + return new table.Table("OS/2", [ + { name: "version", type: "USHORT", value: 3 }, + { name: "xAvgCharWidth", type: "SHORT", value: 0 }, + { name: "usWeightClass", type: "USHORT", value: 0 }, + { name: "usWidthClass", type: "USHORT", value: 0 }, + { name: "fsType", type: "USHORT", value: 0 }, + { name: "ySubscriptXSize", type: "SHORT", value: 650 }, + { name: "ySubscriptYSize", type: "SHORT", value: 699 }, + { name: "ySubscriptXOffset", type: "SHORT", value: 0 }, + { name: "ySubscriptYOffset", type: "SHORT", value: 140 }, + { name: "ySuperscriptXSize", type: "SHORT", value: 650 }, + { name: "ySuperscriptYSize", type: "SHORT", value: 699 }, + { name: "ySuperscriptXOffset", type: "SHORT", value: 0 }, + { name: "ySuperscriptYOffset", type: "SHORT", value: 479 }, + { name: "yStrikeoutSize", type: "SHORT", value: 49 }, + { name: "yStrikeoutPosition", type: "SHORT", value: 258 }, + { name: "sFamilyClass", type: "SHORT", value: 0 }, + { name: "bFamilyType", type: "BYTE", value: 0 }, + { name: "bSerifStyle", type: "BYTE", value: 0 }, + { name: "bWeight", type: "BYTE", value: 0 }, + { name: "bProportion", type: "BYTE", value: 0 }, + { name: "bContrast", type: "BYTE", value: 0 }, + { name: "bStrokeVariation", type: "BYTE", value: 0 }, + { name: "bArmStyle", type: "BYTE", value: 0 }, + { name: "bLetterform", type: "BYTE", value: 0 }, + { name: "bMidline", type: "BYTE", value: 0 }, + { name: "bXHeight", type: "BYTE", value: 0 }, + { name: "ulUnicodeRange1", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange2", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange3", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange4", type: "ULONG", value: 0 }, + { name: "achVendID", type: "CHARARRAY", value: "XXXX" }, + { name: "fsSelection", type: "USHORT", value: 0 }, + { name: "usFirstCharIndex", type: "USHORT", value: 0 }, + { name: "usLastCharIndex", type: "USHORT", value: 0 }, + { name: "sTypoAscender", type: "SHORT", value: 0 }, + { name: "sTypoDescender", type: "SHORT", value: 0 }, + { name: "sTypoLineGap", type: "SHORT", value: 0 }, + { name: "usWinAscent", type: "USHORT", value: 0 }, + { name: "usWinDescent", type: "USHORT", value: 0 }, + { name: "ulCodePageRange1", type: "ULONG", value: 0 }, + { name: "ulCodePageRange2", type: "ULONG", value: 0 }, + { name: "sxHeight", type: "SHORT", value: 0 }, + { name: "sCapHeight", type: "SHORT", value: 0 }, + { name: "usDefaultChar", type: "USHORT", value: 0 }, + { name: "usBreakChar", type: "USHORT", value: 0 }, + { name: "usMaxContext", type: "USHORT", value: 0 } + ], options); +} +var os2 = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange }; +function parsePostTable(data2, start) { + var post2 = {}; + var p2 = new parse.Parser(data2, start); + post2.version = p2.parseVersion(); + post2.italicAngle = p2.parseFixed(); + post2.underlinePosition = p2.parseShort(); + post2.underlineThickness = p2.parseShort(); + post2.isFixedPitch = p2.parseULong(); + post2.minMemType42 = p2.parseULong(); + post2.maxMemType42 = p2.parseULong(); + post2.minMemType1 = p2.parseULong(); + post2.maxMemType1 = p2.parseULong(); + switch (post2.version) { + case 1: + post2.names = standardNames.slice(); + break; + case 2: + post2.numberOfGlyphs = p2.parseUShort(); + post2.glyphNameIndex = new Array(post2.numberOfGlyphs); + for (var i = 0; i < post2.numberOfGlyphs; i++) { + post2.glyphNameIndex[i] = p2.parseUShort(); + } + post2.names = []; + for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) { + if (post2.glyphNameIndex[i$1] >= standardNames.length) { + var nameLength = p2.parseChar(); + post2.names.push(p2.parseString(nameLength)); + } + } + break; + case 2.5: + post2.numberOfGlyphs = p2.parseUShort(); + post2.offset = new Array(post2.numberOfGlyphs); + for (var i$2 = 0; i$2 < post2.numberOfGlyphs; i$2++) { + post2.offset[i$2] = p2.parseChar(); + } + break; + } + return post2; +} +function makePostTable() { + return new table.Table("post", [ + { name: "version", type: "FIXED", value: 196608 }, + { name: "italicAngle", type: "FIXED", value: 0 }, + { name: "underlinePosition", type: "FWORD", value: 0 }, + { name: "underlineThickness", type: "FWORD", value: 0 }, + { name: "isFixedPitch", type: "ULONG", value: 0 }, + { name: "minMemType42", type: "ULONG", value: 0 }, + { name: "maxMemType42", type: "ULONG", value: 0 }, + { name: "minMemType1", type: "ULONG", value: 0 }, + { name: "maxMemType1", type: "ULONG", value: 0 } + ]); +} +var post = { parse: parsePostTable, make: makePostTable }; +var subtableParsers = new Array(9); +subtableParsers[1] = function parseLookup1() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + deltaGlyphId: this.parseUShort() + }; + } else if (substFormat === 2) { + return { + substFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + substitute: this.parseOffset16List() + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 1 format must be 1 or 2."); +}; +subtableParsers[2] = function parseLookup2() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Multiple Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + sequences: this.parseListOfLists() + }; +}; +subtableParsers[3] = function parseLookup3() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Alternate Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + alternateSets: this.parseListOfLists() + }; +}; +subtableParsers[4] = function parseLookup4() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB ligature table identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + ligatureSets: this.parseListOfLists(function() { + return { + ligGlyph: this.parseUShort(), + components: this.parseUShortList(this.parseUShort() - 1) + }; + }) + }; +}; +var lookupRecordDesc = { + sequenceIndex: Parser2.uShort, + lookupListIndex: Parser2.uShort +}; +subtableParsers[5] = function parseLookup5() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + ruleSets: this.parseListOfLists(function() { + var glyphCount2 = this.parseUShort(); + var substCount2 = this.parseUShort(); + return { + input: this.parseUShortList(glyphCount2 - 1), + lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 2) { + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + classDef: this.parsePointer(Parser2.classDef), + classSets: this.parseListOfLists(function() { + var glyphCount2 = this.parseUShort(); + var substCount2 = this.parseUShort(); + return { + classes: this.parseUShortList(glyphCount2 - 1), + lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 3) { + var glyphCount = this.parseUShort(); + var substCount = this.parseUShort(); + return { + substFormat, + coverages: this.parseList(glyphCount, Parser2.pointer(Parser2.coverage)), + lookupRecords: this.parseRecordList(substCount, lookupRecordDesc) + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 5 format must be 1, 2 or 3."); +}; +subtableParsers[6] = function parseLookup6() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + chainRuleSets: this.parseListOfLists(function() { + return { + backtrack: this.parseUShortList(), + input: this.parseUShortList(this.parseShort() - 1), + lookahead: this.parseUShortList(), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 2) { + return { + substFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + backtrackClassDef: this.parsePointer(Parser2.classDef), + inputClassDef: this.parsePointer(Parser2.classDef), + lookaheadClassDef: this.parsePointer(Parser2.classDef), + chainClassSet: this.parseListOfLists(function() { + return { + backtrack: this.parseUShortList(), + input: this.parseUShortList(this.parseShort() - 1), + lookahead: this.parseUShortList(), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 3) { + return { + substFormat: 3, + backtrackCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + inputCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookaheadCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 6 format must be 1, 2 or 3."); +}; +subtableParsers[7] = function parseLookup7() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Extension Substitution subtable identifier-format must be 1"); + var extensionLookupType = this.parseUShort(); + var extensionParser = new Parser2(this.data, this.offset + this.parseULong()); + return { + substFormat: 1, + lookupType: extensionLookupType, + extension: subtableParsers[extensionLookupType].call(extensionParser) + }; +}; +subtableParsers[8] = function parseLookup8() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + backtrackCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookaheadCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + substitutes: this.parseUShortList() + }; +}; +function parseGsubTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GSUB table version."); + if (tableVersion === 1) { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers) + }; + } else { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers), + variations: p2.parseFeatureVariationsList() + }; + } +} +var subtableMakers = new Array(9); +subtableMakers[1] = function makeLookup1(subtable) { + if (subtable.substFormat === 1) { + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) }, + { name: "deltaGlyphID", type: "USHORT", value: subtable.deltaGlyphId } + ]); + } else { + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 2 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.ushortList("substitute", subtable.substitute))); + } +}; +subtableMakers[2] = function makeLookup2(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 2 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("seqSet", subtable.sequences, function(sequenceSet) { + return new table.Table("sequenceSetTable", table.ushortList("sequence", sequenceSet)); + }))); +}; +subtableMakers[3] = function makeLookup3(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 3 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("altSet", subtable.alternateSets, function(alternateSet) { + return new table.Table("alternateSetTable", table.ushortList("alternate", alternateSet)); + }))); +}; +subtableMakers[4] = function makeLookup4(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 4 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("ligSet", subtable.ligatureSets, function(ligatureSet) { + return new table.Table("ligatureSetTable", table.tableList("ligature", ligatureSet, function(ligature) { + return new table.Table( + "ligatureTable", + [{ name: "ligGlyph", type: "USHORT", value: ligature.ligGlyph }].concat(table.ushortList("component", ligature.components, ligature.components.length + 1)) + ); + })); + }))); +}; +subtableMakers[6] = function makeLookup6(subtable) { + if (subtable.substFormat === 1) { + var returnTable = new table.Table("chainContextTable", [ + { name: "substFormat", type: "USHORT", value: subtable.substFormat }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("chainRuleSet", subtable.chainRuleSets, function(chainRuleSet) { + return new table.Table("chainRuleSetTable", table.tableList("chainRule", chainRuleSet, function(chainRule) { + var tableData2 = table.ushortList("backtrackGlyph", chainRule.backtrack, chainRule.backtrack.length).concat(table.ushortList("inputGlyph", chainRule.input, chainRule.input.length + 1)).concat(table.ushortList("lookaheadGlyph", chainRule.lookahead, chainRule.lookahead.length)).concat(table.ushortList("substitution", [], chainRule.lookupRecords.length)); + chainRule.lookupRecords.forEach(function(record, i) { + tableData2 = tableData2.concat({ name: "sequenceIndex" + i, type: "USHORT", value: record.sequenceIndex }).concat({ name: "lookupListIndex" + i, type: "USHORT", value: record.lookupListIndex }); + }); + return new table.Table("chainRuleTable", tableData2); + })); + }))); + return returnTable; + } else if (subtable.substFormat === 2) { + check.assert(false, "lookup type 6 format 2 is not yet supported."); + } else if (subtable.substFormat === 3) { + var tableData = [ + { name: "substFormat", type: "USHORT", value: subtable.substFormat } + ]; + tableData.push({ name: "backtrackGlyphCount", type: "USHORT", value: subtable.backtrackCoverage.length }); + subtable.backtrackCoverage.forEach(function(coverage, i) { + tableData.push({ name: "backtrackCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "inputGlyphCount", type: "USHORT", value: subtable.inputCoverage.length }); + subtable.inputCoverage.forEach(function(coverage, i) { + tableData.push({ name: "inputCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "lookaheadGlyphCount", type: "USHORT", value: subtable.lookaheadCoverage.length }); + subtable.lookaheadCoverage.forEach(function(coverage, i) { + tableData.push({ name: "lookaheadCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "substitutionCount", type: "USHORT", value: subtable.lookupRecords.length }); + subtable.lookupRecords.forEach(function(record, i) { + tableData = tableData.concat({ name: "sequenceIndex" + i, type: "USHORT", value: record.sequenceIndex }).concat({ name: "lookupListIndex" + i, type: "USHORT", value: record.lookupListIndex }); + }); + var returnTable$1 = new table.Table("chainContextTable", tableData); + return returnTable$1; + } + check.assert(false, "lookup type 6 format must be 1, 2 or 3."); +}; +function makeGsubTable(gsub2) { + return new table.Table("GSUB", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "scripts", type: "TABLE", value: new table.ScriptList(gsub2.scripts) }, + { name: "features", type: "TABLE", value: new table.FeatureList(gsub2.features) }, + { name: "lookups", type: "TABLE", value: new table.LookupList(gsub2.lookups, subtableMakers) } + ]); +} +var gsub = { parse: parseGsubTable, make: makeGsubTable }; +function parseMetaTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 1, "Unsupported META table version."); + p2.parseULong(); + p2.parseULong(); + var numDataMaps = p2.parseULong(); + var tags = {}; + for (var i = 0; i < numDataMaps; i++) { + var tag = p2.parseTag(); + var dataOffset = p2.parseULong(); + var dataLength = p2.parseULong(); + var text2 = decode.UTF8(data2, start + dataOffset, dataLength); + tags[tag] = text2; + } + return tags; +} +function makeMetaTable(tags) { + var numTags = Object.keys(tags).length; + var stringPool = ""; + var stringPoolOffset = 16 + numTags * 12; + var result = new table.Table("meta", [ + { name: "version", type: "ULONG", value: 1 }, + { name: "flags", type: "ULONG", value: 0 }, + { name: "offset", type: "ULONG", value: stringPoolOffset }, + { name: "numTags", type: "ULONG", value: numTags } + ]); + for (var tag in tags) { + var pos = stringPool.length; + stringPool += tags[tag]; + result.fields.push({ name: "tag " + tag, type: "TAG", value: tag }); + result.fields.push({ name: "offset " + tag, type: "ULONG", value: stringPoolOffset + pos }); + result.fields.push({ name: "length " + tag, type: "ULONG", value: tags[tag].length }); + } + result.fields.push({ name: "stringPool", type: "CHARARRAY", value: stringPool }); + return result; +} +var meta = { parse: parseMetaTable, make: makeMetaTable }; +function parseColrTable(data2, start) { + var p2 = new Parser2(data2, start); + var version = p2.parseUShort(); + check.argument(version === 0, "Only COLRv0 supported."); + var numBaseGlyphRecords = p2.parseUShort(); + var baseGlyphRecordsOffset = p2.parseOffset32(); + var layerRecordsOffset = p2.parseOffset32(); + var numLayerRecords = p2.parseUShort(); + p2.relativeOffset = baseGlyphRecordsOffset; + var baseGlyphRecords = p2.parseRecordList(numBaseGlyphRecords, { + glyphID: Parser2.uShort, + firstLayerIndex: Parser2.uShort, + numLayers: Parser2.uShort + }); + p2.relativeOffset = layerRecordsOffset; + var layerRecords = p2.parseRecordList(numLayerRecords, { + glyphID: Parser2.uShort, + paletteIndex: Parser2.uShort + }); + return { + version, + baseGlyphRecords, + layerRecords + }; +} +function makeColrTable(ref) { + var version = ref.version; + if (version === void 0) version = 0; + var baseGlyphRecords = ref.baseGlyphRecords; + if (baseGlyphRecords === void 0) baseGlyphRecords = []; + var layerRecords = ref.layerRecords; + if (layerRecords === void 0) layerRecords = []; + check.argument(version === 0, "Only COLRv0 supported."); + var baseGlyphRecordsOffset = 14; + var layerRecordsOffset = baseGlyphRecordsOffset + baseGlyphRecords.length * 6; + return new table.Table("COLR", [ + { name: "version", type: "USHORT", value: version }, + { name: "numBaseGlyphRecords", type: "USHORT", value: baseGlyphRecords.length }, + { name: "baseGlyphRecordsOffset", type: "ULONG", value: baseGlyphRecordsOffset }, + { name: "layerRecordsOffset", type: "ULONG", value: layerRecordsOffset }, + { name: "numLayerRecords", type: "USHORT", value: layerRecords.length } + ].concat( + baseGlyphRecords.map(function(glyph, i) { + return [ + { name: "glyphID_" + i, type: "USHORT", value: glyph.glyphID }, + { name: "firstLayerIndex_" + i, type: "USHORT", value: glyph.firstLayerIndex }, + { name: "numLayers_" + i, type: "USHORT", value: glyph.numLayers } + ]; + }).flat(), + layerRecords.map(function(layer, i) { + return [ + { name: "LayerGlyphID_" + i, type: "USHORT", value: layer.glyphID }, + { name: "paletteIndex_" + i, type: "USHORT", value: layer.paletteIndex } + ]; + }).flat() + )); +} +var colr = { parse: parseColrTable, make: makeColrTable }; +function parseCpalTable(data2, start) { + var p2 = new Parser2(data2, start); + var version = p2.parseShort(); + var numPaletteEntries = p2.parseShort(); + var numPalettes = p2.parseShort(); + var numColorRecords = p2.parseShort(); + var colorRecordsArrayOffset = p2.parseOffset32(); + var colorRecordIndices = p2.parseUShortList(numPalettes); + p2.relativeOffset = colorRecordsArrayOffset; + var colorRecords = p2.parseULongList(numColorRecords); + return { + version, + numPaletteEntries, + colorRecords, + colorRecordIndices + }; +} +function makeCpalTable(ref) { + var version = ref.version; + if (version === void 0) version = 0; + var numPaletteEntries = ref.numPaletteEntries; + if (numPaletteEntries === void 0) numPaletteEntries = 0; + var colorRecords = ref.colorRecords; + if (colorRecords === void 0) colorRecords = []; + var colorRecordIndices = ref.colorRecordIndices; + if (colorRecordIndices === void 0) colorRecordIndices = [0]; + check.argument(version === 0, "Only CPALv0 are supported."); + check.argument(colorRecords.length, "No colorRecords given."); + check.argument(colorRecordIndices.length, "No colorRecordIndices given."); + check.argument(!numPaletteEntries && colorRecordIndices.length == 1, "Can't infer numPaletteEntries on multiple colorRecordIndices"); + return new table.Table("CPAL", [ + { name: "version", type: "USHORT", value: version }, + { name: "numPaletteEntries", type: "USHORT", value: numPaletteEntries || colorRecords.length }, + { name: "numPalettes", type: "USHORT", value: colorRecordIndices.length }, + { name: "numColorRecords", type: "USHORT", value: colorRecords.length }, + { name: "colorRecordsArrayOffset", type: "ULONG", value: 12 + 2 * colorRecordIndices.length } + ].concat( + colorRecordIndices.map(function(palette, i) { + return { name: "colorRecordIndices_" + i, type: "USHORT", value: palette }; + }), + colorRecords.map(function(color, i) { + return { name: "colorRecords_" + i, type: "ULONG", value: color }; + }) + )); +} +var cpal = { parse: parseCpalTable, make: makeCpalTable }; +function log2(v) { + return Math.log(v) / Math.log(2) | 0; +} +function computeCheckSum(bytes) { + while (bytes.length % 4 !== 0) { + bytes.push(0); + } + var sum2 = 0; + for (var i = 0; i < bytes.length; i += 4) { + sum2 += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3]; + } + sum2 %= Math.pow(2, 32); + return sum2; +} +function makeTableRecord(tag, checkSum, offset, length2) { + return new table.Record("Table Record", [ + { name: "tag", type: "TAG", value: tag !== void 0 ? tag : "" }, + { name: "checkSum", type: "ULONG", value: checkSum !== void 0 ? checkSum : 0 }, + { name: "offset", type: "ULONG", value: offset !== void 0 ? offset : 0 }, + { name: "length", type: "ULONG", value: length2 !== void 0 ? length2 : 0 } + ]); +} +function makeSfntTable(tables) { + var sfnt2 = new table.Table("sfnt", [ + { name: "version", type: "TAG", value: "OTTO" }, + { name: "numTables", type: "USHORT", value: 0 }, + { name: "searchRange", type: "USHORT", value: 0 }, + { name: "entrySelector", type: "USHORT", value: 0 }, + { name: "rangeShift", type: "USHORT", value: 0 } + ]); + sfnt2.tables = tables; + sfnt2.numTables = tables.length; + var highestPowerOf2 = Math.pow(2, log2(sfnt2.numTables)); + sfnt2.searchRange = 16 * highestPowerOf2; + sfnt2.entrySelector = log2(highestPowerOf2); + sfnt2.rangeShift = sfnt2.numTables * 16 - sfnt2.searchRange; + var recordFields = []; + var tableFields = []; + var offset = sfnt2.sizeOf() + makeTableRecord().sizeOf() * sfnt2.numTables; + while (offset % 4 !== 0) { + offset += 1; + tableFields.push({ name: "padding", type: "BYTE", value: 0 }); + } + for (var i = 0; i < tables.length; i += 1) { + var t3 = tables[i]; + check.argument(t3.tableName.length === 4, "Table name" + t3.tableName + " is invalid."); + var tableLength = t3.sizeOf(); + var tableRecord = makeTableRecord(t3.tableName, computeCheckSum(t3.encode()), offset, tableLength); + recordFields.push({ name: tableRecord.tag + " Table Record", type: "RECORD", value: tableRecord }); + tableFields.push({ name: t3.tableName + " table", type: "RECORD", value: t3 }); + offset += tableLength; + check.argument(!isNaN(offset), "Something went wrong calculating the offset."); + while (offset % 4 !== 0) { + offset += 1; + tableFields.push({ name: "padding", type: "BYTE", value: 0 }); + } + } + recordFields.sort(function(r1, r2) { + if (r1.value.tag > r2.value.tag) { + return 1; + } else { + return -1; + } + }); + sfnt2.fields = sfnt2.fields.concat(recordFields); + sfnt2.fields = sfnt2.fields.concat(tableFields); + return sfnt2; +} +function metricsForChar(font, chars, notFoundMetrics) { + for (var i = 0; i < chars.length; i += 1) { + var glyphIndex = font.charToGlyphIndex(chars[i]); + if (glyphIndex > 0) { + var glyph = font.glyphs.get(glyphIndex); + return glyph.getMetrics(); + } + } + return notFoundMetrics; +} +function average(vs) { + var sum2 = 0; + for (var i = 0; i < vs.length; i += 1) { + sum2 += vs[i]; + } + return sum2 / vs.length; +} +function fontToSfntTable(font) { + var xMins = []; + var yMins = []; + var xMaxs = []; + var yMaxs = []; + var advanceWidths = []; + var leftSideBearings = []; + var rightSideBearings = []; + var firstCharIndex; + var lastCharIndex = 0; + var ulUnicodeRange1 = 0; + var ulUnicodeRange2 = 0; + var ulUnicodeRange3 = 0; + var ulUnicodeRange4 = 0; + for (var i = 0; i < font.glyphs.length; i += 1) { + var glyph = font.glyphs.get(i); + var unicode = glyph.unicode | 0; + if (isNaN(glyph.advanceWidth)) { + throw new Error("Glyph " + glyph.name + " (" + i + "): advanceWidth is not a number."); + } + if (firstCharIndex > unicode || firstCharIndex === void 0) { + if (unicode > 0) { + firstCharIndex = unicode; + } + } + if (lastCharIndex < unicode) { + lastCharIndex = unicode; + } + var position2 = os2.getUnicodeRange(unicode); + if (position2 < 32) { + ulUnicodeRange1 |= 1 << position2; + } else if (position2 < 64) { + ulUnicodeRange2 |= 1 << position2 - 32; + } else if (position2 < 96) { + ulUnicodeRange3 |= 1 << position2 - 64; + } else if (position2 < 123) { + ulUnicodeRange4 |= 1 << position2 - 96; + } else { + throw new Error("Unicode ranges bits > 123 are reserved for internal usage"); + } + if (glyph.name === ".notdef") { + continue; + } + var metrics = glyph.getMetrics(); + xMins.push(metrics.xMin); + yMins.push(metrics.yMin); + xMaxs.push(metrics.xMax); + yMaxs.push(metrics.yMax); + leftSideBearings.push(metrics.leftSideBearing); + rightSideBearings.push(metrics.rightSideBearing); + advanceWidths.push(glyph.advanceWidth); + } + var globals = { + xMin: Math.min.apply(null, xMins), + yMin: Math.min.apply(null, yMins), + xMax: Math.max.apply(null, xMaxs), + yMax: Math.max.apply(null, yMaxs), + advanceWidthMax: Math.max.apply(null, advanceWidths), + advanceWidthAvg: average(advanceWidths), + minLeftSideBearing: Math.min.apply(null, leftSideBearings), + maxLeftSideBearing: Math.max.apply(null, leftSideBearings), + minRightSideBearing: Math.min.apply(null, rightSideBearings) + }; + globals.ascender = font.ascender; + globals.descender = font.descender; + var headTable = head.make({ + flags: 3, + // 00000011 (baseline for font at y=0; left sidebearing point at x=0) + unitsPerEm: font.unitsPerEm, + xMin: globals.xMin, + yMin: globals.yMin, + xMax: globals.xMax, + yMax: globals.yMax, + lowestRecPPEM: 3, + createdTimestamp: font.createdTimestamp + }); + var hheaTable = hhea.make({ + ascender: globals.ascender, + descender: globals.descender, + advanceWidthMax: globals.advanceWidthMax, + minLeftSideBearing: globals.minLeftSideBearing, + minRightSideBearing: globals.minRightSideBearing, + xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin), + numberOfHMetrics: font.glyphs.length + }); + var maxpTable = maxp.make(font.glyphs.length); + var os2Table = os2.make(Object.assign({ + xAvgCharWidth: Math.round(globals.advanceWidthAvg), + usFirstCharIndex: firstCharIndex, + usLastCharIndex: lastCharIndex, + ulUnicodeRange1, + ulUnicodeRange2, + ulUnicodeRange3, + ulUnicodeRange4, + // See http://typophile.com/node/13081 for more info on vertical metrics. + // We get metrics for typical characters (such as "x" for xHeight). + // We provide some fallback characters if characters are unavailable: their + // ordering was chosen experimentally. + sTypoAscender: globals.ascender, + sTypoDescender: globals.descender, + sTypoLineGap: 0, + usWinAscent: globals.yMax, + usWinDescent: Math.abs(globals.yMin), + ulCodePageRange1: 1, + // FIXME: hard-code Latin 1 support for now + sxHeight: metricsForChar(font, "xyvw", { yMax: Math.round(globals.ascender / 2) }).yMax, + sCapHeight: metricsForChar(font, "HIKLEFJMNTZBDPRAGOQSUVWXY", globals).yMax, + usDefaultChar: font.hasChar(" ") ? 32 : 0, + // Use space as the default character, if available. + usBreakChar: font.hasChar(" ") ? 32 : 0 + // Use space as the break character, if available. + }, font.tables.os2)); + var hmtxTable = hmtx.make(font.glyphs); + var cmapTable = cmap.make(font.glyphs); + var englishFamilyName = font.getEnglishName("fontFamily"); + var englishStyleName = font.getEnglishName("fontSubfamily"); + var englishFullName = englishFamilyName + " " + englishStyleName; + var postScriptName = font.getEnglishName("postScriptName"); + if (!postScriptName) { + postScriptName = englishFamilyName.replace(/\s/g, "") + "-" + englishStyleName; + } + var names = {}; + for (var n2 in font.names) { + names[n2] = font.names[n2]; + } + if (!names.uniqueID) { + names.uniqueID = { en: font.getEnglishName("manufacturer") + ":" + englishFullName }; + } + if (!names.postScriptName) { + names.postScriptName = { en: postScriptName }; + } + if (!names.preferredFamily) { + names.preferredFamily = font.names.fontFamily; + } + if (!names.preferredSubfamily) { + names.preferredSubfamily = font.names.fontSubfamily; + } + var languageTags = []; + var nameTable = _name.make(names, languageTags); + var ltagTable = languageTags.length > 0 ? ltag.make(languageTags) : void 0; + var postTable = post.make(); + var cffTable = cff.make(font.glyphs, { + version: font.getEnglishName("version"), + fullName: englishFullName, + familyName: englishFamilyName, + weightName: englishStyleName, + postScriptName, + unitsPerEm: font.unitsPerEm, + fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax] + }); + var metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta.make(font.metas) : void 0; + var tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable]; + if (ltagTable) { + tables.push(ltagTable); + } + if (font.tables.gsub) { + tables.push(gsub.make(font.tables.gsub)); + } + if (font.tables.cpal) { + tables.push(cpal.make(font.tables.cpal)); + } + if (font.tables.colr) { + tables.push(colr.make(font.tables.colr)); + } + if (metaTable) { + tables.push(metaTable); + } + var sfntTable = makeSfntTable(tables); + var bytes = sfntTable.encode(); + var checkSum = computeCheckSum(bytes); + var tableFields = sfntTable.fields; + var checkSumAdjusted = false; + for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) { + if (tableFields[i$1].name === "head table") { + tableFields[i$1].value.checkSumAdjustment = 2981146554 - checkSum; + checkSumAdjusted = true; + break; + } + } + if (!checkSumAdjusted) { + throw new Error("Could not find head table with checkSum to adjust."); + } + return sfntTable; +} +var sfnt = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum }; +function searchTag(arr, tag) { + var imin = 0; + var imax = arr.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + var val2 = arr[imid].tag; + if (val2 === tag) { + return imid; + } else if (val2 < tag) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + return -imin - 1; +} +function binSearch(arr, value2) { + var imin = 0; + var imax = arr.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + var val2 = arr[imid]; + if (val2 === value2) { + return imid; + } else if (val2 < value2) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + return -imin - 1; +} +function searchRange(ranges, value2) { + var range; + var imin = 0; + var imax = ranges.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + range = ranges[imid]; + var start = range.start; + if (start === value2) { + return range; + } else if (start < value2) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + if (imin > 0) { + range = ranges[imin - 1]; + if (value2 > range.end) { + return 0; + } + return range; + } +} +function Layout(font, tableName) { + this.font = font; + this.tableName = tableName; +} +Layout.prototype = { + /** + * Binary search an object by "tag" property + * @instance + * @function searchTag + * @memberof opentype.Layout + * @param {Array} arr + * @param {string} tag + * @return {number} + */ + searchTag, + /** + * Binary search in a list of numbers + * @instance + * @function binSearch + * @memberof opentype.Layout + * @param {Array} arr + * @param {number} value + * @return {number} + */ + binSearch, + /** + * Get or create the Layout table (GSUB, GPOS etc). + * @param {boolean} create - Whether to create a new one. + * @return {Object} The GSUB or GPOS table. + */ + getTable: function(create) { + var layout = this.font.tables[this.tableName]; + if (!layout && create) { + layout = this.font.tables[this.tableName] = this.createDefaultTable(); + } + return layout; + }, + /** + * Returns all scripts in the substitution table. + * @instance + * @return {Array} + */ + getScriptNames: function() { + var layout = this.getTable(); + if (!layout) { + return []; + } + return layout.scripts.map(function(script) { + return script.tag; + }); + }, + /** + * Returns the best bet for a script name. + * Returns 'DFLT' if it exists. + * If not, returns 'latn' if it exists. + * If neither exist, returns undefined. + */ + getDefaultScriptName: function() { + var layout = this.getTable(); + if (!layout) { + return; + } + var hasLatn = false; + for (var i = 0; i < layout.scripts.length; i++) { + var name2 = layout.scripts[i].tag; + if (name2 === "DFLT") { + return name2; + } + if (name2 === "latn") { + hasLatn = true; + } + } + if (hasLatn) { + return "latn"; + } + }, + /** + * Returns all LangSysRecords in the given script. + * @instance + * @param {string} [script='DFLT'] + * @param {boolean} create - forces the creation of this script table if it doesn't exist. + * @return {Object} An object with tag and script properties. + */ + getScriptTable: function(script, create) { + var layout = this.getTable(create); + if (layout) { + script = script || "DFLT"; + var scripts = layout.scripts; + var pos = searchTag(layout.scripts, script); + if (pos >= 0) { + return scripts[pos].script; + } else if (create) { + var scr = { + tag: script, + script: { + defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }, + langSysRecords: [] + } + }; + scripts.splice(-1 - pos, 0, scr); + return scr.script; + } + } + }, + /** + * Returns a language system table + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist. + * @return {Object} + */ + getLangSysTable: function(script, language, create) { + var scriptTable = this.getScriptTable(script, create); + if (scriptTable) { + if (!language || language === "dflt" || language === "DFLT") { + return scriptTable.defaultLangSys; + } + var pos = searchTag(scriptTable.langSysRecords, language); + if (pos >= 0) { + return scriptTable.langSysRecords[pos].langSys; + } else if (create) { + var langSysRecord = { + tag: language, + langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] } + }; + scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord); + return langSysRecord.langSys; + } + } + }, + /** + * Get a specific feature table. + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm + * @param {boolean} create - forces the creation of the feature table if it doesn't exist. + * @return {Object} + */ + getFeatureTable: function(script, language, feature, create) { + var langSysTable2 = this.getLangSysTable(script, language, create); + if (langSysTable2) { + var featureRecord; + var featIndexes = langSysTable2.featureIndexes; + var allFeatures = this.font.tables[this.tableName].features; + for (var i = 0; i < featIndexes.length; i++) { + featureRecord = allFeatures[featIndexes[i]]; + if (featureRecord.tag === feature) { + return featureRecord.feature; + } + } + if (create) { + var index2 = allFeatures.length; + check.assert(index2 === 0 || feature >= allFeatures[index2 - 1].tag, "Features must be added in alphabetical order."); + featureRecord = { + tag: feature, + feature: { params: 0, lookupListIndexes: [] } + }; + allFeatures.push(featureRecord); + featIndexes.push(index2); + return featureRecord.feature; + } + } + }, + /** + * Get the lookup tables of a given type for a script/language/feature. + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {string} feature - 4-letter feature code + * @param {number} lookupType - 1 to 9 + * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables. + * @return {Object[]} + */ + getLookupTables: function(script, language, feature, lookupType, create) { + var featureTable = this.getFeatureTable(script, language, feature, create); + var tables = []; + if (featureTable) { + var lookupTable; + var lookupListIndexes = featureTable.lookupListIndexes; + var allLookups = this.font.tables[this.tableName].lookups; + for (var i = 0; i < lookupListIndexes.length; i++) { + lookupTable = allLookups[lookupListIndexes[i]]; + if (lookupTable.lookupType === lookupType) { + tables.push(lookupTable); + } + } + if (tables.length === 0 && create) { + lookupTable = { + lookupType, + lookupFlag: 0, + subtables: [], + markFilteringSet: void 0 + }; + var index2 = allLookups.length; + allLookups.push(lookupTable); + lookupListIndexes.push(index2); + return [lookupTable]; + } + } + return tables; + }, + /** + * Find a glyph in a class definition table + * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table + * @param {object} classDefTable - an OpenType Layout class definition table + * @param {number} glyphIndex - the index of the glyph to find + * @returns {number} -1 if not found + */ + getGlyphClass: function(classDefTable, glyphIndex) { + switch (classDefTable.format) { + case 1: + if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) { + return classDefTable.classes[glyphIndex - classDefTable.startGlyph]; + } + return 0; + case 2: + var range = searchRange(classDefTable.ranges, glyphIndex); + return range ? range.classId : 0; + } + }, + /** + * Find a glyph in a coverage table + * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table + * @param {object} coverageTable - an OpenType Layout coverage table + * @param {number} glyphIndex - the index of the glyph to find + * @returns {number} -1 if not found + */ + getCoverageIndex: function(coverageTable, glyphIndex) { + switch (coverageTable.format) { + case 1: + var index2 = binSearch(coverageTable.glyphs, glyphIndex); + return index2 >= 0 ? index2 : -1; + case 2: + var range = searchRange(coverageTable.ranges, glyphIndex); + return range ? range.index + glyphIndex - range.start : -1; + } + }, + /** + * Returns the list of glyph indexes of a coverage table. + * Format 1: the list is stored raw + * Format 2: compact list as range records. + * @instance + * @param {Object} coverageTable + * @return {Array} + */ + expandCoverage: function(coverageTable) { + if (coverageTable.format === 1) { + return coverageTable.glyphs; + } else { + var glyphs = []; + var ranges = coverageTable.ranges; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var start = range.start; + var end = range.end; + for (var j = start; j <= end; j++) { + glyphs.push(j); + } + } + return glyphs; + } + } +}; +function Position(font) { + Layout.call(this, font, "gpos"); +} +Position.prototype = Layout.prototype; +Position.prototype.init = function() { + var script = this.getDefaultScriptName(); + this.defaultKerningTables = this.getKerningTables(script); +}; +Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) { + for (var i = 0; i < kerningLookups.length; i++) { + var subtables = kerningLookups[i].subtables; + for (var j = 0; j < subtables.length; j++) { + var subtable = subtables[j]; + var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex); + if (covIndex < 0) { + continue; + } + switch (subtable.posFormat) { + case 1: + var pairSet = subtable.pairSets[covIndex]; + for (var k2 = 0; k2 < pairSet.length; k2++) { + var pair = pairSet[k2]; + if (pair.secondGlyph === rightIndex) { + return pair.value1 && pair.value1.xAdvance || 0; + } + } + break; + case 2: + var class1 = this.getGlyphClass(subtable.classDef1, leftIndex); + var class2 = this.getGlyphClass(subtable.classDef2, rightIndex); + var pair$1 = subtable.classRecords[class1][class2]; + return pair$1.value1 && pair$1.value1.xAdvance || 0; + } + } + } + return 0; +}; +Position.prototype.getKerningTables = function(script, language) { + if (this.font.tables.gpos) { + return this.getLookupTables(script, language, "kern", 2); + } +}; +function Substitution(font) { + Layout.call(this, font, "gsub"); +} +function arraysEqual(ar1, ar2) { + var n2 = ar1.length; + if (n2 !== ar2.length) { + return false; + } + for (var i = 0; i < n2; i++) { + if (ar1[i] !== ar2[i]) { + return false; + } + } + return true; +} +function getSubstFormat(lookupTable, format, defaultSubtable) { + var subtables = lookupTable.subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + if (subtable.substFormat === format) { + return subtable; + } + } + if (defaultSubtable) { + subtables.push(defaultSubtable); + return defaultSubtable; + } + return void 0; +} +Substitution.prototype = Layout.prototype; +Substitution.prototype.createDefaultTable = function() { + return { + version: 1, + scripts: [{ + tag: "DFLT", + script: { + defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }, + langSysRecords: [] + } + }], + features: [], + lookups: [] + }; +}; +Substitution.prototype.getSingle = function(feature, script, language) { + var substitutions = []; + var lookupTables = this.getLookupTables(script, language, feature, 1); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var j = void 0; + if (subtable.substFormat === 1) { + var delta = subtable.deltaGlyphId; + for (j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + substitutions.push({ sub: glyph, by: glyph + delta }); + } + } else { + var substitute = subtable.substitute; + for (j = 0; j < glyphs.length; j++) { + substitutions.push({ sub: glyphs[j], by: substitute[j] }); + } + } + } + } + return substitutions; +}; +Substitution.prototype.getMultiple = function(feature, script, language) { + var substitutions = []; + var lookupTables = this.getLookupTables(script, language, feature, 2); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var j = void 0; + for (j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + var replacements = subtable.sequences[j]; + substitutions.push({ sub: glyph, by: replacements }); + } + } + } + return substitutions; +}; +Substitution.prototype.getAlternates = function(feature, script, language) { + var alternates = []; + var lookupTables = this.getLookupTables(script, language, feature, 3); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var alternateSets = subtable.alternateSets; + for (var j = 0; j < glyphs.length; j++) { + alternates.push({ sub: glyphs[j], by: alternateSets[j] }); + } + } + } + return alternates; +}; +Substitution.prototype.getLigatures = function(feature, script, language) { + var ligatures = []; + var lookupTables = this.getLookupTables(script, language, feature, 4); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var ligatureSets = subtable.ligatureSets; + for (var j = 0; j < glyphs.length; j++) { + var startGlyph = glyphs[j]; + var ligSet = ligatureSets[j]; + for (var k2 = 0; k2 < ligSet.length; k2++) { + var lig = ligSet[k2]; + ligatures.push({ + sub: [startGlyph].concat(lig.components), + by: lig.ligGlyph + }); + } + } + } + } + return ligatures; +}; +Substitution.prototype.addSingle = function(feature, substitution, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0]; + var subtable = getSubstFormat(lookupTable, 2, { + // lookup type 1 subtable, format 2, coverage format 1 + substFormat: 2, + coverage: { format: 1, glyphs: [] }, + substitute: [] + }); + check.assert(subtable.coverage.format === 1, "Single: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.substitute.splice(pos, 0, 0); + } + subtable.substitute[pos] = substitution.by; +}; +Substitution.prototype.addMultiple = function(feature, substitution, script, language) { + check.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: "by" must be an array of two or more ids'); + var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0]; + var subtable = getSubstFormat(lookupTable, 1, { + // lookup type 2 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + sequences: [] + }); + check.assert(subtable.coverage.format === 1, "Multiple: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.sequences.splice(pos, 0, 0); + } + subtable.sequences[pos] = substitution.by; +}; +Substitution.prototype.addAlternate = function(feature, substitution, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0]; + var subtable = getSubstFormat(lookupTable, 1, { + // lookup type 3 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + alternateSets: [] + }); + check.assert(subtable.coverage.format === 1, "Alternate: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.alternateSets.splice(pos, 0, 0); + } + subtable.alternateSets[pos] = substitution.by; +}; +Substitution.prototype.addLigature = function(feature, ligature, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0]; + var subtable = lookupTable.subtables[0]; + if (!subtable) { + subtable = { + // lookup type 4 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + ligatureSets: [] + }; + lookupTable.subtables[0] = subtable; + } + check.assert(subtable.coverage.format === 1, "Ligature: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = ligature.sub[0]; + var ligComponents = ligature.sub.slice(1); + var ligatureTable = { + ligGlyph: ligature.by, + components: ligComponents + }; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos >= 0) { + var ligatureSet = subtable.ligatureSets[pos]; + for (var i = 0; i < ligatureSet.length; i++) { + if (arraysEqual(ligatureSet[i].components, ligComponents)) { + return; + } + } + ligatureSet.push(ligatureTable); + } else { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.ligatureSets.splice(pos, 0, [ligatureTable]); + } +}; +Substitution.prototype.getFeature = function(feature, script, language) { + if (/ss\d\d/.test(feature)) { + return this.getSingle(feature, script, language); + } + switch (feature) { + case "aalt": + case "salt": + return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language)); + case "dlig": + case "liga": + case "rlig": + return this.getLigatures(feature, script, language); + case "ccmp": + return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language)); + case "stch": + return this.getMultiple(feature, script, language); + } + return void 0; +}; +Substitution.prototype.add = function(feature, sub2, script, language) { + if (/ss\d\d/.test(feature)) { + return this.addSingle(feature, sub2, script, language); + } + switch (feature) { + case "aalt": + case "salt": + if (typeof sub2.by === "number") { + return this.addSingle(feature, sub2, script, language); + } + return this.addAlternate(feature, sub2, script, language); + case "dlig": + case "liga": + case "rlig": + return this.addLigature(feature, sub2, script, language); + case "ccmp": + if (sub2.by instanceof Array) { + return this.addMultiple(feature, sub2, script, language); + } + return this.addLigature(feature, sub2, script, language); + } + return void 0; +}; +function checkArgument(expression, message) { + if (!expression) { + throw message; + } +} +function parseGlyphCoordinate(p2, flag, previousValue, shortVectorBitMask, sameBitMask) { + var v; + if ((flag & shortVectorBitMask) > 0) { + v = p2.parseByte(); + if ((flag & sameBitMask) === 0) { + v = -v; + } + v = previousValue + v; + } else { + if ((flag & sameBitMask) > 0) { + v = previousValue; + } else { + v = previousValue + p2.parseShort(); + } + } + return v; +} +function parseGlyph(glyph, data2, start) { + var p2 = new parse.Parser(data2, start); + glyph.numberOfContours = p2.parseShort(); + glyph._xMin = p2.parseShort(); + glyph._yMin = p2.parseShort(); + glyph._xMax = p2.parseShort(); + glyph._yMax = p2.parseShort(); + var flags; + var flag; + if (glyph.numberOfContours > 0) { + var endPointIndices = glyph.endPointIndices = []; + for (var i = 0; i < glyph.numberOfContours; i += 1) { + endPointIndices.push(p2.parseUShort()); + } + glyph.instructionLength = p2.parseUShort(); + glyph.instructions = []; + for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) { + glyph.instructions.push(p2.parseByte()); + } + var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1; + flags = []; + for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) { + flag = p2.parseByte(); + flags.push(flag); + if ((flag & 8) > 0) { + var repeatCount = p2.parseByte(); + for (var j = 0; j < repeatCount; j += 1) { + flags.push(flag); + i$2 += 1; + } + } + } + check.argument(flags.length === numberOfCoordinates, "Bad flags."); + if (endPointIndices.length > 0) { + var points = []; + var point; + if (numberOfCoordinates > 0) { + for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) { + flag = flags[i$3]; + point = {}; + point.onCurve = !!(flag & 1); + point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0; + points.push(point); + } + var px = 0; + for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) { + flag = flags[i$4]; + point = points[i$4]; + point.x = parseGlyphCoordinate(p2, flag, px, 2, 16); + px = point.x; + } + var py = 0; + for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) { + flag = flags[i$5]; + point = points[i$5]; + point.y = parseGlyphCoordinate(p2, flag, py, 4, 32); + py = point.y; + } + } + glyph.points = points; + } else { + glyph.points = []; + } + } else if (glyph.numberOfContours === 0) { + glyph.points = []; + } else { + glyph.isComposite = true; + glyph.points = []; + glyph.components = []; + var moreComponents = true; + while (moreComponents) { + flags = p2.parseUShort(); + var component = { + glyphIndex: p2.parseUShort(), + xScale: 1, + scale01: 0, + scale10: 0, + yScale: 1, + dx: 0, + dy: 0 + }; + if ((flags & 1) > 0) { + if ((flags & 2) > 0) { + component.dx = p2.parseShort(); + component.dy = p2.parseShort(); + } else { + component.matchedPoints = [p2.parseUShort(), p2.parseUShort()]; + } + } else { + if ((flags & 2) > 0) { + component.dx = p2.parseChar(); + component.dy = p2.parseChar(); + } else { + component.matchedPoints = [p2.parseByte(), p2.parseByte()]; + } + } + if ((flags & 8) > 0) { + component.xScale = component.yScale = p2.parseF2Dot14(); + } else if ((flags & 64) > 0) { + component.xScale = p2.parseF2Dot14(); + component.yScale = p2.parseF2Dot14(); + } else if ((flags & 128) > 0) { + component.xScale = p2.parseF2Dot14(); + component.scale01 = p2.parseF2Dot14(); + component.scale10 = p2.parseF2Dot14(); + component.yScale = p2.parseF2Dot14(); + } + glyph.components.push(component); + moreComponents = !!(flags & 32); + } + if (flags & 256) { + glyph.instructionLength = p2.parseUShort(); + glyph.instructions = []; + for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) { + glyph.instructions.push(p2.parseByte()); + } + } + } +} +function transformPoints(points, transform2) { + var newPoints = []; + for (var i = 0; i < points.length; i += 1) { + var pt = points[i]; + var newPt = { + x: transform2.xScale * pt.x + transform2.scale01 * pt.y + transform2.dx, + y: transform2.scale10 * pt.x + transform2.yScale * pt.y + transform2.dy, + onCurve: pt.onCurve, + lastPointOfContour: pt.lastPointOfContour + }; + newPoints.push(newPt); + } + return newPoints; +} +function getContours(points) { + var contours = []; + var currentContour = []; + for (var i = 0; i < points.length; i += 1) { + var pt = points[i]; + currentContour.push(pt); + if (pt.lastPointOfContour) { + contours.push(currentContour); + currentContour = []; + } + } + check.argument(currentContour.length === 0, "There are still points left in the current contour."); + return contours; +} +function getPath(points) { + var p2 = new Path2(); + if (!points) { + return p2; + } + var contours = getContours(points); + for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) { + var contour = contours[contourIndex]; + var prev = null; + var curr = contour[contour.length - 1]; + var next = contour[0]; + if (curr.onCurve) { + p2.moveTo(curr.x, curr.y); + } else { + if (next.onCurve) { + p2.moveTo(next.x, next.y); + } else { + var start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 }; + p2.moveTo(start.x, start.y); + } + } + for (var i = 0; i < contour.length; ++i) { + prev = curr; + curr = next; + next = contour[(i + 1) % contour.length]; + if (curr.onCurve) { + p2.lineTo(curr.x, curr.y); + } else { + var prev2 = prev; + var next2 = next; + if (!prev.onCurve) { + prev2 = { x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 }; + } + if (!next.onCurve) { + next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 }; + } + p2.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y); + } + } + p2.closePath(); + } + return p2; +} +function buildPath(glyphs, glyph) { + if (glyph.isComposite) { + for (var j = 0; j < glyph.components.length; j += 1) { + var component = glyph.components[j]; + var componentGlyph = glyphs.get(component.glyphIndex); + componentGlyph.getPath(); + if (componentGlyph.points) { + var transformedPoints = void 0; + if (component.matchedPoints === void 0) { + transformedPoints = transformPoints(componentGlyph.points, component); + } else { + if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) { + throw Error("Matched points out of range in " + glyph.name); + } + var firstPt = glyph.points[component.matchedPoints[0]]; + var secondPt = componentGlyph.points[component.matchedPoints[1]]; + var transform2 = { + xScale: component.xScale, + scale01: component.scale01, + scale10: component.scale10, + yScale: component.yScale, + dx: 0, + dy: 0 + }; + secondPt = transformPoints([secondPt], transform2)[0]; + transform2.dx = firstPt.x - secondPt.x; + transform2.dy = firstPt.y - secondPt.y; + transformedPoints = transformPoints(componentGlyph.points, transform2); + } + glyph.points = glyph.points.concat(transformedPoints); + } + } + } + return getPath(glyph.points); +} +function parseGlyfTableAll(data2, start, loca2, font) { + var glyphs = new glyphset.GlyphSet(font); + for (var i = 0; i < loca2.length - 1; i += 1) { + var offset = loca2[i]; + var nextOffset = loca2[i + 1]; + if (offset !== nextOffset) { + glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data2, start + offset, buildPath)); + } else { + glyphs.push(i, glyphset.glyphLoader(font, i)); + } + } + return glyphs; +} +function parseGlyfTableOnLowMemory(data2, start, loca2, font) { + var glyphs = new glyphset.GlyphSet(font); + font._push = function(i) { + var offset = loca2[i]; + var nextOffset = loca2[i + 1]; + if (offset !== nextOffset) { + glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data2, start + offset, buildPath)); + } else { + glyphs.push(i, glyphset.glyphLoader(font, i)); + } + }; + return glyphs; +} +function parseGlyfTable(data2, start, loca2, font, opt) { + if (opt.lowMemory) { + return parseGlyfTableOnLowMemory(data2, start, loca2, font); + } else { + return parseGlyfTableAll(data2, start, loca2, font); + } +} +var glyf = { getPath, parse: parseGlyfTable }; +var instructionTable; +var exec; +var execGlyph; +var execComponent; +function Hinting(font) { + this.font = font; + this.getCommands = function(hPoints) { + return glyf.getPath(hPoints).commands; + }; + this._fpgmState = this._prepState = void 0; + this._errorState = 0; +} +function roundOff(v) { + return v; +} +function roundToGrid(v) { + return Math.sign(v) * Math.round(Math.abs(v)); +} +function roundToDoubleGrid(v) { + return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2; +} +function roundToHalfGrid(v) { + return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5); +} +function roundUpToGrid(v) { + return Math.sign(v) * Math.ceil(Math.abs(v)); +} +function roundDownToGrid(v) { + return Math.sign(v) * Math.floor(Math.abs(v)); +} +var roundSuper = function(v) { + var period = this.srPeriod; + var phase = this.srPhase; + var threshold = this.srThreshold; + var sign = 1; + if (v < 0) { + v = -v; + sign = -1; + } + v += threshold - phase; + v = Math.trunc(v / period) * period; + v += phase; + if (v < 0) { + return phase * sign; + } + return v * sign; +}; +var xUnitVector = { + x: 1, + y: 0, + axis: "x", + // Gets the projected distance between two points. + // o1/o2 ... if true, respective original position is used. + distance: function(p1, p2, o1, o2) { + return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x); + }, + // Moves point p so the moved position has the same relative + // position to the moved positions of rp1 and rp2 than the + // original positions had. + // + // See APPENDIX on INTERPOLATE at the bottom of this file. + interpolate: function(p2, rp1, rp2, pv) { + var do1; + var do2; + var doa1; + var doa2; + var dm1; + var dm2; + var dt2; + if (!pv || pv === this) { + do1 = p2.xo - rp1.xo; + do2 = p2.xo - rp2.xo; + dm1 = rp1.x - rp1.xo; + dm2 = rp2.x - rp2.xo; + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + p2.x = p2.xo + (dm1 + dm2) / 2; + return; + } + p2.x = p2.xo + (dm1 * doa2 + dm2 * doa1) / dt2; + return; + } + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + xUnitVector.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + xUnitVector.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); + }, + // Slope of line normal to this + normalSlope: Number.NEGATIVE_INFINITY, + // Sets the point 'p' relative to point 'rp' + // by the distance 'd'. + // + // See APPENDIX on SETRELATIVE at the bottom of this file. + // + // p ... point to set + // rp ... reference point + // d ... distance on projection vector + // pv ... projection vector (undefined = this) + // org ... if true, uses the original position of rp as reference. + setRelative: function(p2, rp, d, pv, org) { + if (!pv || pv === this) { + p2.x = (org ? rp.xo : rp.x) + d; + return; + } + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + p2.x = rpdx + (p2.y - rpdy) / pv.normalSlope; + }, + // Slope of vector line. + slope: 0, + // Touches the point p. + touch: function(p2) { + p2.xTouched = true; + }, + // Tests if a point p is touched. + touched: function(p2) { + return p2.xTouched; + }, + // Untouches the point p. + untouch: function(p2) { + p2.xTouched = false; + } +}; +var yUnitVector = { + x: 0, + y: 1, + axis: "y", + // Gets the projected distance between two points. + // o1/o2 ... if true, respective original position is used. + distance: function(p1, p2, o1, o2) { + return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y); + }, + // Moves point p so the moved position has the same relative + // position to the moved positions of rp1 and rp2 than the + // original positions had. + // + // See APPENDIX on INTERPOLATE at the bottom of this file. + interpolate: function(p2, rp1, rp2, pv) { + var do1; + var do2; + var doa1; + var doa2; + var dm1; + var dm2; + var dt2; + if (!pv || pv === this) { + do1 = p2.yo - rp1.yo; + do2 = p2.yo - rp2.yo; + dm1 = rp1.y - rp1.yo; + dm2 = rp2.y - rp2.yo; + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + p2.y = p2.yo + (dm1 + dm2) / 2; + return; + } + p2.y = p2.yo + (dm1 * doa2 + dm2 * doa1) / dt2; + return; + } + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + yUnitVector.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + yUnitVector.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); + }, + // Slope of line normal to this. + normalSlope: 0, + // Sets the point 'p' relative to point 'rp' + // by the distance 'd' + // + // See APPENDIX on SETRELATIVE at the bottom of this file. + // + // p ... point to set + // rp ... reference point + // d ... distance on projection vector + // pv ... projection vector (undefined = this) + // org ... if true, uses the original position of rp as reference. + setRelative: function(p2, rp, d, pv, org) { + if (!pv || pv === this) { + p2.y = (org ? rp.yo : rp.y) + d; + return; + } + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + p2.y = rpdy + pv.normalSlope * (p2.x - rpdx); + }, + // Slope of vector line. + slope: Number.POSITIVE_INFINITY, + // Touches the point p. + touch: function(p2) { + p2.yTouched = true; + }, + // Tests if a point p is touched. + touched: function(p2) { + return p2.yTouched; + }, + // Untouches the point p. + untouch: function(p2) { + p2.yTouched = false; + } +}; +Object.freeze(xUnitVector); +Object.freeze(yUnitVector); +function UnitVector(x2, y2) { + this.x = x2; + this.y = y2; + this.axis = void 0; + this.slope = y2 / x2; + this.normalSlope = -x2 / y2; + Object.freeze(this); +} +UnitVector.prototype.distance = function(p1, p2, o1, o2) { + return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2); +}; +UnitVector.prototype.interpolate = function(p2, rp1, rp2, pv) { + var dm1; + var dm2; + var do1; + var do2; + var doa1; + var doa2; + var dt2; + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + this.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + this.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); +}; +UnitVector.prototype.setRelative = function(p2, rp, d, pv, org) { + pv = pv || this; + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + var pvns = pv.normalSlope; + var fvs = this.slope; + var px = p2.x; + var py = p2.y; + p2.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns); + p2.y = fvs * (p2.x - px) + py; +}; +UnitVector.prototype.touch = function(p2) { + p2.xTouched = true; + p2.yTouched = true; +}; +function getUnitVector(x2, y2) { + var d = Math.sqrt(x2 * x2 + y2 * y2); + x2 /= d; + y2 /= d; + if (x2 === 1 && y2 === 0) { + return xUnitVector; + } else if (x2 === 0 && y2 === 1) { + return yUnitVector; + } else { + return new UnitVector(x2, y2); + } +} +function HPoint(x2, y2, lastPointOfContour, onCurve) { + this.x = this.xo = Math.round(x2 * 64) / 64; + this.y = this.yo = Math.round(y2 * 64) / 64; + this.lastPointOfContour = lastPointOfContour; + this.onCurve = onCurve; + this.prevPointOnContour = void 0; + this.nextPointOnContour = void 0; + this.xTouched = false; + this.yTouched = false; + Object.preventExtensions(this); +} +HPoint.prototype.nextTouched = function(v) { + var p2 = this.nextPointOnContour; + while (!v.touched(p2) && p2 !== this) { + p2 = p2.nextPointOnContour; + } + return p2; +}; +HPoint.prototype.prevTouched = function(v) { + var p2 = this.prevPointOnContour; + while (!v.touched(p2) && p2 !== this) { + p2 = p2.prevPointOnContour; + } + return p2; +}; +var HPZero = Object.freeze(new HPoint(0, 0)); +var defaultState = { + cvCutIn: 17 / 16, + // control value cut in + deltaBase: 9, + deltaShift: 0.125, + loop: 1, + // loops some instructions + minDis: 1, + // minimum distance + autoFlip: true +}; +function State(env, prog) { + this.env = env; + this.stack = []; + this.prog = prog; + switch (env) { + case "glyf": + this.zp0 = this.zp1 = this.zp2 = 1; + this.rp0 = this.rp1 = this.rp2 = 0; + case "prep": + this.fv = this.pv = this.dpv = xUnitVector; + this.round = roundToGrid; + } +} +Hinting.prototype.exec = function(glyph, ppem) { + if (typeof ppem !== "number") { + throw new Error("Point size is not a number!"); + } + if (this._errorState > 2) { + return; + } + var font = this.font; + var prepState = this._prepState; + if (!prepState || prepState.ppem !== ppem) { + var fpgmState = this._fpgmState; + if (!fpgmState) { + State.prototype = defaultState; + fpgmState = this._fpgmState = new State("fpgm", font.tables.fpgm); + fpgmState.funcs = []; + fpgmState.font = font; + if (exports.DEBUG) { + console.log("---EXEC FPGM---"); + fpgmState.step = -1; + } + try { + exec(fpgmState); + } catch (e) { + console.log("Hinting error in FPGM:" + e); + this._errorState = 3; + return; + } + } + State.prototype = fpgmState; + prepState = this._prepState = new State("prep", font.tables.prep); + prepState.ppem = ppem; + var oCvt = font.tables.cvt; + if (oCvt) { + var cvt = prepState.cvt = new Array(oCvt.length); + var scale2 = ppem / font.unitsPerEm; + for (var c2 = 0; c2 < oCvt.length; c2++) { + cvt[c2] = oCvt[c2] * scale2; + } + } else { + prepState.cvt = []; + } + if (exports.DEBUG) { + console.log("---EXEC PREP---"); + prepState.step = -1; + } + try { + exec(prepState); + } catch (e) { + if (this._errorState < 2) { + console.log("Hinting error in PREP:" + e); + } + this._errorState = 2; + } + } + if (this._errorState > 1) { + return; + } + try { + return execGlyph(glyph, prepState); + } catch (e) { + if (this._errorState < 1) { + console.log("Hinting error:" + e); + console.log("Note: further hinting errors are silenced"); + } + this._errorState = 1; + return void 0; + } +}; +execGlyph = function(glyph, prepState) { + var xScale = prepState.ppem / prepState.font.unitsPerEm; + var yScale = xScale; + var components = glyph.components; + var contours; + var gZone; + var state; + State.prototype = prepState; + if (!components) { + state = new State("glyf", glyph.instructions); + if (exports.DEBUG) { + console.log("---EXEC GLYPH---"); + state.step = -1; + } + execComponent(glyph, state, xScale, yScale); + gZone = state.gZone; + } else { + var font = prepState.font; + gZone = []; + contours = []; + for (var i = 0; i < components.length; i++) { + var c2 = components[i]; + var cg = font.glyphs.get(c2.glyphIndex); + state = new State("glyf", cg.instructions); + if (exports.DEBUG) { + console.log("---EXEC COMP " + i + "---"); + state.step = -1; + } + execComponent(cg, state, xScale, yScale); + var dx = Math.round(c2.dx * xScale); + var dy = Math.round(c2.dy * yScale); + var gz = state.gZone; + var cc = state.contours; + for (var pi2 = 0; pi2 < gz.length; pi2++) { + var p2 = gz[pi2]; + p2.xTouched = p2.yTouched = false; + p2.xo = p2.x = p2.x + dx; + p2.yo = p2.y = p2.y + dy; + } + var gLen = gZone.length; + gZone.push.apply(gZone, gz); + for (var j = 0; j < cc.length; j++) { + contours.push(cc[j] + gLen); + } + } + if (glyph.instructions && !state.inhibitGridFit) { + state = new State("glyf", glyph.instructions); + state.gZone = state.z0 = state.z1 = state.z2 = gZone; + state.contours = contours; + gZone.push( + new HPoint(0, 0), + new HPoint(Math.round(glyph.advanceWidth * xScale), 0) + ); + if (exports.DEBUG) { + console.log("---EXEC COMPOSITE---"); + state.step = -1; + } + exec(state); + gZone.length -= 2; + } + } + return gZone; +}; +execComponent = function(glyph, state, xScale, yScale) { + var points = glyph.points || []; + var pLen = points.length; + var gZone = state.gZone = state.z0 = state.z1 = state.z2 = []; + var contours = state.contours = []; + var cp; + for (var i = 0; i < pLen; i++) { + cp = points[i]; + gZone[i] = new HPoint( + cp.x * xScale, + cp.y * yScale, + cp.lastPointOfContour, + cp.onCurve + ); + } + var sp; + var np; + for (var i$1 = 0; i$1 < pLen; i$1++) { + cp = gZone[i$1]; + if (!sp) { + sp = cp; + contours.push(i$1); + } + if (cp.lastPointOfContour) { + cp.nextPointOnContour = sp; + sp.prevPointOnContour = cp; + sp = void 0; + } else { + np = gZone[i$1 + 1]; + cp.nextPointOnContour = np; + np.prevPointOnContour = cp; + } + } + if (state.inhibitGridFit) { + return; + } + if (exports.DEBUG) { + console.log("PROCESSING GLYPH", state.stack); + for (var i$2 = 0; i$2 < pLen; i$2++) { + console.log(i$2, gZone[i$2].x, gZone[i$2].y); + } + } + gZone.push( + new HPoint(0, 0), + new HPoint(Math.round(glyph.advanceWidth * xScale), 0) + ); + exec(state); + gZone.length -= 2; + if (exports.DEBUG) { + console.log("FINISHED GLYPH", state.stack); + for (var i$3 = 0; i$3 < pLen; i$3++) { + console.log(i$3, gZone[i$3].x, gZone[i$3].y); + } + } +}; +exec = function(state) { + var prog = state.prog; + if (!prog) { + return; + } + var pLen = prog.length; + var ins; + for (state.ip = 0; state.ip < pLen; state.ip++) { + if (exports.DEBUG) { + state.step++; + } + ins = instructionTable[prog[state.ip]]; + if (!ins) { + throw new Error( + "unknown instruction: 0x" + Number(prog[state.ip]).toString(16) + ); + } + ins(state); + } +}; +function initTZone(state) { + var tZone = state.tZone = new Array(state.gZone.length); + for (var i = 0; i < tZone.length; i++) { + tZone[i] = new HPoint(0, 0); + } +} +function skip(state, handleElse) { + var prog = state.prog; + var ip = state.ip; + var nesting = 1; + var ins; + do { + ins = prog[++ip]; + if (ins === 88) { + nesting++; + } else if (ins === 89) { + nesting--; + } else if (ins === 64) { + ip += prog[ip + 1] + 1; + } else if (ins === 65) { + ip += 2 * prog[ip + 1] + 1; + } else if (ins >= 176 && ins <= 183) { + ip += ins - 176 + 1; + } else if (ins >= 184 && ins <= 191) { + ip += (ins - 184 + 1) * 2; + } else if (handleElse && nesting === 1 && ins === 27) { + break; + } + } while (nesting > 0); + state.ip = ip; +} +function SVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SVTCA[" + v.axis + "]"); + } + state.fv = state.pv = state.dpv = v; +} +function SPVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SPVTCA[" + v.axis + "]"); + } + state.pv = state.dpv = v; +} +function SFVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SFVTCA[" + v.axis + "]"); + } + state.fv = v; +} +function SPVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log("SPVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.pv = state.dpv = getUnitVector(dx, dy); +} +function SFVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log("SFVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.fv = getUnitVector(dx, dy); +} +function SPVFS(state) { + var stack = state.stack; + var y2 = stack.pop(); + var x2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SPVFS[]", y2, x2); + } + state.pv = state.dpv = getUnitVector(x2, y2); +} +function SFVFS(state) { + var stack = state.stack; + var y2 = stack.pop(); + var x2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SPVFS[]", y2, x2); + } + state.fv = getUnitVector(x2, y2); +} +function GPV(state) { + var stack = state.stack; + var pv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "GPV[]"); + } + stack.push(pv.x * 16384); + stack.push(pv.y * 16384); +} +function GFV(state) { + var stack = state.stack; + var fv = state.fv; + if (exports.DEBUG) { + console.log(state.step, "GFV[]"); + } + stack.push(fv.x * 16384); + stack.push(fv.y * 16384); +} +function SFVTPV(state) { + state.fv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "SFVTPV[]"); + } +} +function ISECT(state) { + var stack = state.stack; + var pa0i = stack.pop(); + var pa1i = stack.pop(); + var pb0i = stack.pop(); + var pb1i = stack.pop(); + var pi2 = stack.pop(); + var z0 = state.z0; + var z1 = state.z1; + var pa0 = z0[pa0i]; + var pa1 = z0[pa1i]; + var pb0 = z1[pb0i]; + var pb1 = z1[pb1i]; + var p2 = state.z2[pi2]; + if (exports.DEBUG) { + console.log("ISECT[], ", pa0i, pa1i, pb0i, pb1i, pi2); + } + var x1 = pa0.x; + var y1 = pa0.y; + var x2 = pa1.x; + var y2 = pa1.y; + var x3 = pb0.x; + var y3 = pb0.y; + var x4 = pb1.x; + var y4 = pb1.y; + var div2 = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); + var f1 = x1 * y2 - y1 * x2; + var f2 = x3 * y4 - y3 * x4; + p2.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div2; + p2.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div2; +} +function SRP0(state) { + state.rp0 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP0[]", state.rp0); + } +} +function SRP1(state) { + state.rp1 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP1[]", state.rp1); + } +} +function SRP2(state) { + state.rp2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP2[]", state.rp2); + } +} +function SZP0(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP0[]", n2); + } + state.zp0 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z0 = state.tZone; + break; + case 1: + state.z0 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZP1(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP1[]", n2); + } + state.zp1 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z1 = state.tZone; + break; + case 1: + state.z1 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZP2(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP2[]", n2); + } + state.zp2 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z2 = state.tZone; + break; + case 1: + state.z2 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZPS(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZPS[]", n2); + } + state.zp0 = state.zp1 = state.zp2 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z0 = state.z1 = state.z2 = state.tZone; + break; + case 1: + state.z0 = state.z1 = state.z2 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SLOOP(state) { + state.loop = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SLOOP[]", state.loop); + } +} +function RTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTG[]"); + } + state.round = roundToGrid; +} +function RTHG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTHG[]"); + } + state.round = roundToHalfGrid; +} +function SMD(state) { + var d = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SMD[]", d); + } + state.minDis = d / 64; +} +function ELSE(state) { + if (exports.DEBUG) { + console.log(state.step, "ELSE[]"); + } + skip(state, false); +} +function JMPR(state) { + var o = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "JMPR[]", o); + } + state.ip += o - 1; +} +function SCVTCI(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCVTCI[]", n2); + } + state.cvCutIn = n2 / 64; +} +function DUP(state) { + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.step, "DUP[]"); + } + stack.push(stack[stack.length - 1]); +} +function POP(state) { + if (exports.DEBUG) { + console.log(state.step, "POP[]"); + } + state.stack.pop(); +} +function CLEAR(state) { + if (exports.DEBUG) { + console.log(state.step, "CLEAR[]"); + } + state.stack.length = 0; +} +function SWAP(state) { + var stack = state.stack; + var a2 = stack.pop(); + var b3 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SWAP[]"); + } + stack.push(a2); + stack.push(b3); +} +function DEPTH(state) { + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.step, "DEPTH[]"); + } + stack.push(stack.length); +} +function LOOPCALL(state) { + var stack = state.stack; + var fn = stack.pop(); + var c2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LOOPCALL[]", fn, c2); + } + var cip = state.ip; + var cprog = state.prog; + state.prog = state.funcs[fn]; + for (var i = 0; i < c2; i++) { + exec(state); + if (exports.DEBUG) { + console.log( + ++state.step, + i + 1 < c2 ? "next loopcall" : "done loopcall", + i + ); + } + } + state.ip = cip; + state.prog = cprog; +} +function CALL(state) { + var fn = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CALL[]", fn); + } + var cip = state.ip; + var cprog = state.prog; + state.prog = state.funcs[fn]; + exec(state); + state.ip = cip; + state.prog = cprog; + if (exports.DEBUG) { + console.log(++state.step, "returning from", fn); + } +} +function CINDEX(state) { + var stack = state.stack; + var k2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CINDEX[]", k2); + } + stack.push(stack[stack.length - k2]); +} +function MINDEX(state) { + var stack = state.stack; + var k2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MINDEX[]", k2); + } + stack.push(stack.splice(stack.length - k2, 1)[0]); +} +function FDEF(state) { + if (state.env !== "fpgm") { + throw new Error("FDEF not allowed here"); + } + var stack = state.stack; + var prog = state.prog; + var ip = state.ip; + var fn = stack.pop(); + var ipBegin = ip; + if (exports.DEBUG) { + console.log(state.step, "FDEF[]", fn); + } + while (prog[++ip] !== 45) { + } + state.ip = ip; + state.funcs[fn] = prog.slice(ipBegin + 1, ip); +} +function MDAP(round, state) { + var pi2 = state.stack.pop(); + var p2 = state.z0[pi2]; + var fv = state.fv; + var pv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "MDAP[" + round + "]", pi2); + } + var d = pv.distance(p2, HPZero); + if (round) { + d = state.round(d); + } + fv.setRelative(p2, HPZero, d, pv); + fv.touch(p2); + state.rp0 = state.rp1 = pi2; +} +function IUP(v, state) { + var z2 = state.z2; + var pLen = z2.length - 2; + var cp; + var pp; + var np; + if (exports.DEBUG) { + console.log(state.step, "IUP[" + v.axis + "]"); + } + for (var i = 0; i < pLen; i++) { + cp = z2[i]; + if (v.touched(cp)) { + continue; + } + pp = cp.prevTouched(v); + if (pp === cp) { + continue; + } + np = cp.nextTouched(v); + if (pp === np) { + v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true); + } + v.interpolate(cp, pp, np, v); + } +} +function SHP(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var loop = state.loop; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + var d = pv.distance(rp, rp, false, true); + fv.setRelative(p2, p2, d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHP[" + (a2 ? "rp1" : "rp2") + "]", + pi2 + ); + } + } + state.loop = 1; +} +function SHC(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var ci = stack.pop(); + var sp = state.z2[state.contours[ci]]; + var p2 = sp; + if (exports.DEBUG) { + console.log(state.step, "SHC[" + a2 + "]", ci); + } + var d = pv.distance(rp, rp, false, true); + do { + if (p2 !== rp) { + fv.setRelative(p2, p2, d, pv); + } + p2 = p2.nextPointOnContour; + } while (p2 !== sp); +} +function SHZ(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var e = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SHZ[" + a2 + "]", e); + } + var z; + switch (e) { + case 0: + z = state.tZone; + break; + case 1: + z = state.gZone; + break; + default: + throw new Error("Invalid zone"); + } + var p2; + var d = pv.distance(rp, rp, false, true); + var pLen = z.length - 2; + for (var i = 0; i < pLen; i++) { + p2 = z[i]; + fv.setRelative(p2, p2, d, pv); + } +} +function SHPIX(state) { + var stack = state.stack; + var loop = state.loop; + var fv = state.fv; + var d = stack.pop() / 64; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHPIX[]", + pi2, + d + ); + } + fv.setRelative(p2, p2, d); + fv.touch(p2); + } + state.loop = 1; +} +function IP(state) { + var stack = state.stack; + var rp1i = state.rp1; + var rp2i = state.rp2; + var loop = state.loop; + var rp1 = state.z0[rp1i]; + var rp2 = state.z1[rp2i]; + var fv = state.fv; + var pv = state.dpv; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "IP[]", + pi2, + rp1i, + "<->", + rp2i + ); + } + fv.interpolate(p2, rp1, rp2, pv); + fv.touch(p2); + } + state.loop = 1; +} +function MSIRP(a2, state) { + var stack = state.stack; + var d = stack.pop() / 64; + var pi2 = stack.pop(); + var p2 = state.z1[pi2]; + var rp0 = state.z0[state.rp0]; + var fv = state.fv; + var pv = state.pv; + fv.setRelative(p2, rp0, d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log(state.step, "MSIRP[" + a2 + "]", d, pi2); + } + state.rp1 = state.rp0; + state.rp2 = pi2; + if (a2) { + state.rp0 = pi2; + } +} +function ALIGNRP(state) { + var stack = state.stack; + var rp0i = state.rp0; + var rp0 = state.z0[rp0i]; + var loop = state.loop; + var fv = state.fv; + var pv = state.pv; + var z1 = state.z1; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z1[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "ALIGNRP[]", + pi2 + ); + } + fv.setRelative(p2, rp0, 0, pv); + fv.touch(p2); + } + state.loop = 1; +} +function RTDG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTDG[]"); + } + state.round = roundToDoubleGrid; +} +function MIAP(round, state) { + var stack = state.stack; + var n2 = stack.pop(); + var pi2 = stack.pop(); + var p2 = state.z0[pi2]; + var fv = state.fv; + var pv = state.pv; + var cv = state.cvt[n2]; + if (exports.DEBUG) { + console.log( + state.step, + "MIAP[" + round + "]", + n2, + "(", + cv, + ")", + pi2 + ); + } + var d = pv.distance(p2, HPZero); + if (round) { + if (Math.abs(d - cv) < state.cvCutIn) { + d = cv; + } + d = state.round(d); + } + fv.setRelative(p2, HPZero, d, pv); + if (state.zp0 === 0) { + p2.xo = p2.x; + p2.yo = p2.y; + } + fv.touch(p2); + state.rp0 = state.rp1 = pi2; +} +function NPUSHB(state) { + var prog = state.prog; + var ip = state.ip; + var stack = state.stack; + var n2 = prog[++ip]; + if (exports.DEBUG) { + console.log(state.step, "NPUSHB[]", n2); + } + for (var i = 0; i < n2; i++) { + stack.push(prog[++ip]); + } + state.ip = ip; +} +function NPUSHW(state) { + var ip = state.ip; + var prog = state.prog; + var stack = state.stack; + var n2 = prog[++ip]; + if (exports.DEBUG) { + console.log(state.step, "NPUSHW[]", n2); + } + for (var i = 0; i < n2; i++) { + var w = prog[++ip] << 8 | prog[++ip]; + if (w & 32768) { + w = -((w ^ 65535) + 1); + } + stack.push(w); + } + state.ip = ip; +} +function WS(state) { + var stack = state.stack; + var store = state.store; + if (!store) { + store = state.store = []; + } + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WS", v, l2); + } + store[l2] = v; +} +function RS(state) { + var stack = state.stack; + var store = state.store; + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "RS", l2); + } + var v = store && store[l2] || 0; + stack.push(v); +} +function WCVTP(state) { + var stack = state.stack; + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WCVTP", v, l2); + } + state.cvt[l2] = v / 64; +} +function RCVT(state) { + var stack = state.stack; + var cvte = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "RCVT", cvte); + } + stack.push(state.cvt[cvte] * 64); +} +function GC(a2, state) { + var stack = state.stack; + var pi2 = stack.pop(); + var p2 = state.z2[pi2]; + if (exports.DEBUG) { + console.log(state.step, "GC[" + a2 + "]", pi2); + } + stack.push(state.dpv.distance(p2, HPZero, a2, false) * 64); +} +function MD(a2, state) { + var stack = state.stack; + var pi2 = stack.pop(); + var pi1 = stack.pop(); + var p2 = state.z1[pi2]; + var p1 = state.z0[pi1]; + var d = state.dpv.distance(p1, p2, a2, a2); + if (exports.DEBUG) { + console.log(state.step, "MD[" + a2 + "]", pi2, pi1, "->", d); + } + state.stack.push(Math.round(d * 64)); +} +function MPPEM(state) { + if (exports.DEBUG) { + console.log(state.step, "MPPEM[]"); + } + state.stack.push(state.ppem); +} +function FLIPON(state) { + if (exports.DEBUG) { + console.log(state.step, "FLIPON[]"); + } + state.autoFlip = true; +} +function LT(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LT[]", e2, e1); + } + stack.push(e1 < e2 ? 1 : 0); +} +function LTEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LTEQ[]", e2, e1); + } + stack.push(e1 <= e2 ? 1 : 0); +} +function GT(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "GT[]", e2, e1); + } + stack.push(e1 > e2 ? 1 : 0); +} +function GTEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "GTEQ[]", e2, e1); + } + stack.push(e1 >= e2 ? 1 : 0); +} +function EQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "EQ[]", e2, e1); + } + stack.push(e2 === e1 ? 1 : 0); +} +function NEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NEQ[]", e2, e1); + } + stack.push(e2 !== e1 ? 1 : 0); +} +function ODD(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ODD[]", n2); + } + stack.push(Math.trunc(n2) % 2 ? 1 : 0); +} +function EVEN(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "EVEN[]", n2); + } + stack.push(Math.trunc(n2) % 2 ? 0 : 1); +} +function IF(state) { + var test = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "IF[]", test); + } + if (!test) { + skip(state, true); + if (exports.DEBUG) { + console.log(state.step, "EIF[]"); + } + } +} +function EIF(state) { + if (exports.DEBUG) { + console.log(state.step, "EIF[]"); + } +} +function AND(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "AND[]", e2, e1); + } + stack.push(e2 && e1 ? 1 : 0); +} +function OR(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "OR[]", e2, e1); + } + stack.push(e2 || e1 ? 1 : 0); +} +function NOT(state) { + var stack = state.stack; + var e = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NOT[]", e); + } + stack.push(e ? 0 : 1); +} +function DELTAP123(b3, state) { + var stack = state.stack; + var n2 = stack.pop(); + var fv = state.fv; + var pv = state.pv; + var ppem = state.ppem; + var base = state.deltaBase + (b3 - 1) * 16; + var ds = state.deltaShift; + var z0 = state.z0; + if (exports.DEBUG) { + console.log(state.step, "DELTAP[" + b3 + "]", n2, stack); + } + for (var i = 0; i < n2; i++) { + var pi2 = stack.pop(); + var arg = stack.pop(); + var appem = base + ((arg & 240) >> 4); + if (appem !== ppem) { + continue; + } + var mag = (arg & 15) - 8; + if (mag >= 0) { + mag++; + } + if (exports.DEBUG) { + console.log(state.step, "DELTAPFIX", pi2, "by", mag * ds); + } + var p2 = z0[pi2]; + fv.setRelative(p2, p2, mag * ds, pv); + } +} +function SDB(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SDB[]", n2); + } + state.deltaBase = n2; +} +function SDS(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SDS[]", n2); + } + state.deltaShift = Math.pow(0.5, n2); +} +function ADD(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ADD[]", n2, n1); + } + stack.push(n1 + n2); +} +function SUB(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SUB[]", n2, n1); + } + stack.push(n1 - n2); +} +function DIV(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "DIV[]", n2, n1); + } + stack.push(n1 * 64 / n2); +} +function MUL(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MUL[]", n2, n1); + } + stack.push(n1 * n2 / 64); +} +function ABS(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ABS[]", n2); + } + stack.push(Math.abs(n2)); +} +function NEG(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NEG[]", n2); + } + stack.push(-n2); +} +function FLOOR(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "FLOOR[]", n2); + } + stack.push(Math.floor(n2 / 64) * 64); +} +function CEILING(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CEILING[]", n2); + } + stack.push(Math.ceil(n2 / 64) * 64); +} +function ROUND(dt2, state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ROUND[]"); + } + stack.push(state.round(n2 / 64) * 64); +} +function WCVTF(state) { + var stack = state.stack; + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WCVTF[]", v, l2); + } + state.cvt[l2] = v * state.ppem / state.font.unitsPerEm; +} +function DELTAC123(b3, state) { + var stack = state.stack; + var n2 = stack.pop(); + var ppem = state.ppem; + var base = state.deltaBase + (b3 - 1) * 16; + var ds = state.deltaShift; + if (exports.DEBUG) { + console.log(state.step, "DELTAC[" + b3 + "]", n2, stack); + } + for (var i = 0; i < n2; i++) { + var c2 = stack.pop(); + var arg = stack.pop(); + var appem = base + ((arg & 240) >> 4); + if (appem !== ppem) { + continue; + } + var mag = (arg & 15) - 8; + if (mag >= 0) { + mag++; + } + var delta = mag * ds; + if (exports.DEBUG) { + console.log(state.step, "DELTACFIX", c2, "by", delta); + } + state.cvt[c2] += delta; + } +} +function SROUND(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SROUND[]", n2); + } + state.round = roundSuper; + var period; + switch (n2 & 192) { + case 0: + period = 0.5; + break; + case 64: + period = 1; + break; + case 128: + period = 2; + break; + default: + throw new Error("invalid SROUND value"); + } + state.srPeriod = period; + switch (n2 & 48) { + case 0: + state.srPhase = 0; + break; + case 16: + state.srPhase = 0.25 * period; + break; + case 32: + state.srPhase = 0.5 * period; + break; + case 48: + state.srPhase = 0.75 * period; + break; + default: + throw new Error("invalid SROUND value"); + } + n2 &= 15; + if (n2 === 0) { + state.srThreshold = 0; + } else { + state.srThreshold = (n2 / 8 - 0.5) * period; + } +} +function S45ROUND(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "S45ROUND[]", n2); + } + state.round = roundSuper; + var period; + switch (n2 & 192) { + case 0: + period = Math.sqrt(2) / 2; + break; + case 64: + period = Math.sqrt(2); + break; + case 128: + period = 2 * Math.sqrt(2); + break; + default: + throw new Error("invalid S45ROUND value"); + } + state.srPeriod = period; + switch (n2 & 48) { + case 0: + state.srPhase = 0; + break; + case 16: + state.srPhase = 0.25 * period; + break; + case 32: + state.srPhase = 0.5 * period; + break; + case 48: + state.srPhase = 0.75 * period; + break; + default: + throw new Error("invalid S45ROUND value"); + } + n2 &= 15; + if (n2 === 0) { + state.srThreshold = 0; + } else { + state.srThreshold = (n2 / 8 - 0.5) * period; + } +} +function ROFF(state) { + if (exports.DEBUG) { + console.log(state.step, "ROFF[]"); + } + state.round = roundOff; +} +function RUTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RUTG[]"); + } + state.round = roundUpToGrid; +} +function RDTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RDTG[]"); + } + state.round = roundDownToGrid; +} +function SCANCTRL(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCANCTRL[]", n2); + } +} +function SDPVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log(state.step, "SDPVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.dpv = getUnitVector(dx, dy); +} +function GETINFO(state) { + var stack = state.stack; + var sel = stack.pop(); + var r = 0; + if (exports.DEBUG) { + console.log(state.step, "GETINFO[]", sel); + } + if (sel & 1) { + r = 35; + } + if (sel & 32) { + r |= 4096; + } + stack.push(r); +} +function ROLL(state) { + var stack = state.stack; + var a2 = stack.pop(); + var b3 = stack.pop(); + var c2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ROLL[]"); + } + stack.push(b3); + stack.push(a2); + stack.push(c2); +} +function MAX(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MAX[]", e2, e1); + } + stack.push(Math.max(e1, e2)); +} +function MIN(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MIN[]", e2, e1); + } + stack.push(Math.min(e1, e2)); +} +function SCANTYPE(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCANTYPE[]", n2); + } +} +function INSTCTRL(state) { + var s = state.stack.pop(); + var v = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "INSTCTRL[]", s, v); + } + switch (s) { + case 1: + state.inhibitGridFit = !!v; + return; + case 2: + state.ignoreCvt = !!v; + return; + default: + throw new Error("invalid INSTCTRL[] selector"); + } +} +function PUSHB(n2, state) { + var stack = state.stack; + var prog = state.prog; + var ip = state.ip; + if (exports.DEBUG) { + console.log(state.step, "PUSHB[" + n2 + "]"); + } + for (var i = 0; i < n2; i++) { + stack.push(prog[++ip]); + } + state.ip = ip; +} +function PUSHW(n2, state) { + var ip = state.ip; + var prog = state.prog; + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.ip, "PUSHW[" + n2 + "]"); + } + for (var i = 0; i < n2; i++) { + var w = prog[++ip] << 8 | prog[++ip]; + if (w & 32768) { + w = -((w ^ 65535) + 1); + } + stack.push(w); + } + state.ip = ip; +} +function MDRP_MIRP(indirect, setRp0, keepD, ro, dt2, state) { + var stack = state.stack; + var cvte = indirect && stack.pop(); + var pi2 = stack.pop(); + var rp0i = state.rp0; + var rp = state.z0[rp0i]; + var p2 = state.z1[pi2]; + var md = state.minDis; + var fv = state.fv; + var pv = state.dpv; + var od; + var d; + var sign; + var cv; + d = od = pv.distance(p2, rp, true, true); + sign = d >= 0 ? 1 : -1; + d = Math.abs(d); + if (indirect) { + cv = state.cvt[cvte]; + if (ro && Math.abs(d - cv) < state.cvCutIn) { + d = cv; + } + } + if (keepD && d < md) { + d = md; + } + if (ro) { + d = state.round(d); + } + fv.setRelative(p2, rp, sign * d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log( + state.step, + (indirect ? "MIRP[" : "MDRP[") + (setRp0 ? "M" : "m") + (keepD ? ">" : "_") + (ro ? "R" : "_") + (dt2 === 0 ? "Gr" : dt2 === 1 ? "Bl" : dt2 === 2 ? "Wh" : "") + "]", + indirect ? cvte + "(" + state.cvt[cvte] + "," + cv + ")" : "", + pi2, + "(d =", + od, + "->", + sign * d, + ")" + ); + } + state.rp1 = state.rp0; + state.rp2 = pi2; + if (setRp0) { + state.rp0 = pi2; + } +} +instructionTable = [ + /* 0x00 */ + SVTCA.bind(void 0, yUnitVector), + /* 0x01 */ + SVTCA.bind(void 0, xUnitVector), + /* 0x02 */ + SPVTCA.bind(void 0, yUnitVector), + /* 0x03 */ + SPVTCA.bind(void 0, xUnitVector), + /* 0x04 */ + SFVTCA.bind(void 0, yUnitVector), + /* 0x05 */ + SFVTCA.bind(void 0, xUnitVector), + /* 0x06 */ + SPVTL.bind(void 0, 0), + /* 0x07 */ + SPVTL.bind(void 0, 1), + /* 0x08 */ + SFVTL.bind(void 0, 0), + /* 0x09 */ + SFVTL.bind(void 0, 1), + /* 0x0A */ + SPVFS, + /* 0x0B */ + SFVFS, + /* 0x0C */ + GPV, + /* 0x0D */ + GFV, + /* 0x0E */ + SFVTPV, + /* 0x0F */ + ISECT, + /* 0x10 */ + SRP0, + /* 0x11 */ + SRP1, + /* 0x12 */ + SRP2, + /* 0x13 */ + SZP0, + /* 0x14 */ + SZP1, + /* 0x15 */ + SZP2, + /* 0x16 */ + SZPS, + /* 0x17 */ + SLOOP, + /* 0x18 */ + RTG, + /* 0x19 */ + RTHG, + /* 0x1A */ + SMD, + /* 0x1B */ + ELSE, + /* 0x1C */ + JMPR, + /* 0x1D */ + SCVTCI, + /* 0x1E */ + void 0, + // TODO SSWCI + /* 0x1F */ + void 0, + // TODO SSW + /* 0x20 */ + DUP, + /* 0x21 */ + POP, + /* 0x22 */ + CLEAR, + /* 0x23 */ + SWAP, + /* 0x24 */ + DEPTH, + /* 0x25 */ + CINDEX, + /* 0x26 */ + MINDEX, + /* 0x27 */ + void 0, + // TODO ALIGNPTS + /* 0x28 */ + void 0, + /* 0x29 */ + void 0, + // TODO UTP + /* 0x2A */ + LOOPCALL, + /* 0x2B */ + CALL, + /* 0x2C */ + FDEF, + /* 0x2D */ + void 0, + // ENDF (eaten by FDEF) + /* 0x2E */ + MDAP.bind(void 0, 0), + /* 0x2F */ + MDAP.bind(void 0, 1), + /* 0x30 */ + IUP.bind(void 0, yUnitVector), + /* 0x31 */ + IUP.bind(void 0, xUnitVector), + /* 0x32 */ + SHP.bind(void 0, 0), + /* 0x33 */ + SHP.bind(void 0, 1), + /* 0x34 */ + SHC.bind(void 0, 0), + /* 0x35 */ + SHC.bind(void 0, 1), + /* 0x36 */ + SHZ.bind(void 0, 0), + /* 0x37 */ + SHZ.bind(void 0, 1), + /* 0x38 */ + SHPIX, + /* 0x39 */ + IP, + /* 0x3A */ + MSIRP.bind(void 0, 0), + /* 0x3B */ + MSIRP.bind(void 0, 1), + /* 0x3C */ + ALIGNRP, + /* 0x3D */ + RTDG, + /* 0x3E */ + MIAP.bind(void 0, 0), + /* 0x3F */ + MIAP.bind(void 0, 1), + /* 0x40 */ + NPUSHB, + /* 0x41 */ + NPUSHW, + /* 0x42 */ + WS, + /* 0x43 */ + RS, + /* 0x44 */ + WCVTP, + /* 0x45 */ + RCVT, + /* 0x46 */ + GC.bind(void 0, 0), + /* 0x47 */ + GC.bind(void 0, 1), + /* 0x48 */ + void 0, + // TODO SCFS + /* 0x49 */ + MD.bind(void 0, 0), + /* 0x4A */ + MD.bind(void 0, 1), + /* 0x4B */ + MPPEM, + /* 0x4C */ + void 0, + // TODO MPS + /* 0x4D */ + FLIPON, + /* 0x4E */ + void 0, + // TODO FLIPOFF + /* 0x4F */ + void 0, + // TODO DEBUG + /* 0x50 */ + LT, + /* 0x51 */ + LTEQ, + /* 0x52 */ + GT, + /* 0x53 */ + GTEQ, + /* 0x54 */ + EQ, + /* 0x55 */ + NEQ, + /* 0x56 */ + ODD, + /* 0x57 */ + EVEN, + /* 0x58 */ + IF, + /* 0x59 */ + EIF, + /* 0x5A */ + AND, + /* 0x5B */ + OR, + /* 0x5C */ + NOT, + /* 0x5D */ + DELTAP123.bind(void 0, 1), + /* 0x5E */ + SDB, + /* 0x5F */ + SDS, + /* 0x60 */ + ADD, + /* 0x61 */ + SUB, + /* 0x62 */ + DIV, + /* 0x63 */ + MUL, + /* 0x64 */ + ABS, + /* 0x65 */ + NEG, + /* 0x66 */ + FLOOR, + /* 0x67 */ + CEILING, + /* 0x68 */ + ROUND.bind(void 0, 0), + /* 0x69 */ + ROUND.bind(void 0, 1), + /* 0x6A */ + ROUND.bind(void 0, 2), + /* 0x6B */ + ROUND.bind(void 0, 3), + /* 0x6C */ + void 0, + // TODO NROUND[ab] + /* 0x6D */ + void 0, + // TODO NROUND[ab] + /* 0x6E */ + void 0, + // TODO NROUND[ab] + /* 0x6F */ + void 0, + // TODO NROUND[ab] + /* 0x70 */ + WCVTF, + /* 0x71 */ + DELTAP123.bind(void 0, 2), + /* 0x72 */ + DELTAP123.bind(void 0, 3), + /* 0x73 */ + DELTAC123.bind(void 0, 1), + /* 0x74 */ + DELTAC123.bind(void 0, 2), + /* 0x75 */ + DELTAC123.bind(void 0, 3), + /* 0x76 */ + SROUND, + /* 0x77 */ + S45ROUND, + /* 0x78 */ + void 0, + // TODO JROT[] + /* 0x79 */ + void 0, + // TODO JROF[] + /* 0x7A */ + ROFF, + /* 0x7B */ + void 0, + /* 0x7C */ + RUTG, + /* 0x7D */ + RDTG, + /* 0x7E */ + POP, + // actually SANGW, supposed to do only a pop though + /* 0x7F */ + POP, + // actually AA, supposed to do only a pop though + /* 0x80 */ + void 0, + // TODO FLIPPT + /* 0x81 */ + void 0, + // TODO FLIPRGON + /* 0x82 */ + void 0, + // TODO FLIPRGOFF + /* 0x83 */ + void 0, + /* 0x84 */ + void 0, + /* 0x85 */ + SCANCTRL, + /* 0x86 */ + SDPVTL.bind(void 0, 0), + /* 0x87 */ + SDPVTL.bind(void 0, 1), + /* 0x88 */ + GETINFO, + /* 0x89 */ + void 0, + // TODO IDEF + /* 0x8A */ + ROLL, + /* 0x8B */ + MAX, + /* 0x8C */ + MIN, + /* 0x8D */ + SCANTYPE, + /* 0x8E */ + INSTCTRL, + /* 0x8F */ + void 0, + /* 0x90 */ + void 0, + /* 0x91 */ + void 0, + /* 0x92 */ + void 0, + /* 0x93 */ + void 0, + /* 0x94 */ + void 0, + /* 0x95 */ + void 0, + /* 0x96 */ + void 0, + /* 0x97 */ + void 0, + /* 0x98 */ + void 0, + /* 0x99 */ + void 0, + /* 0x9A */ + void 0, + /* 0x9B */ + void 0, + /* 0x9C */ + void 0, + /* 0x9D */ + void 0, + /* 0x9E */ + void 0, + /* 0x9F */ + void 0, + /* 0xA0 */ + void 0, + /* 0xA1 */ + void 0, + /* 0xA2 */ + void 0, + /* 0xA3 */ + void 0, + /* 0xA4 */ + void 0, + /* 0xA5 */ + void 0, + /* 0xA6 */ + void 0, + /* 0xA7 */ + void 0, + /* 0xA8 */ + void 0, + /* 0xA9 */ + void 0, + /* 0xAA */ + void 0, + /* 0xAB */ + void 0, + /* 0xAC */ + void 0, + /* 0xAD */ + void 0, + /* 0xAE */ + void 0, + /* 0xAF */ + void 0, + /* 0xB0 */ + PUSHB.bind(void 0, 1), + /* 0xB1 */ + PUSHB.bind(void 0, 2), + /* 0xB2 */ + PUSHB.bind(void 0, 3), + /* 0xB3 */ + PUSHB.bind(void 0, 4), + /* 0xB4 */ + PUSHB.bind(void 0, 5), + /* 0xB5 */ + PUSHB.bind(void 0, 6), + /* 0xB6 */ + PUSHB.bind(void 0, 7), + /* 0xB7 */ + PUSHB.bind(void 0, 8), + /* 0xB8 */ + PUSHW.bind(void 0, 1), + /* 0xB9 */ + PUSHW.bind(void 0, 2), + /* 0xBA */ + PUSHW.bind(void 0, 3), + /* 0xBB */ + PUSHW.bind(void 0, 4), + /* 0xBC */ + PUSHW.bind(void 0, 5), + /* 0xBD */ + PUSHW.bind(void 0, 6), + /* 0xBE */ + PUSHW.bind(void 0, 7), + /* 0xBF */ + PUSHW.bind(void 0, 8), + /* 0xC0 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0), + /* 0xC1 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1), + /* 0xC2 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2), + /* 0xC3 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3), + /* 0xC4 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0), + /* 0xC5 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1), + /* 0xC6 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2), + /* 0xC7 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3), + /* 0xC8 */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0), + /* 0xC9 */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1), + /* 0xCA */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2), + /* 0xCB */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3), + /* 0xCC */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0), + /* 0xCD */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1), + /* 0xCE */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2), + /* 0xCF */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3), + /* 0xD0 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0), + /* 0xD1 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1), + /* 0xD2 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2), + /* 0xD3 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3), + /* 0xD4 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0), + /* 0xD5 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1), + /* 0xD6 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2), + /* 0xD7 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3), + /* 0xD8 */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0), + /* 0xD9 */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1), + /* 0xDA */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2), + /* 0xDB */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3), + /* 0xDC */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0), + /* 0xDD */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1), + /* 0xDE */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2), + /* 0xDF */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3), + /* 0xE0 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0), + /* 0xE1 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1), + /* 0xE2 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2), + /* 0xE3 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3), + /* 0xE4 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0), + /* 0xE5 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1), + /* 0xE6 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2), + /* 0xE7 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3), + /* 0xE8 */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0), + /* 0xE9 */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1), + /* 0xEA */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2), + /* 0xEB */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3), + /* 0xEC */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0), + /* 0xED */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1), + /* 0xEE */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2), + /* 0xEF */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3), + /* 0xF0 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0), + /* 0xF1 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1), + /* 0xF2 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2), + /* 0xF3 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3), + /* 0xF4 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0), + /* 0xF5 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1), + /* 0xF6 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2), + /* 0xF7 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3), + /* 0xF8 */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0), + /* 0xF9 */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1), + /* 0xFA */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2), + /* 0xFB */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3), + /* 0xFC */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0), + /* 0xFD */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1), + /* 0xFE */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2), + /* 0xFF */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3) +]; +function Token(char) { + this.char = char; + this.state = {}; + this.activeState = null; +} +function ContextRange(startIndex, endOffset, contextName) { + this.contextName = contextName; + this.startIndex = startIndex; + this.endOffset = endOffset; +} +function ContextChecker(contextName, checkStart, checkEnd) { + this.contextName = contextName; + this.openRange = null; + this.ranges = []; + this.checkStart = checkStart; + this.checkEnd = checkEnd; +} +function ContextParams(context, currentIndex) { + this.context = context; + this.index = currentIndex; + this.length = context.length; + this.current = context[currentIndex]; + this.backtrack = context.slice(0, currentIndex); + this.lookahead = context.slice(currentIndex + 1); +} +function Event(eventId) { + this.eventId = eventId; + this.subscribers = []; +} +function initializeCoreEvents(events) { + var this$1 = this; + var coreEvents = [ + "start", + "end", + "next", + "newToken", + "contextStart", + "contextEnd", + "insertToken", + "removeToken", + "removeRange", + "replaceToken", + "replaceRange", + "composeRUD", + "updateContextsRanges" + ]; + coreEvents.forEach(function(eventId) { + Object.defineProperty(this$1.events, eventId, { + value: new Event(eventId) + }); + }); + if (!!events) { + coreEvents.forEach(function(eventId) { + var event = events[eventId]; + if (typeof event === "function") { + this$1.events[eventId].subscribe(event); + } + }); + } + var requiresContextUpdate = [ + "insertToken", + "removeToken", + "removeRange", + "replaceToken", + "replaceRange", + "composeRUD" + ]; + requiresContextUpdate.forEach(function(eventId) { + this$1.events[eventId].subscribe( + this$1.updateContextsRanges + ); + }); +} +function Tokenizer(events) { + this.tokens = []; + this.registeredContexts = {}; + this.contextCheckers = []; + this.events = {}; + this.registeredModifiers = []; + initializeCoreEvents.call(this, events); +} +Token.prototype.setState = function(key2, value2) { + this.state[key2] = value2; + this.activeState = { key: key2, value: this.state[key2] }; + return this.activeState; +}; +Token.prototype.getState = function(stateId) { + return this.state[stateId] || null; +}; +Tokenizer.prototype.inboundIndex = function(index2) { + return index2 >= 0 && index2 < this.tokens.length; +}; +Tokenizer.prototype.composeRUD = function(RUDs) { + var this$1 = this; + var silent = true; + var state = RUDs.map(function(RUD) { + return this$1[RUD[0]].apply(this$1, RUD.slice(1).concat(silent)); + }); + var hasFAILObject = function(obj) { + return typeof obj === "object" && obj.hasOwnProperty("FAIL"); + }; + if (state.every(hasFAILObject)) { + return { + FAIL: "composeRUD: one or more operations hasn't completed successfully", + report: state.filter(hasFAILObject) + }; + } + this.dispatch("composeRUD", [state.filter(function(op) { + return !hasFAILObject(op); + })]); +}; +Tokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) { + offset = offset !== null ? offset : this.tokens.length; + var isTokenType = tokens.every(function(token) { + return token instanceof Token; + }); + if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) { + var replaced = this.tokens.splice.apply( + this.tokens, + [startIndex, offset].concat(tokens) + ); + if (!silent) { + this.dispatch("replaceToken", [startIndex, offset, tokens]); + } + return [replaced, tokens]; + } else { + return { FAIL: "replaceRange: invalid tokens or startIndex." }; + } +}; +Tokenizer.prototype.replaceToken = function(index2, token, silent) { + if (!isNaN(index2) && this.inboundIndex(index2) && token instanceof Token) { + var replaced = this.tokens.splice(index2, 1, token); + if (!silent) { + this.dispatch("replaceToken", [index2, token]); + } + return [replaced[0], token]; + } else { + return { FAIL: "replaceToken: invalid token or index." }; + } +}; +Tokenizer.prototype.removeRange = function(startIndex, offset, silent) { + offset = !isNaN(offset) ? offset : this.tokens.length; + var tokens = this.tokens.splice(startIndex, offset); + if (!silent) { + this.dispatch("removeRange", [tokens, startIndex, offset]); + } + return tokens; +}; +Tokenizer.prototype.removeToken = function(index2, silent) { + if (!isNaN(index2) && this.inboundIndex(index2)) { + var token = this.tokens.splice(index2, 1); + if (!silent) { + this.dispatch("removeToken", [token, index2]); + } + return token; + } else { + return { FAIL: "removeToken: invalid token index." }; + } +}; +Tokenizer.prototype.insertToken = function(tokens, index2, silent) { + var tokenType = tokens.every( + function(token) { + return token instanceof Token; + } + ); + if (tokenType) { + this.tokens.splice.apply( + this.tokens, + [index2, 0].concat(tokens) + ); + if (!silent) { + this.dispatch("insertToken", [tokens, index2]); + } + return tokens; + } else { + return { FAIL: "insertToken: invalid token(s)." }; + } +}; +Tokenizer.prototype.registerModifier = function(modifierId, condition, modifier) { + this.events.newToken.subscribe(function(token, contextParams) { + var conditionParams = [token, contextParams]; + var canApplyModifier = condition === null || condition.apply(this, conditionParams) === true; + var modifierParams = [token, contextParams]; + if (canApplyModifier) { + var newStateValue = modifier.apply(this, modifierParams); + token.setState(modifierId, newStateValue); + } + }); + this.registeredModifiers.push(modifierId); +}; +Event.prototype.subscribe = function(eventHandler) { + if (typeof eventHandler === "function") { + return this.subscribers.push(eventHandler) - 1; + } else { + return { FAIL: "invalid '" + this.eventId + "' event handler" }; + } +}; +Event.prototype.unsubscribe = function(subsId) { + this.subscribers.splice(subsId, 1); +}; +ContextParams.prototype.setCurrentIndex = function(index2) { + this.index = index2; + this.current = this.context[index2]; + this.backtrack = this.context.slice(0, index2); + this.lookahead = this.context.slice(index2 + 1); +}; +ContextParams.prototype.get = function(offset) { + switch (true) { + case offset === 0: + return this.current; + case (offset < 0 && Math.abs(offset) <= this.backtrack.length): + return this.backtrack.slice(offset)[0]; + case (offset > 0 && offset <= this.lookahead.length): + return this.lookahead[offset - 1]; + default: + return null; + } +}; +Tokenizer.prototype.rangeToText = function(range) { + if (range instanceof ContextRange) { + return this.getRangeTokens(range).map(function(token) { + return token.char; + }).join(""); + } +}; +Tokenizer.prototype.getText = function() { + return this.tokens.map(function(token) { + return token.char; + }).join(""); +}; +Tokenizer.prototype.getContext = function(contextName) { + var context = this.registeredContexts[contextName]; + return !!context ? context : null; +}; +Tokenizer.prototype.on = function(eventName, eventHandler) { + var event = this.events[eventName]; + if (!!event) { + return event.subscribe(eventHandler); + } else { + return null; + } +}; +Tokenizer.prototype.dispatch = function(eventName, args) { + var this$1 = this; + var event = this.events[eventName]; + if (event instanceof Event) { + event.subscribers.forEach(function(subscriber) { + subscriber.apply(this$1, args || []); + }); + } +}; +Tokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) { + if (!!this.getContext(contextName)) { + return { + FAIL: "context name '" + contextName + "' is already registered." + }; + } + if (typeof contextStartCheck !== "function") { + return { + FAIL: "missing context start check." + }; + } + if (typeof contextEndCheck !== "function") { + return { + FAIL: "missing context end check." + }; + } + var contextCheckers = new ContextChecker( + contextName, + contextStartCheck, + contextEndCheck + ); + this.registeredContexts[contextName] = contextCheckers; + this.contextCheckers.push(contextCheckers); + return contextCheckers; +}; +Tokenizer.prototype.getRangeTokens = function(range) { + var endIndex = range.startIndex + range.endOffset; + return [].concat( + this.tokens.slice(range.startIndex, endIndex) + ); +}; +Tokenizer.prototype.getContextRanges = function(contextName) { + var context = this.getContext(contextName); + if (!!context) { + return context.ranges; + } else { + return { FAIL: "context checker '" + contextName + "' is not registered." }; + } +}; +Tokenizer.prototype.resetContextsRanges = function() { + var registeredContexts = this.registeredContexts; + for (var contextName in registeredContexts) { + if (registeredContexts.hasOwnProperty(contextName)) { + var context = registeredContexts[contextName]; + context.ranges = []; + } + } +}; +Tokenizer.prototype.updateContextsRanges = function() { + this.resetContextsRanges(); + var chars = this.tokens.map(function(token) { + return token.char; + }); + for (var i = 0; i < chars.length; i++) { + var contextParams = new ContextParams(chars, i); + this.runContextCheck(contextParams); + } + this.dispatch("updateContextsRanges", [this.registeredContexts]); +}; +Tokenizer.prototype.setEndOffset = function(offset, contextName) { + var startIndex = this.getContext(contextName).openRange.startIndex; + var range = new ContextRange(startIndex, offset, contextName); + var ranges = this.getContext(contextName).ranges; + range.rangeId = contextName + "." + ranges.length; + ranges.push(range); + this.getContext(contextName).openRange = null; + return range; +}; +Tokenizer.prototype.runContextCheck = function(contextParams) { + var this$1 = this; + var index2 = contextParams.index; + this.contextCheckers.forEach(function(contextChecker) { + var contextName = contextChecker.contextName; + var openRange = this$1.getContext(contextName).openRange; + if (!openRange && contextChecker.checkStart(contextParams)) { + openRange = new ContextRange(index2, null, contextName); + this$1.getContext(contextName).openRange = openRange; + this$1.dispatch("contextStart", [contextName, index2]); + } + if (!!openRange && contextChecker.checkEnd(contextParams)) { + var offset = index2 - openRange.startIndex + 1; + var range = this$1.setEndOffset(offset, contextName); + this$1.dispatch("contextEnd", [contextName, range]); + } + }); +}; +Tokenizer.prototype.tokenize = function(text2) { + this.tokens = []; + this.resetContextsRanges(); + var chars = Array.from(text2); + this.dispatch("start"); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var contextParams = new ContextParams(chars, i); + this.dispatch("next", [contextParams]); + this.runContextCheck(contextParams); + var token = new Token(char); + this.tokens.push(token); + this.dispatch("newToken", [token, contextParams]); + } + this.dispatch("end", [this.tokens]); + return this.tokens; +}; +function isArabicChar(c2) { + return /[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(c2); +} +function isIsolatedArabicChar(char) { + return /[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(char); +} +function isTashkeelArabicChar(char) { + return /[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(char); +} +function isLatinChar(c2) { + return /[A-z]/.test(c2); +} +function isWhiteSpace(c2) { + return /\s/.test(c2); +} +function FeatureQuery(font) { + this.font = font; + this.features = {}; +} +function SubstitutionAction(action) { + this.id = action.id; + this.tag = action.tag; + this.substitution = action.substitution; +} +function lookupCoverage(glyphIndex, coverage) { + if (!glyphIndex) { + return -1; + } + switch (coverage.format) { + case 1: + return coverage.glyphs.indexOf(glyphIndex); + case 2: + var ranges = coverage.ranges; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (glyphIndex >= range.start && glyphIndex <= range.end) { + var offset = glyphIndex - range.start; + return range.index + offset; + } + } + break; + default: + return -1; + } + return -1; +} +function singleSubstitutionFormat1(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return glyphIndex + subtable.deltaGlyphId; +} +function singleSubstitutionFormat2(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return subtable.substitute[substituteIndex]; +} +function lookupCoverageList(coverageList, contextParams) { + var lookupList = []; + for (var i = 0; i < coverageList.length; i++) { + var coverage = coverageList[i]; + var glyphIndex = contextParams.current; + glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex; + var lookupIndex = lookupCoverage(glyphIndex, coverage); + if (lookupIndex !== -1) { + lookupList.push(lookupIndex); + } + } + if (lookupList.length !== coverageList.length) { + return -1; + } + return lookupList; +} +function chainingSubstitutionFormat3(contextParams, subtable) { + var lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length; + if (contextParams.context.length < lookupsCount) { + return []; + } + var inputLookups = lookupCoverageList( + subtable.inputCoverage, + contextParams + ); + if (inputLookups === -1) { + return []; + } + var lookaheadOffset = subtable.inputCoverage.length - 1; + if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) { + return []; + } + var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset); + while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) { + lookaheadContext.shift(); + } + var lookaheadParams = new ContextParams(lookaheadContext, 0); + var lookaheadLookups = lookupCoverageList( + subtable.lookaheadCoverage, + lookaheadParams + ); + var backtrackContext = [].concat(contextParams.backtrack); + backtrackContext.reverse(); + while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) { + backtrackContext.shift(); + } + if (backtrackContext.length < subtable.backtrackCoverage.length) { + return []; + } + var backtrackParams = new ContextParams(backtrackContext, 0); + var backtrackLookups = lookupCoverageList( + subtable.backtrackCoverage, + backtrackParams + ); + var contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length; + var substitutions = []; + if (contextRulesMatch) { + for (var i = 0; i < subtable.lookupRecords.length; i++) { + var lookupRecord = subtable.lookupRecords[i]; + var lookupListIndex = lookupRecord.lookupListIndex; + var lookupTable = this.getLookupByIndex(lookupListIndex); + for (var s = 0; s < lookupTable.subtables.length; s++) { + var subtable$1 = lookupTable.subtables[s]; + var lookup = this.getLookupMethod(lookupTable, subtable$1); + var substitutionType = this.getSubstitutionType(lookupTable, subtable$1); + if (substitutionType === "12") { + for (var n2 = 0; n2 < inputLookups.length; n2++) { + var glyphIndex = contextParams.get(n2); + var substitution = lookup(glyphIndex); + if (substitution) { + substitutions.push(substitution); + } + } + } + } + } + } + return substitutions; +} +function ligatureSubstitutionFormat1(contextParams, subtable) { + var glyphIndex = contextParams.current; + var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (ligSetIndex === -1) { + return null; + } + var ligature; + var ligatureSet = subtable.ligatureSets[ligSetIndex]; + for (var s = 0; s < ligatureSet.length; s++) { + ligature = ligatureSet[s]; + for (var l2 = 0; l2 < ligature.components.length; l2++) { + var lookaheadItem = contextParams.lookahead[l2]; + var component = ligature.components[l2]; + if (lookaheadItem !== component) { + break; + } + if (l2 === ligature.components.length - 1) { + return ligature; + } + } + } + return null; +} +function decompositionSubstitutionFormat1(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return subtable.sequences[substituteIndex]; +} +FeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() { + var scripts = this.font.tables.gsub.scripts; + for (var s = 0; s < scripts.length; s++) { + var script = scripts[s]; + if (script.tag === "DFLT") { + return script.script.defaultLangSys.featureIndexes; + } + } + return []; +}; +FeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) { + var tables = this.font.tables; + if (!tables.gsub) { + return []; + } + if (!scriptTag) { + return this.getDefaultScriptFeaturesIndexes(); + } + var scripts = this.font.tables.gsub.scripts; + for (var i = 0; i < scripts.length; i++) { + var script = scripts[i]; + if (script.tag === scriptTag && script.script.defaultLangSys) { + return script.script.defaultLangSys.featureIndexes; + } else { + var langSysRecords = script.langSysRecords; + if (!!langSysRecords) { + for (var j = 0; j < langSysRecords.length; j++) { + var langSysRecord = langSysRecords[j]; + if (langSysRecord.tag === scriptTag) { + var langSys = langSysRecord.langSys; + return langSys.featureIndexes; + } + } + } + } + } + return this.getDefaultScriptFeaturesIndexes(); +}; +FeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) { + var tags = {}; + for (var i = 0; i < features.length; i++) { + var tag = features[i].tag; + var feature = features[i].feature; + tags[tag] = feature; + } + this.features[scriptTag].tags = tags; +}; +FeatureQuery.prototype.getScriptFeatures = function(scriptTag) { + var features = this.features[scriptTag]; + if (this.features.hasOwnProperty(scriptTag)) { + return features; + } + var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag); + if (!featuresIndexes) { + return null; + } + var gsub2 = this.font.tables.gsub; + features = featuresIndexes.map(function(index2) { + return gsub2.features[index2]; + }); + this.features[scriptTag] = features; + this.mapTagsToFeatures(features, scriptTag); + return features; +}; +FeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) { + var lookupType = lookupTable.lookupType.toString(); + var substFormat = subtable.substFormat.toString(); + return lookupType + substFormat; +}; +FeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) { + var this$1 = this; + var substitutionType = this.getSubstitutionType(lookupTable, subtable); + switch (substitutionType) { + case "11": + return function(glyphIndex) { + return singleSubstitutionFormat1.apply( + this$1, + [glyphIndex, subtable] + ); + }; + case "12": + return function(glyphIndex) { + return singleSubstitutionFormat2.apply( + this$1, + [glyphIndex, subtable] + ); + }; + case "63": + return function(contextParams) { + return chainingSubstitutionFormat3.apply( + this$1, + [contextParams, subtable] + ); + }; + case "41": + return function(contextParams) { + return ligatureSubstitutionFormat1.apply( + this$1, + [contextParams, subtable] + ); + }; + case "21": + return function(glyphIndex) { + return decompositionSubstitutionFormat1.apply( + this$1, + [glyphIndex, subtable] + ); + }; + default: + throw new Error( + "lookupType: " + lookupTable.lookupType + " - substFormat: " + subtable.substFormat + " is not yet supported" + ); + } +}; +FeatureQuery.prototype.lookupFeature = function(query) { + var contextParams = query.contextParams; + var currentIndex = contextParams.index; + var feature = this.getFeature({ + tag: query.tag, + script: query.script + }); + if (!feature) { + return new Error( + "font '" + this.font.names.fullName.en + "' doesn't support feature '" + query.tag + "' for script '" + query.script + "'." + ); + } + var lookups = this.getFeatureLookups(feature); + var substitutions = [].concat(contextParams.context); + for (var l2 = 0; l2 < lookups.length; l2++) { + var lookupTable = lookups[l2]; + var subtables = this.getLookupSubtables(lookupTable); + for (var s = 0; s < subtables.length; s++) { + var subtable = subtables[s]; + var substType = this.getSubstitutionType(lookupTable, subtable); + var lookup = this.getLookupMethod(lookupTable, subtable); + var substitution = void 0; + switch (substType) { + case "11": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 11, + tag: query.tag, + substitution + })); + } + break; + case "12": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 12, + tag: query.tag, + substitution + })); + } + break; + case "63": + substitution = lookup(contextParams); + if (Array.isArray(substitution) && substitution.length) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 63, + tag: query.tag, + substitution + })); + } + break; + case "41": + substitution = lookup(contextParams); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 41, + tag: query.tag, + substitution + })); + } + break; + case "21": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 21, + tag: query.tag, + substitution + })); + } + break; + } + contextParams = new ContextParams(substitutions, currentIndex); + if (Array.isArray(substitution) && !substitution.length) { + continue; + } + substitution = null; + } + } + return substitutions.length ? substitutions : null; +}; +FeatureQuery.prototype.supports = function(query) { + if (!query.script) { + return false; + } + this.getScriptFeatures(query.script); + var supportedScript = this.features.hasOwnProperty(query.script); + if (!query.tag) { + return supportedScript; + } + var supportedFeature = this.features[query.script].some(function(feature) { + return feature.tag === query.tag; + }); + return supportedScript && supportedFeature; +}; +FeatureQuery.prototype.getLookupSubtables = function(lookupTable) { + return lookupTable.subtables || null; +}; +FeatureQuery.prototype.getLookupByIndex = function(index2) { + var lookups = this.font.tables.gsub.lookups; + return lookups[index2] || null; +}; +FeatureQuery.prototype.getFeatureLookups = function(feature) { + return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this)); +}; +FeatureQuery.prototype.getFeature = function getFeature(query) { + if (!this.font) { + return { FAIL: "No font was found" }; + } + if (!this.features.hasOwnProperty(query.script)) { + this.getScriptFeatures(query.script); + } + var scriptFeatures = this.features[query.script]; + if (!scriptFeatures) { + return { FAIL: "No feature for script " + query.script }; + } + if (!scriptFeatures.tags[query.tag]) { + return null; + } + return this.features[query.script].tags[query.tag]; +}; +function arabicWordStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? arabic first char + prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char + !isArabicChar(prevChar) && isArabicChar(char) + ); +} +function arabicWordEndCheck(contextParams) { + var nextChar = contextParams.get(1); + return ( + // ? last arabic char + nextChar === null || // ? next char is not arabic + !isArabicChar(nextChar) + ); +} +var arabicWordCheck = { + startCheck: arabicWordStartCheck, + endCheck: arabicWordEndCheck +}; +function arabicSentenceStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? an arabic char preceded with a non arabic char + (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar) + ); +} +function arabicSentenceEndCheck(contextParams) { + var nextChar = contextParams.get(1); + switch (true) { + case nextChar === null: + return true; + case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)): + var nextIsWhitespace = isWhiteSpace(nextChar); + if (!nextIsWhitespace) { + return true; + } + if (nextIsWhitespace) { + var arabicCharAhead = false; + arabicCharAhead = contextParams.lookahead.some( + function(c2) { + return isArabicChar(c2) || isTashkeelArabicChar(c2); + } + ); + if (!arabicCharAhead) { + return true; + } + } + break; + default: + return false; + } +} +var arabicSentenceCheck = { + startCheck: arabicSentenceStartCheck, + endCheck: arabicSentenceEndCheck +}; +function singleSubstitutionFormat1$1(action, tokens, index2) { + tokens[index2].setState(action.tag, action.substitution); +} +function singleSubstitutionFormat2$1(action, tokens, index2) { + tokens[index2].setState(action.tag, action.substitution); +} +function chainingSubstitutionFormat3$1(action, tokens, index2) { + action.substitution.forEach(function(subst, offset) { + var token = tokens[index2 + offset]; + token.setState(action.tag, subst); + }); +} +function ligatureSubstitutionFormat1$1(action, tokens, index2) { + var token = tokens[index2]; + token.setState(action.tag, action.substitution.ligGlyph); + var compsCount = action.substitution.components.length; + for (var i = 0; i < compsCount; i++) { + token = tokens[index2 + i + 1]; + token.setState("deleted", true); + } +} +var SUBSTITUTIONS = { + 11: singleSubstitutionFormat1$1, + 12: singleSubstitutionFormat2$1, + 63: chainingSubstitutionFormat3$1, + 41: ligatureSubstitutionFormat1$1 +}; +function applySubstitution(action, tokens, index2) { + if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) { + SUBSTITUTIONS[action.id](action, tokens, index2); + } +} +function willConnectPrev(charContextParams) { + var backtrack = [].concat(charContextParams.backtrack); + for (var i = backtrack.length - 1; i >= 0; i--) { + var prevChar = backtrack[i]; + var isolated = isIsolatedArabicChar(prevChar); + var tashkeel = isTashkeelArabicChar(prevChar); + if (!isolated && !tashkeel) { + return true; + } + if (isolated) { + return false; + } + } + return false; +} +function willConnectNext(charContextParams) { + if (isIsolatedArabicChar(charContextParams.current)) { + return false; + } + for (var i = 0; i < charContextParams.lookahead.length; i++) { + var nextChar = charContextParams.lookahead[i]; + var tashkeel = isTashkeelArabicChar(nextChar); + if (!tashkeel) { + return true; + } + } + return false; +} +function arabicPresentationForms(range) { + var this$1 = this; + var script = "arab"; + var tags = this.featuresTags[script]; + var tokens = this.tokenizer.getRangeTokens(range); + if (tokens.length === 1) { + return; + } + var contextParams = new ContextParams( + tokens.map( + function(token) { + return token.getState("glyphIndex"); + } + ), + 0 + ); + var charContextParams = new ContextParams( + tokens.map( + function(token) { + return token.char; + } + ), + 0 + ); + tokens.forEach(function(token, index2) { + if (isTashkeelArabicChar(token.char)) { + return; + } + contextParams.setCurrentIndex(index2); + charContextParams.setCurrentIndex(index2); + var CONNECT = 0; + if (willConnectPrev(charContextParams)) { + CONNECT |= 1; + } + if (willConnectNext(charContextParams)) { + CONNECT |= 2; + } + var tag; + switch (CONNECT) { + case 1: + tag = "fina"; + break; + case 2: + tag = "init"; + break; + case 3: + tag = "medi"; + break; + } + if (tags.indexOf(tag) === -1) { + return; + } + var substitutions = this$1.query.lookupFeature({ + tag, + script, + contextParams + }); + if (substitutions instanceof Error) { + return console.info(substitutions.message); + } + substitutions.forEach(function(action, index3) { + if (action instanceof SubstitutionAction) { + applySubstitution(action, tokens, index3); + contextParams.context[index3] = action.substitution; + } + }); + }); +} +function getContextParams(tokens, index2) { + var context = tokens.map(function(token) { + return token.activeState.value; + }); + return new ContextParams(context, index2 || 0); +} +function arabicRequiredLigatures(range) { + var this$1 = this; + var script = "arab"; + var tokens = this.tokenizer.getRangeTokens(range); + var contextParams = getContextParams(tokens); + contextParams.context.forEach(function(glyphIndex, index2) { + contextParams.setCurrentIndex(index2); + var substitutions = this$1.query.lookupFeature({ + tag: "rlig", + script, + contextParams + }); + if (substitutions.length) { + substitutions.forEach( + function(action) { + return applySubstitution(action, tokens, index2); + } + ); + contextParams = getContextParams(tokens); + } + }); +} +function latinWordStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? latin first char + prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char + !isLatinChar(prevChar) && isLatinChar(char) + ); +} +function latinWordEndCheck(contextParams) { + var nextChar = contextParams.get(1); + return ( + // ? last latin char + nextChar === null || // ? next char is not latin + !isLatinChar(nextChar) + ); +} +var latinWordCheck = { + startCheck: latinWordStartCheck, + endCheck: latinWordEndCheck +}; +function getContextParams$1(tokens, index2) { + var context = tokens.map(function(token) { + return token.activeState.value; + }); + return new ContextParams(context, index2 || 0); +} +function latinLigature(range) { + var this$1 = this; + var script = "latn"; + var tokens = this.tokenizer.getRangeTokens(range); + var contextParams = getContextParams$1(tokens); + contextParams.context.forEach(function(glyphIndex, index2) { + contextParams.setCurrentIndex(index2); + var substitutions = this$1.query.lookupFeature({ + tag: "liga", + script, + contextParams + }); + if (substitutions.length) { + substitutions.forEach( + function(action) { + return applySubstitution(action, tokens, index2); + } + ); + contextParams = getContextParams$1(tokens); + } + }); +} +function Bidi(baseDir) { + this.baseDir = baseDir || "ltr"; + this.tokenizer = new Tokenizer(); + this.featuresTags = {}; +} +Bidi.prototype.setText = function(text2) { + this.text = text2; +}; +Bidi.prototype.contextChecks = { + latinWordCheck, + arabicWordCheck, + arabicSentenceCheck +}; +function registerContextChecker(checkId) { + var check2 = this.contextChecks[checkId + "Check"]; + return this.tokenizer.registerContextChecker( + checkId, + check2.startCheck, + check2.endCheck + ); +} +function tokenizeText() { + registerContextChecker.call(this, "latinWord"); + registerContextChecker.call(this, "arabicWord"); + registerContextChecker.call(this, "arabicSentence"); + return this.tokenizer.tokenize(this.text); +} +function reverseArabicSentences() { + var this$1 = this; + var ranges = this.tokenizer.getContextRanges("arabicSentence"); + ranges.forEach(function(range) { + var rangeTokens = this$1.tokenizer.getRangeTokens(range); + this$1.tokenizer.replaceRange( + range.startIndex, + range.endOffset, + rangeTokens.reverse() + ); + }); +} +Bidi.prototype.registerFeatures = function(script, tags) { + var this$1 = this; + var supportedTags = tags.filter( + function(tag) { + return this$1.query.supports({ script, tag }); + } + ); + if (!this.featuresTags.hasOwnProperty(script)) { + this.featuresTags[script] = supportedTags; + } else { + this.featuresTags[script] = this.featuresTags[script].concat(supportedTags); + } +}; +Bidi.prototype.applyFeatures = function(font, features) { + if (!font) { + throw new Error( + "No valid font was provided to apply features" + ); + } + if (!this.query) { + this.query = new FeatureQuery(font); + } + for (var f = 0; f < features.length; f++) { + var feature = features[f]; + if (!this.query.supports({ script: feature.script })) { + continue; + } + this.registerFeatures(feature.script, feature.tags); + } +}; +Bidi.prototype.registerModifier = function(modifierId, condition, modifier) { + this.tokenizer.registerModifier(modifierId, condition, modifier); +}; +function checkGlyphIndexStatus() { + if (this.tokenizer.registeredModifiers.indexOf("glyphIndex") === -1) { + throw new Error( + "glyphIndex modifier is required to apply arabic presentation features." + ); + } +} +function applyArabicPresentationForms() { + var this$1 = this; + var script = "arab"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("arabicWord"); + ranges.forEach(function(range) { + arabicPresentationForms.call(this$1, range); + }); +} +function applyArabicRequireLigatures() { + var this$1 = this; + var script = "arab"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + var tags = this.featuresTags[script]; + if (tags.indexOf("rlig") === -1) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("arabicWord"); + ranges.forEach(function(range) { + arabicRequiredLigatures.call(this$1, range); + }); +} +function applyLatinLigatures() { + var this$1 = this; + var script = "latn"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + var tags = this.featuresTags[script]; + if (tags.indexOf("liga") === -1) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("latinWord"); + ranges.forEach(function(range) { + latinLigature.call(this$1, range); + }); +} +Bidi.prototype.checkContextReady = function(contextId) { + return !!this.tokenizer.getContext(contextId); +}; +Bidi.prototype.applyFeaturesToContexts = function() { + if (this.checkContextReady("arabicWord")) { + applyArabicPresentationForms.call(this); + applyArabicRequireLigatures.call(this); + } + if (this.checkContextReady("latinWord")) { + applyLatinLigatures.call(this); + } + if (this.checkContextReady("arabicSentence")) { + reverseArabicSentences.call(this); + } +}; +Bidi.prototype.processText = function(text2) { + if (!this.text || this.text !== text2) { + this.setText(text2); + tokenizeText.call(this); + this.applyFeaturesToContexts(); + } +}; +Bidi.prototype.getBidiText = function(text2) { + this.processText(text2); + return this.tokenizer.getText(); +}; +Bidi.prototype.getTextGlyphs = function(text2) { + this.processText(text2); + var indexes = []; + for (var i = 0; i < this.tokenizer.tokens.length; i++) { + var token = this.tokenizer.tokens[i]; + if (token.state.deleted) { + continue; + } + var index2 = token.activeState.value; + indexes.push(Array.isArray(index2) ? index2[0] : index2); + } + return indexes; +}; +function Font2(options) { + options = options || {}; + options.tables = options.tables || {}; + if (!options.empty) { + checkArgument(options.familyName, "When creating a new Font object, familyName is required."); + checkArgument(options.styleName, "When creating a new Font object, styleName is required."); + checkArgument(options.unitsPerEm, "When creating a new Font object, unitsPerEm is required."); + checkArgument(options.ascender, "When creating a new Font object, ascender is required."); + checkArgument(options.descender <= 0, "When creating a new Font object, negative descender value is required."); + this.names = { + fontFamily: { en: options.familyName || " " }, + fontSubfamily: { en: options.styleName || " " }, + fullName: { en: options.fullName || options.familyName + " " + options.styleName }, + // postScriptName may not contain any whitespace + postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\s/g, "") }, + designer: { en: options.designer || " " }, + designerURL: { en: options.designerURL || " " }, + manufacturer: { en: options.manufacturer || " " }, + manufacturerURL: { en: options.manufacturerURL || " " }, + license: { en: options.license || " " }, + licenseURL: { en: options.licenseURL || " " }, + version: { en: options.version || "Version 0.1" }, + description: { en: options.description || " " }, + copyright: { en: options.copyright || " " }, + trademark: { en: options.trademark || " " } + }; + this.unitsPerEm = options.unitsPerEm || 1e3; + this.ascender = options.ascender; + this.descender = options.descender; + this.createdTimestamp = options.createdTimestamp; + this.tables = Object.assign(options.tables, { + os2: Object.assign({ + usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM, + usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM, + fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR + }, options.tables.os2) + }); + } + this.supported = true; + this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []); + this.encoding = new DefaultEncoding(this); + this.position = new Position(this); + this.substitution = new Substitution(this); + this.tables = this.tables || {}; + this._push = null; + this._hmtxTableData = {}; + Object.defineProperty(this, "hinting", { + get: function() { + if (this._hinting) { + return this._hinting; + } + if (this.outlinesFormat === "truetype") { + return this._hinting = new Hinting(this); + } + } + }); +} +Font2.prototype.hasChar = function(c2) { + return this.encoding.charToGlyphIndex(c2) !== null; +}; +Font2.prototype.charToGlyphIndex = function(s) { + return this.encoding.charToGlyphIndex(s); +}; +Font2.prototype.charToGlyph = function(c2) { + var glyphIndex = this.charToGlyphIndex(c2); + var glyph = this.glyphs.get(glyphIndex); + if (!glyph) { + glyph = this.glyphs.get(0); + } + return glyph; +}; +Font2.prototype.updateFeatures = function(options) { + return this.defaultRenderOptions.features.map(function(feature) { + if (feature.script === "latn") { + return { + script: "latn", + tags: feature.tags.filter(function(tag) { + return options[tag]; + }) + }; + } else { + return feature; + } + }); +}; +Font2.prototype.stringToGlyphs = function(s, options) { + var this$1 = this; + var bidi = new Bidi(); + var charToGlyphIndexMod = function(token) { + return this$1.charToGlyphIndex(token.char); + }; + bidi.registerModifier("glyphIndex", null, charToGlyphIndexMod); + var features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features; + bidi.applyFeatures(this, features); + var indexes = bidi.getTextGlyphs(s); + var length2 = indexes.length; + var glyphs = new Array(length2); + var notdef = this.glyphs.get(0); + for (var i = 0; i < length2; i += 1) { + glyphs[i] = this.glyphs.get(indexes[i]) || notdef; + } + return glyphs; +}; +Font2.prototype.nameToGlyphIndex = function(name2) { + return this.glyphNames.nameToGlyphIndex(name2); +}; +Font2.prototype.nameToGlyph = function(name2) { + var glyphIndex = this.nameToGlyphIndex(name2); + var glyph = this.glyphs.get(glyphIndex); + if (!glyph) { + glyph = this.glyphs.get(0); + } + return glyph; +}; +Font2.prototype.glyphIndexToName = function(gid) { + if (!this.glyphNames.glyphIndexToName) { + return ""; + } + return this.glyphNames.glyphIndexToName(gid); +}; +Font2.prototype.getKerningValue = function(leftGlyph, rightGlyph) { + leftGlyph = leftGlyph.index || leftGlyph; + rightGlyph = rightGlyph.index || rightGlyph; + var gposKerning = this.position.defaultKerningTables; + if (gposKerning) { + return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph); + } + return this.kerningPairs[leftGlyph + "," + rightGlyph] || 0; +}; +Font2.prototype.defaultRenderOptions = { + kerning: true, + features: [ + /** + * these 4 features are required to render Arabic text properly + * and shouldn't be turned off when rendering arabic text. + */ + { script: "arab", tags: ["init", "medi", "fina", "rlig"] }, + { script: "latn", tags: ["liga", "rlig"] } + ] +}; +Font2.prototype.forEachGlyph = function(text2, x2, y2, fontSize, options, callback) { + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 72; + options = Object.assign({}, this.defaultRenderOptions, options); + var fontScale = 1 / this.unitsPerEm * fontSize; + var glyphs = this.stringToGlyphs(text2, options); + var kerningLookups; + if (options.kerning) { + var script = options.script || this.position.getDefaultScriptName(); + kerningLookups = this.position.getKerningTables(script, options.language); + } + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs[i]; + callback.call(this, glyph, x2, y2, fontSize, options); + if (glyph.advanceWidth) { + x2 += glyph.advanceWidth * fontScale; + } + if (options.kerning && i < glyphs.length - 1) { + var kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]); + x2 += kerningValue * fontScale; + } + if (options.letterSpacing) { + x2 += options.letterSpacing * fontSize; + } else if (options.tracking) { + x2 += options.tracking / 1e3 * fontSize; + } + } + return x2; +}; +Font2.prototype.getPath = function(text2, x2, y2, fontSize, options) { + var fullPath = new Path2(); + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); + fullPath.extend(glyphPath); + }); + return fullPath; +}; +Font2.prototype.getPaths = function(text2, x2, y2, fontSize, options) { + var glyphPaths = []; + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); + glyphPaths.push(glyphPath); + }); + return glyphPaths; +}; +Font2.prototype.getAdvanceWidth = function(text2, fontSize, options) { + return this.forEachGlyph(text2, 0, 0, fontSize, options, function() { + }); +}; +Font2.prototype.draw = function(ctx, text2, x2, y2, fontSize, options) { + this.getPath(text2, x2, y2, fontSize, options).draw(ctx); +}; +Font2.prototype.drawPoints = function(ctx, text2, x2, y2, fontSize, options) { + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + glyph.drawPoints(ctx, gX, gY, gFontSize); + }); +}; +Font2.prototype.drawMetrics = function(ctx, text2, x2, y2, fontSize, options) { + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + glyph.drawMetrics(ctx, gX, gY, gFontSize); + }); +}; +Font2.prototype.getEnglishName = function(name2) { + var translations = this.names[name2]; + if (translations) { + return translations.en; + } +}; +Font2.prototype.validate = function() { + var _this = this; + function assert(predicate, message) { + } + function assertNamePresent(name2) { + var englishName = _this.getEnglishName(name2); + assert(englishName && englishName.trim().length > 0); + } + assertNamePresent("fontFamily"); + assertNamePresent("weightName"); + assertNamePresent("manufacturer"); + assertNamePresent("copyright"); + assertNamePresent("version"); + assert(this.unitsPerEm > 0); +}; +Font2.prototype.toTables = function() { + return sfnt.fontToTable(this); +}; +Font2.prototype.toBuffer = function() { + console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."); + return this.toArrayBuffer(); +}; +Font2.prototype.toArrayBuffer = function() { + var sfntTable = this.toTables(); + var bytes = sfntTable.encode(); + var buffer = new ArrayBuffer(bytes.length); + var intArray = new Uint8Array(buffer); + for (var i = 0; i < bytes.length; i++) { + intArray[i] = bytes[i]; + } + return buffer; +}; +Font2.prototype.download = function(fileName) { + var familyName = this.getEnglishName("fontFamily"); + var styleName = this.getEnglishName("fontSubfamily"); + fileName = fileName || familyName.replace(/\s/g, "") + "-" + styleName + ".otf"; + var arrayBuffer = this.toArrayBuffer(); + window.URL = window.URL || window.webkitURL; + if (window.URL) { + var dataView = new DataView(arrayBuffer); + var blob = new Blob([dataView], { type: "font/opentype" }); + var link = document.createElement("a"); + link.href = window.URL.createObjectURL(blob); + link.download = fileName; + var event = document.createEvent("MouseEvents"); + event.initEvent("click", true, false); + link.dispatchEvent(event); + } else { + console.warn("Font file could not be downloaded. Try using a different browser."); + } +}; +Font2.prototype.fsSelectionValues = { + ITALIC: 1, + //1 + UNDERSCORE: 2, + //2 + NEGATIVE: 4, + //4 + OUTLINED: 8, + //8 + STRIKEOUT: 16, + //16 + BOLD: 32, + //32 + REGULAR: 64, + //64 + USER_TYPO_METRICS: 128, + //128 + WWS: 256, + //256 + OBLIQUE: 512 + //512 +}; +Font2.prototype.usWidthClasses = { + ULTRA_CONDENSED: 1, + EXTRA_CONDENSED: 2, + CONDENSED: 3, + SEMI_CONDENSED: 4, + MEDIUM: 5, + SEMI_EXPANDED: 6, + EXPANDED: 7, + EXTRA_EXPANDED: 8, + ULTRA_EXPANDED: 9 +}; +Font2.prototype.usWeightClasses = { + THIN: 100, + EXTRA_LIGHT: 200, + LIGHT: 300, + NORMAL: 400, + MEDIUM: 500, + SEMI_BOLD: 600, + BOLD: 700, + EXTRA_BOLD: 800, + BLACK: 900 +}; +function addName(name2, names) { + var nameString = JSON.stringify(name2); + var nameID = 256; + for (var nameKey in names) { + var n2 = parseInt(nameKey); + if (!n2 || n2 < 256) { + continue; + } + if (JSON.stringify(names[nameKey]) === nameString) { + return n2; + } + if (nameID <= n2) { + nameID = n2 + 1; + } + } + names[nameID] = name2; + return nameID; +} +function makeFvarAxis(n2, axis, names) { + var nameID = addName(axis.name, names); + return [ + { name: "tag_" + n2, type: "TAG", value: axis.tag }, + { name: "minValue_" + n2, type: "FIXED", value: axis.minValue << 16 }, + { name: "defaultValue_" + n2, type: "FIXED", value: axis.defaultValue << 16 }, + { name: "maxValue_" + n2, type: "FIXED", value: axis.maxValue << 16 }, + { name: "flags_" + n2, type: "USHORT", value: 0 }, + { name: "nameID_" + n2, type: "USHORT", value: nameID } + ]; +} +function parseFvarAxis(data2, start, names) { + var axis = {}; + var p2 = new parse.Parser(data2, start); + axis.tag = p2.parseTag(); + axis.minValue = p2.parseFixed(); + axis.defaultValue = p2.parseFixed(); + axis.maxValue = p2.parseFixed(); + p2.skip("uShort", 1); + axis.name = names[p2.parseUShort()] || {}; + return axis; +} +function makeFvarInstance(n2, inst, axes, names) { + var nameID = addName(inst.name, names); + var fields = [ + { name: "nameID_" + n2, type: "USHORT", value: nameID }, + { name: "flags_" + n2, type: "USHORT", value: 0 } + ]; + for (var i = 0; i < axes.length; ++i) { + var axisTag = axes[i].tag; + fields.push({ + name: "axis_" + n2 + " " + axisTag, + type: "FIXED", + value: inst.coordinates[axisTag] << 16 + }); + } + return fields; +} +function parseFvarInstance(data2, start, axes, names) { + var inst = {}; + var p2 = new parse.Parser(data2, start); + inst.name = names[p2.parseUShort()] || {}; + p2.skip("uShort", 1); + inst.coordinates = {}; + for (var i = 0; i < axes.length; ++i) { + inst.coordinates[axes[i].tag] = p2.parseFixed(); + } + return inst; +} +function makeFvarTable(fvar2, names) { + var result = new table.Table("fvar", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "offsetToData", type: "USHORT", value: 0 }, + { name: "countSizePairs", type: "USHORT", value: 2 }, + { name: "axisCount", type: "USHORT", value: fvar2.axes.length }, + { name: "axisSize", type: "USHORT", value: 20 }, + { name: "instanceCount", type: "USHORT", value: fvar2.instances.length }, + { name: "instanceSize", type: "USHORT", value: 4 + fvar2.axes.length * 4 } + ]); + result.offsetToData = result.sizeOf(); + for (var i = 0; i < fvar2.axes.length; i++) { + result.fields = result.fields.concat(makeFvarAxis(i, fvar2.axes[i], names)); + } + for (var j = 0; j < fvar2.instances.length; j++) { + result.fields = result.fields.concat(makeFvarInstance(j, fvar2.instances[j], fvar2.axes, names)); + } + return result; +} +function parseFvarTable(data2, start, names) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 65536, "Unsupported fvar table version."); + var offsetToData = p2.parseOffset16(); + p2.skip("uShort", 1); + var axisCount = p2.parseUShort(); + var axisSize = p2.parseUShort(); + var instanceCount = p2.parseUShort(); + var instanceSize = p2.parseUShort(); + var axes = []; + for (var i = 0; i < axisCount; i++) { + axes.push(parseFvarAxis(data2, start + offsetToData + i * axisSize, names)); + } + var instances = []; + var instanceStart = start + offsetToData + axisCount * axisSize; + for (var j = 0; j < instanceCount; j++) { + instances.push(parseFvarInstance(data2, instanceStart + j * instanceSize, axes, names)); + } + return { axes, instances }; +} +var fvar = { make: makeFvarTable, parse: parseFvarTable }; +var attachList = function() { + return { + coverage: this.parsePointer(Parser2.coverage), + attachPoints: this.parseList(Parser2.pointer(Parser2.uShortList)) + }; +}; +var caretValue = function() { + var format = this.parseUShort(); + check.argument( + format === 1 || format === 2 || format === 3, + "Unsupported CaretValue table version." + ); + if (format === 1) { + return { coordinate: this.parseShort() }; + } else if (format === 2) { + return { pointindex: this.parseShort() }; + } else if (format === 3) { + return { coordinate: this.parseShort() }; + } +}; +var ligGlyph = function() { + return this.parseList(Parser2.pointer(caretValue)); +}; +var ligCaretList = function() { + return { + coverage: this.parsePointer(Parser2.coverage), + ligGlyphs: this.parseList(Parser2.pointer(ligGlyph)) + }; +}; +var markGlyphSets = function() { + this.parseUShort(); + return this.parseList(Parser2.pointer(Parser2.coverage)); +}; +function parseGDEFTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument( + tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3, + "Unsupported GDEF table version." + ); + var gdef2 = { + version: tableVersion, + classDef: p2.parsePointer(Parser2.classDef), + attachList: p2.parsePointer(attachList), + ligCaretList: p2.parsePointer(ligCaretList), + markAttachClassDef: p2.parsePointer(Parser2.classDef) + }; + if (tableVersion >= 1.2) { + gdef2.markGlyphSets = p2.parsePointer(markGlyphSets); + } + return gdef2; +} +var gdef = { parse: parseGDEFTable }; +var subtableParsers$1 = new Array(10); +subtableParsers$1[1] = function parseLookup12() { + var start = this.offset + this.relativeOffset; + var posformat = this.parseUShort(); + if (posformat === 1) { + return { + posFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + value: this.parseValueRecord() + }; + } else if (posformat === 2) { + return { + posFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + values: this.parseValueRecordList() + }; + } + check.assert(false, "0x" + start.toString(16) + ": GPOS lookup type 1 format must be 1 or 2."); +}; +subtableParsers$1[2] = function parseLookup22() { + var start = this.offset + this.relativeOffset; + var posFormat = this.parseUShort(); + check.assert(posFormat === 1 || posFormat === 2, "0x" + start.toString(16) + ": GPOS lookup type 2 format must be 1 or 2."); + var coverage = this.parsePointer(Parser2.coverage); + var valueFormat1 = this.parseUShort(); + var valueFormat2 = this.parseUShort(); + if (posFormat === 1) { + return { + posFormat, + coverage, + valueFormat1, + valueFormat2, + pairSets: this.parseList(Parser2.pointer(Parser2.list(function() { + return { + // pairValueRecord + secondGlyph: this.parseUShort(), + value1: this.parseValueRecord(valueFormat1), + value2: this.parseValueRecord(valueFormat2) + }; + }))) + }; + } else if (posFormat === 2) { + var classDef1 = this.parsePointer(Parser2.classDef); + var classDef2 = this.parsePointer(Parser2.classDef); + var class1Count = this.parseUShort(); + var class2Count = this.parseUShort(); + return { + // Class Pair Adjustment + posFormat, + coverage, + valueFormat1, + valueFormat2, + classDef1, + classDef2, + class1Count, + class2Count, + classRecords: this.parseList(class1Count, Parser2.list(class2Count, function() { + return { + value1: this.parseValueRecord(valueFormat1), + value2: this.parseValueRecord(valueFormat2) + }; + })) + }; + } +}; +subtableParsers$1[3] = function parseLookup32() { + return { error: "GPOS Lookup 3 not supported" }; +}; +subtableParsers$1[4] = function parseLookup42() { + return { error: "GPOS Lookup 4 not supported" }; +}; +subtableParsers$1[5] = function parseLookup52() { + return { error: "GPOS Lookup 5 not supported" }; +}; +subtableParsers$1[6] = function parseLookup62() { + return { error: "GPOS Lookup 6 not supported" }; +}; +subtableParsers$1[7] = function parseLookup72() { + return { error: "GPOS Lookup 7 not supported" }; +}; +subtableParsers$1[8] = function parseLookup82() { + return { error: "GPOS Lookup 8 not supported" }; +}; +subtableParsers$1[9] = function parseLookup9() { + return { error: "GPOS Lookup 9 not supported" }; +}; +function parseGposTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GPOS table version " + tableVersion); + if (tableVersion === 1) { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers$1) + }; + } else { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers$1), + variations: p2.parseFeatureVariationsList() + }; + } +} +var subtableMakers$1 = new Array(10); +function makeGposTable(gpos2) { + return new table.Table("GPOS", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "scripts", type: "TABLE", value: new table.ScriptList(gpos2.scripts) }, + { name: "features", type: "TABLE", value: new table.FeatureList(gpos2.features) }, + { name: "lookups", type: "TABLE", value: new table.LookupList(gpos2.lookups, subtableMakers$1) } + ]); +} +var gpos = { parse: parseGposTable, make: makeGposTable }; +function parseWindowsKernTable(p2) { + var pairs = {}; + p2.skip("uShort"); + var subtableVersion = p2.parseUShort(); + check.argument(subtableVersion === 0, "Unsupported kern sub-table version."); + p2.skip("uShort", 2); + var nPairs = p2.parseUShort(); + p2.skip("uShort", 3); + for (var i = 0; i < nPairs; i += 1) { + var leftIndex = p2.parseUShort(); + var rightIndex = p2.parseUShort(); + var value2 = p2.parseShort(); + pairs[leftIndex + "," + rightIndex] = value2; + } + return pairs; +} +function parseMacKernTable(p2) { + var pairs = {}; + p2.skip("uShort"); + var nTables = p2.parseULong(); + if (nTables > 1) { + console.warn("Only the first kern subtable is supported."); + } + p2.skip("uLong"); + var coverage = p2.parseUShort(); + var subtableVersion = coverage & 255; + p2.skip("uShort"); + if (subtableVersion === 0) { + var nPairs = p2.parseUShort(); + p2.skip("uShort", 3); + for (var i = 0; i < nPairs; i += 1) { + var leftIndex = p2.parseUShort(); + var rightIndex = p2.parseUShort(); + var value2 = p2.parseShort(); + pairs[leftIndex + "," + rightIndex] = value2; + } + } + return pairs; +} +function parseKernTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseUShort(); + if (tableVersion === 0) { + return parseWindowsKernTable(p2); + } else if (tableVersion === 1) { + return parseMacKernTable(p2); + } else { + throw new Error("Unsupported kern table version (" + tableVersion + ")."); + } +} +var kern = { parse: parseKernTable }; +function parseLocaTable(data2, start, numGlyphs, shortVersion) { + var p2 = new parse.Parser(data2, start); + var parseFn = shortVersion ? p2.parseUShort : p2.parseULong; + var glyphOffsets = []; + for (var i = 0; i < numGlyphs + 1; i += 1) { + var glyphOffset = parseFn.call(p2); + if (shortVersion) { + glyphOffset *= 2; + } + glyphOffsets.push(glyphOffset); + } + return glyphOffsets; +} +var loca = { parse: parseLocaTable }; +function loadFromUrl(url, callback) { + var request = new XMLHttpRequest(); + request.open("get", url, true); + request.responseType = "arraybuffer"; + request.onload = function() { + if (request.response) { + return callback(null, request.response); + } else { + return callback("Font could not be loaded: " + request.statusText); + } + }; + request.onerror = function() { + callback("Font could not be loaded"); + }; + request.send(); +} +function parseOpenTypeTableEntries(data2, numTables) { + var tableEntries = []; + var p2 = 12; + for (var i = 0; i < numTables; i += 1) { + var tag = parse.getTag(data2, p2); + var checksum = parse.getULong(data2, p2 + 4); + var offset = parse.getULong(data2, p2 + 8); + var length2 = parse.getULong(data2, p2 + 12); + tableEntries.push({ tag, checksum, offset, length: length2, compression: false }); + p2 += 16; + } + return tableEntries; +} +function parseWOFFTableEntries(data2, numTables) { + var tableEntries = []; + var p2 = 44; + for (var i = 0; i < numTables; i += 1) { + var tag = parse.getTag(data2, p2); + var offset = parse.getULong(data2, p2 + 4); + var compLength = parse.getULong(data2, p2 + 8); + var origLength = parse.getULong(data2, p2 + 12); + var compression = void 0; + if (compLength < origLength) { + compression = "WOFF"; + } else { + compression = false; + } + tableEntries.push({ + tag, + offset, + compression, + compressedLength: compLength, + length: origLength + }); + p2 += 20; + } + return tableEntries; +} +function uncompressTable(data2, tableEntry) { + if (tableEntry.compression === "WOFF") { + var inBuffer = new Uint8Array(data2.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2); + var outBuffer = new Uint8Array(tableEntry.length); + tinyInflate(inBuffer, outBuffer); + if (outBuffer.byteLength !== tableEntry.length) { + throw new Error("Decompression error: " + tableEntry.tag + " decompressed length doesn't match recorded length"); + } + var view = new DataView(outBuffer.buffer, 0); + return { data: view, offset: 0 }; + } else { + return { data: data2, offset: tableEntry.offset }; + } +} +function parseBuffer(buffer, opt) { + opt = opt === void 0 || opt === null ? {} : opt; + var indexToLocFormat; + var ltagTable; + var font = new Font2({ empty: true }); + var data2 = new DataView(buffer, 0); + var numTables; + var tableEntries = []; + var signature = parse.getTag(data2, 0); + if (signature === String.fromCharCode(0, 1, 0, 0) || signature === "true" || signature === "typ1") { + font.outlinesFormat = "truetype"; + numTables = parse.getUShort(data2, 4); + tableEntries = parseOpenTypeTableEntries(data2, numTables); + } else if (signature === "OTTO") { + font.outlinesFormat = "cff"; + numTables = parse.getUShort(data2, 4); + tableEntries = parseOpenTypeTableEntries(data2, numTables); + } else if (signature === "wOFF") { + var flavor = parse.getTag(data2, 4); + if (flavor === String.fromCharCode(0, 1, 0, 0)) { + font.outlinesFormat = "truetype"; + } else if (flavor === "OTTO") { + font.outlinesFormat = "cff"; + } else { + throw new Error("Unsupported OpenType flavor " + signature); + } + numTables = parse.getUShort(data2, 12); + tableEntries = parseWOFFTableEntries(data2, numTables); + } else { + throw new Error("Unsupported OpenType signature " + signature); + } + var cffTableEntry; + var fvarTableEntry; + var glyfTableEntry; + var gdefTableEntry; + var gposTableEntry; + var gsubTableEntry; + var hmtxTableEntry; + var kernTableEntry; + var locaTableEntry; + var nameTableEntry; + var metaTableEntry; + var p2; + for (var i = 0; i < numTables; i += 1) { + var tableEntry = tableEntries[i]; + var table2 = void 0; + switch (tableEntry.tag) { + case "cmap": + table2 = uncompressTable(data2, tableEntry); + font.tables.cmap = cmap.parse(table2.data, table2.offset); + font.encoding = new CmapEncoding(font.tables.cmap); + break; + case "cvt ": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.cvt = p2.parseShortList(tableEntry.length / 2); + break; + case "fvar": + fvarTableEntry = tableEntry; + break; + case "fpgm": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.fpgm = p2.parseByteList(tableEntry.length); + break; + case "head": + table2 = uncompressTable(data2, tableEntry); + font.tables.head = head.parse(table2.data, table2.offset); + font.unitsPerEm = font.tables.head.unitsPerEm; + indexToLocFormat = font.tables.head.indexToLocFormat; + break; + case "hhea": + table2 = uncompressTable(data2, tableEntry); + font.tables.hhea = hhea.parse(table2.data, table2.offset); + font.ascender = font.tables.hhea.ascender; + font.descender = font.tables.hhea.descender; + font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics; + break; + case "hmtx": + hmtxTableEntry = tableEntry; + break; + case "ltag": + table2 = uncompressTable(data2, tableEntry); + ltagTable = ltag.parse(table2.data, table2.offset); + break; + case "COLR": + table2 = uncompressTable(data2, tableEntry); + font.tables.colr = colr.parse(table2.data, table2.offset); + break; + case "CPAL": + table2 = uncompressTable(data2, tableEntry); + font.tables.cpal = cpal.parse(table2.data, table2.offset); + break; + case "maxp": + table2 = uncompressTable(data2, tableEntry); + font.tables.maxp = maxp.parse(table2.data, table2.offset); + font.numGlyphs = font.tables.maxp.numGlyphs; + break; + case "name": + nameTableEntry = tableEntry; + break; + case "OS/2": + table2 = uncompressTable(data2, tableEntry); + font.tables.os2 = os2.parse(table2.data, table2.offset); + break; + case "post": + table2 = uncompressTable(data2, tableEntry); + font.tables.post = post.parse(table2.data, table2.offset); + font.glyphNames = new GlyphNames(font.tables.post); + break; + case "prep": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.prep = p2.parseByteList(tableEntry.length); + break; + case "glyf": + glyfTableEntry = tableEntry; + break; + case "loca": + locaTableEntry = tableEntry; + break; + case "CFF ": + cffTableEntry = tableEntry; + break; + case "kern": + kernTableEntry = tableEntry; + break; + case "GDEF": + gdefTableEntry = tableEntry; + break; + case "GPOS": + gposTableEntry = tableEntry; + break; + case "GSUB": + gsubTableEntry = tableEntry; + break; + case "meta": + metaTableEntry = tableEntry; + break; + } + } + var nameTable = uncompressTable(data2, nameTableEntry); + font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable); + font.names = font.tables.name; + if (glyfTableEntry && locaTableEntry) { + var shortVersion = indexToLocFormat === 0; + var locaTable = uncompressTable(data2, locaTableEntry); + var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion); + var glyfTable = uncompressTable(data2, glyfTableEntry); + font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt); + } else if (cffTableEntry) { + var cffTable = uncompressTable(data2, cffTableEntry); + cff.parse(cffTable.data, cffTable.offset, font, opt); + } else { + throw new Error("Font doesn't contain TrueType or CFF outlines."); + } + var hmtxTable = uncompressTable(data2, hmtxTableEntry); + hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt); + addGlyphNames(font, opt); + if (kernTableEntry) { + var kernTable = uncompressTable(data2, kernTableEntry); + font.kerningPairs = kern.parse(kernTable.data, kernTable.offset); + } else { + font.kerningPairs = {}; + } + if (gdefTableEntry) { + var gdefTable = uncompressTable(data2, gdefTableEntry); + font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset); + } + if (gposTableEntry) { + var gposTable = uncompressTable(data2, gposTableEntry); + font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset); + font.position.init(); + } + if (gsubTableEntry) { + var gsubTable = uncompressTable(data2, gsubTableEntry); + font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset); + } + if (fvarTableEntry) { + var fvarTable = uncompressTable(data2, fvarTableEntry); + font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names); + } + if (metaTableEntry) { + var metaTable = uncompressTable(data2, metaTableEntry); + font.tables.meta = meta.parse(metaTable.data, metaTable.offset); + font.metas = font.tables.meta; + } + return font; +} +function load(url, callback, opt) { + opt = opt === void 0 || opt === null ? {} : opt; + return new Promise(function(resolve, reject2) { + loadFromUrl(url, function(err2, arrayBuffer) { + if (err2) { + if (callback) { + return callback(err2); + } else { + reject2(err2); + } + } + var font; + try { + font = parseBuffer(arrayBuffer, opt); + } catch (e) { + if (callback) { + return callback(e, null); + } else { + reject2(e); + } + } + if (callback) { + return callback(null, font); + } else { + resolve(font); + } + }); + }); +} +var opentype = Object.freeze({ + __proto__: null, + Font: Font2, + Glyph, + Path: Path2, + BoundingBox, + _parse: parse, + parse: parseBuffer, + load +}); +var opentype_module_default = opentype; + +// node_modules/three/examples/jsm/loaders/TTFLoader.js +var TTFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.reversed = false; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(arraybuffer) { + function convert(font, reversed) { + const round = Math.round; + const glyphs = {}; + const scale2 = 1e5 / ((font.unitsPerEm || 2048) * 72); + const glyphIndexMap = font.encoding.cmap.glyphIndexMap; + const unicodes = Object.keys(glyphIndexMap); + for (let i = 0; i < unicodes.length; i++) { + const unicode = unicodes[i]; + const glyph = font.glyphs.glyphs[glyphIndexMap[unicode]]; + if (unicode !== void 0) { + const token = { + ha: round(glyph.advanceWidth * scale2), + x_min: round(glyph.xMin * scale2), + x_max: round(glyph.xMax * scale2), + o: "" + }; + if (reversed) { + glyph.path.commands = reverseCommands(glyph.path.commands); + } + glyph.path.commands.forEach(function(command) { + if (command.type.toLowerCase() === "c") { + command.type = "b"; + } + token.o += command.type.toLowerCase() + " "; + if (command.x !== void 0 && command.y !== void 0) { + token.o += round(command.x * scale2) + " " + round(command.y * scale2) + " "; + } + if (command.x1 !== void 0 && command.y1 !== void 0) { + token.o += round(command.x1 * scale2) + " " + round(command.y1 * scale2) + " "; + } + if (command.x2 !== void 0 && command.y2 !== void 0) { + token.o += round(command.x2 * scale2) + " " + round(command.y2 * scale2) + " "; + } + }); + glyphs[String.fromCodePoint(glyph.unicode)] = token; + } + } + return { + glyphs, + familyName: font.getEnglishName("fullName"), + ascender: round(font.ascender * scale2), + descender: round(font.descender * scale2), + underlinePosition: font.tables.post.underlinePosition, + underlineThickness: font.tables.post.underlineThickness, + boundingBox: { + xMin: font.tables.head.xMin, + xMax: font.tables.head.xMax, + yMin: font.tables.head.yMin, + yMax: font.tables.head.yMax + }, + resolution: 1e3, + original_font_information: font.tables.name + }; + } + function reverseCommands(commands) { + const paths = []; + let path; + commands.forEach(function(c2) { + if (c2.type.toLowerCase() === "m") { + path = [c2]; + paths.push(path); + } else if (c2.type.toLowerCase() !== "z") { + path.push(c2); + } + }); + const reversed = []; + paths.forEach(function(p2) { + const result = { + type: "m", + x: p2[p2.length - 1].x, + y: p2[p2.length - 1].y + }; + reversed.push(result); + for (let i = p2.length - 1; i > 0; i--) { + const command = p2[i]; + const result2 = { type: command.type }; + if (command.x2 !== void 0 && command.y2 !== void 0) { + result2.x1 = command.x2; + result2.y1 = command.y2; + result2.x2 = command.x1; + result2.y2 = command.y1; + } else if (command.x1 !== void 0 && command.y1 !== void 0) { + result2.x1 = command.x1; + result2.y1 = command.y1; + } + result2.x = p2[i - 1].x; + result2.y = p2[i - 1].y; + reversed.push(result2); + } + }); + return reversed; + } + return convert(opentype_module_default.parse(arraybuffer), this.reversed); + } +}; + +// node_modules/three/examples/jsm/loaders/TiltLoader.js +var TiltLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const group = new Group(); + const zip = unzipSync(new Uint8Array(buffer.slice(16))); + const metadata = JSON.parse(strFromU8(zip["metadata.json"])); + const data2 = new DataView(zip["data.sketch"].buffer); + const num_strokes = data2.getInt32(16, true); + const brushes = {}; + let offset = 20; + for (let i = 0; i < num_strokes; i++) { + const brush_index = data2.getInt32(offset, true); + const brush_color = [ + data2.getFloat32(offset + 4, true), + data2.getFloat32(offset + 8, true), + data2.getFloat32(offset + 12, true), + data2.getFloat32(offset + 16, true) + ]; + const brush_size = data2.getFloat32(offset + 20, true); + const stroke_mask = data2.getUint32(offset + 24, true); + const controlpoint_mask = data2.getUint32(offset + 28, true); + let offset_stroke_mask = 0; + let offset_controlpoint_mask = 0; + for (let j = 0; j < 4; j++) { + const byte = 1 << j; + if ((stroke_mask & byte) > 0) offset_stroke_mask += 4; + if ((controlpoint_mask & byte) > 0) offset_controlpoint_mask += 4; + } + offset = offset + 28 + offset_stroke_mask + 4; + const num_control_points = data2.getInt32(offset, true); + const positions = new Float32Array(num_control_points * 3); + const quaternions = new Float32Array(num_control_points * 4); + offset = offset + 4; + for (let j = 0, k2 = 0; j < positions.length; j += 3, k2 += 4) { + positions[j + 0] = data2.getFloat32(offset + 0, true); + positions[j + 1] = data2.getFloat32(offset + 4, true); + positions[j + 2] = data2.getFloat32(offset + 8, true); + quaternions[k2 + 0] = data2.getFloat32(offset + 12, true); + quaternions[k2 + 1] = data2.getFloat32(offset + 16, true); + quaternions[k2 + 2] = data2.getFloat32(offset + 20, true); + quaternions[k2 + 3] = data2.getFloat32(offset + 24, true); + offset = offset + 28 + offset_controlpoint_mask; + } + if (brush_index in brushes === false) { + brushes[brush_index] = []; + } + brushes[brush_index].push([positions, quaternions, brush_size, brush_color]); + } + for (const brush_index in brushes) { + const geometry = new StrokeGeometry(brushes[brush_index]); + const material = getMaterial(metadata.BrushIndex[brush_index]); + group.add(new Mesh(geometry, material)); + } + return group; + } +}; +var StrokeGeometry = class extends BufferGeometry { + constructor(strokes) { + super(); + const vertices = []; + const colors = []; + const uvs = []; + const position2 = new Vector3(); + const prevPosition = new Vector3(); + const quaternion = new Quaternion(); + const prevQuaternion = new Quaternion(); + const vector1 = new Vector3(); + const vector2 = new Vector3(); + const vector3 = new Vector3(); + const vector4 = new Vector3(); + const color = new Color(); + for (const k2 in strokes) { + const stroke = strokes[k2]; + const positions = stroke[0]; + const quaternions = stroke[1]; + const size2 = stroke[2]; + const rgba = stroke[3]; + const alpha = stroke[3][3]; + color.fromArray(rgba).convertSRGBToLinear(); + prevPosition.fromArray(positions, 0); + prevQuaternion.fromArray(quaternions, 0); + for (let i = 3, j = 4, l2 = positions.length; i < l2; i += 3, j += 4) { + position2.fromArray(positions, i); + quaternion.fromArray(quaternions, j); + vector1.set(-size2, 0, 0); + vector1.applyQuaternion(quaternion); + vector1.add(position2); + vector2.set(size2, 0, 0); + vector2.applyQuaternion(quaternion); + vector2.add(position2); + vector3.set(size2, 0, 0); + vector3.applyQuaternion(prevQuaternion); + vector3.add(prevPosition); + vector4.set(-size2, 0, 0); + vector4.applyQuaternion(prevQuaternion); + vector4.add(prevPosition); + vertices.push(vector1.x, vector1.y, -vector1.z); + vertices.push(vector2.x, vector2.y, -vector2.z); + vertices.push(vector4.x, vector4.y, -vector4.z); + vertices.push(vector2.x, vector2.y, -vector2.z); + vertices.push(vector3.x, vector3.y, -vector3.z); + vertices.push(vector4.x, vector4.y, -vector4.z); + prevPosition.copy(position2); + prevQuaternion.copy(quaternion); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + const p1 = i / l2; + const p2 = (i - 3) / l2; + uvs.push(p1, 0); + uvs.push(p1, 1); + uvs.push(p2, 0); + uvs.push(p1, 1); + uvs.push(p2, 1); + uvs.push(p2, 0); + } + } + this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); + this.setAttribute("color", new BufferAttribute(new Float32Array(colors), 4)); + this.setAttribute("uv", new BufferAttribute(new Float32Array(uvs), 2)); + } +}; +var BRUSH_LIST_ARRAY = { + "89d104cd-d012-426b-b5b3-bbaee63ac43c": "Bubbles", + "700f3aa8-9a7c-2384-8b8a-ea028905dd8c": "CelVinyl", + "0f0ff7b2-a677-45eb-a7d6-0cd7206f4816": "ChromaticWave", + "1161af82-50cf-47db-9706-0c3576d43c43": "CoarseBristles", + "79168f10-6961-464a-8be1-57ed364c5600": "CoarseBristlesSingleSided", + "1caa6d7d-f015-3f54-3a4b-8b5354d39f81": "Comet", + "c8313697-2563-47fc-832e-290f4c04b901": "DiamondHull", + "4391aaaa-df73-4396-9e33-31e4e4930b27": "Disco", + "d1d991f2-e7a0-4cf1-b328-f57e915e6260": "DotMarker", + "6a1cf9f9-032c-45ec-9b1d-a6680bee30f7": "Dots", + "0d3889f3-3ede-470c-8af4-f44813306126": "DoubleTaperedFlat", + "0d3889f3-3ede-470c-8af4-de4813306126": "DoubleTaperedMarker", + "d0262945-853c-4481-9cbd-88586bed93cb": "DuctTape", + "3ca16e2f-bdcd-4da2-8631-dcef342f40f1": "DuctTapeSingleSided", + "f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51": "Electricity", + "02ffb866-7fb2-4d15-b761-1012cefb1360": "Embers", + "cb92b597-94ca-4255-b017-0e3f42f12f9e": "Fire", + "2d35bcf0-e4d8-452c-97b1-3311be063130": "Flat", + "55303bc4-c749-4a72-98d9-d23e68e76e18": "FlatDeprecated", + "280c0a7a-aad8-416c-a7d2-df63d129ca70": "FlatSingleSided", + "cf019139-d41c-4eb0-a1d0-5cf54b0a42f3": "Highlighter", + "6a1cf9f9-032c-45ec-9b6e-a6680bee32e9": "HyperGrid", + "dce872c2-7b49-4684-b59b-c45387949c5c": "Hypercolor", + "e8ef32b1-baa8-460a-9c2c-9cf8506794f5": "HypercolorSingleSided", + "2f212815-f4d3-c1a4-681a-feeaf9c6dc37": "Icing", + "f5c336cf-5108-4b40-ade9-c687504385ab": "Ink", + "c0012095-3ffd-4040-8ee1-fc180d346eaa": "InkSingleSided", + "4a76a27a-44d8-4bfe-9a8c-713749a499b0": "Leaves", + "ea19de07-d0c0-4484-9198-18489a3c1487": "LeavesSingleSided", + "2241cd32-8ba2-48a5-9ee7-2caef7e9ed62": "Light", + "4391aaaa-df81-4396-9e33-31e4e4930b27": "LightWire", + "d381e0f5-3def-4a0d-8853-31e9200bcbda": "Lofted", + "429ed64a-4e97-4466-84d3-145a861ef684": "Marker", + "79348357-432d-4746-8e29-0e25c112e3aa": "MatteHull", + "b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6": "NeonPulse", + "f72ec0e7-a844-4e38-82e3-140c44772699": "OilPaint", + "c515dad7-4393-4681-81ad-162ef052241b": "OilPaintSingleSided", + "f1114e2e-eb8d-4fde-915a-6e653b54e9f5": "Paper", + "759f1ebd-20cd-4720-8d41-234e0da63716": "PaperSingleSided", + "e0abbc80-0f80-e854-4970-8924a0863dcc": "Petal", + "c33714d1-b2f9-412e-bd50-1884c9d46336": "Plasma", + "ad1ad437-76e2-450d-a23a-e17f8310b960": "Rainbow", + "faaa4d44-fcfb-4177-96be-753ac0421ba3": "ShinyHull", + "70d79cca-b159-4f35-990c-f02193947fe8": "Smoke", + "d902ed8b-d0d1-476c-a8de-878a79e3a34c": "Snow", + "accb32f5-4509-454f-93f8-1df3fd31df1b": "SoftHighlighter", + "cf7f0059-7aeb-53a4-2b67-c83d863a9ffa": "Spikes", + "8dc4a70c-d558-4efd-a5ed-d4e860f40dc3": "Splatter", + "7a1c8107-50c5-4b70-9a39-421576d6617e": "SplatterSingleSided", + "0eb4db27-3f82-408d-b5a1-19ebd7d5b711": "Stars", + "44bb800a-fbc3-4592-8426-94ecb05ddec3": "Streamers", + "0077f88c-d93a-42f3-b59b-b31c50cdb414": "Taffy", + "b468c1fb-f254-41ed-8ec9-57030bc5660c": "TaperedFlat", + "c8ccb53d-ae13-45ef-8afb-b730d81394eb": "TaperedFlatSingleSided", + "d90c6ad8-af0f-4b54-b422-e0f92abe1b3c": "TaperedMarker", + "1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0": "TaperedMarker_Flat", + "75b32cf0-fdd6-4d89-a64b-e2a00b247b0f": "ThickPaint", + "fdf0326a-c0d1-4fed-b101-9db0ff6d071f": "ThickPaintSingleSided", + "4391385a-df73-4396-9e33-31e4e4930b27": "Toon", + "a8fea537-da7c-4d4b-817f-24f074725d6d": "UnlitHull", + "d229d335-c334-495a-a801-660ac8a87360": "VelvetInk", + "10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab": "Waveform", + "b67c0e81-ce6d-40a8-aeb0-ef036b081aa3": "WetPaint", + "dea67637-cd1a-27e4-c9b1-52f4bbcb84e5": "WetPaintSingleSided", + "5347acf0-a8e2-47b6-8346-30c70719d763": "WigglyGraphite", + "e814fef1-97fd-7194-4a2f-50c2bb918be2": "WigglyGraphiteSingleSided", + "4391385a-cf83-4396-9e33-31e4e4930b27": "Wire" +}; +var common = { + "colors": { + "BloomColor": ` + vec3 BloomColor(vec3 color, float gain) { + // Guarantee that there's at least a little bit of all 3 channels. + // This makes fully-saturated strokes (which only have 2 non-zero + // color channels) eventually clip to white rather than to a secondary. + float cmin = length(color.rgb) * .05; + color.rgb = max(color.rgb, vec3(cmin, cmin, cmin)); + // If we try to remove this pow() from .a, it brightens up + // pressure-sensitive strokes; looks better as-is. + color = pow(color, vec3(2.2)); + color.rgb *= 2. * exp(gain * 10.); + return color; + } + `, + "LinearToSrgb": ` + vec3 LinearToSrgb(vec3 color) { + // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html + vec3 linearColor = color.rgb; + vec3 S1 = sqrt(linearColor); + vec3 S2 = sqrt(S1); + vec3 S3 = sqrt(S2); + color.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor; + return color; + } + `, + "hsv": ` + // uniform sampler2D lookupTex; + vec4 lookup(vec4 textureColor) { + return textureColor; + } + + vec3 lookup(vec3 textureColor) { + return textureColor; + } + + vec3 hsv2rgb( vec3 hsv ) { + vec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 ); + return hsv.z * mix( vec3(1.0), rgb, hsv.y); + } + + vec3 rgb2hsv( vec3 rgb ) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g)); + vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + `, + "SrgbToLinear": ` + vec3 SrgbToLinear(vec3 color) { + // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html + vec3 sRGB = color.rgb; + color.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878); + return color; + } + ` + } +}; +var shaders = null; +function getShaders() { + if (shaders === null) { + const loader = new TextureLoader().setPath("./textures/tiltbrush/"); + shaders = { + "Light": { + uniforms: { + mainTex: { value: loader.load("Light.webp") }, + alphaTest: { value: 0.067 }, + emission_gain: { value: 0.45 }, + alpha: { value: 1 } + }, + vertexShader: ` + precision highp float; + precision highp int; + + attribute vec2 uv; + attribute vec4 color; + attribute vec3 position; + + uniform mat4 modelMatrix; + uniform mat4 modelViewMatrix; + uniform mat4 projectionMatrix; + uniform mat4 viewMatrix; + uniform mat3 normalMatrix; + uniform vec3 cameraPosition; + + varying vec2 vUv; + varying vec3 vColor; + + ${common.colors.LinearToSrgb} + ${common.colors.hsv} + + void main() { + + vUv = uv; + + vColor = lookup(color.rgb); + + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + + gl_Position = projectionMatrix * mvPosition; + + } + `, + fragmentShader: ` + precision highp float; + precision highp int; + + uniform float emission_gain; + + uniform sampler2D mainTex; + uniform float alphaTest; + + varying vec2 vUv; + varying vec3 vColor; + + ${common.colors.BloomColor} + ${common.colors.SrgbToLinear} + + void main(){ + vec4 col = texture2D(mainTex, vUv); + vec3 color = vColor; + color = BloomColor(color, emission_gain); + color = color * col.rgb; + color = color * col.a; + color = SrgbToLinear(color); + gl_FragColor = vec4(color, 1.0); + } + `, + side: 2, + transparent: true, + depthFunc: 2, + depthWrite: true, + depthTest: false, + blending: 5, + blendDst: 201, + blendDstAlpha: 201, + blendEquation: 100, + blendEquationAlpha: 100, + blendSrc: 201, + blendSrcAlpha: 201 + } + }; + } + return shaders; +} +function getMaterial(GUID) { + const name2 = BRUSH_LIST_ARRAY[GUID]; + switch (name2) { + case "Light": + return new RawShaderMaterial(getShaders().Light); + default: + return new MeshBasicMaterial({ vertexColors: true, side: DoubleSide }); + } +} + +// node_modules/three/examples/jsm/loaders/USDZLoader.js +var USDAParser = class { + parse(text2) { + const data2 = {}; + const lines = text2.split("\n"); + let string = null; + let target = data2; + const stack = [data2]; + for (const line2 of lines) { + if (line2.includes("=")) { + const assignment = line2.split("="); + const lhs = assignment[0].trim(); + const rhs = assignment[1].trim(); + if (rhs.endsWith("{")) { + const group = {}; + stack.push(group); + target[lhs] = group; + target = group; + } else if (rhs.endsWith("(")) { + const values2 = rhs.slice(0, -1); + target[lhs] = values2; + const meta2 = {}; + stack.push(meta2); + target = meta2; + } else { + target[lhs] = rhs; + } + } else if (line2.endsWith("{")) { + const group = target[string] || {}; + stack.push(group); + target[string] = group; + target = group; + } else if (line2.endsWith("}")) { + stack.pop(); + if (stack.length === 0) continue; + target = stack[stack.length - 1]; + } else if (line2.endsWith("(")) { + const meta2 = {}; + stack.push(meta2); + string = line2.split("(")[0].trim() || string; + target[string] = meta2; + target = meta2; + } else if (line2.endsWith(")")) { + stack.pop(); + target = stack[stack.length - 1]; + } else { + string = line2.trim(); + } + } + return data2; + } +}; +var USDZLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const parser = new USDAParser(); + function parseAssets(zip2) { + const data2 = {}; + const loader = new FileLoader(); + loader.setResponseType("arraybuffer"); + for (const filename in zip2) { + if (filename.endsWith("png")) { + const blob = new Blob([zip2[filename]], { type: { type: "image/png" } }); + data2[filename] = URL.createObjectURL(blob); + } + if (filename.endsWith("usd") || filename.endsWith("usda")) { + if (isCrateFile(zip2[filename])) { + throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported."); + } + const text3 = strFromU8(zip2[filename]); + data2[filename] = parser.parse(text3); + } + } + return data2; + } + function isCrateFile(buffer2) { + const fileHeader = buffer2.slice(0, 7); + const crateHeader = new Uint8Array([80, 88, 82, 45, 85, 83, 68, 67]); + return fileHeader.every((value2, index2) => value2 === crateHeader[index2]); + } + function findUSD(zip2) { + if (zip2.length < 1) return void 0; + const firstFileName = Object.keys(zip2)[0]; + let isCrate = false; + if (firstFileName.endsWith("usda")) return zip2[firstFileName]; + if (firstFileName.endsWith("usdc")) { + isCrate = true; + } else if (firstFileName.endsWith("usd")) { + if (!isCrateFile(zip2[firstFileName])) { + return zip2[firstFileName]; + } else { + isCrate = true; + } + } + if (isCrate) { + throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported."); + } + } + const zip = unzipSync(new Uint8Array(buffer)); + const assets = parseAssets(zip); + const file = findUSD(zip); + const text2 = strFromU8(file); + const root = parser.parse(text2); + function findMeshGeometry(data2) { + if (!data2) return void 0; + if ("prepend references" in data2) { + const reference = data2["prepend references"]; + const parts = reference.split("@"); + const path = parts[1].replace(/^.\//, ""); + const id = parts[2].replace(/^<\//, "").replace(/>$/, ""); + return findGeometry(assets[path], id); + } + return findGeometry(data2); + } + function findGeometry(data2, id) { + if (!data2) return void 0; + if (id !== void 0) { + const def = `def Mesh "${id}"`; + if (def in data2) { + return data2[def]; + } + } + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith("def Mesh")) { + return object; + } + if (typeof object === "object") { + const geometry = findGeometry(object); + if (geometry) return geometry; + } + } + } + function buildGeometry(data2) { + if (!data2) return void 0; + const geometry = new BufferGeometry(); + let indices = null; + let counts = null; + let uvs = null; + let positionsLength = -1; + if ("int[] faceVertexIndices" in data2) { + indices = JSON.parse(data2["int[] faceVertexIndices"]); + } + if ("int[] faceVertexCounts" in data2) { + counts = JSON.parse(data2["int[] faceVertexCounts"]); + indices = toTriangleIndices(indices, counts); + } + if ("point3f[] points" in data2) { + const positions = JSON.parse(data2["point3f[] points"].replace(/[()]*/g, "")); + positionsLength = positions.length; + let attribute = new BufferAttribute(new Float32Array(positions), 3); + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + geometry.setAttribute("position", attribute); + } + if ("float2[] primvars:st" in data2) { + data2["texCoord2f[] primvars:st"] = data2["float2[] primvars:st"]; + } + if ("texCoord2f[] primvars:st" in data2) { + uvs = JSON.parse(data2["texCoord2f[] primvars:st"].replace(/[()]*/g, "")); + let attribute = new BufferAttribute(new Float32Array(uvs), 2); + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + geometry.setAttribute("uv", attribute); + } + if ("int[] primvars:st:indices" in data2 && uvs !== null) { + const attribute = new BufferAttribute(new Float32Array(uvs), 2); + let indices2 = JSON.parse(data2["int[] primvars:st:indices"]); + indices2 = toTriangleIndices(indices2, counts); + geometry.setAttribute("uv", toFlatBufferAttribute(attribute, indices2)); + } + if ("normal3f[] normals" in data2) { + const normals = JSON.parse(data2["normal3f[] normals"].replace(/[()]*/g, "")); + let attribute = new BufferAttribute(new Float32Array(normals), 3); + if (normals.length === positionsLength) { + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + } else { + let indices2 = Array.from(Array(normals.length / 3).keys()); + indices2 = toTriangleIndices(indices2, counts); + attribute = toFlatBufferAttribute(attribute, indices2); + } + geometry.setAttribute("normal", attribute); + } else { + geometry.computeVertexNormals(); + } + return geometry; + } + function toTriangleIndices(rawIndices, counts) { + const indices = []; + for (let i = 0; i < counts.length; i++) { + const count = counts[i]; + const stride = i * count; + if (count === 3) { + const a2 = rawIndices[stride + 0]; + const b3 = rawIndices[stride + 1]; + const c2 = rawIndices[stride + 2]; + indices.push(a2, b3, c2); + } else if (count === 4) { + const a2 = rawIndices[stride + 0]; + const b3 = rawIndices[stride + 1]; + const c2 = rawIndices[stride + 2]; + const d = rawIndices[stride + 3]; + indices.push(a2, b3, c2); + indices.push(a2, c2, d); + } else { + console.warn("THREE.USDZLoader: Face vertex count of %s unsupported.", count); + } + } + return indices; + } + function toFlatBufferAttribute(attribute, indices) { + const array = attribute.array; + const itemSize = attribute.itemSize; + const array2 = new array.constructor(indices.length * itemSize); + let index2 = 0, index22 = 0; + for (let i = 0, l2 = indices.length; i < l2; i++) { + index2 = indices[i] * itemSize; + for (let j = 0; j < itemSize; j++) { + array2[index22++] = array[index2++]; + } + } + return new BufferAttribute(array2, itemSize); + } + function findMeshMaterial(data2) { + if (!data2) return void 0; + if ("rel material:binding" in data2) { + const reference = data2["rel material:binding"]; + const id = reference.replace(/^<\//, "").replace(/>$/, ""); + const parts = id.split("/"); + return findMaterial(root, ` "${parts[1]}"`); + } + return findMaterial(data2); + } + function findMaterial(data2, id = "") { + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith("def Material" + id)) { + return object; + } + if (typeof object === "object") { + const material = findMaterial(object, id); + if (material) return material; + } + } + } + function setTextureParams(map2, data_value) { + if (data_value["float inputs:rotation"]) { + map2.rotation = parseFloat(data_value["float inputs:rotation"]); + } + if (data_value["float2 inputs:scale"]) { + map2.repeat = new Vector2().fromArray(JSON.parse("[" + data_value["float2 inputs:scale"].replace(/[()]*/g, "") + "]")); + } + if (data_value["float2 inputs:translation"]) { + map2.offset = new Vector2().fromArray(JSON.parse("[" + data_value["float2 inputs:translation"].replace(/[()]*/g, "") + "]")); + } + } + function buildMaterial2(data2) { + const material = new MeshPhysicalMaterial(); + if (data2 !== void 0) { + const surfaceConnection = data2["token outputs:surface.connect"]; + const surfaceName = /(\w+).output/.exec(surfaceConnection)[1]; + const surface = data2[`def Shader "${surfaceName}"`]; + if (surface !== void 0) { + if ("color3f inputs:diffuseColor.connect" in surface) { + const path = surface["color3f inputs:diffuseColor.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.map = buildTexture(sampler); + material.map.colorSpace = SRGBColorSpace; + if ('def Shader "Transform2d_diffuse"' in data2) { + setTextureParams(material.map, data2['def Shader "Transform2d_diffuse"']); + } + } else if ("color3f inputs:diffuseColor" in surface) { + const color = surface["color3f inputs:diffuseColor"].replace(/[()]*/g, ""); + material.color.fromArray(JSON.parse("[" + color + "]")); + } + if ("color3f inputs:emissiveColor.connect" in surface) { + const path = surface["color3f inputs:emissiveColor.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.emissiveMap = buildTexture(sampler); + material.emissiveMap.colorSpace = SRGBColorSpace; + material.emissive.set(16777215); + if ('def Shader "Transform2d_emissive"' in data2) { + setTextureParams(material.emissiveMap, data2['def Shader "Transform2d_emissive"']); + } + } else if ("color3f inputs:emissiveColor" in surface) { + const color = surface["color3f inputs:emissiveColor"].replace(/[()]*/g, ""); + material.emissive.fromArray(JSON.parse("[" + color + "]")); + } + if ("normal3f inputs:normal.connect" in surface) { + const path = surface["normal3f inputs:normal.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.normalMap = buildTexture(sampler); + material.normalMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_normal"' in data2) { + setTextureParams(material.normalMap, data2['def Shader "Transform2d_normal"']); + } + } + if ("float inputs:roughness.connect" in surface) { + const path = surface["float inputs:roughness.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.roughness = 1; + material.roughnessMap = buildTexture(sampler); + material.roughnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_roughness"' in data2) { + setTextureParams(material.roughnessMap, data2['def Shader "Transform2d_roughness"']); + } + } else if ("float inputs:roughness" in surface) { + material.roughness = parseFloat(surface["float inputs:roughness"]); + } + if ("float inputs:metallic.connect" in surface) { + const path = surface["float inputs:metallic.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.metalness = 1; + material.metalnessMap = buildTexture(sampler); + material.metalnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_metallic"' in data2) { + setTextureParams(material.metalnessMap, data2['def Shader "Transform2d_metallic"']); + } + } else if ("float inputs:metallic" in surface) { + material.metalness = parseFloat(surface["float inputs:metallic"]); + } + if ("float inputs:clearcoat.connect" in surface) { + const path = surface["float inputs:clearcoat.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.clearcoat = 1; + material.clearcoatMap = buildTexture(sampler); + material.clearcoatMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_clearcoat"' in data2) { + setTextureParams(material.clearcoatMap, data2['def Shader "Transform2d_clearcoat"']); + } + } else if ("float inputs:clearcoat" in surface) { + material.clearcoat = parseFloat(surface["float inputs:clearcoat"]); + } + if ("float inputs:clearcoatRoughness.connect" in surface) { + const path = surface["float inputs:clearcoatRoughness.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.clearcoatRoughness = 1; + material.clearcoatRoughnessMap = buildTexture(sampler); + material.clearcoatRoughnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_clearcoatRoughness"' in data2) { + setTextureParams(material.clearcoatRoughnessMap, data2['def Shader "Transform2d_clearcoatRoughness"']); + } + } else if ("float inputs:clearcoatRoughness" in surface) { + material.clearcoatRoughness = parseFloat(surface["float inputs:clearcoatRoughness"]); + } + if ("float inputs:ior" in surface) { + material.ior = parseFloat(surface["float inputs:ior"]); + } + if ("float inputs:occlusion.connect" in surface) { + const path = surface["float inputs:occlusion.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.aoMap = buildTexture(sampler); + material.aoMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_occlusion"' in data2) { + setTextureParams(material.aoMap, data2['def Shader "Transform2d_occlusion"']); + } + } + } + } + return material; + } + function findTexture(data2, id) { + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith(`def Shader "${id}"`)) { + return object; + } + if (typeof object === "object") { + const texture = findTexture(object, id); + if (texture) return texture; + } + } + } + function buildTexture(data2) { + if ("asset inputs:file" in data2) { + const path = data2["asset inputs:file"].replace(/@*/g, "").trim(); + const loader = new TextureLoader(); + const texture = loader.load(assets[path]); + const map2 = { + '"clamp"': ClampToEdgeWrapping, + '"mirror"': MirroredRepeatWrapping, + '"repeat"': RepeatWrapping + }; + if ("token inputs:wrapS" in data2) { + texture.wrapS = map2[data2["token inputs:wrapS"]]; + } + if ("token inputs:wrapT" in data2) { + texture.wrapT = map2[data2["token inputs:wrapT"]]; + } + return texture; + } + return null; + } + function buildObject(data2) { + const geometry = buildGeometry(findMeshGeometry(data2)); + const material = buildMaterial2(findMeshMaterial(data2)); + const mesh = geometry ? new Mesh(geometry, material) : new Object3D(); + if ("matrix4d xformOp:transform" in data2) { + const array = JSON.parse("[" + data2["matrix4d xformOp:transform"].replace(/[()]*/g, "") + "]"); + mesh.matrix.fromArray(array); + mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale); + } + return mesh; + } + function buildHierarchy(data2, group2) { + for (const name2 in data2) { + if (name2.startsWith("def Scope")) { + buildHierarchy(data2[name2], group2); + } else if (name2.startsWith("def Xform")) { + const mesh = buildObject(data2[name2]); + if (/def Xform "(\w+)"/.test(name2)) { + mesh.name = /def Xform "(\w+)"/.exec(name2)[1]; + } + group2.add(mesh); + buildHierarchy(data2[name2], mesh); + } + } + } + const group = new Group(); + buildHierarchy(root, group); + return group; + } +}; + +// node_modules/three/examples/jsm/loaders/VOXLoader.js +var VOXLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const data2 = new DataView(buffer); + const id = data2.getUint32(0, true); + const version = data2.getUint32(4, true); + if (id !== 542658390) { + console.error("THREE.VOXLoader: Invalid VOX file."); + return; + } + if (version !== 150) { + console.error("THREE.VOXLoader: Invalid VOX file. Unsupported version:", version); + return; + } + const DEFAULT_PALETTE = [ + 0, + 4294967295, + 4291624959, + 4288282623, + 4284940287, + 4281597951, + 4278255615, + 4294954239, + 4291611903, + 4288269567, + 4284927231, + 4281584895, + 4278242559, + 4294941183, + 4291598847, + 4288256511, + 4284914175, + 4281571839, + 4278229503, + 4294928127, + 4291585791, + 4288243455, + 4284901119, + 4281558783, + 4278216447, + 4294915071, + 4291572735, + 4288230399, + 4284888063, + 4281545727, + 4278203391, + 4294902015, + 4291559679, + 4288217343, + 4284875007, + 4281532671, + 4278190335, + 4294967244, + 4291624908, + 4288282572, + 4284940236, + 4281597900, + 4278255564, + 4294954188, + 4291611852, + 4288269516, + 4284927180, + 4281584844, + 4278242508, + 4294941132, + 4291598796, + 4288256460, + 4284914124, + 4281571788, + 4278229452, + 4294928076, + 4291585740, + 4288243404, + 4284901068, + 4281558732, + 4278216396, + 4294915020, + 4291572684, + 4288230348, + 4284888012, + 4281545676, + 4278203340, + 4294901964, + 4291559628, + 4288217292, + 4284874956, + 4281532620, + 4278190284, + 4294967193, + 4291624857, + 4288282521, + 4284940185, + 4281597849, + 4278255513, + 4294954137, + 4291611801, + 4288269465, + 4284927129, + 4281584793, + 4278242457, + 4294941081, + 4291598745, + 4288256409, + 4284914073, + 4281571737, + 4278229401, + 4294928025, + 4291585689, + 4288243353, + 4284901017, + 4281558681, + 4278216345, + 4294914969, + 4291572633, + 4288230297, + 4284887961, + 4281545625, + 4278203289, + 4294901913, + 4291559577, + 4288217241, + 4284874905, + 4281532569, + 4278190233, + 4294967142, + 4291624806, + 4288282470, + 4284940134, + 4281597798, + 4278255462, + 4294954086, + 4291611750, + 4288269414, + 4284927078, + 4281584742, + 4278242406, + 4294941030, + 4291598694, + 4288256358, + 4284914022, + 4281571686, + 4278229350, + 4294927974, + 4291585638, + 4288243302, + 4284900966, + 4281558630, + 4278216294, + 4294914918, + 4291572582, + 4288230246, + 4284887910, + 4281545574, + 4278203238, + 4294901862, + 4291559526, + 4288217190, + 4284874854, + 4281532518, + 4278190182, + 4294967091, + 4291624755, + 4288282419, + 4284940083, + 4281597747, + 4278255411, + 4294954035, + 4291611699, + 4288269363, + 4284927027, + 4281584691, + 4278242355, + 4294940979, + 4291598643, + 4288256307, + 4284913971, + 4281571635, + 4278229299, + 4294927923, + 4291585587, + 4288243251, + 4284900915, + 4281558579, + 4278216243, + 4294914867, + 4291572531, + 4288230195, + 4284887859, + 4281545523, + 4278203187, + 4294901811, + 4291559475, + 4288217139, + 4284874803, + 4281532467, + 4278190131, + 4294967040, + 4291624704, + 4288282368, + 4284940032, + 4281597696, + 4278255360, + 4294953984, + 4291611648, + 4288269312, + 4284926976, + 4281584640, + 4278242304, + 4294940928, + 4291598592, + 4288256256, + 4284913920, + 4281571584, + 4278229248, + 4294927872, + 4291585536, + 4288243200, + 4284900864, + 4281558528, + 4278216192, + 4294914816, + 4291572480, + 4288230144, + 4284887808, + 4281545472, + 4278203136, + 4294901760, + 4291559424, + 4288217088, + 4284874752, + 4281532416, + 4278190318, + 4278190301, + 4278190267, + 4278190250, + 4278190216, + 4278190199, + 4278190165, + 4278190148, + 4278190114, + 4278190097, + 4278251008, + 4278246656, + 4278237952, + 4278233600, + 4278224896, + 4278220544, + 4278211840, + 4278207488, + 4278198784, + 4278194432, + 4293787648, + 4292673536, + 4290445312, + 4289331200, + 4287102976, + 4285988864, + 4283760640, + 4282646528, + 4280418304, + 4279304192, + 4293848814, + 4292730333, + 4290493371, + 4289374890, + 4287137928, + 4286019447, + 4283782485, + 4282664004, + 4280427042, + 4279308561 + ]; + let i = 8; + let chunk; + const chunks = []; + while (i < data2.byteLength) { + let id2 = ""; + for (let j = 0; j < 4; j++) { + id2 += String.fromCharCode(data2.getUint8(i++)); + } + const chunkSize = data2.getUint32(i, true); + i += 4; + i += 4; + if (id2 === "SIZE") { + const x2 = data2.getUint32(i, true); + i += 4; + const y2 = data2.getUint32(i, true); + i += 4; + const z = data2.getUint32(i, true); + i += 4; + chunk = { + palette: DEFAULT_PALETTE, + size: { x: x2, y: y2, z } + }; + chunks.push(chunk); + i += chunkSize - 3 * 4; + } else if (id2 === "XYZI") { + const numVoxels = data2.getUint32(i, true); + i += 4; + chunk.data = new Uint8Array(buffer, i, numVoxels * 4); + i += numVoxels * 4; + } else if (id2 === "RGBA") { + const palette = [0]; + for (let j = 0; j < 256; j++) { + palette[j + 1] = data2.getUint32(i, true); + i += 4; + } + chunk.palette = palette; + } else { + i += chunkSize; + } + } + return chunks; + } +}; +var VOXMesh = class extends Mesh { + constructor(chunk) { + const data2 = chunk.data; + const size2 = chunk.size; + const palette = chunk.palette; + const vertices = []; + const colors = []; + const nx = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1]; + const px = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]; + const py = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]; + const ny = [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0]; + const nz = [0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0]; + const pz = [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]; + const _color5 = new Color(); + function add2(tile, x2, y2, z, r, g2, b3) { + x2 -= size2.x / 2; + y2 -= size2.z / 2; + z += size2.y / 2; + for (let i = 0; i < 18; i += 3) { + _color5.setRGB(r, g2, b3, SRGBColorSpace); + vertices.push(tile[i + 0] + x2, tile[i + 1] + y2, tile[i + 2] + z); + colors.push(_color5.r, _color5.g, _color5.b); + } + } + const offsety = size2.x; + const offsetz = size2.x * size2.y; + const array = new Uint8Array(size2.x * size2.y * size2.z); + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const index2 = x2 + y2 * offsety + z * offsetz; + array[index2] = 255; + } + let hasColors = false; + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const c2 = data2[j + 3]; + const hex = palette[c2]; + const r = (hex >> 0 & 255) / 255; + const g2 = (hex >> 8 & 255) / 255; + const b3 = (hex >> 16 & 255) / 255; + if (r > 0 || g2 > 0 || b3 > 0) hasColors = true; + const index2 = x2 + y2 * offsety + z * offsetz; + if (array[index2 + 1] === 0 || x2 === size2.x - 1) add2(px, x2, z, -y2, r, g2, b3); + if (array[index2 - 1] === 0 || x2 === 0) add2(nx, x2, z, -y2, r, g2, b3); + if (array[index2 + offsety] === 0 || y2 === size2.y - 1) add2(ny, x2, z, -y2, r, g2, b3); + if (array[index2 - offsety] === 0 || y2 === 0) add2(py, x2, z, -y2, r, g2, b3); + if (array[index2 + offsetz] === 0 || z === size2.z - 1) add2(pz, x2, z, -y2, r, g2, b3); + if (array[index2 - offsetz] === 0 || z === 0) add2(nz, x2, z, -y2, r, g2, b3); + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.computeVertexNormals(); + const material = new MeshStandardMaterial(); + if (hasColors) { + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + material.vertexColors = true; + } + super(geometry, material); + } +}; +var VOXData3DTexture = class extends Data3DTexture { + constructor(chunk) { + const data2 = chunk.data; + const size2 = chunk.size; + const offsety = size2.x; + const offsetz = size2.x * size2.y; + const array = new Uint8Array(size2.x * size2.y * size2.z); + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const index2 = x2 + y2 * offsety + z * offsetz; + array[index2] = 255; + } + super(array, size2.x, size2.y, size2.z); + this.format = RedFormat; + this.minFilter = NearestFilter; + this.magFilter = LinearFilter; + this.unpackAlignment = 1; + this.needsUpdate = true; + } +}; + +// node_modules/three/examples/jsm/libs/chevrotain.module.min.js +var R2 = (t3, e) => () => (e || (e = { exports: {} }, t3(e.exports, e)), e.exports); +var Er = R2((Pt) => { + "use strict"; + Object.defineProperty(Pt, "__esModule", { value: true }); + Pt.VERSION = void 0; + Pt.VERSION = "9.0.1"; +}); +var k = R2((exports, module) => { + "use strict"; + var __spreadArray = exports && exports.__spreadArray || function(t3, e) { + for (var r = 0, n2 = e.length, i = t3.length; r < n2; r++, i++) t3[i] = e[r]; + return t3; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.toFastProperties = exports.timer = exports.peek = exports.isES2015MapSupported = exports.PRINT_WARNING = exports.PRINT_ERROR = exports.packArray = exports.IDENTITY = exports.NOOP = exports.merge = exports.groupBy = exports.defaults = exports.assignNoOverwrite = exports.assign = exports.zipObject = exports.sortBy = exports.indexOf = exports.some = exports.difference = exports.every = exports.isObject = exports.isRegExp = exports.isArray = exports.partial = exports.uniq = exports.compact = exports.reduce = exports.findAll = exports.find = exports.cloneObj = exports.cloneArr = exports.contains = exports.has = exports.pick = exports.reject = exports.filter = exports.dropRight = exports.drop = exports.isFunction = exports.isUndefined = exports.isString = exports.forEach = exports.last = exports.first = exports.flatten = exports.map = exports.mapValues = exports.values = exports.keys = exports.isEmpty = void 0; + function isEmpty(t3) { + return t3 && t3.length === 0; + } + exports.isEmpty = isEmpty; + function keys(t3) { + return t3 == null ? [] : Object.keys(t3); + } + exports.keys = keys; + function values(t3) { + for (var e = [], r = Object.keys(t3), n2 = 0; n2 < r.length; n2++) e.push(t3[r[n2]]); + return e; + } + exports.values = values; + function mapValues(t3, e) { + for (var r = [], n2 = keys(t3), i = 0; i < n2.length; i++) { + var a2 = n2[i]; + r.push(e.call(null, t3[a2], a2)); + } + return r; + } + exports.mapValues = mapValues; + function map(t3, e) { + for (var r = [], n2 = 0; n2 < t3.length; n2++) r.push(e.call(null, t3[n2], n2)); + return r; + } + exports.map = map; + function flatten(t3) { + for (var e = [], r = 0; r < t3.length; r++) { + var n2 = t3[r]; + Array.isArray(n2) ? e = e.concat(flatten(n2)) : e.push(n2); + } + return e; + } + exports.flatten = flatten; + function first(t3) { + return isEmpty(t3) ? void 0 : t3[0]; + } + exports.first = first; + function last(t3) { + var e = t3 && t3.length; + return e ? t3[e - 1] : void 0; + } + exports.last = last; + function forEach(t3, e) { + if (Array.isArray(t3)) for (var r = 0; r < t3.length; r++) e.call(null, t3[r], r); + else if (isObject(t3)) for (var n2 = keys(t3), r = 0; r < n2.length; r++) { + var i = n2[r], a2 = t3[i]; + e.call(null, a2, i); + } + else throw Error("non exhaustive match"); + } + exports.forEach = forEach; + function isString(t3) { + return typeof t3 == "string"; + } + exports.isString = isString; + function isUndefined(t3) { + return t3 === void 0; + } + exports.isUndefined = isUndefined; + function isFunction(t3) { + return t3 instanceof Function; + } + exports.isFunction = isFunction; + function drop(t3, e) { + return e === void 0 && (e = 1), t3.slice(e, t3.length); + } + exports.drop = drop; + function dropRight(t3, e) { + return e === void 0 && (e = 1), t3.slice(0, t3.length - e); + } + exports.dropRight = dropRight; + function filter(t3, e) { + var r = []; + if (Array.isArray(t3)) for (var n2 = 0; n2 < t3.length; n2++) { + var i = t3[n2]; + e.call(null, i) && r.push(i); + } + return r; + } + exports.filter = filter; + function reject(t3, e) { + return filter(t3, function(r) { + return !e(r); + }); + } + exports.reject = reject; + function pick(t3, e) { + for (var r = Object.keys(t3), n2 = {}, i = 0; i < r.length; i++) { + var a2 = r[i], o = t3[a2]; + e(o) && (n2[a2] = o); + } + return n2; + } + exports.pick = pick; + function has(t3, e) { + return isObject(t3) ? t3.hasOwnProperty(e) : false; + } + exports.has = has; + function contains(t3, e) { + return find(t3, function(r) { + return r === e; + }) !== void 0; + } + exports.contains = contains; + function cloneArr(t3) { + for (var e = [], r = 0; r < t3.length; r++) e.push(t3[r]); + return e; + } + exports.cloneArr = cloneArr; + function cloneObj(t3) { + var e = {}; + for (var r in t3) Object.prototype.hasOwnProperty.call(t3, r) && (e[r] = t3[r]); + return e; + } + exports.cloneObj = cloneObj; + function find(t3, e) { + for (var r = 0; r < t3.length; r++) { + var n2 = t3[r]; + if (e.call(null, n2)) return n2; + } + } + exports.find = find; + function findAll(t3, e) { + for (var r = [], n2 = 0; n2 < t3.length; n2++) { + var i = t3[n2]; + e.call(null, i) && r.push(i); + } + return r; + } + exports.findAll = findAll; + function reduce(t3, e, r) { + for (var n2 = Array.isArray(t3), i = n2 ? t3 : values(t3), a2 = n2 ? [] : keys(t3), o = r, s = 0; s < i.length; s++) o = e.call(null, o, i[s], n2 ? s : a2[s]); + return o; + } + exports.reduce = reduce; + function compact(t3) { + return reject(t3, function(e) { + return e == null; + }); + } + exports.compact = compact; + function uniq(t3, e) { + e === void 0 && (e = function(n2) { + return n2; + }); + var r = []; + return reduce(t3, function(n2, i) { + var a2 = e(i); + return contains(r, a2) ? n2 : (r.push(a2), n2.concat(i)); + }, []); + } + exports.uniq = uniq; + function partial(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + var n2 = [null], i = n2.concat(e); + return Function.bind.apply(t3, i); + } + exports.partial = partial; + function isArray(t3) { + return Array.isArray(t3); + } + exports.isArray = isArray; + function isRegExp(t3) { + return t3 instanceof RegExp; + } + exports.isRegExp = isRegExp; + function isObject(t3) { + return t3 instanceof Object; + } + exports.isObject = isObject; + function every(t3, e) { + for (var r = 0; r < t3.length; r++) if (!e(t3[r], r)) return false; + return true; + } + exports.every = every; + function difference(t3, e) { + return reject(t3, function(r) { + return contains(e, r); + }); + } + exports.difference = difference; + function some(t3, e) { + for (var r = 0; r < t3.length; r++) if (e(t3[r])) return true; + return false; + } + exports.some = some; + function indexOf(t3, e) { + for (var r = 0; r < t3.length; r++) if (t3[r] === e) return r; + return -1; + } + exports.indexOf = indexOf; + function sortBy(t3, e) { + var r = cloneArr(t3); + return r.sort(function(n2, i) { + return e(n2) - e(i); + }), r; + } + exports.sortBy = sortBy; + function zipObject(t3, e) { + if (t3.length !== e.length) throw Error("can't zipObject with different number of keys and values!"); + for (var r = {}, n2 = 0; n2 < t3.length; n2++) r[t3[n2]] = e[n2]; + return r; + } + exports.zipObject = zipObject; + function assign(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + for (var n2 = 0; n2 < e.length; n2++) for (var i = e[n2], a2 = keys(i), o = 0; o < a2.length; o++) { + var s = a2[o]; + t3[s] = i[s]; + } + return t3; + } + exports.assign = assign; + function assignNoOverwrite(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + for (var n2 = 0; n2 < e.length; n2++) for (var i = e[n2], a2 = keys(i), o = 0; o < a2.length; o++) { + var s = a2[o]; + has(t3, s) || (t3[s] = i[s]); + } + return t3; + } + exports.assignNoOverwrite = assignNoOverwrite; + function defaults() { + for (var t3 = [], e = 0; e < arguments.length; e++) t3[e] = arguments[e]; + return assignNoOverwrite.apply(void 0, __spreadArray([{}], t3)); + } + exports.defaults = defaults; + function groupBy(t3, e) { + var r = {}; + return forEach(t3, function(n2) { + var i = e(n2), a2 = r[i]; + a2 ? a2.push(n2) : r[i] = [n2]; + }), r; + } + exports.groupBy = groupBy; + function merge(t3, e) { + for (var r = cloneObj(t3), n2 = keys(e), i = 0; i < n2.length; i++) { + var a2 = n2[i], o = e[a2]; + r[a2] = o; + } + return r; + } + exports.merge = merge; + function NOOP() { + } + exports.NOOP = NOOP; + function IDENTITY(t3) { + return t3; + } + exports.IDENTITY = IDENTITY; + function packArray(t3) { + for (var e = [], r = 0; r < t3.length; r++) { + var n2 = t3[r]; + e.push(n2 !== void 0 ? n2 : void 0); + } + return e; + } + exports.packArray = packArray; + function PRINT_ERROR(t3) { + console && console.error && console.error("Error: " + t3); + } + exports.PRINT_ERROR = PRINT_ERROR; + function PRINT_WARNING(t3) { + console && console.warn && console.warn("Warning: " + t3); + } + exports.PRINT_WARNING = PRINT_WARNING; + function isES2015MapSupported() { + return typeof Map == "function"; + } + exports.isES2015MapSupported = isES2015MapSupported; + function peek(t3) { + return t3[t3.length - 1]; + } + exports.peek = peek; + function timer(t3) { + var e = (/* @__PURE__ */ new Date()).getTime(), r = t3(), n2 = (/* @__PURE__ */ new Date()).getTime(), i = n2 - e; + return { time: i, value: r }; + } + exports.timer = timer; + function toFastProperties(toBecomeFast) { + function FakeConstructor() { + } + FakeConstructor.prototype = toBecomeFast; + var fakeInstance = new FakeConstructor(); + function fakeAccess() { + return typeof fakeInstance.bar; + } + return fakeAccess(), fakeAccess(), toBecomeFast; + eval(toBecomeFast); + } + exports.toFastProperties = toFastProperties; +}); +var xt = R2((sn, St) => { + (function(t3, e) { + typeof define == "function" && define.amd ? define([], e) : typeof St == "object" && St.exports ? St.exports = e() : t3.regexpToAst = e(); + })(typeof self != "undefined" ? self : sn, function() { + function t3() { + } + t3.prototype.saveState = function() { + return { idx: this.idx, input: this.input, groupIdx: this.groupIdx }; + }, t3.prototype.restoreState = function(u) { + this.idx = u.idx, this.input = u.input, this.groupIdx = u.groupIdx; + }, t3.prototype.pattern = function(u) { + this.idx = 0, this.input = u, this.groupIdx = 0, this.consumeChar("/"); + var d = this.disjunction(); + this.consumeChar("/"); + for (var A2 = { type: "Flags", loc: { begin: this.idx, end: u.length }, global: false, ignoreCase: false, multiLine: false, unicode: false, sticky: false }; this.isRegExpFlag(); ) switch (this.popChar()) { + case "g": + o(A2, "global"); + break; + case "i": + o(A2, "ignoreCase"); + break; + case "m": + o(A2, "multiLine"); + break; + case "u": + o(A2, "unicode"); + break; + case "y": + o(A2, "sticky"); + break; + } + if (this.idx !== this.input.length) throw Error("Redundant input: " + this.input.substring(this.idx)); + return { type: "Pattern", flags: A2, value: d, loc: this.loc(0) }; + }, t3.prototype.disjunction = function() { + var u = [], d = this.idx; + for (u.push(this.alternative()); this.peekChar() === "|"; ) this.consumeChar("|"), u.push(this.alternative()); + return { type: "Disjunction", value: u, loc: this.loc(d) }; + }, t3.prototype.alternative = function() { + for (var u = [], d = this.idx; this.isTerm(); ) u.push(this.term()); + return { type: "Alternative", value: u, loc: this.loc(d) }; + }, t3.prototype.term = function() { + return this.isAssertion() ? this.assertion() : this.atom(); + }, t3.prototype.assertion = function() { + var u = this.idx; + switch (this.popChar()) { + case "^": + return { type: "StartAnchor", loc: this.loc(u) }; + case "$": + return { type: "EndAnchor", loc: this.loc(u) }; + case "\\": + switch (this.popChar()) { + case "b": + return { type: "WordBoundary", loc: this.loc(u) }; + case "B": + return { type: "NonWordBoundary", loc: this.loc(u) }; + } + throw Error("Invalid Assertion Escape"); + case "(": + this.consumeChar("?"); + var d; + switch (this.popChar()) { + case "=": + d = "Lookahead"; + break; + case "!": + d = "NegativeLookahead"; + break; + } + s(d); + var A2 = this.disjunction(); + return this.consumeChar(")"), { type: d, value: A2, loc: this.loc(u) }; + } + c2(); + }, t3.prototype.quantifier = function(u) { + var d, A2 = this.idx; + switch (this.popChar()) { + case "*": + d = { atLeast: 0, atMost: Infinity }; + break; + case "+": + d = { atLeast: 1, atMost: Infinity }; + break; + case "?": + d = { atLeast: 0, atMost: 1 }; + break; + case "{": + var _ = this.integerIncludingZero(); + switch (this.popChar()) { + case "}": + d = { atLeast: _, atMost: _ }; + break; + case ",": + var g2; + this.isDigit() ? (g2 = this.integerIncludingZero(), d = { atLeast: _, atMost: g2 }) : d = { atLeast: _, atMost: Infinity }, this.consumeChar("}"); + break; + } + if (u === true && d === void 0) return; + s(d); + break; + } + if (!(u === true && d === void 0)) return s(d), this.peekChar(0) === "?" ? (this.consumeChar("?"), d.greedy = false) : d.greedy = true, d.type = "Quantifier", d.loc = this.loc(A2), d; + }, t3.prototype.atom = function() { + var u, d = this.idx; + switch (this.peekChar()) { + case ".": + u = this.dotAll(); + break; + case "\\": + u = this.atomEscape(); + break; + case "[": + u = this.characterClass(); + break; + case "(": + u = this.group(); + break; + } + return u === void 0 && this.isPatternCharacter() && (u = this.patternCharacter()), s(u), u.loc = this.loc(d), this.isQuantifier() && (u.quantifier = this.quantifier()), u; + }, t3.prototype.dotAll = function() { + return this.consumeChar("."), { type: "Set", complement: true, value: [i(` +`), i("\r"), i("\u2028"), i("\u2029")] }; + }, t3.prototype.atomEscape = function() { + switch (this.consumeChar("\\"), this.peekChar()) { + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + return this.decimalEscapeAtom(); + case "d": + case "D": + case "s": + case "S": + case "w": + case "W": + return this.characterClassEscape(); + case "f": + case "n": + case "r": + case "t": + case "v": + return this.controlEscapeAtom(); + case "c": + return this.controlLetterEscapeAtom(); + case "0": + return this.nulCharacterAtom(); + case "x": + return this.hexEscapeSequenceAtom(); + case "u": + return this.regExpUnicodeEscapeSequenceAtom(); + default: + return this.identityEscapeAtom(); + } + }, t3.prototype.decimalEscapeAtom = function() { + var u = this.positiveInteger(); + return { type: "GroupBackReference", value: u }; + }, t3.prototype.characterClassEscape = function() { + var u, d = false; + switch (this.popChar()) { + case "d": + u = p2; + break; + case "D": + u = p2, d = true; + break; + case "s": + u = m; + break; + case "S": + u = m, d = true; + break; + case "w": + u = l2; + break; + case "W": + u = l2, d = true; + break; + } + return s(u), { type: "Set", value: u, complement: d }; + }, t3.prototype.controlEscapeAtom = function() { + var u; + switch (this.popChar()) { + case "f": + u = i("\f"); + break; + case "n": + u = i(` +`); + break; + case "r": + u = i("\r"); + break; + case "t": + u = i(" "); + break; + case "v": + u = i("\v"); + break; + } + return s(u), { type: "Character", value: u }; + }, t3.prototype.controlLetterEscapeAtom = function() { + this.consumeChar("c"); + var u = this.popChar(); + if (/[a-zA-Z]/.test(u) === false) throw Error("Invalid "); + var d = u.toUpperCase().charCodeAt(0) - 64; + return { type: "Character", value: d }; + }, t3.prototype.nulCharacterAtom = function() { + return this.consumeChar("0"), { type: "Character", value: i("\0") }; + }, t3.prototype.hexEscapeSequenceAtom = function() { + return this.consumeChar("x"), this.parseHexDigits(2); + }, t3.prototype.regExpUnicodeEscapeSequenceAtom = function() { + return this.consumeChar("u"), this.parseHexDigits(4); + }, t3.prototype.identityEscapeAtom = function() { + var u = this.popChar(); + return { type: "Character", value: i(u) }; + }, t3.prototype.classPatternCharacterAtom = function() { + switch (this.peekChar()) { + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + case "\\": + case "]": + throw Error("TBD"); + default: + var u = this.popChar(); + return { type: "Character", value: i(u) }; + } + }, t3.prototype.characterClass = function() { + var u = [], d = false; + for (this.consumeChar("["), this.peekChar(0) === "^" && (this.consumeChar("^"), d = true); this.isClassAtom(); ) { + var A2 = this.classAtom(), _ = A2.type === "Character"; + if (_ && this.isRangeDash()) { + this.consumeChar("-"); + var g2 = this.classAtom(), y2 = g2.type === "Character"; + if (y2) { + if (g2.value < A2.value) throw Error("Range out of order in character class"); + u.push({ from: A2.value, to: g2.value }); + } else a2(A2.value, u), u.push(i("-")), a2(g2.value, u); + } else a2(A2.value, u); + } + return this.consumeChar("]"), { type: "Set", complement: d, value: u }; + }, t3.prototype.classAtom = function() { + switch (this.peekChar()) { + case "]": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + throw Error("TBD"); + case "\\": + return this.classEscape(); + default: + return this.classPatternCharacterAtom(); + } + }, t3.prototype.classEscape = function() { + switch (this.consumeChar("\\"), this.peekChar()) { + case "b": + return this.consumeChar("b"), { type: "Character", value: i("\b") }; + case "d": + case "D": + case "s": + case "S": + case "w": + case "W": + return this.characterClassEscape(); + case "f": + case "n": + case "r": + case "t": + case "v": + return this.controlEscapeAtom(); + case "c": + return this.controlLetterEscapeAtom(); + case "0": + return this.nulCharacterAtom(); + case "x": + return this.hexEscapeSequenceAtom(); + case "u": + return this.regExpUnicodeEscapeSequenceAtom(); + default: + return this.identityEscapeAtom(); + } + }, t3.prototype.group = function() { + var u = true; + switch (this.consumeChar("("), this.peekChar(0)) { + case "?": + this.consumeChar("?"), this.consumeChar(":"), u = false; + break; + default: + this.groupIdx++; + break; + } + var d = this.disjunction(); + this.consumeChar(")"); + var A2 = { type: "Group", capturing: u, value: d }; + return u && (A2.idx = this.groupIdx), A2; + }, t3.prototype.positiveInteger = function() { + var u = this.popChar(); + if (n2.test(u) === false) throw Error("Expecting a positive integer"); + for (; r.test(this.peekChar(0)); ) u += this.popChar(); + return parseInt(u, 10); + }, t3.prototype.integerIncludingZero = function() { + var u = this.popChar(); + if (r.test(u) === false) throw Error("Expecting an integer"); + for (; r.test(this.peekChar(0)); ) u += this.popChar(); + return parseInt(u, 10); + }, t3.prototype.patternCharacter = function() { + var u = this.popChar(); + switch (u) { + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + case "^": + case "$": + case "\\": + case ".": + case "*": + case "+": + case "?": + case "(": + case ")": + case "[": + case "|": + throw Error("TBD"); + default: + return { type: "Character", value: i(u) }; + } + }, t3.prototype.isRegExpFlag = function() { + switch (this.peekChar(0)) { + case "g": + case "i": + case "m": + case "u": + case "y": + return true; + default: + return false; + } + }, t3.prototype.isRangeDash = function() { + return this.peekChar() === "-" && this.isClassAtom(1); + }, t3.prototype.isDigit = function() { + return r.test(this.peekChar(0)); + }, t3.prototype.isClassAtom = function(u) { + switch (u === void 0 && (u = 0), this.peekChar(u)) { + case "]": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + return false; + default: + return true; + } + }, t3.prototype.isTerm = function() { + return this.isAtom() || this.isAssertion(); + }, t3.prototype.isAtom = function() { + if (this.isPatternCharacter()) return true; + switch (this.peekChar(0)) { + case ".": + case "\\": + case "[": + case "(": + return true; + default: + return false; + } + }, t3.prototype.isAssertion = function() { + switch (this.peekChar(0)) { + case "^": + case "$": + return true; + case "\\": + switch (this.peekChar(1)) { + case "b": + case "B": + return true; + default: + return false; + } + case "(": + return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!"); + default: + return false; + } + }, t3.prototype.isQuantifier = function() { + var u = this.saveState(); + try { + return this.quantifier(true) !== void 0; + } catch (d) { + return false; + } finally { + this.restoreState(u); + } + }, t3.prototype.isPatternCharacter = function() { + switch (this.peekChar()) { + case "^": + case "$": + case "\\": + case ".": + case "*": + case "+": + case "?": + case "(": + case ")": + case "[": + case "|": + case "/": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + return false; + default: + return true; + } + }, t3.prototype.parseHexDigits = function(u) { + for (var d = "", A2 = 0; A2 < u; A2++) { + var _ = this.popChar(); + if (e.test(_) === false) throw Error("Expecting a HexDecimal digits"); + d += _; + } + var g2 = parseInt(d, 16); + return { type: "Character", value: g2 }; + }, t3.prototype.peekChar = function(u) { + return u === void 0 && (u = 0), this.input[this.idx + u]; + }, t3.prototype.popChar = function() { + var u = this.peekChar(0); + return this.consumeChar(), u; + }, t3.prototype.consumeChar = function(u) { + if (u !== void 0 && this.input[this.idx] !== u) throw Error("Expected: '" + u + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx); + if (this.idx >= this.input.length) throw Error("Unexpected end of input"); + this.idx++; + }, t3.prototype.loc = function(u) { + return { begin: u, end: this.idx }; + }; + var e = /[0-9a-fA-F]/, r = /[0-9]/, n2 = /[1-9]/; + function i(u) { + return u.charCodeAt(0); + } + function a2(u, d) { + u.length !== void 0 ? u.forEach(function(A2) { + d.push(A2); + }) : d.push(u); + } + function o(u, d) { + if (u[d] === true) throw "duplicate flag " + d; + u[d] = true; + } + function s(u) { + if (u === void 0) throw Error("Internal Error - Should never get here!"); + } + function c2() { + throw Error("Internal Error - Should never get here!"); + } + var f, p2 = []; + for (f = i("0"); f <= i("9"); f++) p2.push(f); + var l2 = [i("_")].concat(p2); + for (f = i("a"); f <= i("z"); f++) l2.push(f); + for (f = i("A"); f <= i("Z"); f++) l2.push(f); + var m = [i(" "), i("\f"), i(` +`), i("\r"), i(" "), i("\v"), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i("\u2028"), i("\u2029"), i(" "), i(" "), i(" "), i("\uFEFF")]; + function v() { + } + return v.prototype.visitChildren = function(u) { + for (var d in u) { + var A2 = u[d]; + u.hasOwnProperty(d) && (A2.type !== void 0 ? this.visit(A2) : Array.isArray(A2) && A2.forEach(function(_) { + this.visit(_); + }, this)); + } + }, v.prototype.visit = function(u) { + switch (u.type) { + case "Pattern": + this.visitPattern(u); + break; + case "Flags": + this.visitFlags(u); + break; + case "Disjunction": + this.visitDisjunction(u); + break; + case "Alternative": + this.visitAlternative(u); + break; + case "StartAnchor": + this.visitStartAnchor(u); + break; + case "EndAnchor": + this.visitEndAnchor(u); + break; + case "WordBoundary": + this.visitWordBoundary(u); + break; + case "NonWordBoundary": + this.visitNonWordBoundary(u); + break; + case "Lookahead": + this.visitLookahead(u); + break; + case "NegativeLookahead": + this.visitNegativeLookahead(u); + break; + case "Character": + this.visitCharacter(u); + break; + case "Set": + this.visitSet(u); + break; + case "Group": + this.visitGroup(u); + break; + case "GroupBackReference": + this.visitGroupBackReference(u); + break; + case "Quantifier": + this.visitQuantifier(u); + break; + } + this.visitChildren(u); + }, v.prototype.visitPattern = function(u) { + }, v.prototype.visitFlags = function(u) { + }, v.prototype.visitDisjunction = function(u) { + }, v.prototype.visitAlternative = function(u) { + }, v.prototype.visitStartAnchor = function(u) { + }, v.prototype.visitEndAnchor = function(u) { + }, v.prototype.visitWordBoundary = function(u) { + }, v.prototype.visitNonWordBoundary = function(u) { + }, v.prototype.visitLookahead = function(u) { + }, v.prototype.visitNegativeLookahead = function(u) { + }, v.prototype.visitCharacter = function(u) { + }, v.prototype.visitSet = function(u) { + }, v.prototype.visitGroup = function(u) { + }, v.prototype.visitGroupBackReference = function(u) { + }, v.prototype.visitQuantifier = function(u) { + }, { RegExpParser: t3, BaseRegExpVisitor: v, VERSION: "0.5.0" }; + }); +}); +var Lt = R2((He) => { + "use strict"; + Object.defineProperty(He, "__esModule", { value: true }); + He.clearRegExpParserCache = He.getRegExpAst = void 0; + var Ga = xt(), Ct = {}, Wa = new Ga.RegExpParser(); + function Ba(t3) { + var e = t3.toString(); + if (Ct.hasOwnProperty(e)) return Ct[e]; + var r = Wa.pattern(e); + return Ct[e] = r, r; + } + He.getRegExpAst = Ba; + function qa() { + Ct = {}; + } + He.clearRegExpParserCache = qa; +}); +var pn = R2((re) => { + "use strict"; + var ja = re && re.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(re, "__esModule", { value: true }); + re.canMatchCharCode = re.firstCharOptimizedIndices = re.getOptimizedStartCodesIndices = re.failedOptimizationPrefixMsg = void 0; + var un = xt(), pe2 = k(), cn = Lt(), Ce = Tr(), ln2 = "Complement Sets are not supported for first char optimization"; + re.failedOptimizationPrefixMsg = `Unable to use "first char" lexer optimizations: +`; + function Va(t3, e) { + e === void 0 && (e = false); + try { + var r = cn.getRegExpAst(t3), n2 = Mt(r.value, {}, r.flags.ignoreCase); + return n2; + } catch (a2) { + if (a2.message === ln2) e && pe2.PRINT_WARNING("" + re.failedOptimizationPrefixMsg + (" Unable to optimize: < " + t3.toString() + ` > +`) + ` Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`); + else { + var i = ""; + e && (i = ` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`), pe2.PRINT_ERROR(re.failedOptimizationPrefixMsg + ` +` + (" Failed parsing: < " + t3.toString() + ` > +`) + (" Using the regexp-to-ast library version: " + un.VERSION + ` +`) + " Please open an issue at: https://github.com/bd82/regexp-to-ast/issues" + i); + } + } + return []; + } + re.getOptimizedStartCodesIndices = Va; + function Mt(t3, e, r) { + switch (t3.type) { + case "Disjunction": + for (var n2 = 0; n2 < t3.value.length; n2++) Mt(t3.value[n2], e, r); + break; + case "Alternative": + for (var i = t3.value, n2 = 0; n2 < i.length; n2++) { + var a2 = i[n2]; + switch (a2.type) { + case "EndAnchor": + case "GroupBackReference": + case "Lookahead": + case "NegativeLookahead": + case "StartAnchor": + case "WordBoundary": + case "NonWordBoundary": + continue; + } + var o = a2; + switch (o.type) { + case "Character": + bt(o.value, e, r); + break; + case "Set": + if (o.complement === true) throw Error(ln2); + pe2.forEach(o.value, function(f) { + if (typeof f == "number") bt(f, e, r); + else { + var p2 = f; + if (r === true) for (var l2 = p2.from; l2 <= p2.to; l2++) bt(l2, e, r); + else { + for (var l2 = p2.from; l2 <= p2.to && l2 < Ce.minOptimizationVal; l2++) bt(l2, e, r); + if (p2.to >= Ce.minOptimizationVal) for (var m = p2.from >= Ce.minOptimizationVal ? p2.from : Ce.minOptimizationVal, v = p2.to, u = Ce.charCodeToOptimizedIndex(m), d = Ce.charCodeToOptimizedIndex(v), A2 = u; A2 <= d; A2++) e[A2] = A2; + } + } + }); + break; + case "Group": + Mt(o.value, e, r); + break; + default: + throw Error("Non Exhaustive Match"); + } + var s = o.quantifier !== void 0 && o.quantifier.atLeast === 0; + if (o.type === "Group" && yr(o) === false || o.type !== "Group" && s === false) break; + } + break; + default: + throw Error("non exhaustive match!"); + } + return pe2.values(e); + } + re.firstCharOptimizedIndices = Mt; + function bt(t3, e, r) { + var n2 = Ce.charCodeToOptimizedIndex(t3); + e[n2] = n2, r === true && Ka(t3, e); + } + function Ka(t3, e) { + var r = String.fromCharCode(t3), n2 = r.toUpperCase(); + if (n2 !== r) { + var i = Ce.charCodeToOptimizedIndex(n2.charCodeAt(0)); + e[i] = i; + } else { + var a2 = r.toLowerCase(); + if (a2 !== r) { + var i = Ce.charCodeToOptimizedIndex(a2.charCodeAt(0)); + e[i] = i; + } + } + } + function fn(t3, e) { + return pe2.find(t3.value, function(r) { + if (typeof r == "number") return pe2.contains(e, r); + var n2 = r; + return pe2.find(e, function(i) { + return n2.from <= i && i <= n2.to; + }) !== void 0; + }); + } + function yr(t3) { + return t3.quantifier && t3.quantifier.atLeast === 0 ? true : t3.value ? pe2.isArray(t3.value) ? pe2.every(t3.value, yr) : yr(t3.value) : false; + } + var za = function(t3) { + ja(e, t3); + function e(r) { + var n2 = t3.call(this) || this; + return n2.targetCharCodes = r, n2.found = false, n2; + } + return e.prototype.visitChildren = function(r) { + if (this.found !== true) { + switch (r.type) { + case "Lookahead": + this.visitLookahead(r); + return; + case "NegativeLookahead": + this.visitNegativeLookahead(r); + return; + } + t3.prototype.visitChildren.call(this, r); + } + }, e.prototype.visitCharacter = function(r) { + pe2.contains(this.targetCharCodes, r.value) && (this.found = true); + }, e.prototype.visitSet = function(r) { + r.complement ? fn(r, this.targetCharCodes) === void 0 && (this.found = true) : fn(r, this.targetCharCodes) !== void 0 && (this.found = true); + }, e; + }(un.BaseRegExpVisitor); + function Ha(t3, e) { + if (e instanceof RegExp) { + var r = cn.getRegExpAst(e), n2 = new za(t3); + return n2.visit(r), n2.found; + } else return pe2.find(e, function(i) { + return pe2.contains(t3, i.charCodeAt(0)); + }) !== void 0; + } + re.canMatchCharCode = Ha; +}); +var Tr = R2((T) => { + "use strict"; + var hn = T && T.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(T, "__esModule", { value: true }); + T.charCodeToOptimizedIndex = T.minOptimizationVal = T.buildLineBreakIssueMessage = T.LineTerminatorOptimizedTester = T.isShortPattern = T.isCustomPattern = T.cloneEmptyGroups = T.performWarningRuntimeChecks = T.performRuntimeChecks = T.addStickyFlag = T.addStartOfInput = T.findUnreachablePatterns = T.findModesThatDoNotExist = T.findInvalidGroupType = T.findDuplicatePatterns = T.findUnsupportedFlags = T.findStartOfInputAnchor = T.findEmptyMatchRegExps = T.findEndOfInputAnchor = T.findInvalidPatterns = T.findMissingPatterns = T.validatePatterns = T.analyzeTokenTypes = T.enableSticky = T.disableSticky = T.SUPPORT_STICKY = T.MODES = T.DEFAULT_MODE = void 0; + var dn = xt(), F2 = ft(), h = k(), Ye = pn(), vn = Lt(), Ae2 = "PATTERN"; + T.DEFAULT_MODE = "defaultMode"; + T.MODES = "modes"; + T.SUPPORT_STICKY = typeof new RegExp("(?:)").sticky == "boolean"; + function Ya() { + T.SUPPORT_STICKY = false; + } + T.disableSticky = Ya; + function Xa() { + T.SUPPORT_STICKY = true; + } + T.enableSticky = Xa; + function Za(t3, e) { + e = h.defaults(e, { useSticky: T.SUPPORT_STICKY, debug: false, safeMode: false, positionTracking: "full", lineTerminatorCharacters: ["\r", ` +`], tracer: function(g2, y2) { + return y2(); + } }); + var r = e.tracer; + r("initCharCodeToOptimizedIndexMap", function() { + $a(); + }); + var n2; + r("Reject Lexer.NA", function() { + n2 = h.reject(t3, function(g2) { + return g2[Ae2] === F2.Lexer.NA; + }); + }); + var i = false, a2; + r("Transform Patterns", function() { + i = false, a2 = h.map(n2, function(g2) { + var y2 = g2[Ae2]; + if (h.isRegExp(y2)) { + var b3 = y2.source; + return b3.length === 1 && b3 !== "^" && b3 !== "$" && b3 !== "." && !y2.ignoreCase ? b3 : b3.length === 2 && b3[0] === "\\" && !h.contains(["d", "D", "s", "S", "t", "r", "n", "t", "0", "c", "b", "B", "f", "v", "w", "W"], b3[1]) ? b3[1] : e.useSticky ? gr(y2) : _r(y2); + } else { + if (h.isFunction(y2)) return i = true, { exec: y2 }; + if (h.has(y2, "exec")) return i = true, y2; + if (typeof y2 == "string") { + if (y2.length === 1) return y2; + var L = y2.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&"), se2 = new RegExp(L); + return e.useSticky ? gr(se2) : _r(se2); + } else throw Error("non exhaustive match"); + } + }); + }); + var o, s, c2, f, p2; + r("misc mapping", function() { + o = h.map(n2, function(g2) { + return g2.tokenTypeIdx; + }), s = h.map(n2, function(g2) { + var y2 = g2.GROUP; + if (y2 !== F2.Lexer.SKIPPED) { + if (h.isString(y2)) return y2; + if (h.isUndefined(y2)) return false; + throw Error("non exhaustive match"); + } + }), c2 = h.map(n2, function(g2) { + var y2 = g2.LONGER_ALT; + if (y2) { + var b3 = h.indexOf(n2, y2); + return b3; + } + }), f = h.map(n2, function(g2) { + return g2.PUSH_MODE; + }), p2 = h.map(n2, function(g2) { + return h.has(g2, "POP_MODE"); + }); + }); + var l2; + r("Line Terminator Handling", function() { + var g2 = Tn(e.lineTerminatorCharacters); + l2 = h.map(n2, function(y2) { + return false; + }), e.positionTracking !== "onlyOffset" && (l2 = h.map(n2, function(y2) { + if (h.has(y2, "LINE_BREAKS")) return y2.LINE_BREAKS; + if (En(y2, g2) === false) return Ye.canMatchCharCode(g2, y2.PATTERN); + })); + }); + var m, v, u, d; + r("Misc Mapping #2", function() { + m = h.map(n2, Ar), v = h.map(a2, mn), u = h.reduce(n2, function(g2, y2) { + var b3 = y2.GROUP; + return h.isString(b3) && b3 !== F2.Lexer.SKIPPED && (g2[b3] = []), g2; + }, {}), d = h.map(a2, function(g2, y2) { + return { pattern: a2[y2], longerAlt: c2[y2], canLineTerminator: l2[y2], isCustom: m[y2], short: v[y2], group: s[y2], push: f[y2], pop: p2[y2], tokenTypeIdx: o[y2], tokenType: n2[y2] }; + }); + }); + var A2 = true, _ = []; + return e.safeMode || r("First Char Optimization", function() { + _ = h.reduce(n2, function(g2, y2, b3) { + if (typeof y2.PATTERN == "string") { + var L = y2.PATTERN.charCodeAt(0), se2 = Or(L); + Rr(g2, se2, d[b3]); + } else if (h.isArray(y2.START_CHARS_HINT)) { + var fe; + h.forEach(y2.START_CHARS_HINT, function(ue) { + var Q3 = typeof ue == "string" ? ue.charCodeAt(0) : ue, te2 = Or(Q3); + fe !== te2 && (fe = te2, Rr(g2, te2, d[b3])); + }); + } else if (h.isRegExp(y2.PATTERN)) if (y2.PATTERN.unicode) A2 = false, e.ensureOptimizations && h.PRINT_ERROR("" + Ye.failedOptimizationPrefixMsg + (" Unable to analyze < " + y2.PATTERN.toString() + ` > pattern. +`) + ` The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`); + else { + var Z2 = Ye.getOptimizedStartCodesIndices(y2.PATTERN, e.ensureOptimizations); + h.isEmpty(Z2) && (A2 = false), h.forEach(Z2, function(ue) { + Rr(g2, ue, d[b3]); + }); + } + else e.ensureOptimizations && h.PRINT_ERROR("" + Ye.failedOptimizationPrefixMsg + (" TokenType: <" + y2.name + `> is using a custom token pattern without providing parameter. +`) + ` This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`), A2 = false; + return g2; + }, []); + }), r("ArrayPacking", function() { + _ = h.packArray(_); + }), { emptyGroups: u, patternIdxToConfig: d, charCodeToPatternIdxToConfig: _, hasCustom: i, canBeOptimized: A2 }; + } + T.analyzeTokenTypes = Za; + function Ja(t3, e) { + var r = [], n2 = yn(t3); + r = r.concat(n2.errors); + var i = _n(n2.valid), a2 = i.valid; + return r = r.concat(i.errors), r = r.concat(Qa(a2)), r = r.concat(gn(a2)), r = r.concat(An(a2, e)), r = r.concat(Rn(a2)), r; + } + T.validatePatterns = Ja; + function Qa(t3) { + var e = [], r = h.filter(t3, function(n2) { + return h.isRegExp(n2[Ae2]); + }); + return e = e.concat(On(r)), e = e.concat(In2(r)), e = e.concat(kn(r)), e = e.concat(Pn(r)), e = e.concat(Nn(r)), e; + } + function yn(t3) { + var e = h.filter(t3, function(i) { + return !h.has(i, Ae2); + }), r = h.map(e, function(i) { + return { message: "Token Type: ->" + i.name + "<- missing static 'PATTERN' property", type: F2.LexerDefinitionErrorType.MISSING_PATTERN, tokenTypes: [i] }; + }), n2 = h.difference(t3, e); + return { errors: r, valid: n2 }; + } + T.findMissingPatterns = yn; + function _n(t3) { + var e = h.filter(t3, function(i) { + var a2 = i[Ae2]; + return !h.isRegExp(a2) && !h.isFunction(a2) && !h.has(a2, "exec") && !h.isString(a2); + }), r = h.map(e, function(i) { + return { message: "Token Type: ->" + i.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.", type: F2.LexerDefinitionErrorType.INVALID_PATTERN, tokenTypes: [i] }; + }), n2 = h.difference(t3, e); + return { errors: r, valid: n2 }; + } + T.findInvalidPatterns = _n; + var eo = /[^\\][\$]/; + function On(t3) { + var e = function(i) { + hn(a2, i); + function a2() { + var o = i !== null && i.apply(this, arguments) || this; + return o.found = false, o; + } + return a2.prototype.visitEndAnchor = function(o) { + this.found = true; + }, a2; + }(dn.BaseRegExpVisitor), r = h.filter(t3, function(i) { + var a2 = i[Ae2]; + try { + var o = vn.getRegExpAst(a2), s = new e(); + return s.visit(o), s.found; + } catch (c2) { + return eo.test(a2.source); + } + }), n2 = h.map(r, function(i) { + return { message: `Unexpected RegExp Anchor Error: + Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`, type: F2.LexerDefinitionErrorType.EOI_ANCHOR_FOUND, tokenTypes: [i] }; + }); + return n2; + } + T.findEndOfInputAnchor = On; + function Nn(t3) { + var e = h.filter(t3, function(n2) { + var i = n2[Ae2]; + return i.test(""); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'PATTERN' must not match an empty string", type: F2.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN, tokenTypes: [n2] }; + }); + return r; + } + T.findEmptyMatchRegExps = Nn; + var to = /[^\\[][\^]|^\^/; + function In2(t3) { + var e = function(i) { + hn(a2, i); + function a2() { + var o = i !== null && i.apply(this, arguments) || this; + return o.found = false, o; + } + return a2.prototype.visitStartAnchor = function(o) { + this.found = true; + }, a2; + }(dn.BaseRegExpVisitor), r = h.filter(t3, function(i) { + var a2 = i[Ae2]; + try { + var o = vn.getRegExpAst(a2), s = new e(); + return s.visit(o), s.found; + } catch (c2) { + return to.test(a2.source); + } + }), n2 = h.map(r, function(i) { + return { message: `Unexpected RegExp Anchor Error: + Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`, type: F2.LexerDefinitionErrorType.SOI_ANCHOR_FOUND, tokenTypes: [i] }; + }); + return n2; + } + T.findStartOfInputAnchor = In2; + function kn(t3) { + var e = h.filter(t3, function(n2) { + var i = n2[Ae2]; + return i instanceof RegExp && (i.multiline || i.global); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')", type: F2.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND, tokenTypes: [n2] }; + }); + return r; + } + T.findUnsupportedFlags = kn; + function Pn(t3) { + var e = [], r = h.map(t3, function(a2) { + return h.reduce(t3, function(o, s) { + return a2.PATTERN.source === s.PATTERN.source && !h.contains(e, s) && s.PATTERN !== F2.Lexer.NA && (e.push(s), o.push(s)), o; + }, []); + }); + r = h.compact(r); + var n2 = h.filter(r, function(a2) { + return a2.length > 1; + }), i = h.map(n2, function(a2) { + var o = h.map(a2, function(c2) { + return c2.name; + }), s = h.first(a2).PATTERN; + return { message: "The same RegExp pattern ->" + s + "<-" + ("has been used in all of the following Token Types: " + o.join(", ") + " <-"), type: F2.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND, tokenTypes: a2 }; + }); + return i; + } + T.findDuplicatePatterns = Pn; + function gn(t3) { + var e = h.filter(t3, function(n2) { + if (!h.has(n2, "GROUP")) return false; + var i = n2.GROUP; + return i !== F2.Lexer.SKIPPED && i !== F2.Lexer.NA && !h.isString(i); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String", type: F2.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND, tokenTypes: [n2] }; + }); + return r; + } + T.findInvalidGroupType = gn; + function An(t3, e) { + var r = h.filter(t3, function(i) { + return i.PUSH_MODE !== void 0 && !h.contains(e, i.PUSH_MODE); + }), n2 = h.map(r, function(i) { + var a2 = "Token Type: ->" + i.name + "<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->" + i.PUSH_MODE + "<-which does not exist"; + return { message: a2, type: F2.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST, tokenTypes: [i] }; + }); + return n2; + } + T.findModesThatDoNotExist = An; + function Rn(t3) { + var e = [], r = h.reduce(t3, function(n2, i, a2) { + var o = i.PATTERN; + return o === F2.Lexer.NA || (h.isString(o) ? n2.push({ str: o, idx: a2, tokenType: i }) : h.isRegExp(o) && no(o) && n2.push({ str: o.source, idx: a2, tokenType: i })), n2; + }, []); + return h.forEach(t3, function(n2, i) { + h.forEach(r, function(a2) { + var o = a2.str, s = a2.idx, c2 = a2.tokenType; + if (i < s && ro(o, n2.PATTERN)) { + var f = "Token: ->" + c2.name + `<- can never be matched. +` + ("Because it appears AFTER the Token Type ->" + n2.name + "<-") + `in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`; + e.push({ message: f, type: F2.LexerDefinitionErrorType.UNREACHABLE_PATTERN, tokenTypes: [n2, c2] }); + } + }); + }), e; + } + T.findUnreachablePatterns = Rn; + function ro(t3, e) { + if (h.isRegExp(e)) { + var r = e.exec(t3); + return r !== null && r.index === 0; + } else { + if (h.isFunction(e)) return e(t3, 0, [], {}); + if (h.has(e, "exec")) return e.exec(t3, 0, [], {}); + if (typeof e == "string") return e === t3; + throw Error("non exhaustive match"); + } + } + function no(t3) { + var e = [".", "\\", "[", "]", "|", "^", "$", "(", ")", "?", "*", "+", "{"]; + return h.find(e, function(r) { + return t3.source.indexOf(r) !== -1; + }) === void 0; + } + function _r(t3) { + var e = t3.ignoreCase ? "i" : ""; + return new RegExp("^(?:" + t3.source + ")", e); + } + T.addStartOfInput = _r; + function gr(t3) { + var e = t3.ignoreCase ? "iy" : "y"; + return new RegExp("" + t3.source, e); + } + T.addStickyFlag = gr; + function io(t3, e, r) { + var n2 = []; + return h.has(t3, T.DEFAULT_MODE) || n2.push({ message: "A MultiMode Lexer cannot be initialized without a <" + T.DEFAULT_MODE + `> property in its definition +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE }), h.has(t3, T.MODES) || n2.push({ message: "A MultiMode Lexer cannot be initialized without a <" + T.MODES + `> property in its definition +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY }), h.has(t3, T.MODES) && h.has(t3, T.DEFAULT_MODE) && !h.has(t3.modes, t3.defaultMode) && n2.push({ message: "A MultiMode Lexer cannot be initialized with a " + T.DEFAULT_MODE + ": <" + t3.defaultMode + `>which does not exist +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST }), h.has(t3, T.MODES) && h.forEach(t3.modes, function(i, a2) { + h.forEach(i, function(o, s) { + h.isUndefined(o) && n2.push({ message: "A Lexer cannot be initialized using an undefined Token Type. Mode:" + ("<" + a2 + "> at index: <" + s + `> +`), type: F2.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED }); + }); + }), n2; + } + T.performRuntimeChecks = io; + function ao(t3, e, r) { + var n2 = [], i = false, a2 = h.compact(h.flatten(h.mapValues(t3.modes, function(c2) { + return c2; + }))), o = h.reject(a2, function(c2) { + return c2[Ae2] === F2.Lexer.NA; + }), s = Tn(r); + return e && h.forEach(o, function(c2) { + var f = En(c2, s); + if (f !== false) { + var p2 = Sn2(c2, f), l2 = { message: p2, type: f.issue, tokenType: c2 }; + n2.push(l2); + } else h.has(c2, "LINE_BREAKS") ? c2.LINE_BREAKS === true && (i = true) : Ye.canMatchCharCode(s, c2.PATTERN) && (i = true); + }), e && !i && n2.push({ message: `Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`, type: F2.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS }), n2; + } + T.performWarningRuntimeChecks = ao; + function oo(t3) { + var e = {}, r = h.keys(t3); + return h.forEach(r, function(n2) { + var i = t3[n2]; + if (h.isArray(i)) e[n2] = []; + else throw Error("non exhaustive match"); + }), e; + } + T.cloneEmptyGroups = oo; + function Ar(t3) { + var e = t3.PATTERN; + if (h.isRegExp(e)) return false; + if (h.isFunction(e)) return true; + if (h.has(e, "exec")) return true; + if (h.isString(e)) return false; + throw Error("non exhaustive match"); + } + T.isCustomPattern = Ar; + function mn(t3) { + return h.isString(t3) && t3.length === 1 ? t3.charCodeAt(0) : false; + } + T.isShortPattern = mn; + T.LineTerminatorOptimizedTester = { test: function(t3) { + for (var e = t3.length, r = this.lastIndex; r < e; r++) { + var n2 = t3.charCodeAt(r); + if (n2 === 10) return this.lastIndex = r + 1, true; + if (n2 === 13) return t3.charCodeAt(r + 1) === 10 ? this.lastIndex = r + 2 : this.lastIndex = r + 1, true; + } + return false; + }, lastIndex: 0 }; + function En(t3, e) { + if (h.has(t3, "LINE_BREAKS")) return false; + if (h.isRegExp(t3.PATTERN)) { + try { + Ye.canMatchCharCode(e, t3.PATTERN); + } catch (r) { + return { issue: F2.LexerDefinitionErrorType.IDENTIFY_TERMINATOR, errMsg: r.message }; + } + return false; + } else { + if (h.isString(t3.PATTERN)) return false; + if (Ar(t3)) return { issue: F2.LexerDefinitionErrorType.CUSTOM_LINE_BREAK }; + throw Error("non exhaustive match"); + } + } + function Sn2(t3, e) { + if (e.issue === F2.LexerDefinitionErrorType.IDENTIFY_TERMINATOR) return `Warning: unable to identify line terminator usage in pattern. +` + (" The problem is in the <" + t3.name + `> Token Type +`) + (" Root cause: " + e.errMsg + `. +`) + " For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR"; + if (e.issue === F2.LexerDefinitionErrorType.CUSTOM_LINE_BREAK) return `Warning: A Custom Token Pattern should specify the option. +` + (" The problem is in the <" + t3.name + `> Token Type +`) + " For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK"; + throw Error("non exhaustive match"); + } + T.buildLineBreakIssueMessage = Sn2; + function Tn(t3) { + var e = h.map(t3, function(r) { + return h.isString(r) && r.length > 0 ? r.charCodeAt(0) : r; + }); + return e; + } + function Rr(t3, e, r) { + t3[e] === void 0 ? t3[e] = [r] : t3[e].push(r); + } + T.minOptimizationVal = 256; + var Ft2 = []; + function Or(t3) { + return t3 < T.minOptimizationVal ? t3 : Ft2[t3]; + } + T.charCodeToOptimizedIndex = Or; + function $a() { + if (h.isEmpty(Ft2)) { + Ft2 = new Array(65536); + for (var t3 = 0; t3 < 65536; t3++) Ft2[t3] = t3 > 255 ? 255 + ~~(t3 / 255) : t3; + } + } +}); +var Xe = R2((N) => { + "use strict"; + Object.defineProperty(N, "__esModule", { value: true }); + N.isTokenType = N.hasExtendingTokensTypesMapProperty = N.hasExtendingTokensTypesProperty = N.hasCategoriesProperty = N.hasShortKeyProperty = N.singleAssignCategoriesToksMap = N.assignCategoriesMapProp = N.assignCategoriesTokensProp = N.assignTokenDefaultProps = N.expandCategories = N.augmentTokenTypes = N.tokenIdxToClass = N.tokenShortNameIdx = N.tokenStructuredMatcherNoCategories = N.tokenStructuredMatcher = void 0; + var V = k(); + function so(t3, e) { + var r = t3.tokenTypeIdx; + return r === e.tokenTypeIdx ? true : e.isParent === true && e.categoryMatchesMap[r] === true; + } + N.tokenStructuredMatcher = so; + function uo(t3, e) { + return t3.tokenTypeIdx === e.tokenTypeIdx; + } + N.tokenStructuredMatcherNoCategories = uo; + N.tokenShortNameIdx = 1; + N.tokenIdxToClass = {}; + function co(t3) { + var e = xn(t3); + Cn(e), Mn(e), Ln(e), V.forEach(e, function(r) { + r.isParent = r.categoryMatches.length > 0; + }); + } + N.augmentTokenTypes = co; + function xn(t3) { + for (var e = V.cloneArr(t3), r = t3, n2 = true; n2; ) { + r = V.compact(V.flatten(V.map(r, function(a2) { + return a2.CATEGORIES; + }))); + var i = V.difference(r, e); + e = e.concat(i), V.isEmpty(i) ? n2 = false : r = i; + } + return e; + } + N.expandCategories = xn; + function Cn(t3) { + V.forEach(t3, function(e) { + bn(e) || (N.tokenIdxToClass[N.tokenShortNameIdx] = e, e.tokenTypeIdx = N.tokenShortNameIdx++), Nr(e) && !V.isArray(e.CATEGORIES) && (e.CATEGORIES = [e.CATEGORIES]), Nr(e) || (e.CATEGORIES = []), Fn(e) || (e.categoryMatches = []), wn(e) || (e.categoryMatchesMap = {}); + }); + } + N.assignTokenDefaultProps = Cn; + function Ln(t3) { + V.forEach(t3, function(e) { + e.categoryMatches = [], V.forEach(e.categoryMatchesMap, function(r, n2) { + e.categoryMatches.push(N.tokenIdxToClass[n2].tokenTypeIdx); + }); + }); + } + N.assignCategoriesTokensProp = Ln; + function Mn(t3) { + V.forEach(t3, function(e) { + Ir([], e); + }); + } + N.assignCategoriesMapProp = Mn; + function Ir(t3, e) { + V.forEach(t3, function(r) { + e.categoryMatchesMap[r.tokenTypeIdx] = true; + }), V.forEach(e.CATEGORIES, function(r) { + var n2 = t3.concat(e); + V.contains(n2, r) || Ir(n2, r); + }); + } + N.singleAssignCategoriesToksMap = Ir; + function bn(t3) { + return V.has(t3, "tokenTypeIdx"); + } + N.hasShortKeyProperty = bn; + function Nr(t3) { + return V.has(t3, "CATEGORIES"); + } + N.hasCategoriesProperty = Nr; + function Fn(t3) { + return V.has(t3, "categoryMatches"); + } + N.hasExtendingTokensTypesProperty = Fn; + function wn(t3) { + return V.has(t3, "categoryMatchesMap"); + } + N.hasExtendingTokensTypesMapProperty = wn; + function lo(t3) { + return V.has(t3, "tokenTypeIdx"); + } + N.isTokenType = lo; +}); +var kr = R2((wt) => { + "use strict"; + Object.defineProperty(wt, "__esModule", { value: true }); + wt.defaultLexerErrorProvider = void 0; + wt.defaultLexerErrorProvider = { buildUnableToPopLexerModeMessage: function(t3) { + return "Unable to pop Lexer Mode after encountering Token ->" + t3.image + "<- The Mode Stack is empty"; + }, buildUnexpectedCharactersMessage: function(t3, e, r, n2, i) { + return "unexpected character: ->" + t3.charAt(e) + "<- at offset: " + e + "," + (" skipped " + r + " characters."); + } }; +}); +var ft = R2((qe) => { + "use strict"; + Object.defineProperty(qe, "__esModule", { value: true }); + qe.Lexer = qe.LexerDefinitionErrorType = void 0; + var Ee = Tr(), w = k(), fo = Xe(), po = kr(), ho = Lt(), vo; + (function(t3) { + t3[t3.MISSING_PATTERN = 0] = "MISSING_PATTERN", t3[t3.INVALID_PATTERN = 1] = "INVALID_PATTERN", t3[t3.EOI_ANCHOR_FOUND = 2] = "EOI_ANCHOR_FOUND", t3[t3.UNSUPPORTED_FLAGS_FOUND = 3] = "UNSUPPORTED_FLAGS_FOUND", t3[t3.DUPLICATE_PATTERNS_FOUND = 4] = "DUPLICATE_PATTERNS_FOUND", t3[t3.INVALID_GROUP_TYPE_FOUND = 5] = "INVALID_GROUP_TYPE_FOUND", t3[t3.PUSH_MODE_DOES_NOT_EXIST = 6] = "PUSH_MODE_DOES_NOT_EXIST", t3[t3.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE", t3[t3.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY", t3[t3.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST", t3[t3.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED", t3[t3.SOI_ANCHOR_FOUND = 11] = "SOI_ANCHOR_FOUND", t3[t3.EMPTY_MATCH_PATTERN = 12] = "EMPTY_MATCH_PATTERN", t3[t3.NO_LINE_BREAKS_FLAGS = 13] = "NO_LINE_BREAKS_FLAGS", t3[t3.UNREACHABLE_PATTERN = 14] = "UNREACHABLE_PATTERN", t3[t3.IDENTIFY_TERMINATOR = 15] = "IDENTIFY_TERMINATOR", t3[t3.CUSTOM_LINE_BREAK = 16] = "CUSTOM_LINE_BREAK"; + })(vo = qe.LexerDefinitionErrorType || (qe.LexerDefinitionErrorType = {})); + var pt = { deferDefinitionErrorsHandling: false, positionTracking: "full", lineTerminatorsPattern: /\n|\r\n?/g, lineTerminatorCharacters: [` +`, "\r"], ensureOptimizations: false, safeMode: false, errorMessageProvider: po.defaultLexerErrorProvider, traceInitPerf: false, skipValidations: false }; + Object.freeze(pt); + var mo = function() { + function t3(e, r) { + var n2 = this; + if (r === void 0 && (r = pt), this.lexerDefinition = e, this.lexerDefinitionErrors = [], this.lexerDefinitionWarning = [], this.patternIdxToConfig = {}, this.charCodeToPatternIdxToConfig = {}, this.modes = [], this.emptyGroups = {}, this.config = void 0, this.trackStartLines = true, this.trackEndLines = true, this.hasCustom = false, this.canModeBeOptimized = {}, typeof r == "boolean") throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`); + this.config = w.merge(pt, r); + var i = this.config.traceInitPerf; + i === true ? (this.traceInitMaxIdent = Infinity, this.traceInitPerf = true) : typeof i == "number" && (this.traceInitMaxIdent = i, this.traceInitPerf = true), this.traceInitIndent = -1, this.TRACE_INIT("Lexer Constructor", function() { + var a2, o = true; + n2.TRACE_INIT("Lexer Config handling", function() { + if (n2.config.lineTerminatorsPattern === pt.lineTerminatorsPattern) n2.config.lineTerminatorsPattern = Ee.LineTerminatorOptimizedTester; + else if (n2.config.lineTerminatorCharacters === pt.lineTerminatorCharacters) throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`); + if (r.safeMode && r.ensureOptimizations) throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.'); + n2.trackStartLines = /full|onlyStart/i.test(n2.config.positionTracking), n2.trackEndLines = /full/i.test(n2.config.positionTracking), w.isArray(e) ? (a2 = { modes: {} }, a2.modes[Ee.DEFAULT_MODE] = w.cloneArr(e), a2[Ee.DEFAULT_MODE] = Ee.DEFAULT_MODE) : (o = false, a2 = w.cloneObj(e)); + }), n2.config.skipValidations === false && (n2.TRACE_INIT("performRuntimeChecks", function() { + n2.lexerDefinitionErrors = n2.lexerDefinitionErrors.concat(Ee.performRuntimeChecks(a2, n2.trackStartLines, n2.config.lineTerminatorCharacters)); + }), n2.TRACE_INIT("performWarningRuntimeChecks", function() { + n2.lexerDefinitionWarning = n2.lexerDefinitionWarning.concat(Ee.performWarningRuntimeChecks(a2, n2.trackStartLines, n2.config.lineTerminatorCharacters)); + })), a2.modes = a2.modes ? a2.modes : {}, w.forEach(a2.modes, function(p2, l2) { + a2.modes[l2] = w.reject(p2, function(m) { + return w.isUndefined(m); + }); + }); + var s = w.keys(a2.modes); + if (w.forEach(a2.modes, function(p2, l2) { + n2.TRACE_INIT("Mode: <" + l2 + "> processing", function() { + if (n2.modes.push(l2), n2.config.skipValidations === false && n2.TRACE_INIT("validatePatterns", function() { + n2.lexerDefinitionErrors = n2.lexerDefinitionErrors.concat(Ee.validatePatterns(p2, s)); + }), w.isEmpty(n2.lexerDefinitionErrors)) { + fo.augmentTokenTypes(p2); + var m; + n2.TRACE_INIT("analyzeTokenTypes", function() { + m = Ee.analyzeTokenTypes(p2, { lineTerminatorCharacters: n2.config.lineTerminatorCharacters, positionTracking: r.positionTracking, ensureOptimizations: r.ensureOptimizations, safeMode: r.safeMode, tracer: n2.TRACE_INIT.bind(n2) }); + }), n2.patternIdxToConfig[l2] = m.patternIdxToConfig, n2.charCodeToPatternIdxToConfig[l2] = m.charCodeToPatternIdxToConfig, n2.emptyGroups = w.merge(n2.emptyGroups, m.emptyGroups), n2.hasCustom = m.hasCustom || n2.hasCustom, n2.canModeBeOptimized[l2] = m.canBeOptimized; + } + }); + }), n2.defaultMode = a2.defaultMode, !w.isEmpty(n2.lexerDefinitionErrors) && !n2.config.deferDefinitionErrorsHandling) { + var c2 = w.map(n2.lexerDefinitionErrors, function(p2) { + return p2.message; + }), f = c2.join(`----------------------- +`); + throw new Error(`Errors detected in definition of Lexer: +` + f); + } + w.forEach(n2.lexerDefinitionWarning, function(p2) { + w.PRINT_WARNING(p2.message); + }), n2.TRACE_INIT("Choosing sub-methods implementations", function() { + if (Ee.SUPPORT_STICKY ? (n2.chopInput = w.IDENTITY, n2.match = n2.matchWithTest) : (n2.updateLastIndex = w.NOOP, n2.match = n2.matchWithExec), o && (n2.handleModes = w.NOOP), n2.trackStartLines === false && (n2.computeNewColumn = w.IDENTITY), n2.trackEndLines === false && (n2.updateTokenEndLineColumnLocation = w.NOOP), /full/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createFullToken; + else if (/onlyStart/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createStartOnlyToken; + else if (/onlyOffset/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createOffsetOnlyToken; + else throw Error('Invalid config option: "' + n2.config.positionTracking + '"'); + n2.hasCustom ? (n2.addToken = n2.addTokenUsingPush, n2.handlePayload = n2.handlePayloadWithCustom) : (n2.addToken = n2.addTokenUsingMemberAccess, n2.handlePayload = n2.handlePayloadNoCustom); + }), n2.TRACE_INIT("Failed Optimization Warnings", function() { + var p2 = w.reduce(n2.canModeBeOptimized, function(l2, m, v) { + return m === false && l2.push(v), l2; + }, []); + if (r.ensureOptimizations && !w.isEmpty(p2)) throw Error("Lexer Modes: < " + p2.join(", ") + ` > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`); + }), n2.TRACE_INIT("clearRegExpParserCache", function() { + ho.clearRegExpParserCache(); + }), n2.TRACE_INIT("toFastProperties", function() { + w.toFastProperties(n2); + }); + }); + } + return t3.prototype.tokenize = function(e, r) { + if (r === void 0 && (r = this.defaultMode), !w.isEmpty(this.lexerDefinitionErrors)) { + var n2 = w.map(this.lexerDefinitionErrors, function(o) { + return o.message; + }), i = n2.join(`----------------------- +`); + throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +` + i); + } + var a2 = this.tokenizeInternal(e, r); + return a2; + }, t3.prototype.tokenizeInternal = function(e, r) { + var n2 = this, i, a2, o, s, c2, f, p2, l2, m, v, u, d, A2, _, g2, y2 = e, b3 = y2.length, L = 0, se2 = 0, fe = this.hasCustom ? 0 : Math.floor(e.length / 10), Z2 = new Array(fe), ue = [], Q3 = this.trackStartLines ? 1 : void 0, te2 = this.trackStartLines ? 1 : void 0, xe2 = Ee.cloneEmptyGroups(this.emptyGroups), it = this.trackStartLines, at = this.config.lineTerminatorsPattern, Ke = 0, we = [], ot = [], It = [], Qr = []; + Object.freeze(Qr); + var st = void 0; + function Jr() { + return we; + } + function en(J) { + var lt = Ee.charCodeToOptimizedIndex(J), ze = ot[lt]; + return ze === void 0 ? Qr : ze; + } + var wa = function(J) { + if (It.length === 1 && J.tokenType.PUSH_MODE === void 0) { + var lt = n2.config.errorMessageProvider.buildUnableToPopLexerModeMessage(J); + ue.push({ offset: J.startOffset, line: J.startLine !== void 0 ? J.startLine : void 0, column: J.startColumn !== void 0 ? J.startColumn : void 0, length: J.image.length, message: lt }); + } else { + It.pop(); + var ze = w.last(It); + we = n2.patternIdxToConfig[ze], ot = n2.charCodeToPatternIdxToConfig[ze], Ke = we.length; + var Ua = n2.canModeBeOptimized[ze] && n2.config.safeMode === false; + ot && Ua ? st = en : st = Jr; + } + }; + function tn(J) { + It.push(J), ot = this.charCodeToPatternIdxToConfig[J], we = this.patternIdxToConfig[J], Ke = we.length, Ke = we.length; + var lt = this.canModeBeOptimized[J] && this.config.safeMode === false; + ot && lt ? st = en : st = Jr; + } + tn.call(this, r); + for (var me; L < b3; ) { + c2 = null; + var rn = y2.charCodeAt(L), nn = st(rn), Da = nn.length; + for (i = 0; i < Da; i++) { + me = nn[i]; + var De = me.pattern; + f = null; + var ut = me.short; + if (ut !== false ? rn === ut && (c2 = De) : me.isCustom === true ? (g2 = De.exec(y2, L, Z2, xe2), g2 !== null ? (c2 = g2[0], g2.payload !== void 0 && (f = g2.payload)) : c2 = null) : (this.updateLastIndex(De, L), c2 = this.match(De, e, L)), c2 !== null) { + if (s = me.longerAlt, s !== void 0) { + var fr = we[s], pr = fr.pattern; + p2 = null, fr.isCustom === true ? (g2 = pr.exec(y2, L, Z2, xe2), g2 !== null ? (o = g2[0], g2.payload !== void 0 && (p2 = g2.payload)) : o = null) : (this.updateLastIndex(pr, L), o = this.match(pr, e, L)), o && o.length > c2.length && (c2 = o, f = p2, me = fr); + } + break; + } + } + if (c2 !== null) { + if (l2 = c2.length, m = me.group, m !== void 0 && (v = me.tokenTypeIdx, u = this.createTokenInstance(c2, L, v, me.tokenType, Q3, te2, l2), this.handlePayload(u, f), m === false ? se2 = this.addToken(Z2, se2, u) : xe2[m].push(u)), e = this.chopInput(e, l2), L = L + l2, te2 = this.computeNewColumn(te2, l2), it === true && me.canLineTerminator === true) { + var kt = 0, hr = void 0, dr = void 0; + at.lastIndex = 0; + do + hr = at.test(c2), hr === true && (dr = at.lastIndex - 1, kt++); + while (hr === true); + kt !== 0 && (Q3 = Q3 + kt, te2 = l2 - dr, this.updateTokenEndLineColumnLocation(u, m, dr, kt, Q3, te2, l2)); + } + this.handleModes(me, wa, tn, u); + } else { + for (var vr = L, an = Q3, on = te2, ct2 = false; !ct2 && L < b3; ) for (A2 = y2.charCodeAt(L), e = this.chopInput(e, 1), L++, a2 = 0; a2 < Ke; a2++) { + var mr = we[a2], De = mr.pattern, ut = mr.short; + if (ut !== false ? y2.charCodeAt(L) === ut && (ct2 = true) : mr.isCustom === true ? ct2 = De.exec(y2, L, Z2, xe2) !== null : (this.updateLastIndex(De, L), ct2 = De.exec(e) !== null), ct2 === true) break; + } + d = L - vr, _ = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(y2, vr, d, an, on), ue.push({ offset: vr, line: an, column: on, length: d, message: _ }); + } + } + return this.hasCustom || (Z2.length = se2), { tokens: Z2, groups: xe2, errors: ue }; + }, t3.prototype.handleModes = function(e, r, n2, i) { + if (e.pop === true) { + var a2 = e.push; + r(i), a2 !== void 0 && n2.call(this, a2); + } else e.push !== void 0 && n2.call(this, e.push); + }, t3.prototype.chopInput = function(e, r) { + return e.substring(r); + }, t3.prototype.updateLastIndex = function(e, r) { + e.lastIndex = r; + }, t3.prototype.updateTokenEndLineColumnLocation = function(e, r, n2, i, a2, o, s) { + var c2, f; + r !== void 0 && (c2 = n2 === s - 1, f = c2 ? -1 : 0, i === 1 && c2 === true || (e.endLine = a2 + f, e.endColumn = o - 1 + -f)); + }, t3.prototype.computeNewColumn = function(e, r) { + return e + r; + }, t3.prototype.createTokenInstance = function() { + for (var e = [], r = 0; r < arguments.length; r++) e[r] = arguments[r]; + return null; + }, t3.prototype.createOffsetOnlyToken = function(e, r, n2, i) { + return { image: e, startOffset: r, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.createStartOnlyToken = function(e, r, n2, i, a2, o) { + return { image: e, startOffset: r, startLine: a2, startColumn: o, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.createFullToken = function(e, r, n2, i, a2, o, s) { + return { image: e, startOffset: r, endOffset: r + s - 1, startLine: a2, endLine: a2, startColumn: o, endColumn: o + s - 1, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.addToken = function(e, r, n2) { + return 666; + }, t3.prototype.addTokenUsingPush = function(e, r, n2) { + return e.push(n2), r; + }, t3.prototype.addTokenUsingMemberAccess = function(e, r, n2) { + return e[r] = n2, r++, r; + }, t3.prototype.handlePayload = function(e, r) { + }, t3.prototype.handlePayloadNoCustom = function(e, r) { + }, t3.prototype.handlePayloadWithCustom = function(e, r) { + r !== null && (e.payload = r); + }, t3.prototype.match = function(e, r, n2) { + return null; + }, t3.prototype.matchWithTest = function(e, r, n2) { + var i = e.test(r); + return i === true ? r.substring(n2, e.lastIndex) : null; + }, t3.prototype.matchWithExec = function(e, r) { + var n2 = e.exec(r); + return n2 !== null ? n2[0] : n2; + }, t3.prototype.TRACE_INIT = function(e, r) { + if (this.traceInitPerf === true) { + this.traceInitIndent++; + var n2 = new Array(this.traceInitIndent + 1).join(" "); + this.traceInitIndent < this.traceInitMaxIdent && console.log(n2 + "--> <" + e + ">"); + var i = w.timer(r), a2 = i.time, o = i.value, s = a2 > 10 ? console.warn : console.log; + return this.traceInitIndent < this.traceInitMaxIdent && s(n2 + "<-- <" + e + "> time: " + a2 + "ms"), this.traceInitIndent--, o; + } else return r(); + }, t3.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.", t3.NA = /NOT_APPLICABLE/, t3; + }(); + qe.Lexer = mo; +}); +var Ue = R2((H) => { + "use strict"; + Object.defineProperty(H, "__esModule", { value: true }); + H.tokenMatcher = H.createTokenInstance = H.EOF = H.createToken = H.hasTokenLabel = H.tokenName = H.tokenLabel = void 0; + var Te = k(), Eo = ft(), Pr = Xe(); + function To(t3) { + return Dn(t3) ? t3.LABEL : t3.name; + } + H.tokenLabel = To; + function yo(t3) { + return t3.name; + } + H.tokenName = yo; + function Dn(t3) { + return Te.isString(t3.LABEL) && t3.LABEL !== ""; + } + H.hasTokenLabel = Dn; + var _o = "parent", Un = "categories", Gn = "label", Wn = "group", Bn = "push_mode", qn = "pop_mode", jn = "longer_alt", Vn = "line_breaks", Kn = "start_chars_hint"; + function zn(t3) { + return go(t3); + } + H.createToken = zn; + function go(t3) { + var e = t3.pattern, r = {}; + if (r.name = t3.name, Te.isUndefined(e) || (r.PATTERN = e), Te.has(t3, _o)) throw `The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`; + return Te.has(t3, Un) && (r.CATEGORIES = t3[Un]), Pr.augmentTokenTypes([r]), Te.has(t3, Gn) && (r.LABEL = t3[Gn]), Te.has(t3, Wn) && (r.GROUP = t3[Wn]), Te.has(t3, qn) && (r.POP_MODE = t3[qn]), Te.has(t3, Bn) && (r.PUSH_MODE = t3[Bn]), Te.has(t3, jn) && (r.LONGER_ALT = t3[jn]), Te.has(t3, Vn) && (r.LINE_BREAKS = t3[Vn]), Te.has(t3, Kn) && (r.START_CHARS_HINT = t3[Kn]), r; + } + H.EOF = zn({ name: "EOF", pattern: Eo.Lexer.NA }); + Pr.augmentTokenTypes([H.EOF]); + function Ao(t3, e, r, n2, i, a2, o, s) { + return { image: e, startOffset: r, endOffset: n2, startLine: i, endLine: a2, startColumn: o, endColumn: s, tokenTypeIdx: t3.tokenTypeIdx, tokenType: t3 }; + } + H.createTokenInstance = Ao; + function Ro(t3, e) { + return Pr.tokenStructuredMatcher(t3, e); + } + H.tokenMatcher = Ro; +}); +var ne = R2((S) => { + "use strict"; + var Le = S && S.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(S, "__esModule", { value: true }); + S.serializeProduction = S.serializeGrammar = S.Terminal = S.Alternation = S.RepetitionWithSeparator = S.Repetition = S.RepetitionMandatoryWithSeparator = S.RepetitionMandatory = S.Option = S.Alternative = S.Rule = S.NonTerminal = S.AbstractProduction = void 0; + var G = k(), Oo = Ue(), Re = function() { + function t3(e) { + this._definition = e; + } + return Object.defineProperty(t3.prototype, "definition", { get: function() { + return this._definition; + }, set: function(e) { + this._definition = e; + }, enumerable: false, configurable: true }), t3.prototype.accept = function(e) { + e.visit(this), G.forEach(this.definition, function(r) { + r.accept(e); + }); + }, t3; + }(); + S.AbstractProduction = Re; + var Hn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, []) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return Object.defineProperty(e.prototype, "definition", { get: function() { + return this.referencedRule !== void 0 ? this.referencedRule.definition : []; + }, set: function(r) { + }, enumerable: false, configurable: true }), e.prototype.accept = function(r) { + r.visit(this); + }, e; + }(Re); + S.NonTerminal = Hn; + var Yn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.orgText = "", G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Rule = Yn; + var Xn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.ignoreAmbiguities = false, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Alternative = Xn; + var $n = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Option = $n; + var Zn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionMandatory = Zn; + var Qn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionMandatoryWithSeparator = Qn; + var Jn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Repetition = Jn; + var ei = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionWithSeparator = ei; + var ti = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, n2.ignoreAmbiguities = false, n2.hasPredicates = false, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return Object.defineProperty(e.prototype, "definition", { get: function() { + return this._definition; + }, set: function(r) { + this._definition = r; + }, enumerable: false, configurable: true }), e; + }(Re); + S.Alternation = ti; + var Dt = function() { + function t3(e) { + this.idx = 1, G.assign(this, G.pick(e, function(r) { + return r !== void 0; + })); + } + return t3.prototype.accept = function(e) { + e.visit(this); + }, t3; + }(); + S.Terminal = Dt; + function No(t3) { + return G.map(t3, ht); + } + S.serializeGrammar = No; + function ht(t3) { + function e(i) { + return G.map(i, ht); + } + if (t3 instanceof Hn) return { type: "NonTerminal", name: t3.nonTerminalName, idx: t3.idx }; + if (t3 instanceof Xn) return { type: "Alternative", definition: e(t3.definition) }; + if (t3 instanceof $n) return { type: "Option", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Zn) return { type: "RepetitionMandatory", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Qn) return { type: "RepetitionMandatoryWithSeparator", idx: t3.idx, separator: ht(new Dt({ terminalType: t3.separator })), definition: e(t3.definition) }; + if (t3 instanceof ei) return { type: "RepetitionWithSeparator", idx: t3.idx, separator: ht(new Dt({ terminalType: t3.separator })), definition: e(t3.definition) }; + if (t3 instanceof Jn) return { type: "Repetition", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof ti) return { type: "Alternation", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Dt) { + var r = { type: "Terminal", name: t3.terminalType.name, label: Oo.tokenLabel(t3.terminalType), idx: t3.idx }, n2 = t3.terminalType.PATTERN; + return t3.terminalType.PATTERN && (r.pattern = G.isRegExp(n2) ? n2.source : n2), r; + } else { + if (t3 instanceof Yn) return { type: "Rule", name: t3.name, orgText: t3.orgText, definition: e(t3.definition) }; + throw Error("non exhaustive match"); + } + } + S.serializeProduction = ht; +}); +var Gt = R2((Ut) => { + "use strict"; + Object.defineProperty(Ut, "__esModule", { value: true }); + Ut.RestWalker = void 0; + var Sr = k(), ie = ne(), Io = function() { + function t3() { + } + return t3.prototype.walk = function(e, r) { + var n2 = this; + r === void 0 && (r = []), Sr.forEach(e.definition, function(i, a2) { + var o = Sr.drop(e.definition, a2 + 1); + if (i instanceof ie.NonTerminal) n2.walkProdRef(i, o, r); + else if (i instanceof ie.Terminal) n2.walkTerminal(i, o, r); + else if (i instanceof ie.Alternative) n2.walkFlat(i, o, r); + else if (i instanceof ie.Option) n2.walkOption(i, o, r); + else if (i instanceof ie.RepetitionMandatory) n2.walkAtLeastOne(i, o, r); + else if (i instanceof ie.RepetitionMandatoryWithSeparator) n2.walkAtLeastOneSep(i, o, r); + else if (i instanceof ie.RepetitionWithSeparator) n2.walkManySep(i, o, r); + else if (i instanceof ie.Repetition) n2.walkMany(i, o, r); + else if (i instanceof ie.Alternation) n2.walkOr(i, o, r); + else throw Error("non exhaustive match"); + }); + }, t3.prototype.walkTerminal = function(e, r, n2) { + }, t3.prototype.walkProdRef = function(e, r, n2) { + }, t3.prototype.walkFlat = function(e, r, n2) { + var i = r.concat(n2); + this.walk(e, i); + }, t3.prototype.walkOption = function(e, r, n2) { + var i = r.concat(n2); + this.walk(e, i); + }, t3.prototype.walkAtLeastOne = function(e, r, n2) { + var i = [new ie.Option({ definition: e.definition })].concat(r, n2); + this.walk(e, i); + }, t3.prototype.walkAtLeastOneSep = function(e, r, n2) { + var i = ri(e, r, n2); + this.walk(e, i); + }, t3.prototype.walkMany = function(e, r, n2) { + var i = [new ie.Option({ definition: e.definition })].concat(r, n2); + this.walk(e, i); + }, t3.prototype.walkManySep = function(e, r, n2) { + var i = ri(e, r, n2); + this.walk(e, i); + }, t3.prototype.walkOr = function(e, r, n2) { + var i = this, a2 = r.concat(n2); + Sr.forEach(e.definition, function(o) { + var s = new ie.Alternative({ definition: [o] }); + i.walk(s, a2); + }); + }, t3; + }(); + Ut.RestWalker = Io; + function ri(t3, e, r) { + var n2 = [new ie.Option({ definition: [new ie.Terminal({ terminalType: t3.separator })].concat(t3.definition) })], i = n2.concat(e, r); + return i; + } +}); +var $e = R2((Wt) => { + "use strict"; + Object.defineProperty(Wt, "__esModule", { value: true }); + Wt.GAstVisitor = void 0; + var Oe = ne(), ko = function() { + function t3() { + } + return t3.prototype.visit = function(e) { + var r = e; + switch (r.constructor) { + case Oe.NonTerminal: + return this.visitNonTerminal(r); + case Oe.Alternative: + return this.visitAlternative(r); + case Oe.Option: + return this.visitOption(r); + case Oe.RepetitionMandatory: + return this.visitRepetitionMandatory(r); + case Oe.RepetitionMandatoryWithSeparator: + return this.visitRepetitionMandatoryWithSeparator(r); + case Oe.RepetitionWithSeparator: + return this.visitRepetitionWithSeparator(r); + case Oe.Repetition: + return this.visitRepetition(r); + case Oe.Alternation: + return this.visitAlternation(r); + case Oe.Terminal: + return this.visitTerminal(r); + case Oe.Rule: + return this.visitRule(r); + default: + throw Error("non exhaustive match"); + } + }, t3.prototype.visitNonTerminal = function(e) { + }, t3.prototype.visitAlternative = function(e) { + }, t3.prototype.visitOption = function(e) { + }, t3.prototype.visitRepetition = function(e) { + }, t3.prototype.visitRepetitionMandatory = function(e) { + }, t3.prototype.visitRepetitionMandatoryWithSeparator = function(e) { + }, t3.prototype.visitRepetitionWithSeparator = function(e) { + }, t3.prototype.visitAlternation = function(e) { + }, t3.prototype.visitTerminal = function(e) { + }, t3.prototype.visitRule = function(e) { + }, t3; + }(); + Wt.GAstVisitor = ko; +}); +var vt = R2((X2) => { + "use strict"; + var Po = X2 && X2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(X2, "__esModule", { value: true }); + X2.collectMethods = X2.DslMethodsCollectorVisitor = X2.getProductionDslName = X2.isBranchingProd = X2.isOptionalProd = X2.isSequenceProd = void 0; + var dt2 = k(), W = ne(), So = $e(); + function xo(t3) { + return t3 instanceof W.Alternative || t3 instanceof W.Option || t3 instanceof W.Repetition || t3 instanceof W.RepetitionMandatory || t3 instanceof W.RepetitionMandatoryWithSeparator || t3 instanceof W.RepetitionWithSeparator || t3 instanceof W.Terminal || t3 instanceof W.Rule; + } + X2.isSequenceProd = xo; + function xr(t3, e) { + e === void 0 && (e = []); + var r = t3 instanceof W.Option || t3 instanceof W.Repetition || t3 instanceof W.RepetitionWithSeparator; + return r ? true : t3 instanceof W.Alternation ? dt2.some(t3.definition, function(n2) { + return xr(n2, e); + }) : t3 instanceof W.NonTerminal && dt2.contains(e, t3) ? false : t3 instanceof W.AbstractProduction ? (t3 instanceof W.NonTerminal && e.push(t3), dt2.every(t3.definition, function(n2) { + return xr(n2, e); + })) : false; + } + X2.isOptionalProd = xr; + function Co(t3) { + return t3 instanceof W.Alternation; + } + X2.isBranchingProd = Co; + function Lo(t3) { + if (t3 instanceof W.NonTerminal) return "SUBRULE"; + if (t3 instanceof W.Option) return "OPTION"; + if (t3 instanceof W.Alternation) return "OR"; + if (t3 instanceof W.RepetitionMandatory) return "AT_LEAST_ONE"; + if (t3 instanceof W.RepetitionMandatoryWithSeparator) return "AT_LEAST_ONE_SEP"; + if (t3 instanceof W.RepetitionWithSeparator) return "MANY_SEP"; + if (t3 instanceof W.Repetition) return "MANY"; + if (t3 instanceof W.Terminal) return "CONSUME"; + throw Error("non exhaustive match"); + } + X2.getProductionDslName = Lo; + var ni = function(t3) { + Po(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.separator = "-", r.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }, r; + } + return e.prototype.reset = function() { + this.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }; + }, e.prototype.visitTerminal = function(r) { + var n2 = r.terminalType.name + this.separator + "Terminal"; + dt2.has(this.dslMethods, n2) || (this.dslMethods[n2] = []), this.dslMethods[n2].push(r); + }, e.prototype.visitNonTerminal = function(r) { + var n2 = r.nonTerminalName + this.separator + "Terminal"; + dt2.has(this.dslMethods, n2) || (this.dslMethods[n2] = []), this.dslMethods[n2].push(r); + }, e.prototype.visitOption = function(r) { + this.dslMethods.option.push(r); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.dslMethods.repetitionWithSeparator.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.dslMethods.repetitionMandatory.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.dslMethods.repetitionMandatoryWithSeparator.push(r); + }, e.prototype.visitRepetition = function(r) { + this.dslMethods.repetition.push(r); + }, e.prototype.visitAlternation = function(r) { + this.dslMethods.alternation.push(r); + }, e; + }(So.GAstVisitor); + X2.DslMethodsCollectorVisitor = ni; + var Bt = new ni(); + function Mo(t3) { + Bt.reset(), t3.accept(Bt); + var e = Bt.dslMethods; + return Bt.reset(), e; + } + X2.collectMethods = Mo; +}); +var Lr = R2((Ne) => { + "use strict"; + Object.defineProperty(Ne, "__esModule", { value: true }); + Ne.firstForTerminal = Ne.firstForBranching = Ne.firstForSequence = Ne.first = void 0; + var qt = k(), ii = ne(), Cr = vt(); + function jt(t3) { + if (t3 instanceof ii.NonTerminal) return jt(t3.referencedRule); + if (t3 instanceof ii.Terminal) return si(t3); + if (Cr.isSequenceProd(t3)) return ai(t3); + if (Cr.isBranchingProd(t3)) return oi(t3); + throw Error("non exhaustive match"); + } + Ne.first = jt; + function ai(t3) { + for (var e = [], r = t3.definition, n2 = 0, i = r.length > n2, a2, o = true; i && o; ) a2 = r[n2], o = Cr.isOptionalProd(a2), e = e.concat(jt(a2)), n2 = n2 + 1, i = r.length > n2; + return qt.uniq(e); + } + Ne.firstForSequence = ai; + function oi(t3) { + var e = qt.map(t3.definition, function(r) { + return jt(r); + }); + return qt.uniq(qt.flatten(e)); + } + Ne.firstForBranching = oi; + function si(t3) { + return [t3.terminalType]; + } + Ne.firstForTerminal = si; +}); +var Mr = R2((Vt) => { + "use strict"; + Object.defineProperty(Vt, "__esModule", { value: true }); + Vt.IN = void 0; + Vt.IN = "_~IN~_"; +}); +var pi = R2((he) => { + "use strict"; + var bo = he && he.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(he, "__esModule", { value: true }); + he.buildInProdFollowPrefix = he.buildBetweenProdsFollowPrefix = he.computeAllProdsFollows = he.ResyncFollowsWalker = void 0; + var Fo = Gt(), wo = Lr(), ui = k(), ci = Mr(), Do = ne(), fi = function(t3) { + bo(e, t3); + function e(r) { + var n2 = t3.call(this) || this; + return n2.topProd = r, n2.follows = {}, n2; + } + return e.prototype.startWalking = function() { + return this.walk(this.topProd), this.follows; + }, e.prototype.walkTerminal = function(r, n2, i) { + }, e.prototype.walkProdRef = function(r, n2, i) { + var a2 = li(r.referencedRule, r.idx) + this.topProd.name, o = n2.concat(i), s = new Do.Alternative({ definition: o }), c2 = wo.first(s); + this.follows[a2] = c2; + }, e; + }(Fo.RestWalker); + he.ResyncFollowsWalker = fi; + function Uo(t3) { + var e = {}; + return ui.forEach(t3, function(r) { + var n2 = new fi(r).startWalking(); + ui.assign(e, n2); + }), e; + } + he.computeAllProdsFollows = Uo; + function li(t3, e) { + return t3.name + e + ci.IN; + } + he.buildBetweenProdsFollowPrefix = li; + function Go(t3) { + var e = t3.terminalType.name; + return e + t3.idx + ci.IN; + } + he.buildInProdFollowPrefix = Go; +}); +var mt = R2((Me) => { + "use strict"; + Object.defineProperty(Me, "__esModule", { value: true }); + Me.defaultGrammarValidatorErrorProvider = Me.defaultGrammarResolverErrorProvider = Me.defaultParserErrorProvider = void 0; + var Ze = Ue(), Wo = k(), ye = k(), br = ne(), hi = vt(); + Me.defaultParserErrorProvider = { buildMismatchTokenMessage: function(t3) { + var e = t3.expected, r = t3.actual, n2 = t3.previous, i = t3.ruleName, a2 = Ze.hasTokenLabel(e), o = a2 ? "--> " + Ze.tokenLabel(e) + " <--" : "token of type --> " + e.name + " <--", s = "Expecting " + o + " but found --> '" + r.image + "' <--"; + return s; + }, buildNotAllInputParsedMessage: function(t3) { + var e = t3.firstRedundant, r = t3.ruleName; + return "Redundant input, expecting EOF but found: " + e.image; + }, buildNoViableAltMessage: function(t3) { + var e = t3.expectedPathsPerAlt, r = t3.actual, n2 = t3.previous, i = t3.customUserDescription, a2 = t3.ruleName, o = "Expecting: ", s = ye.first(r).image, c2 = ` +but found: '` + s + "'"; + if (i) return o + i + c2; + var f = ye.reduce(e, function(v, u) { + return v.concat(u); + }, []), p2 = ye.map(f, function(v) { + return "[" + ye.map(v, function(u) { + return Ze.tokenLabel(u); + }).join(", ") + "]"; + }), l2 = ye.map(p2, function(v, u) { + return " " + (u + 1) + ". " + v; + }), m = `one of these possible Token sequences: +` + l2.join(` +`); + return o + m + c2; + }, buildEarlyExitMessage: function(t3) { + var e = t3.expectedIterationPaths, r = t3.actual, n2 = t3.customUserDescription, i = t3.ruleName, a2 = "Expecting: ", o = ye.first(r).image, s = ` +but found: '` + o + "'"; + if (n2) return a2 + n2 + s; + var c2 = ye.map(e, function(p2) { + return "[" + ye.map(p2, function(l2) { + return Ze.tokenLabel(l2); + }).join(",") + "]"; + }), f = `expecting at least one iteration which starts with one of these possible Token sequences:: + ` + ("<" + c2.join(" ,") + ">"); + return a2 + f + s; + } }; + Object.freeze(Me.defaultParserErrorProvider); + Me.defaultGrammarResolverErrorProvider = { buildRuleNotFoundError: function(t3, e) { + var r = "Invalid grammar, reference to a rule which is not defined: ->" + e.nonTerminalName + `<- +inside top level rule: ->` + t3.name + "<-"; + return r; + } }; + Me.defaultGrammarValidatorErrorProvider = { buildDuplicateFoundError: function(t3, e) { + function r(p2) { + return p2 instanceof br.Terminal ? p2.terminalType.name : p2 instanceof br.NonTerminal ? p2.nonTerminalName : ""; + } + var n2 = t3.name, i = ye.first(e), a2 = i.idx, o = hi.getProductionDslName(i), s = r(i), c2 = a2 > 0, f = "->" + o + (c2 ? a2 : "") + "<- " + (s ? "with argument: ->" + s + "<-" : "") + ` + appears more than once (` + e.length + " times) in the top level rule: ->" + n2 + `<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `; + return f = f.replace(/[ \t]+/g, " "), f = f.replace(/\s\s+/g, ` +`), f; + }, buildNamespaceConflictError: function(t3) { + var e = `Namespace conflict found in grammar. +` + ("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <" + t3.name + `>. +`) + `To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`; + return e; + }, buildAlternationPrefixAmbiguityError: function(t3) { + var e = ye.map(t3.prefixPath, function(i) { + return Ze.tokenLabel(i); + }).join(", "), r = t3.alternation.idx === 0 ? "" : t3.alternation.idx, n2 = "Ambiguous alternatives: <" + t3.ambiguityIndices.join(" ,") + `> due to common lookahead prefix +` + ("in inside <" + t3.topLevelRule.name + `> Rule, +`) + ("<" + e + `> may appears as a prefix path in all these alternatives. +`) + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`; + return n2; + }, buildAlternationAmbiguityError: function(t3) { + var e = ye.map(t3.prefixPath, function(i) { + return Ze.tokenLabel(i); + }).join(", "), r = t3.alternation.idx === 0 ? "" : t3.alternation.idx, n2 = "Ambiguous Alternatives Detected: <" + t3.ambiguityIndices.join(" ,") + "> in " + (" inside <" + t3.topLevelRule.name + `> Rule, +`) + ("<" + e + `> may appears as a prefix path in all these alternatives. +`); + return n2 = n2 + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`, n2; + }, buildEmptyRepetitionError: function(t3) { + var e = hi.getProductionDslName(t3.repetition); + t3.repetition.idx !== 0 && (e += t3.repetition.idx); + var r = "The repetition <" + e + "> within Rule <" + t3.topLevelRule.name + `> can never consume any tokens. +This could lead to an infinite loop.`; + return r; + }, buildTokenNameError: function(t3) { + return "deprecated"; + }, buildEmptyAlternationError: function(t3) { + var e = "Ambiguous empty alternative: <" + (t3.emptyChoiceIdx + 1) + ">" + (" in inside <" + t3.topLevelRule.name + `> Rule. +`) + "Only the last alternative may be an empty alternative."; + return e; + }, buildTooManyAlternativesError: function(t3) { + var e = `An Alternation cannot have more than 256 alternatives: +` + (" inside <" + t3.topLevelRule.name + `> Rule. + has ` + (t3.alternation.definition.length + 1) + " alternatives."); + return e; + }, buildLeftRecursionError: function(t3) { + var e = t3.topLevelRule.name, r = Wo.map(t3.leftRecursionPath, function(a2) { + return a2.name; + }), n2 = e + " --> " + r.concat([e]).join(" --> "), i = `Left Recursion found in grammar. +` + ("rule: <" + e + `> can be invoked from itself (directly or indirectly) +`) + (`without consuming any Tokens. The grammar path that causes this is: + ` + n2 + ` +`) + ` To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`; + return i; + }, buildInvalidRuleNameError: function(t3) { + return "deprecated"; + }, buildDuplicateRuleNameError: function(t3) { + var e; + t3.topLevelRule instanceof br.Rule ? e = t3.topLevelRule.name : e = t3.topLevelRule; + var r = "Duplicate definition, rule: ->" + e + "<- is already defined in the grammar: ->" + t3.grammarName + "<-"; + return r; + } }; +}); +var mi = R2((Ge) => { + "use strict"; + var Bo = Ge && Ge.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(Ge, "__esModule", { value: true }); + Ge.GastRefResolverVisitor = Ge.resolveGrammar = void 0; + var qo = ce(), di = k(), jo = $e(); + function Vo(t3, e) { + var r = new vi(t3, e); + return r.resolveRefs(), r.errors; + } + Ge.resolveGrammar = Vo; + var vi = function(t3) { + Bo(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.nameToTopRule = r, i.errMsgProvider = n2, i.errors = [], i; + } + return e.prototype.resolveRefs = function() { + var r = this; + di.forEach(di.values(this.nameToTopRule), function(n2) { + r.currTopLevel = n2, n2.accept(r); + }); + }, e.prototype.visitNonTerminal = function(r) { + var n2 = this.nameToTopRule[r.nonTerminalName]; + if (n2) r.referencedRule = n2; + else { + var i = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, r); + this.errors.push({ message: i, type: qo.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF, ruleName: this.currTopLevel.name, unresolvedRefName: r.nonTerminalName }); + } + }, e; + }(jo.GAstVisitor); + Ge.GastRefResolverVisitor = vi; +}); +var Tt = R2((j) => { + "use strict"; + var je = j && j.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(j, "__esModule", { value: true }); + j.nextPossibleTokensAfter = j.possiblePathsFrom = j.NextTerminalAfterAtLeastOneSepWalker = j.NextTerminalAfterAtLeastOneWalker = j.NextTerminalAfterManySepWalker = j.NextTerminalAfterManyWalker = j.AbstractNextTerminalAfterProductionWalker = j.NextAfterTokenWalker = j.AbstractNextPossibleTokensWalker = void 0; + var Ei2 = Gt(), I2 = k(), Ko = Lr(), O = ne(), Ti2 = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.topProd = r, i.path = n2, i.possibleTokTypes = [], i.nextProductionName = "", i.nextProductionOccurrence = 0, i.found = false, i.isAtEndOfPath = false, i; + } + return e.prototype.startWalking = function() { + if (this.found = false, this.path.ruleStack[0] !== this.topProd.name) throw Error("The path does not start with the walker's top Rule!"); + return this.ruleStack = I2.cloneArr(this.path.ruleStack).reverse(), this.occurrenceStack = I2.cloneArr(this.path.occurrenceStack).reverse(), this.ruleStack.pop(), this.occurrenceStack.pop(), this.updateExpectedNext(), this.walk(this.topProd), this.possibleTokTypes; + }, e.prototype.walk = function(r, n2) { + n2 === void 0 && (n2 = []), this.found || t3.prototype.walk.call(this, r, n2); + }, e.prototype.walkProdRef = function(r, n2, i) { + if (r.referencedRule.name === this.nextProductionName && r.idx === this.nextProductionOccurrence) { + var a2 = n2.concat(i); + this.updateExpectedNext(), this.walk(r.referencedRule, a2); + } + }, e.prototype.updateExpectedNext = function() { + I2.isEmpty(this.ruleStack) ? (this.nextProductionName = "", this.nextProductionOccurrence = 0, this.isAtEndOfPath = true) : (this.nextProductionName = this.ruleStack.pop(), this.nextProductionOccurrence = this.occurrenceStack.pop()); + }, e; + }(Ei2.RestWalker); + j.AbstractNextPossibleTokensWalker = Ti2; + var zo = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this, r, n2) || this; + return i.path = n2, i.nextTerminalName = "", i.nextTerminalOccurrence = 0, i.nextTerminalName = i.path.lastTok.name, i.nextTerminalOccurrence = i.path.lastTokOccurrence, i; + } + return e.prototype.walkTerminal = function(r, n2, i) { + if (this.isAtEndOfPath && r.terminalType.name === this.nextTerminalName && r.idx === this.nextTerminalOccurrence && !this.found) { + var a2 = n2.concat(i), o = new O.Alternative({ definition: a2 }); + this.possibleTokTypes = Ko.first(o), this.found = true; + } + }, e; + }(Ti2); + j.NextAfterTokenWalker = zo; + var Et = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.topRule = r, i.occurrence = n2, i.result = { token: void 0, occurrence: void 0, isEndOfRule: void 0 }, i; + } + return e.prototype.startWalking = function() { + return this.walk(this.topRule), this.result; + }, e; + }(Ei2.RestWalker); + j.AbstractNextTerminalAfterProductionWalker = Et; + var Ho = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkMany = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkMany.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterManyWalker = Ho; + var Yo = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkManySep = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkManySep.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterManySepWalker = Yo; + var Xo = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkAtLeastOne = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkAtLeastOne.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterAtLeastOneWalker = Xo; + var $o = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkAtLeastOneSep = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkAtLeastOneSep.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterAtLeastOneSepWalker = $o; + function yi(t3, e, r) { + r === void 0 && (r = []), r = I2.cloneArr(r); + var n2 = [], i = 0; + function a2(f) { + return f.concat(I2.drop(t3, i + 1)); + } + function o(f) { + var p2 = yi(a2(f), e, r); + return n2.concat(p2); + } + for (; r.length < e && i < t3.length; ) { + var s = t3[i]; + if (s instanceof O.Alternative) return o(s.definition); + if (s instanceof O.NonTerminal) return o(s.definition); + if (s instanceof O.Option) n2 = o(s.definition); + else if (s instanceof O.RepetitionMandatory) { + var c2 = s.definition.concat([new O.Repetition({ definition: s.definition })]); + return o(c2); + } else if (s instanceof O.RepetitionMandatoryWithSeparator) { + var c2 = [new O.Alternative({ definition: s.definition }), new O.Repetition({ definition: [new O.Terminal({ terminalType: s.separator })].concat(s.definition) })]; + return o(c2); + } else if (s instanceof O.RepetitionWithSeparator) { + var c2 = s.definition.concat([new O.Repetition({ definition: [new O.Terminal({ terminalType: s.separator })].concat(s.definition) })]); + n2 = o(c2); + } else if (s instanceof O.Repetition) { + var c2 = s.definition.concat([new O.Repetition({ definition: s.definition })]); + n2 = o(c2); + } else { + if (s instanceof O.Alternation) return I2.forEach(s.definition, function(f) { + I2.isEmpty(f.definition) === false && (n2 = o(f.definition)); + }), n2; + if (s instanceof O.Terminal) r.push(s.terminalType); + else throw Error("non exhaustive match"); + } + i++; + } + return n2.push({ partialPath: r, suffixDef: I2.drop(t3, i) }), n2; + } + j.possiblePathsFrom = yi; + function Qo(t3, e, r, n2) { + var i = "EXIT_NONE_TERMINAL", a2 = [i], o = "EXIT_ALTERNATIVE", s = false, c2 = e.length, f = c2 - n2 - 1, p2 = [], l2 = []; + for (l2.push({ idx: -1, def: t3, ruleStack: [], occurrenceStack: [] }); !I2.isEmpty(l2); ) { + var m = l2.pop(); + if (m === o) { + s && I2.last(l2).idx <= f && l2.pop(); + continue; + } + var v = m.def, u = m.idx, d = m.ruleStack, A2 = m.occurrenceStack; + if (!I2.isEmpty(v)) { + var _ = v[0]; + if (_ === i) { + var g2 = { idx: u, def: I2.drop(v), ruleStack: I2.dropRight(d), occurrenceStack: I2.dropRight(A2) }; + l2.push(g2); + } else if (_ instanceof O.Terminal) if (u < c2 - 1) { + var y2 = u + 1, b3 = e[y2]; + if (r(b3, _.terminalType)) { + var g2 = { idx: y2, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } + } else if (u === c2 - 1) p2.push({ nextTokenType: _.terminalType, nextTokenOccurrence: _.idx, ruleStack: d, occurrenceStack: A2 }), s = true; + else throw Error("non exhaustive match"); + else if (_ instanceof O.NonTerminal) { + var L = I2.cloneArr(d); + L.push(_.nonTerminalName); + var se2 = I2.cloneArr(A2); + se2.push(_.idx); + var g2 = { idx: u, def: _.definition.concat(a2, I2.drop(v)), ruleStack: L, occurrenceStack: se2 }; + l2.push(g2); + } else if (_ instanceof O.Option) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var Z2 = { idx: u, def: _.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.RepetitionMandatory) { + var ue = new O.Repetition({ definition: _.definition, idx: _.idx }), Q3 = _.definition.concat([ue], I2.drop(v)), g2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } else if (_ instanceof O.RepetitionMandatoryWithSeparator) { + var te2 = new O.Terminal({ terminalType: _.separator }), ue = new O.Repetition({ definition: [te2].concat(_.definition), idx: _.idx }), Q3 = _.definition.concat([ue], I2.drop(v)), g2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } else if (_ instanceof O.RepetitionWithSeparator) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var te2 = new O.Terminal({ terminalType: _.separator }), xe2 = new O.Repetition({ definition: [te2].concat(_.definition), idx: _.idx }), Q3 = _.definition.concat([xe2], I2.drop(v)), Z2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.Repetition) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var xe2 = new O.Repetition({ definition: _.definition, idx: _.idx }), Q3 = _.definition.concat([xe2], I2.drop(v)), Z2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.Alternation) for (var it = _.definition.length - 1; it >= 0; it--) { + var at = _.definition[it], Ke = { idx: u, def: at.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }; + l2.push(Ke), l2.push(o); + } + else if (_ instanceof O.Alternative) l2.push({ idx: u, def: _.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }); + else if (_ instanceof O.Rule) l2.push(Zo(_, u, d, A2)); + else throw Error("non exhaustive match"); + } + } + return p2; + } + j.nextPossibleTokensAfter = Qo; + function Zo(t3, e, r, n2) { + var i = I2.cloneArr(r); + i.push(t3.name); + var a2 = I2.cloneArr(n2); + return a2.push(1), { idx: e, def: t3.definition, ruleStack: i, occurrenceStack: a2 }; + } +}); +var yt2 = R2((C2) => { + "use strict"; + var _i = C2 && C2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(C2, "__esModule", { value: true }); + C2.areTokenCategoriesNotUsed = C2.isStrictPrefixOfPath = C2.containsPath = C2.getLookaheadPathsForOptionalProd = C2.getLookaheadPathsForOr = C2.lookAheadSequenceFromAlternatives = C2.buildSingleAlternativeLookaheadFunction = C2.buildAlternativesLookAheadFunc = C2.buildLookaheadFuncForOptionalProd = C2.buildLookaheadFuncForOr = C2.getProdType = C2.PROD_TYPE = void 0; + var D = k(), gi = Tt(), Jo = Gt(), Kt = Xe(), We = ne(), es = $e(), z; + (function(t3) { + t3[t3.OPTION = 0] = "OPTION", t3[t3.REPETITION = 1] = "REPETITION", t3[t3.REPETITION_MANDATORY = 2] = "REPETITION_MANDATORY", t3[t3.REPETITION_MANDATORY_WITH_SEPARATOR = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR", t3[t3.REPETITION_WITH_SEPARATOR = 4] = "REPETITION_WITH_SEPARATOR", t3[t3.ALTERNATION = 5] = "ALTERNATION"; + })(z = C2.PROD_TYPE || (C2.PROD_TYPE = {})); + function ts(t3) { + if (t3 instanceof We.Option) return z.OPTION; + if (t3 instanceof We.Repetition) return z.REPETITION; + if (t3 instanceof We.RepetitionMandatory) return z.REPETITION_MANDATORY; + if (t3 instanceof We.RepetitionMandatoryWithSeparator) return z.REPETITION_MANDATORY_WITH_SEPARATOR; + if (t3 instanceof We.RepetitionWithSeparator) return z.REPETITION_WITH_SEPARATOR; + if (t3 instanceof We.Alternation) return z.ALTERNATION; + throw Error("non exhaustive match"); + } + C2.getProdType = ts; + function rs(t3, e, r, n2, i, a2) { + var o = Ai(t3, e, r), s = Fr(o) ? Kt.tokenStructuredMatcherNoCategories : Kt.tokenStructuredMatcher; + return a2(o, n2, s, i); + } + C2.buildLookaheadFuncForOr = rs; + function ns(t3, e, r, n2, i, a2) { + var o = Ri(t3, e, i, r), s = Fr(o) ? Kt.tokenStructuredMatcherNoCategories : Kt.tokenStructuredMatcher; + return a2(o[0], s, n2); + } + C2.buildLookaheadFuncForOptionalProd = ns; + function is(t3, e, r, n2) { + var i = t3.length, a2 = D.every(t3, function(c2) { + return D.every(c2, function(f) { + return f.length === 1; + }); + }); + if (e) return function(c2) { + for (var f = D.map(c2, function(y2) { + return y2.GATE; + }), p2 = 0; p2 < i; p2++) { + var l2 = t3[p2], m = l2.length, v = f[p2]; + if (v !== void 0 && v.call(this) === false) continue; + e: for (var u = 0; u < m; u++) { + for (var d = l2[u], A2 = d.length, _ = 0; _ < A2; _++) { + var g2 = this.LA(_ + 1); + if (r(g2, d[_]) === false) continue e; + } + return p2; + } + } + }; + if (a2 && !n2) { + var o = D.map(t3, function(c2) { + return D.flatten(c2); + }), s = D.reduce(o, function(c2, f, p2) { + return D.forEach(f, function(l2) { + D.has(c2, l2.tokenTypeIdx) || (c2[l2.tokenTypeIdx] = p2), D.forEach(l2.categoryMatches, function(m) { + D.has(c2, m) || (c2[m] = p2); + }); + }), c2; + }, []); + return function() { + var c2 = this.LA(1); + return s[c2.tokenTypeIdx]; + }; + } else return function() { + for (var c2 = 0; c2 < i; c2++) { + var f = t3[c2], p2 = f.length; + e: for (var l2 = 0; l2 < p2; l2++) { + for (var m = f[l2], v = m.length, u = 0; u < v; u++) { + var d = this.LA(u + 1); + if (r(d, m[u]) === false) continue e; + } + return c2; + } + } + }; + } + C2.buildAlternativesLookAheadFunc = is; + function as(t3, e, r) { + var n2 = D.every(t3, function(f) { + return f.length === 1; + }), i = t3.length; + if (n2 && !r) { + var a2 = D.flatten(t3); + if (a2.length === 1 && D.isEmpty(a2[0].categoryMatches)) { + var o = a2[0], s = o.tokenTypeIdx; + return function() { + return this.LA(1).tokenTypeIdx === s; + }; + } else { + var c2 = D.reduce(a2, function(f, p2, l2) { + return f[p2.tokenTypeIdx] = true, D.forEach(p2.categoryMatches, function(m) { + f[m] = true; + }), f; + }, []); + return function() { + var f = this.LA(1); + return c2[f.tokenTypeIdx] === true; + }; + } + } else return function() { + e: for (var f = 0; f < i; f++) { + for (var p2 = t3[f], l2 = p2.length, m = 0; m < l2; m++) { + var v = this.LA(m + 1); + if (e(v, p2[m]) === false) continue e; + } + return true; + } + return false; + }; + } + C2.buildSingleAlternativeLookaheadFunction = as; + var os = function(t3) { + _i(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this) || this; + return a2.topProd = r, a2.targetOccurrence = n2, a2.targetProdType = i, a2; + } + return e.prototype.startWalking = function() { + return this.walk(this.topProd), this.restDef; + }, e.prototype.checkIsTarget = function(r, n2, i, a2) { + return r.idx === this.targetOccurrence && this.targetProdType === n2 ? (this.restDef = i.concat(a2), true) : false; + }, e.prototype.walkOption = function(r, n2, i) { + this.checkIsTarget(r, z.OPTION, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkAtLeastOne = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_MANDATORY, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkAtLeastOneSep = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_MANDATORY_WITH_SEPARATOR, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkMany = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkManySep = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_WITH_SEPARATOR, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e; + }(Jo.RestWalker), Oi2 = function(t3) { + _i(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this) || this; + return a2.targetOccurrence = r, a2.targetProdType = n2, a2.targetRef = i, a2.result = [], a2; + } + return e.prototype.checkIsTarget = function(r, n2) { + r.idx === this.targetOccurrence && this.targetProdType === n2 && (this.targetRef === void 0 || r === this.targetRef) && (this.result = r.definition); + }, e.prototype.visitOption = function(r) { + this.checkIsTarget(r, z.OPTION); + }, e.prototype.visitRepetition = function(r) { + this.checkIsTarget(r, z.REPETITION); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.checkIsTarget(r, z.REPETITION_MANDATORY); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.checkIsTarget(r, z.REPETITION_MANDATORY_WITH_SEPARATOR); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.checkIsTarget(r, z.REPETITION_WITH_SEPARATOR); + }, e.prototype.visitAlternation = function(r) { + this.checkIsTarget(r, z.ALTERNATION); + }, e; + }(es.GAstVisitor); + function Ni(t3) { + for (var e = new Array(t3), r = 0; r < t3; r++) e[r] = []; + return e; + } + function wr(t3) { + for (var e = [""], r = 0; r < t3.length; r++) { + for (var n2 = t3[r], i = [], a2 = 0; a2 < e.length; a2++) { + var o = e[a2]; + i.push(o + "_" + n2.tokenTypeIdx); + for (var s = 0; s < n2.categoryMatches.length; s++) { + var c2 = "_" + n2.categoryMatches[s]; + i.push(o + c2); + } + } + e = i; + } + return e; + } + function ss(t3, e, r) { + for (var n2 = 0; n2 < t3.length; n2++) if (n2 !== r) for (var i = t3[n2], a2 = 0; a2 < e.length; a2++) { + var o = e[a2]; + if (i[o] === true) return false; + } + return true; + } + function Dr(t3, e) { + for (var r = D.map(t3, function(p2) { + return gi.possiblePathsFrom([p2], 1); + }), n2 = Ni(r.length), i = D.map(r, function(p2) { + var l2 = {}; + return D.forEach(p2, function(m) { + var v = wr(m.partialPath); + D.forEach(v, function(u) { + l2[u] = true; + }); + }), l2; + }), a2 = r, o = 1; o <= e; o++) { + var s = a2; + a2 = Ni(s.length); + for (var c2 = function(p2) { + for (var l2 = s[p2], m = 0; m < l2.length; m++) { + var v = l2[m].partialPath, u = l2[m].suffixDef, d = wr(v), A2 = ss(i, d, p2); + if (A2 || D.isEmpty(u) || v.length === e) { + var _ = n2[p2]; + if (Ii2(_, v) === false) { + _.push(v); + for (var g2 = 0; g2 < d.length; g2++) { + var y2 = d[g2]; + i[p2][y2] = true; + } + } + } else { + var b3 = gi.possiblePathsFrom(u, o + 1, v); + a2[p2] = a2[p2].concat(b3), D.forEach(b3, function(L) { + var se2 = wr(L.partialPath); + D.forEach(se2, function(fe) { + i[p2][fe] = true; + }); + }); + } + } + }, f = 0; f < s.length; f++) c2(f); + } + return n2; + } + C2.lookAheadSequenceFromAlternatives = Dr; + function Ai(t3, e, r, n2) { + var i = new Oi2(t3, z.ALTERNATION, n2); + return e.accept(i), Dr(i.result, r); + } + C2.getLookaheadPathsForOr = Ai; + function Ri(t3, e, r, n2) { + var i = new Oi2(t3, r); + e.accept(i); + var a2 = i.result, o = new os(e, t3, r), s = o.startWalking(), c2 = new We.Alternative({ definition: a2 }), f = new We.Alternative({ definition: s }); + return Dr([c2, f], n2); + } + C2.getLookaheadPathsForOptionalProd = Ri; + function Ii2(t3, e) { + e: for (var r = 0; r < t3.length; r++) { + var n2 = t3[r]; + if (n2.length === e.length) { + for (var i = 0; i < n2.length; i++) { + var a2 = e[i], o = n2[i], s = a2 === o || o.categoryMatchesMap[a2.tokenTypeIdx] !== void 0; + if (s === false) continue e; + } + return true; + } + } + return false; + } + C2.containsPath = Ii2; + function us(t3, e) { + return t3.length < e.length && D.every(t3, function(r, n2) { + var i = e[n2]; + return r === i || i.categoryMatchesMap[r.tokenTypeIdx]; + }); + } + C2.isStrictPrefixOfPath = us; + function Fr(t3) { + return D.every(t3, function(e) { + return D.every(e, function(r) { + return D.every(r, function(n2) { + return D.isEmpty(n2.categoryMatches); + }); + }); + }); + } + C2.areTokenCategoriesNotUsed = Fr; +}); +var jr = R2((x2) => { + "use strict"; + var Ur = x2 && x2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(x2, "__esModule", { value: true }); + x2.checkPrefixAlternativesAmbiguities = x2.validateSomeNonEmptyLookaheadPath = x2.validateTooManyAlts = x2.RepetionCollector = x2.validateAmbiguousAlternationAlternatives = x2.validateEmptyOrAlternative = x2.getFirstNoneTerminal = x2.validateNoLeftRecursion = x2.validateRuleIsOverridden = x2.validateRuleDoesNotAlreadyExist = x2.OccurrenceValidationCollector = x2.identifyProductionForDuplicates = x2.validateGrammar = void 0; + var M = k(), B2 = k(), Ie = ce(), Gr = vt(), Qe = yt2(), cs = Tt(), _e = ne(), Wr = $e(); + function ps(t3, e, r, n2, i) { + var a2 = M.map(t3, function(v) { + return ls(v, n2); + }), o = M.map(t3, function(v) { + return Br(v, v, n2); + }), s = [], c2 = [], f = []; + B2.every(o, B2.isEmpty) && (s = B2.map(t3, function(v) { + return Pi2(v, n2); + }), c2 = B2.map(t3, function(v) { + return Si2(v, e, n2); + }), f = Ci2(t3, e, n2)); + var p2 = fs(t3, r, n2), l2 = B2.map(t3, function(v) { + return xi(v, n2); + }), m = B2.map(t3, function(v) { + return ki(v, t3, i, n2); + }); + return M.flatten(a2.concat(f, o, s, c2, p2, l2, m)); + } + x2.validateGrammar = ps; + function ls(t3, e) { + var r = new bi(); + t3.accept(r); + var n2 = r.allProductions, i = M.groupBy(n2, Li), a2 = M.pick(i, function(s) { + return s.length > 1; + }), o = M.map(M.values(a2), function(s) { + var c2 = M.first(s), f = e.buildDuplicateFoundError(t3, s), p2 = Gr.getProductionDslName(c2), l2 = { message: f, type: Ie.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS, ruleName: t3.name, dslName: p2, occurrence: c2.idx }, m = Mi2(c2); + return m && (l2.parameter = m), l2; + }); + return o; + } + function Li(t3) { + return Gr.getProductionDslName(t3) + "_#_" + t3.idx + "_#_" + Mi2(t3); + } + x2.identifyProductionForDuplicates = Li; + function Mi2(t3) { + return t3 instanceof _e.Terminal ? t3.terminalType.name : t3 instanceof _e.NonTerminal ? t3.nonTerminalName : ""; + } + var bi = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.allProductions = [], r; + } + return e.prototype.visitNonTerminal = function(r) { + this.allProductions.push(r); + }, e.prototype.visitOption = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetition = function(r) { + this.allProductions.push(r); + }, e.prototype.visitAlternation = function(r) { + this.allProductions.push(r); + }, e.prototype.visitTerminal = function(r) { + this.allProductions.push(r); + }, e; + }(Wr.GAstVisitor); + x2.OccurrenceValidationCollector = bi; + function ki(t3, e, r, n2) { + var i = [], a2 = B2.reduce(e, function(s, c2) { + return c2.name === t3.name ? s + 1 : s; + }, 0); + if (a2 > 1) { + var o = n2.buildDuplicateRuleNameError({ topLevelRule: t3, grammarName: r }); + i.push({ message: o, type: Ie.ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: t3.name }); + } + return i; + } + x2.validateRuleDoesNotAlreadyExist = ki; + function hs(t3, e, r) { + var n2 = [], i; + return M.contains(e, t3) || (i = "Invalid rule override, rule: ->" + t3 + "<- cannot be overridden in the grammar: ->" + r + "<-as it is not defined in any of the super grammars ", n2.push({ message: i, type: Ie.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE, ruleName: t3 })), n2; + } + x2.validateRuleIsOverridden = hs; + function Br(t3, e, r, n2) { + n2 === void 0 && (n2 = []); + var i = [], a2 = _t(e.definition); + if (M.isEmpty(a2)) return []; + var o = t3.name, s = M.contains(a2, t3); + s && i.push({ message: r.buildLeftRecursionError({ topLevelRule: t3, leftRecursionPath: n2 }), type: Ie.ParserDefinitionErrorType.LEFT_RECURSION, ruleName: o }); + var c2 = M.difference(a2, n2.concat([t3])), f = M.map(c2, function(p2) { + var l2 = M.cloneArr(n2); + return l2.push(p2), Br(t3, p2, r, l2); + }); + return i.concat(M.flatten(f)); + } + x2.validateNoLeftRecursion = Br; + function _t(t3) { + var e = []; + if (M.isEmpty(t3)) return e; + var r = M.first(t3); + if (r instanceof _e.NonTerminal) e.push(r.referencedRule); + else if (r instanceof _e.Alternative || r instanceof _e.Option || r instanceof _e.RepetitionMandatory || r instanceof _e.RepetitionMandatoryWithSeparator || r instanceof _e.RepetitionWithSeparator || r instanceof _e.Repetition) e = e.concat(_t(r.definition)); + else if (r instanceof _e.Alternation) e = M.flatten(M.map(r.definition, function(o) { + return _t(o.definition); + })); + else if (!(r instanceof _e.Terminal)) throw Error("non exhaustive match"); + var n2 = Gr.isOptionalProd(r), i = t3.length > 1; + if (n2 && i) { + var a2 = M.drop(t3); + return e.concat(_t(a2)); + } else return e; + } + x2.getFirstNoneTerminal = _t; + var qr = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.alternations = [], r; + } + return e.prototype.visitAlternation = function(r) { + this.alternations.push(r); + }, e; + }(Wr.GAstVisitor); + function Pi2(t3, e) { + var r = new qr(); + t3.accept(r); + var n2 = r.alternations, i = M.reduce(n2, function(a2, o) { + var s = M.dropRight(o.definition), c2 = M.map(s, function(f, p2) { + var l2 = cs.nextPossibleTokensAfter([f], [], null, 1); + return M.isEmpty(l2) ? { message: e.buildEmptyAlternationError({ topLevelRule: t3, alternation: o, emptyChoiceIdx: p2 }), type: Ie.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT, ruleName: t3.name, occurrence: o.idx, alternative: p2 + 1 } : null; + }); + return a2.concat(M.compact(c2)); + }, []); + return i; + } + x2.validateEmptyOrAlternative = Pi2; + function Si2(t3, e, r) { + var n2 = new qr(); + t3.accept(n2); + var i = n2.alternations; + i = B2.reject(i, function(o) { + return o.ignoreAmbiguities === true; + }); + var a2 = M.reduce(i, function(o, s) { + var c2 = s.idx, f = s.maxLookahead || e, p2 = Qe.getLookaheadPathsForOr(c2, t3, f, s), l2 = ds(p2, s, t3, r), m = Fi2(p2, s, t3, r); + return o.concat(l2, m); + }, []); + return a2; + } + x2.validateAmbiguousAlternationAlternatives = Si2; + var wi = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.allProductions = [], r; + } + return e.prototype.visitRepetitionWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetition = function(r) { + this.allProductions.push(r); + }, e; + }(Wr.GAstVisitor); + x2.RepetionCollector = wi; + function xi(t3, e) { + var r = new qr(); + t3.accept(r); + var n2 = r.alternations, i = M.reduce(n2, function(a2, o) { + return o.definition.length > 255 && a2.push({ message: e.buildTooManyAlternativesError({ topLevelRule: t3, alternation: o }), type: Ie.ParserDefinitionErrorType.TOO_MANY_ALTS, ruleName: t3.name, occurrence: o.idx }), a2; + }, []); + return i; + } + x2.validateTooManyAlts = xi; + function Ci2(t3, e, r) { + var n2 = []; + return B2.forEach(t3, function(i) { + var a2 = new wi(); + i.accept(a2); + var o = a2.allProductions; + B2.forEach(o, function(s) { + var c2 = Qe.getProdType(s), f = s.maxLookahead || e, p2 = s.idx, l2 = Qe.getLookaheadPathsForOptionalProd(p2, i, c2, f), m = l2[0]; + if (B2.isEmpty(B2.flatten(m))) { + var v = r.buildEmptyRepetitionError({ topLevelRule: i, repetition: s }); + n2.push({ message: v, type: Ie.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD, ruleName: i.name }); + } + }); + }), n2; + } + x2.validateSomeNonEmptyLookaheadPath = Ci2; + function ds(t3, e, r, n2) { + var i = [], a2 = B2.reduce(t3, function(s, c2, f) { + return e.definition[f].ignoreAmbiguities === true || B2.forEach(c2, function(p2) { + var l2 = [f]; + B2.forEach(t3, function(m, v) { + f !== v && Qe.containsPath(m, p2) && e.definition[v].ignoreAmbiguities !== true && l2.push(v); + }), l2.length > 1 && !Qe.containsPath(i, p2) && (i.push(p2), s.push({ alts: l2, path: p2 })); + }), s; + }, []), o = M.map(a2, function(s) { + var c2 = B2.map(s.alts, function(p2) { + return p2 + 1; + }), f = n2.buildAlternationAmbiguityError({ topLevelRule: r, alternation: e, ambiguityIndices: c2, prefixPath: s.path }); + return { message: f, type: Ie.ParserDefinitionErrorType.AMBIGUOUS_ALTS, ruleName: r.name, occurrence: e.idx, alternatives: [s.alts] }; + }); + return o; + } + function Fi2(t3, e, r, n2) { + var i = [], a2 = B2.reduce(t3, function(o, s, c2) { + var f = B2.map(s, function(p2) { + return { idx: c2, path: p2 }; + }); + return o.concat(f); + }, []); + return B2.forEach(a2, function(o) { + var s = e.definition[o.idx]; + if (s.ignoreAmbiguities !== true) { + var c2 = o.idx, f = o.path, p2 = B2.findAll(a2, function(m) { + return e.definition[m.idx].ignoreAmbiguities !== true && m.idx < c2 && Qe.isStrictPrefixOfPath(m.path, f); + }), l2 = B2.map(p2, function(m) { + var v = [m.idx + 1, c2 + 1], u = e.idx === 0 ? "" : e.idx, d = n2.buildAlternationPrefixAmbiguityError({ topLevelRule: r, alternation: e, ambiguityIndices: v, prefixPath: m.path }); + return { message: d, type: Ie.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS, ruleName: r.name, occurrence: u, alternatives: v }; + }); + i = i.concat(l2); + } + }), i; + } + x2.checkPrefixAlternativesAmbiguities = Fi2; + function fs(t3, e, r) { + var n2 = [], i = B2.map(e, function(a2) { + return a2.name; + }); + return B2.forEach(t3, function(a2) { + var o = a2.name; + if (B2.contains(i, o)) { + var s = r.buildNamespaceConflictError(a2); + n2.push({ message: s, type: Ie.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE, ruleName: o }); + } + }), n2; + } +}); +var Ui = R2((Je) => { + "use strict"; + Object.defineProperty(Je, "__esModule", { value: true }); + Je.validateGrammar = Je.resolveGrammar = void 0; + var Vr = k(), vs = mi(), ms = jr(), Di = mt(); + function Es(t3) { + t3 = Vr.defaults(t3, { errMsgProvider: Di.defaultGrammarResolverErrorProvider }); + var e = {}; + return Vr.forEach(t3.rules, function(r) { + e[r.name] = r; + }), vs.resolveGrammar(e, t3.errMsgProvider); + } + Je.resolveGrammar = Es; + function Ts(t3) { + return t3 = Vr.defaults(t3, { errMsgProvider: Di.defaultGrammarValidatorErrorProvider }), ms.validateGrammar(t3.rules, t3.maxLookahead, t3.tokenTypes, t3.errMsgProvider, t3.grammarName); + } + Je.validateGrammar = Ts; +}); +var et3 = R2((ae) => { + "use strict"; + var gt2 = ae && ae.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(ae, "__esModule", { value: true }); + ae.EarlyExitException = ae.NotAllInputParsedException = ae.NoViableAltException = ae.MismatchedTokenException = ae.isRecognitionException = void 0; + var ys = k(), Gi = "MismatchedTokenException", Wi = "NoViableAltException", Bi = "EarlyExitException", qi = "NotAllInputParsedException", ji = [Gi, Wi, Bi, qi]; + Object.freeze(ji); + function _s(t3) { + return ys.contains(ji, t3.name); + } + ae.isRecognitionException = _s; + var zt = function(t3) { + gt2(e, t3); + function e(r, n2) { + var i = this.constructor, a2 = t3.call(this, r) || this; + return a2.token = n2, a2.resyncedTokens = [], Object.setPrototypeOf(a2, i.prototype), Error.captureStackTrace && Error.captureStackTrace(a2, a2.constructor), a2; + } + return e; + }(Error), gs = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Gi, a2; + } + return e; + }(zt); + ae.MismatchedTokenException = gs; + var As = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Wi, a2; + } + return e; + }(zt); + ae.NoViableAltException = As; + var Rs = function(t3) { + gt2(e, t3); + function e(r, n2) { + var i = t3.call(this, r, n2) || this; + return i.name = qi, i; + } + return e; + }(zt); + ae.NotAllInputParsedException = Rs; + var Os = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Bi, a2; + } + return e; + }(zt); + ae.EarlyExitException = Os; +}); +var zr = R2(($2) => { + "use strict"; + Object.defineProperty($2, "__esModule", { value: true }); + $2.attemptInRepetitionRecovery = $2.Recoverable = $2.InRuleRecoveryException = $2.IN_RULE_RECOVERY_EXCEPTION = $2.EOF_FOLLOW_KEY = void 0; + var Ht = Ue(), de2 = k(), Ns = et3(), Is = Mr(), ks = ce(); + $2.EOF_FOLLOW_KEY = {}; + $2.IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException"; + function Kr(t3) { + this.name = $2.IN_RULE_RECOVERY_EXCEPTION, this.message = t3; + } + $2.InRuleRecoveryException = Kr; + Kr.prototype = Error.prototype; + var Ps = function() { + function t3() { + } + return t3.prototype.initRecoverable = function(e) { + this.firstAfterRepMap = {}, this.resyncFollows = {}, this.recoveryEnabled = de2.has(e, "recoveryEnabled") ? e.recoveryEnabled : ks.DEFAULT_PARSER_CONFIG.recoveryEnabled, this.recoveryEnabled && (this.attemptInRepetitionRecovery = Vi2); + }, t3.prototype.getTokenToInsert = function(e) { + var r = Ht.createTokenInstance(e, "", NaN, NaN, NaN, NaN, NaN, NaN); + return r.isInsertedInRecovery = true, r; + }, t3.prototype.canTokenTypeBeInsertedInRecovery = function(e) { + return true; + }, t3.prototype.tryInRepetitionRecovery = function(e, r, n2, i) { + for (var a2 = this, o = this.findReSyncTokenType(), s = this.exportLexerState(), c2 = [], f = false, p2 = this.LA(1), l2 = this.LA(1), m = function() { + var v = a2.LA(0), u = a2.errorMessageProvider.buildMismatchTokenMessage({ expected: i, actual: p2, previous: v, ruleName: a2.getCurrRuleFullName() }), d = new Ns.MismatchedTokenException(u, p2, a2.LA(0)); + d.resyncedTokens = de2.dropRight(c2), a2.SAVE_ERROR(d); + }; !f; ) if (this.tokenMatcher(l2, i)) { + m(); + return; + } else if (n2.call(this)) { + m(), e.apply(this, r); + return; + } else this.tokenMatcher(l2, o) ? f = true : (l2 = this.SKIP_TOKEN(), this.addToResyncTokens(l2, c2)); + this.importLexerState(s); + }, t3.prototype.shouldInRepetitionRecoveryBeTried = function(e, r, n2) { + return !(n2 === false || e === void 0 || r === void 0 || this.tokenMatcher(this.LA(1), e) || this.isBackTracking() || this.canPerformInRuleRecovery(e, this.getFollowsForInRuleRecovery(e, r))); + }, t3.prototype.getFollowsForInRuleRecovery = function(e, r) { + var n2 = this.getCurrentGrammarPath(e, r), i = this.getNextPossibleTokenTypes(n2); + return i; + }, t3.prototype.tryInRuleRecovery = function(e, r) { + if (this.canRecoverWithSingleTokenInsertion(e, r)) { + var n2 = this.getTokenToInsert(e); + return n2; + } + if (this.canRecoverWithSingleTokenDeletion(e)) { + var i = this.SKIP_TOKEN(); + return this.consumeToken(), i; + } + throw new Kr("sad sad panda"); + }, t3.prototype.canPerformInRuleRecovery = function(e, r) { + return this.canRecoverWithSingleTokenInsertion(e, r) || this.canRecoverWithSingleTokenDeletion(e); + }, t3.prototype.canRecoverWithSingleTokenInsertion = function(e, r) { + var n2 = this; + if (!this.canTokenTypeBeInsertedInRecovery(e) || de2.isEmpty(r)) return false; + var i = this.LA(1), a2 = de2.find(r, function(o) { + return n2.tokenMatcher(i, o); + }) !== void 0; + return a2; + }, t3.prototype.canRecoverWithSingleTokenDeletion = function(e) { + var r = this.tokenMatcher(this.LA(2), e); + return r; + }, t3.prototype.isInCurrentRuleReSyncSet = function(e) { + var r = this.getCurrFollowKey(), n2 = this.getFollowSetFromFollowKey(r); + return de2.contains(n2, e); + }, t3.prototype.findReSyncTokenType = function() { + for (var e = this.flattenFollowSet(), r = this.LA(1), n2 = 2; ; ) { + var i = r.tokenType; + if (de2.contains(e, i)) return i; + r = this.LA(n2), n2++; + } + }, t3.prototype.getCurrFollowKey = function() { + if (this.RULE_STACK.length === 1) return $2.EOF_FOLLOW_KEY; + var e = this.getLastExplicitRuleShortName(), r = this.getLastExplicitRuleOccurrenceIndex(), n2 = this.getPreviousExplicitRuleShortName(); + return { ruleName: this.shortRuleNameToFullName(e), idxInCallingRule: r, inRule: this.shortRuleNameToFullName(n2) }; + }, t3.prototype.buildFullFollowKeyStack = function() { + var e = this, r = this.RULE_STACK, n2 = this.RULE_OCCURRENCE_STACK; + return de2.map(r, function(i, a2) { + return a2 === 0 ? $2.EOF_FOLLOW_KEY : { ruleName: e.shortRuleNameToFullName(i), idxInCallingRule: n2[a2], inRule: e.shortRuleNameToFullName(r[a2 - 1]) }; + }); + }, t3.prototype.flattenFollowSet = function() { + var e = this, r = de2.map(this.buildFullFollowKeyStack(), function(n2) { + return e.getFollowSetFromFollowKey(n2); + }); + return de2.flatten(r); + }, t3.prototype.getFollowSetFromFollowKey = function(e) { + if (e === $2.EOF_FOLLOW_KEY) return [Ht.EOF]; + var r = e.ruleName + e.idxInCallingRule + Is.IN + e.inRule; + return this.resyncFollows[r]; + }, t3.prototype.addToResyncTokens = function(e, r) { + return this.tokenMatcher(e, Ht.EOF) || r.push(e), r; + }, t3.prototype.reSyncTo = function(e) { + for (var r = [], n2 = this.LA(1); this.tokenMatcher(n2, e) === false; ) n2 = this.SKIP_TOKEN(), this.addToResyncTokens(n2, r); + return de2.dropRight(r); + }, t3.prototype.attemptInRepetitionRecovery = function(e, r, n2, i, a2, o, s) { + }, t3.prototype.getCurrentGrammarPath = function(e, r) { + var n2 = this.getHumanReadableRuleStack(), i = de2.cloneArr(this.RULE_OCCURRENCE_STACK), a2 = { ruleStack: n2, occurrenceStack: i, lastTok: e, lastTokOccurrence: r }; + return a2; + }, t3.prototype.getHumanReadableRuleStack = function() { + var e = this; + return de2.map(this.RULE_STACK, function(r) { + return e.shortRuleNameToFullName(r); + }); + }, t3; + }(); + $2.Recoverable = Ps; + function Vi2(t3, e, r, n2, i, a2, o) { + var s = this.getKeyForAutomaticLookahead(n2, i), c2 = this.firstAfterRepMap[s]; + if (c2 === void 0) { + var f = this.getCurrRuleFullName(), p2 = this.getGAstProductions()[f], l2 = new a2(p2, i); + c2 = l2.startWalking(), this.firstAfterRepMap[s] = c2; + } + var m = c2.token, v = c2.occurrence, u = c2.isEndOfRule; + this.RULE_STACK.length === 1 && u && m === void 0 && (m = Ht.EOF, v = 1), this.shouldInRepetitionRecoveryBeTried(m, v, o) && this.tryInRepetitionRecovery(t3, e, r, m); + } + $2.attemptInRepetitionRecovery = Vi2; +}); +var Yt = R2((P) => { + "use strict"; + Object.defineProperty(P, "__esModule", { value: true }); + P.getKeyForAutomaticLookahead = P.AT_LEAST_ONE_SEP_IDX = P.MANY_SEP_IDX = P.AT_LEAST_ONE_IDX = P.MANY_IDX = P.OPTION_IDX = P.OR_IDX = P.BITS_FOR_ALT_IDX = P.BITS_FOR_RULE_IDX = P.BITS_FOR_OCCURRENCE_IDX = P.BITS_FOR_METHOD_TYPE = void 0; + P.BITS_FOR_METHOD_TYPE = 4; + P.BITS_FOR_OCCURRENCE_IDX = 8; + P.BITS_FOR_RULE_IDX = 12; + P.BITS_FOR_ALT_IDX = 8; + P.OR_IDX = 1 << P.BITS_FOR_OCCURRENCE_IDX; + P.OPTION_IDX = 2 << P.BITS_FOR_OCCURRENCE_IDX; + P.MANY_IDX = 3 << P.BITS_FOR_OCCURRENCE_IDX; + P.AT_LEAST_ONE_IDX = 4 << P.BITS_FOR_OCCURRENCE_IDX; + P.MANY_SEP_IDX = 5 << P.BITS_FOR_OCCURRENCE_IDX; + P.AT_LEAST_ONE_SEP_IDX = 6 << P.BITS_FOR_OCCURRENCE_IDX; + function Ss(t3, e, r) { + return r | e | t3; + } + P.getKeyForAutomaticLookahead = Ss; + var ic = 32 - P.BITS_FOR_ALT_IDX; +}); +var zi2 = R2((Xt) => { + "use strict"; + Object.defineProperty(Xt, "__esModule", { value: true }); + Xt.LooksAhead = void 0; + var be = yt2(), ge = k(), Ki = ce(), Fe = Yt(), Ve = vt(), xs = function() { + function t3() { + } + return t3.prototype.initLooksAhead = function(e) { + this.dynamicTokensEnabled = ge.has(e, "dynamicTokensEnabled") ? e.dynamicTokensEnabled : Ki.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled, this.maxLookahead = ge.has(e, "maxLookahead") ? e.maxLookahead : Ki.DEFAULT_PARSER_CONFIG.maxLookahead, this.lookAheadFuncsCache = ge.isES2015MapSupported() ? /* @__PURE__ */ new Map() : [], ge.isES2015MapSupported() ? (this.getLaFuncFromCache = this.getLaFuncFromMap, this.setLaFuncCache = this.setLaFuncCacheUsingMap) : (this.getLaFuncFromCache = this.getLaFuncFromObj, this.setLaFuncCache = this.setLaFuncUsingObj); + }, t3.prototype.preComputeLookaheadFunctions = function(e) { + var r = this; + ge.forEach(e, function(n2) { + r.TRACE_INIT(n2.name + " Rule Lookahead", function() { + var i = Ve.collectMethods(n2), a2 = i.alternation, o = i.repetition, s = i.option, c2 = i.repetitionMandatory, f = i.repetitionMandatoryWithSeparator, p2 = i.repetitionWithSeparator; + ge.forEach(a2, function(l2) { + var m = l2.idx === 0 ? "" : l2.idx; + r.TRACE_INIT("" + Ve.getProductionDslName(l2) + m, function() { + var v = be.buildLookaheadFuncForOr(l2.idx, n2, l2.maxLookahead || r.maxLookahead, l2.hasPredicates, r.dynamicTokensEnabled, r.lookAheadBuilderForAlternatives), u = Fe.getKeyForAutomaticLookahead(r.fullRuleNameToShort[n2.name], Fe.OR_IDX, l2.idx); + r.setLaFuncCache(u, v); + }); + }), ge.forEach(o, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.MANY_IDX, be.PROD_TYPE.REPETITION, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(s, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.OPTION_IDX, be.PROD_TYPE.OPTION, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(c2, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.AT_LEAST_ONE_IDX, be.PROD_TYPE.REPETITION_MANDATORY, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(f, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.AT_LEAST_ONE_SEP_IDX, be.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(p2, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.MANY_SEP_IDX, be.PROD_TYPE.REPETITION_WITH_SEPARATOR, l2.maxLookahead, Ve.getProductionDslName(l2)); + }); + }); + }); + }, t3.prototype.computeLookaheadFunc = function(e, r, n2, i, a2, o) { + var s = this; + this.TRACE_INIT("" + o + (r === 0 ? "" : r), function() { + var c2 = be.buildLookaheadFuncForOptionalProd(r, e, a2 || s.maxLookahead, s.dynamicTokensEnabled, i, s.lookAheadBuilderForOptional), f = Fe.getKeyForAutomaticLookahead(s.fullRuleNameToShort[e.name], n2, r); + s.setLaFuncCache(f, c2); + }); + }, t3.prototype.lookAheadBuilderForOptional = function(e, r, n2) { + return be.buildSingleAlternativeLookaheadFunction(e, r, n2); + }, t3.prototype.lookAheadBuilderForAlternatives = function(e, r, n2, i) { + return be.buildAlternativesLookAheadFunc(e, r, n2, i); + }, t3.prototype.getKeyForAutomaticLookahead = function(e, r) { + var n2 = this.getLastExplicitRuleShortName(); + return Fe.getKeyForAutomaticLookahead(n2, e, r); + }, t3.prototype.getLaFuncFromCache = function(e) { + }, t3.prototype.getLaFuncFromMap = function(e) { + return this.lookAheadFuncsCache.get(e); + }, t3.prototype.getLaFuncFromObj = function(e) { + return this.lookAheadFuncsCache[e]; + }, t3.prototype.setLaFuncCache = function(e, r) { + }, t3.prototype.setLaFuncCacheUsingMap = function(e, r) { + this.lookAheadFuncsCache.set(e, r); + }, t3.prototype.setLaFuncUsingObj = function(e, r) { + this.lookAheadFuncsCache[e] = r; + }, t3; + }(); + Xt.LooksAhead = xs; +}); +var Hi = R2((ke) => { + "use strict"; + Object.defineProperty(ke, "__esModule", { value: true }); + ke.addNoneTerminalToCst = ke.addTerminalToCst = ke.setNodeLocationFull = ke.setNodeLocationOnlyOffset = void 0; + function Cs(t3, e) { + isNaN(t3.startOffset) === true ? (t3.startOffset = e.startOffset, t3.endOffset = e.endOffset) : t3.endOffset < e.endOffset && (t3.endOffset = e.endOffset); + } + ke.setNodeLocationOnlyOffset = Cs; + function Ls(t3, e) { + isNaN(t3.startOffset) === true ? (t3.startOffset = e.startOffset, t3.startColumn = e.startColumn, t3.startLine = e.startLine, t3.endOffset = e.endOffset, t3.endColumn = e.endColumn, t3.endLine = e.endLine) : t3.endOffset < e.endOffset && (t3.endOffset = e.endOffset, t3.endColumn = e.endColumn, t3.endLine = e.endLine); + } + ke.setNodeLocationFull = Ls; + function Ms(t3, e, r) { + t3.children[r] === void 0 ? t3.children[r] = [e] : t3.children[r].push(e); + } + ke.addTerminalToCst = Ms; + function bs(t3, e, r) { + t3.children[e] === void 0 ? t3.children[e] = [r] : t3.children[e].push(r); + } + ke.addNoneTerminalToCst = bs; +}); +var Hr = R2((Be) => { + "use strict"; + Object.defineProperty(Be, "__esModule", { value: true }); + Be.defineNameProp = Be.functionName = Be.classNameFromInstance = void 0; + var Fs = k(); + function ws(t3) { + return Yi(t3.constructor); + } + Be.classNameFromInstance = ws; + var Xi = "name"; + function Yi(t3) { + var e = t3.name; + return e || "anonymous"; + } + Be.functionName = Yi; + function Ds(t3, e) { + var r = Object.getOwnPropertyDescriptor(t3, Xi); + return Fs.isUndefined(r) || r.configurable ? (Object.defineProperty(t3, Xi, { enumerable: false, configurable: true, writable: false, value: e }), true) : false; + } + Be.defineNameProp = Ds; +}); +var ea = R2((Y2) => { + "use strict"; + Object.defineProperty(Y2, "__esModule", { value: true }); + Y2.validateRedundantMethods = Y2.validateMissingCstMethods = Y2.validateVisitor = Y2.CstVisitorDefinitionError = Y2.createBaseVisitorConstructorWithDefaults = Y2.createBaseSemanticVisitorConstructor = Y2.defaultVisit = void 0; + var ve = k(), At = Hr(); + function $i(t3, e) { + for (var r = ve.keys(t3), n2 = r.length, i = 0; i < n2; i++) for (var a2 = r[i], o = t3[a2], s = o.length, c2 = 0; c2 < s; c2++) { + var f = o[c2]; + f.tokenTypeIdx === void 0 && this[f.name](f.children, e); + } + } + Y2.defaultVisit = $i; + function Us(t3, e) { + var r = function() { + }; + At.defineNameProp(r, t3 + "BaseSemantics"); + var n2 = { visit: function(i, a2) { + if (ve.isArray(i) && (i = i[0]), !ve.isUndefined(i)) return this[i.name](i.children, a2); + }, validateVisitor: function() { + var i = Zi(this, e); + if (!ve.isEmpty(i)) { + var a2 = ve.map(i, function(o) { + return o.msg; + }); + throw Error("Errors Detected in CST Visitor <" + At.functionName(this.constructor) + `>: + ` + ("" + a2.join(` + +`).replace(/\n/g, ` + `))); + } + } }; + return r.prototype = n2, r.prototype.constructor = r, r._RULE_NAMES = e, r; + } + Y2.createBaseSemanticVisitorConstructor = Us; + function Gs(t3, e, r) { + var n2 = function() { + }; + At.defineNameProp(n2, t3 + "BaseSemanticsWithDefaults"); + var i = Object.create(r.prototype); + return ve.forEach(e, function(a2) { + i[a2] = $i; + }), n2.prototype = i, n2.prototype.constructor = n2, n2; + } + Y2.createBaseVisitorConstructorWithDefaults = Gs; + var Yr; + (function(t3) { + t3[t3.REDUNDANT_METHOD = 0] = "REDUNDANT_METHOD", t3[t3.MISSING_METHOD = 1] = "MISSING_METHOD"; + })(Yr = Y2.CstVisitorDefinitionError || (Y2.CstVisitorDefinitionError = {})); + function Zi(t3, e) { + var r = Qi(t3, e), n2 = Ji(t3, e); + return r.concat(n2); + } + Y2.validateVisitor = Zi; + function Qi(t3, e) { + var r = ve.map(e, function(n2) { + if (!ve.isFunction(t3[n2])) return { msg: "Missing visitor method: <" + n2 + "> on " + At.functionName(t3.constructor) + " CST Visitor.", type: Yr.MISSING_METHOD, methodName: n2 }; + }); + return ve.compact(r); + } + Y2.validateMissingCstMethods = Qi; + var Ws = ["constructor", "visit", "validateVisitor"]; + function Ji(t3, e) { + var r = []; + for (var n2 in t3) ve.isFunction(t3[n2]) && !ve.contains(Ws, n2) && !ve.contains(e, n2) && r.push({ msg: "Redundant visitor method: <" + n2 + "> on " + At.functionName(t3.constructor) + ` CST Visitor +There is no Grammar Rule corresponding to this method's name. +`, type: Yr.REDUNDANT_METHOD, methodName: n2 }); + return r; + } + Y2.validateRedundantMethods = Ji; +}); +var ra = R2(($t2) => { + "use strict"; + Object.defineProperty($t2, "__esModule", { value: true }); + $t2.TreeBuilder = void 0; + var tt = Hi(), K = k(), ta = ea(), Bs = ce(), qs = function() { + function t3() { + } + return t3.prototype.initTreeBuilder = function(e) { + if (this.CST_STACK = [], this.outputCst = e.outputCst, this.nodeLocationTracking = K.has(e, "nodeLocationTracking") ? e.nodeLocationTracking : Bs.DEFAULT_PARSER_CONFIG.nodeLocationTracking, !this.outputCst) this.cstInvocationStateUpdate = K.NOOP, this.cstFinallyStateUpdate = K.NOOP, this.cstPostTerminal = K.NOOP, this.cstPostNonTerminal = K.NOOP, this.cstPostRule = K.NOOP; + else if (/full/i.test(this.nodeLocationTracking)) this.recoveryEnabled ? (this.setNodeLocationFromToken = tt.setNodeLocationFull, this.setNodeLocationFromNode = tt.setNodeLocationFull, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery) : (this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = this.cstPostRuleFull, this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular); + else if (/onlyOffset/i.test(this.nodeLocationTracking)) this.recoveryEnabled ? (this.setNodeLocationFromToken = tt.setNodeLocationOnlyOffset, this.setNodeLocationFromNode = tt.setNodeLocationOnlyOffset, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery) : (this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = this.cstPostRuleOnlyOffset, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular); + else if (/none/i.test(this.nodeLocationTracking)) this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = K.NOOP; + else throw Error('Invalid config option: "' + e.nodeLocationTracking + '"'); + }, t3.prototype.setInitialNodeLocationOnlyOffsetRecovery = function(e) { + e.location = { startOffset: NaN, endOffset: NaN }; + }, t3.prototype.setInitialNodeLocationOnlyOffsetRegular = function(e) { + e.location = { startOffset: this.LA(1).startOffset, endOffset: NaN }; + }, t3.prototype.setInitialNodeLocationFullRecovery = function(e) { + e.location = { startOffset: NaN, startLine: NaN, startColumn: NaN, endOffset: NaN, endLine: NaN, endColumn: NaN }; + }, t3.prototype.setInitialNodeLocationFullRegular = function(e) { + var r = this.LA(1); + e.location = { startOffset: r.startOffset, startLine: r.startLine, startColumn: r.startColumn, endOffset: NaN, endLine: NaN, endColumn: NaN }; + }, t3.prototype.cstInvocationStateUpdate = function(e, r) { + var n2 = { name: e, children: {} }; + this.setInitialNodeLocation(n2), this.CST_STACK.push(n2); + }, t3.prototype.cstFinallyStateUpdate = function() { + this.CST_STACK.pop(); + }, t3.prototype.cstPostRuleFull = function(e) { + var r = this.LA(0), n2 = e.location; + n2.startOffset <= r.startOffset ? (n2.endOffset = r.endOffset, n2.endLine = r.endLine, n2.endColumn = r.endColumn) : (n2.startOffset = NaN, n2.startLine = NaN, n2.startColumn = NaN); + }, t3.prototype.cstPostRuleOnlyOffset = function(e) { + var r = this.LA(0), n2 = e.location; + n2.startOffset <= r.startOffset ? n2.endOffset = r.endOffset : n2.startOffset = NaN; + }, t3.prototype.cstPostTerminal = function(e, r) { + var n2 = this.CST_STACK[this.CST_STACK.length - 1]; + tt.addTerminalToCst(n2, r, e), this.setNodeLocationFromToken(n2.location, r); + }, t3.prototype.cstPostNonTerminal = function(e, r) { + var n2 = this.CST_STACK[this.CST_STACK.length - 1]; + tt.addNoneTerminalToCst(n2, r, e), this.setNodeLocationFromNode(n2.location, e.location); + }, t3.prototype.getBaseCstVisitorConstructor = function() { + if (K.isUndefined(this.baseCstVisitorConstructor)) { + var e = ta.createBaseSemanticVisitorConstructor(this.className, K.keys(this.gastProductionsCache)); + return this.baseCstVisitorConstructor = e, e; + } + return this.baseCstVisitorConstructor; + }, t3.prototype.getBaseCstVisitorConstructorWithDefaults = function() { + if (K.isUndefined(this.baseCstVisitorWithDefaultsConstructor)) { + var e = ta.createBaseVisitorConstructorWithDefaults(this.className, K.keys(this.gastProductionsCache), this.getBaseCstVisitorConstructor()); + return this.baseCstVisitorWithDefaultsConstructor = e, e; + } + return this.baseCstVisitorWithDefaultsConstructor; + }, t3.prototype.getLastExplicitRuleShortName = function() { + var e = this.RULE_STACK; + return e[e.length - 1]; + }, t3.prototype.getPreviousExplicitRuleShortName = function() { + var e = this.RULE_STACK; + return e[e.length - 2]; + }, t3.prototype.getLastExplicitRuleOccurrenceIndex = function() { + var e = this.RULE_OCCURRENCE_STACK; + return e[e.length - 1]; + }, t3; + }(); + $t2.TreeBuilder = qs; +}); +var ia = R2((Zt) => { + "use strict"; + Object.defineProperty(Zt, "__esModule", { value: true }); + Zt.LexerAdapter = void 0; + var na = ce(), js = function() { + function t3() { + } + return t3.prototype.initLexerAdapter = function() { + this.tokVector = [], this.tokVectorLength = 0, this.currIdx = -1; + }, Object.defineProperty(t3.prototype, "input", { get: function() { + return this.tokVector; + }, set: function(e) { + if (this.selfAnalysisDone !== true) throw Error("Missing invocation at the end of the Parser's constructor."); + this.reset(), this.tokVector = e, this.tokVectorLength = e.length; + }, enumerable: false, configurable: true }), t3.prototype.SKIP_TOKEN = function() { + return this.currIdx <= this.tokVector.length - 2 ? (this.consumeToken(), this.LA(1)) : na.END_OF_FILE; + }, t3.prototype.LA = function(e) { + var r = this.currIdx + e; + return r < 0 || this.tokVectorLength <= r ? na.END_OF_FILE : this.tokVector[r]; + }, t3.prototype.consumeToken = function() { + this.currIdx++; + }, t3.prototype.exportLexerState = function() { + return this.currIdx; + }, t3.prototype.importLexerState = function(e) { + this.currIdx = e; + }, t3.prototype.resetLexerState = function() { + this.currIdx = -1; + }, t3.prototype.moveToTerminatedState = function() { + this.currIdx = this.tokVector.length - 1; + }, t3.prototype.getLexerPosition = function() { + return this.exportLexerState(); + }, t3; + }(); + Zt.LexerAdapter = js; +}); +var oa = R2((Qt) => { + "use strict"; + Object.defineProperty(Qt, "__esModule", { value: true }); + Qt.RecognizerApi = void 0; + var aa = k(), Vs = et3(), Xr = ce(), Ks = mt(), zs = jr(), Hs = ne(), Ys = function() { + function t3() { + } + return t3.prototype.ACTION = function(e) { + return e.call(this); + }, t3.prototype.consume = function(e, r, n2) { + return this.consumeInternal(r, e, n2); + }, t3.prototype.subrule = function(e, r, n2) { + return this.subruleInternal(r, e, n2); + }, t3.prototype.option = function(e, r) { + return this.optionInternal(r, e); + }, t3.prototype.or = function(e, r) { + return this.orInternal(r, e); + }, t3.prototype.many = function(e, r) { + return this.manyInternal(e, r); + }, t3.prototype.atLeastOne = function(e, r) { + return this.atLeastOneInternal(e, r); + }, t3.prototype.CONSUME = function(e, r) { + return this.consumeInternal(e, 0, r); + }, t3.prototype.CONSUME1 = function(e, r) { + return this.consumeInternal(e, 1, r); + }, t3.prototype.CONSUME2 = function(e, r) { + return this.consumeInternal(e, 2, r); + }, t3.prototype.CONSUME3 = function(e, r) { + return this.consumeInternal(e, 3, r); + }, t3.prototype.CONSUME4 = function(e, r) { + return this.consumeInternal(e, 4, r); + }, t3.prototype.CONSUME5 = function(e, r) { + return this.consumeInternal(e, 5, r); + }, t3.prototype.CONSUME6 = function(e, r) { + return this.consumeInternal(e, 6, r); + }, t3.prototype.CONSUME7 = function(e, r) { + return this.consumeInternal(e, 7, r); + }, t3.prototype.CONSUME8 = function(e, r) { + return this.consumeInternal(e, 8, r); + }, t3.prototype.CONSUME9 = function(e, r) { + return this.consumeInternal(e, 9, r); + }, t3.prototype.SUBRULE = function(e, r) { + return this.subruleInternal(e, 0, r); + }, t3.prototype.SUBRULE1 = function(e, r) { + return this.subruleInternal(e, 1, r); + }, t3.prototype.SUBRULE2 = function(e, r) { + return this.subruleInternal(e, 2, r); + }, t3.prototype.SUBRULE3 = function(e, r) { + return this.subruleInternal(e, 3, r); + }, t3.prototype.SUBRULE4 = function(e, r) { + return this.subruleInternal(e, 4, r); + }, t3.prototype.SUBRULE5 = function(e, r) { + return this.subruleInternal(e, 5, r); + }, t3.prototype.SUBRULE6 = function(e, r) { + return this.subruleInternal(e, 6, r); + }, t3.prototype.SUBRULE7 = function(e, r) { + return this.subruleInternal(e, 7, r); + }, t3.prototype.SUBRULE8 = function(e, r) { + return this.subruleInternal(e, 8, r); + }, t3.prototype.SUBRULE9 = function(e, r) { + return this.subruleInternal(e, 9, r); + }, t3.prototype.OPTION = function(e) { + return this.optionInternal(e, 0); + }, t3.prototype.OPTION1 = function(e) { + return this.optionInternal(e, 1); + }, t3.prototype.OPTION2 = function(e) { + return this.optionInternal(e, 2); + }, t3.prototype.OPTION3 = function(e) { + return this.optionInternal(e, 3); + }, t3.prototype.OPTION4 = function(e) { + return this.optionInternal(e, 4); + }, t3.prototype.OPTION5 = function(e) { + return this.optionInternal(e, 5); + }, t3.prototype.OPTION6 = function(e) { + return this.optionInternal(e, 6); + }, t3.prototype.OPTION7 = function(e) { + return this.optionInternal(e, 7); + }, t3.prototype.OPTION8 = function(e) { + return this.optionInternal(e, 8); + }, t3.prototype.OPTION9 = function(e) { + return this.optionInternal(e, 9); + }, t3.prototype.OR = function(e) { + return this.orInternal(e, 0); + }, t3.prototype.OR1 = function(e) { + return this.orInternal(e, 1); + }, t3.prototype.OR2 = function(e) { + return this.orInternal(e, 2); + }, t3.prototype.OR3 = function(e) { + return this.orInternal(e, 3); + }, t3.prototype.OR4 = function(e) { + return this.orInternal(e, 4); + }, t3.prototype.OR5 = function(e) { + return this.orInternal(e, 5); + }, t3.prototype.OR6 = function(e) { + return this.orInternal(e, 6); + }, t3.prototype.OR7 = function(e) { + return this.orInternal(e, 7); + }, t3.prototype.OR8 = function(e) { + return this.orInternal(e, 8); + }, t3.prototype.OR9 = function(e) { + return this.orInternal(e, 9); + }, t3.prototype.MANY = function(e) { + this.manyInternal(0, e); + }, t3.prototype.MANY1 = function(e) { + this.manyInternal(1, e); + }, t3.prototype.MANY2 = function(e) { + this.manyInternal(2, e); + }, t3.prototype.MANY3 = function(e) { + this.manyInternal(3, e); + }, t3.prototype.MANY4 = function(e) { + this.manyInternal(4, e); + }, t3.prototype.MANY5 = function(e) { + this.manyInternal(5, e); + }, t3.prototype.MANY6 = function(e) { + this.manyInternal(6, e); + }, t3.prototype.MANY7 = function(e) { + this.manyInternal(7, e); + }, t3.prototype.MANY8 = function(e) { + this.manyInternal(8, e); + }, t3.prototype.MANY9 = function(e) { + this.manyInternal(9, e); + }, t3.prototype.MANY_SEP = function(e) { + this.manySepFirstInternal(0, e); + }, t3.prototype.MANY_SEP1 = function(e) { + this.manySepFirstInternal(1, e); + }, t3.prototype.MANY_SEP2 = function(e) { + this.manySepFirstInternal(2, e); + }, t3.prototype.MANY_SEP3 = function(e) { + this.manySepFirstInternal(3, e); + }, t3.prototype.MANY_SEP4 = function(e) { + this.manySepFirstInternal(4, e); + }, t3.prototype.MANY_SEP5 = function(e) { + this.manySepFirstInternal(5, e); + }, t3.prototype.MANY_SEP6 = function(e) { + this.manySepFirstInternal(6, e); + }, t3.prototype.MANY_SEP7 = function(e) { + this.manySepFirstInternal(7, e); + }, t3.prototype.MANY_SEP8 = function(e) { + this.manySepFirstInternal(8, e); + }, t3.prototype.MANY_SEP9 = function(e) { + this.manySepFirstInternal(9, e); + }, t3.prototype.AT_LEAST_ONE = function(e) { + this.atLeastOneInternal(0, e); + }, t3.prototype.AT_LEAST_ONE1 = function(e) { + return this.atLeastOneInternal(1, e); + }, t3.prototype.AT_LEAST_ONE2 = function(e) { + this.atLeastOneInternal(2, e); + }, t3.prototype.AT_LEAST_ONE3 = function(e) { + this.atLeastOneInternal(3, e); + }, t3.prototype.AT_LEAST_ONE4 = function(e) { + this.atLeastOneInternal(4, e); + }, t3.prototype.AT_LEAST_ONE5 = function(e) { + this.atLeastOneInternal(5, e); + }, t3.prototype.AT_LEAST_ONE6 = function(e) { + this.atLeastOneInternal(6, e); + }, t3.prototype.AT_LEAST_ONE7 = function(e) { + this.atLeastOneInternal(7, e); + }, t3.prototype.AT_LEAST_ONE8 = function(e) { + this.atLeastOneInternal(8, e); + }, t3.prototype.AT_LEAST_ONE9 = function(e) { + this.atLeastOneInternal(9, e); + }, t3.prototype.AT_LEAST_ONE_SEP = function(e) { + this.atLeastOneSepFirstInternal(0, e); + }, t3.prototype.AT_LEAST_ONE_SEP1 = function(e) { + this.atLeastOneSepFirstInternal(1, e); + }, t3.prototype.AT_LEAST_ONE_SEP2 = function(e) { + this.atLeastOneSepFirstInternal(2, e); + }, t3.prototype.AT_LEAST_ONE_SEP3 = function(e) { + this.atLeastOneSepFirstInternal(3, e); + }, t3.prototype.AT_LEAST_ONE_SEP4 = function(e) { + this.atLeastOneSepFirstInternal(4, e); + }, t3.prototype.AT_LEAST_ONE_SEP5 = function(e) { + this.atLeastOneSepFirstInternal(5, e); + }, t3.prototype.AT_LEAST_ONE_SEP6 = function(e) { + this.atLeastOneSepFirstInternal(6, e); + }, t3.prototype.AT_LEAST_ONE_SEP7 = function(e) { + this.atLeastOneSepFirstInternal(7, e); + }, t3.prototype.AT_LEAST_ONE_SEP8 = function(e) { + this.atLeastOneSepFirstInternal(8, e); + }, t3.prototype.AT_LEAST_ONE_SEP9 = function(e) { + this.atLeastOneSepFirstInternal(9, e); + }, t3.prototype.RULE = function(e, r, n2) { + if (n2 === void 0 && (n2 = Xr.DEFAULT_RULE_CONFIG), aa.contains(this.definedRulesNames, e)) { + var i = Ks.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({ topLevelRule: e, grammarName: this.className }), a2 = { message: i, type: Xr.ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: e }; + this.definitionErrors.push(a2); + } + this.definedRulesNames.push(e); + var o = this.defineRule(e, r, n2); + return this[e] = o, o; + }, t3.prototype.OVERRIDE_RULE = function(e, r, n2) { + n2 === void 0 && (n2 = Xr.DEFAULT_RULE_CONFIG); + var i = []; + i = i.concat(zs.validateRuleIsOverridden(e, this.definedRulesNames, this.className)), this.definitionErrors = this.definitionErrors.concat(i); + var a2 = this.defineRule(e, r, n2); + return this[e] = a2, a2; + }, t3.prototype.BACKTRACK = function(e, r) { + return function() { + this.isBackTrackingStack.push(1); + var n2 = this.saveRecogState(); + try { + return e.apply(this, r), true; + } catch (i) { + if (Vs.isRecognitionException(i)) return false; + throw i; + } finally { + this.reloadRecogState(n2), this.isBackTrackingStack.pop(); + } + }; + }, t3.prototype.getGAstProductions = function() { + return this.gastProductionsCache; + }, t3.prototype.getSerializedGastProductions = function() { + return Hs.serializeGrammar(aa.values(this.gastProductionsCache)); + }, t3; + }(); + Qt.RecognizerApi = Ys; +}); +var la = R2((Jt) => { + "use strict"; + Object.defineProperty(Jt, "__esModule", { value: true }); + Jt.RecognizerEngine = void 0; + var q2 = k(), le = Yt(), er = et3(), sa = yt2(), rt = Tt(), ua = ce(), Xs = zr(), ca = Ue(), Rt = Xe(), $s = Hr(), Zs = function() { + function t3() { + } + return t3.prototype.initRecognizerEngine = function(e, r) { + if (this.className = $s.classNameFromInstance(this), this.shortRuleNameToFull = {}, this.fullRuleNameToShort = {}, this.ruleShortNameIdx = 256, this.tokenMatcher = Rt.tokenStructuredMatcherNoCategories, this.definedRulesNames = [], this.tokensMap = {}, this.isBackTrackingStack = [], this.RULE_STACK = [], this.RULE_OCCURRENCE_STACK = [], this.gastProductionsCache = {}, q2.has(r, "serializedGrammar")) throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`); + if (q2.isArray(e)) { + if (q2.isEmpty(e)) throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`); + if (typeof e[0].startOffset == "number") throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`); + } + if (q2.isArray(e)) this.tokensMap = q2.reduce(e, function(o, s) { + return o[s.name] = s, o; + }, {}); + else if (q2.has(e, "modes") && q2.every(q2.flatten(q2.values(e.modes)), Rt.isTokenType)) { + var n2 = q2.flatten(q2.values(e.modes)), i = q2.uniq(n2); + this.tokensMap = q2.reduce(i, function(o, s) { + return o[s.name] = s, o; + }, {}); + } else if (q2.isObject(e)) this.tokensMap = q2.cloneObj(e); + else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition"); + this.tokensMap.EOF = ca.EOF; + var a2 = q2.every(q2.values(e), function(o) { + return q2.isEmpty(o.categoryMatches); + }); + this.tokenMatcher = a2 ? Rt.tokenStructuredMatcherNoCategories : Rt.tokenStructuredMatcher, Rt.augmentTokenTypes(q2.values(this.tokensMap)); + }, t3.prototype.defineRule = function(e, r, n2) { + if (this.selfAnalysisDone) throw Error("Grammar rule <" + e + `> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`); + var i = q2.has(n2, "resyncEnabled") ? n2.resyncEnabled : ua.DEFAULT_RULE_CONFIG.resyncEnabled, a2 = q2.has(n2, "recoveryValueFunc") ? n2.recoveryValueFunc : ua.DEFAULT_RULE_CONFIG.recoveryValueFunc, o = this.ruleShortNameIdx << le.BITS_FOR_METHOD_TYPE + le.BITS_FOR_OCCURRENCE_IDX; + this.ruleShortNameIdx++, this.shortRuleNameToFull[o] = e, this.fullRuleNameToShort[e] = o; + function s(p2) { + try { + if (this.outputCst === true) { + r.apply(this, p2); + var l2 = this.CST_STACK[this.CST_STACK.length - 1]; + return this.cstPostRule(l2), l2; + } else return r.apply(this, p2); + } catch (m) { + return this.invokeRuleCatch(m, i, a2); + } finally { + this.ruleFinallyStateUpdate(); + } + } + var c2 = function(p2, l2) { + return p2 === void 0 && (p2 = 0), this.ruleInvocationStateUpdate(o, e, p2), s.call(this, l2); + }, f = "ruleName"; + return c2[f] = e, c2.originalGrammarAction = r, c2; + }, t3.prototype.invokeRuleCatch = function(e, r, n2) { + var i = this.RULE_STACK.length === 1, a2 = r && !this.isBackTracking() && this.recoveryEnabled; + if (er.isRecognitionException(e)) { + var o = e; + if (a2) { + var s = this.findReSyncTokenType(); + if (this.isInCurrentRuleReSyncSet(s)) if (o.resyncedTokens = this.reSyncTo(s), this.outputCst) { + var c2 = this.CST_STACK[this.CST_STACK.length - 1]; + return c2.recoveredNode = true, c2; + } else return n2(); + else { + if (this.outputCst) { + var c2 = this.CST_STACK[this.CST_STACK.length - 1]; + c2.recoveredNode = true, o.partialCstResult = c2; + } + throw o; + } + } else { + if (i) return this.moveToTerminatedState(), n2(); + throw o; + } + } else throw e; + }, t3.prototype.optionInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.OPTION_IDX, r); + return this.optionInternalLogic(e, r, n2); + }, t3.prototype.optionInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (e.DEF !== void 0) { + if (o = e.DEF, s = e.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = e; + if (a2.call(this) === true) return o.call(this); + }, t3.prototype.atLeastOneInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_IDX, e); + return this.atLeastOneInternalLogic(e, r, n2); + }, t3.prototype.atLeastOneInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (r.DEF !== void 0) { + if (o = r.DEF, s = r.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = r; + if (a2.call(this) === true) for (var f = this.doSingleRepetition(o); a2.call(this) === true && f === true; ) f = this.doSingleRepetition(o); + else throw this.raiseEarlyExitException(e, sa.PROD_TYPE.REPETITION_MANDATORY, r.ERR_MSG); + this.attemptInRepetitionRecovery(this.atLeastOneInternal, [e, r], a2, le.AT_LEAST_ONE_IDX, e, rt.NextTerminalAfterAtLeastOneWalker); + }, t3.prototype.atLeastOneSepFirstInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_SEP_IDX, e); + this.atLeastOneSepFirstInternalLogic(e, r, n2); + }, t3.prototype.atLeastOneSepFirstInternalLogic = function(e, r, n2) { + var i = this, a2 = r.DEF, o = r.SEP, s = this.getLaFuncFromCache(n2); + if (s.call(this) === true) { + a2.call(this); + for (var c2 = function() { + return i.tokenMatcher(i.LA(1), o); + }; this.tokenMatcher(this.LA(1), o) === true; ) this.CONSUME(o), a2.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, o, c2, a2, rt.NextTerminalAfterAtLeastOneSepWalker], c2, le.AT_LEAST_ONE_SEP_IDX, e, rt.NextTerminalAfterAtLeastOneSepWalker); + } else throw this.raiseEarlyExitException(e, sa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, r.ERR_MSG); + }, t3.prototype.manyInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.MANY_IDX, e); + return this.manyInternalLogic(e, r, n2); + }, t3.prototype.manyInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (r.DEF !== void 0) { + if (o = r.DEF, s = r.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = r; + for (var f = true; a2.call(this) === true && f === true; ) f = this.doSingleRepetition(o); + this.attemptInRepetitionRecovery(this.manyInternal, [e, r], a2, le.MANY_IDX, e, rt.NextTerminalAfterManyWalker, f); + }, t3.prototype.manySepFirstInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.MANY_SEP_IDX, e); + this.manySepFirstInternalLogic(e, r, n2); + }, t3.prototype.manySepFirstInternalLogic = function(e, r, n2) { + var i = this, a2 = r.DEF, o = r.SEP, s = this.getLaFuncFromCache(n2); + if (s.call(this) === true) { + a2.call(this); + for (var c2 = function() { + return i.tokenMatcher(i.LA(1), o); + }; this.tokenMatcher(this.LA(1), o) === true; ) this.CONSUME(o), a2.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, o, c2, a2, rt.NextTerminalAfterManySepWalker], c2, le.MANY_SEP_IDX, e, rt.NextTerminalAfterManySepWalker); + } + }, t3.prototype.repetitionSepSecondInternal = function(e, r, n2, i, a2) { + for (; n2(); ) this.CONSUME(r), i.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, r, n2, i, a2], n2, le.AT_LEAST_ONE_SEP_IDX, e, a2); + }, t3.prototype.doSingleRepetition = function(e) { + var r = this.getLexerPosition(); + e.call(this); + var n2 = this.getLexerPosition(); + return n2 > r; + }, t3.prototype.orInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.OR_IDX, r), i = q2.isArray(e) ? e : e.DEF, a2 = this.getLaFuncFromCache(n2), o = a2.call(this, i); + if (o !== void 0) { + var s = i[o]; + return s.ALT.call(this); + } + this.raiseNoAltException(r, e.ERR_MSG); + }, t3.prototype.ruleFinallyStateUpdate = function() { + if (this.RULE_STACK.pop(), this.RULE_OCCURRENCE_STACK.pop(), this.cstFinallyStateUpdate(), this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) { + var e = this.LA(1), r = this.errorMessageProvider.buildNotAllInputParsedMessage({ firstRedundant: e, ruleName: this.getCurrRuleFullName() }); + this.SAVE_ERROR(new er.NotAllInputParsedException(r, e)); + } + }, t3.prototype.subruleInternal = function(e, r, n2) { + var i; + try { + var a2 = n2 !== void 0 ? n2.ARGS : void 0; + return i = e.call(this, r, a2), this.cstPostNonTerminal(i, n2 !== void 0 && n2.LABEL !== void 0 ? n2.LABEL : e.ruleName), i; + } catch (o) { + this.subruleInternalError(o, n2, e.ruleName); + } + }, t3.prototype.subruleInternalError = function(e, r, n2) { + throw er.isRecognitionException(e) && e.partialCstResult !== void 0 && (this.cstPostNonTerminal(e.partialCstResult, r !== void 0 && r.LABEL !== void 0 ? r.LABEL : n2), delete e.partialCstResult), e; + }, t3.prototype.consumeInternal = function(e, r, n2) { + var i; + try { + var a2 = this.LA(1); + this.tokenMatcher(a2, e) === true ? (this.consumeToken(), i = a2) : this.consumeInternalError(e, a2, n2); + } catch (o) { + i = this.consumeInternalRecovery(e, r, o); + } + return this.cstPostTerminal(n2 !== void 0 && n2.LABEL !== void 0 ? n2.LABEL : e.name, i), i; + }, t3.prototype.consumeInternalError = function(e, r, n2) { + var i, a2 = this.LA(0); + throw n2 !== void 0 && n2.ERR_MSG ? i = n2.ERR_MSG : i = this.errorMessageProvider.buildMismatchTokenMessage({ expected: e, actual: r, previous: a2, ruleName: this.getCurrRuleFullName() }), this.SAVE_ERROR(new er.MismatchedTokenException(i, r, a2)); + }, t3.prototype.consumeInternalRecovery = function(e, r, n2) { + if (this.recoveryEnabled && n2.name === "MismatchedTokenException" && !this.isBackTracking()) { + var i = this.getFollowsForInRuleRecovery(e, r); + try { + return this.tryInRuleRecovery(e, i); + } catch (a2) { + throw a2.name === Xs.IN_RULE_RECOVERY_EXCEPTION ? n2 : a2; + } + } else throw n2; + }, t3.prototype.saveRecogState = function() { + var e = this.errors, r = q2.cloneArr(this.RULE_STACK); + return { errors: e, lexerState: this.exportLexerState(), RULE_STACK: r, CST_STACK: this.CST_STACK }; + }, t3.prototype.reloadRecogState = function(e) { + this.errors = e.errors, this.importLexerState(e.lexerState), this.RULE_STACK = e.RULE_STACK; + }, t3.prototype.ruleInvocationStateUpdate = function(e, r, n2) { + this.RULE_OCCURRENCE_STACK.push(n2), this.RULE_STACK.push(e), this.cstInvocationStateUpdate(r, e); + }, t3.prototype.isBackTracking = function() { + return this.isBackTrackingStack.length !== 0; + }, t3.prototype.getCurrRuleFullName = function() { + var e = this.getLastExplicitRuleShortName(); + return this.shortRuleNameToFull[e]; + }, t3.prototype.shortRuleNameToFullName = function(e) { + return this.shortRuleNameToFull[e]; + }, t3.prototype.isAtEndOfInput = function() { + return this.tokenMatcher(this.LA(1), ca.EOF); + }, t3.prototype.reset = function() { + this.resetLexerState(), this.isBackTrackingStack = [], this.errors = [], this.RULE_STACK = [], this.CST_STACK = [], this.RULE_OCCURRENCE_STACK = []; + }, t3; + }(); + Jt.RecognizerEngine = Zs; +}); +var pa = R2((tr) => { + "use strict"; + Object.defineProperty(tr, "__esModule", { value: true }); + tr.ErrorHandler = void 0; + var $r = et3(), Zr = k(), fa = yt2(), Qs = ce(), Js = function() { + function t3() { + } + return t3.prototype.initErrorHandler = function(e) { + this._errors = [], this.errorMessageProvider = Zr.has(e, "errorMessageProvider") ? e.errorMessageProvider : Qs.DEFAULT_PARSER_CONFIG.errorMessageProvider; + }, t3.prototype.SAVE_ERROR = function(e) { + if ($r.isRecognitionException(e)) return e.context = { ruleStack: this.getHumanReadableRuleStack(), ruleOccurrenceStack: Zr.cloneArr(this.RULE_OCCURRENCE_STACK) }, this._errors.push(e), e; + throw Error("Trying to save an Error which is not a RecognitionException"); + }, Object.defineProperty(t3.prototype, "errors", { get: function() { + return Zr.cloneArr(this._errors); + }, set: function(e) { + this._errors = e; + }, enumerable: false, configurable: true }), t3.prototype.raiseEarlyExitException = function(e, r, n2) { + for (var i = this.getCurrRuleFullName(), a2 = this.getGAstProductions()[i], o = fa.getLookaheadPathsForOptionalProd(e, a2, r, this.maxLookahead), s = o[0], c2 = [], f = 1; f <= this.maxLookahead; f++) c2.push(this.LA(f)); + var p2 = this.errorMessageProvider.buildEarlyExitMessage({ expectedIterationPaths: s, actual: c2, previous: this.LA(0), customUserDescription: n2, ruleName: i }); + throw this.SAVE_ERROR(new $r.EarlyExitException(p2, this.LA(1), this.LA(0))); + }, t3.prototype.raiseNoAltException = function(e, r) { + for (var n2 = this.getCurrRuleFullName(), i = this.getGAstProductions()[n2], a2 = fa.getLookaheadPathsForOr(e, i, this.maxLookahead), o = [], s = 1; s <= this.maxLookahead; s++) o.push(this.LA(s)); + var c2 = this.LA(0), f = this.errorMessageProvider.buildNoViableAltMessage({ expectedPathsPerAlt: a2, actual: o, previous: c2, customUserDescription: r, ruleName: this.getCurrRuleFullName() }); + throw this.SAVE_ERROR(new $r.NoViableAltException(f, this.LA(1), c2)); + }, t3; + }(); + tr.ErrorHandler = Js; +}); +var va = R2((rr) => { + "use strict"; + Object.defineProperty(rr, "__esModule", { value: true }); + rr.ContentAssist = void 0; + var ha = Tt(), da = k(), eu = function() { + function t3() { + } + return t3.prototype.initContentAssist = function() { + }, t3.prototype.computeContentAssist = function(e, r) { + var n2 = this.gastProductionsCache[e]; + if (da.isUndefined(n2)) throw Error("Rule ->" + e + "<- does not exist in this grammar."); + return ha.nextPossibleTokensAfter([n2], r, this.tokenMatcher, this.maxLookahead); + }, t3.prototype.getNextPossibleTokenTypes = function(e) { + var r = da.first(e.ruleStack), n2 = this.getGAstProductions(), i = n2[r], a2 = new ha.NextAfterTokenWalker(i, e).startWalking(); + return a2; + }, t3; + }(); + rr.ContentAssist = eu; +}); +var Ra = R2((nr) => { + "use strict"; + Object.defineProperty(nr, "__esModule", { value: true }); + nr.GastRecorder = void 0; + var oe = k(), Pe = ne(), tu = ft(), ma = Xe(), Ea = Ue(), ru = ce(), nu = Yt(), ir = { description: "This Object indicates the Parser is during Recording Phase" }; + Object.freeze(ir); + var Ta = true, ya = Math.pow(2, nu.BITS_FOR_OCCURRENCE_IDX) - 1, _a3 = Ea.createToken({ name: "RECORDING_PHASE_TOKEN", pattern: tu.Lexer.NA }); + ma.augmentTokenTypes([_a3]); + var ga = Ea.createTokenInstance(_a3, `This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`, -1, -1, -1, -1, -1, -1); + Object.freeze(ga); + var iu = { name: `This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`, children: {} }, ou = function() { + function t3() { + } + return t3.prototype.initGastRecorder = function(e) { + this.recordingProdStack = [], this.RECORDING_PHASE = false; + }, t3.prototype.enableRecording = function() { + var e = this; + this.RECORDING_PHASE = true, this.TRACE_INIT("Enable Recording", function() { + for (var r = function(i) { + var a2 = i > 0 ? i : ""; + e["CONSUME" + a2] = function(o, s) { + return this.consumeInternalRecord(o, i, s); + }, e["SUBRULE" + a2] = function(o, s) { + return this.subruleInternalRecord(o, i, s); + }, e["OPTION" + a2] = function(o) { + return this.optionInternalRecord(o, i); + }, e["OR" + a2] = function(o) { + return this.orInternalRecord(o, i); + }, e["MANY" + a2] = function(o) { + this.manyInternalRecord(i, o); + }, e["MANY_SEP" + a2] = function(o) { + this.manySepFirstInternalRecord(i, o); + }, e["AT_LEAST_ONE" + a2] = function(o) { + this.atLeastOneInternalRecord(i, o); + }, e["AT_LEAST_ONE_SEP" + a2] = function(o) { + this.atLeastOneSepFirstInternalRecord(i, o); + }; + }, n2 = 0; n2 < 10; n2++) r(n2); + e.consume = function(i, a2, o) { + return this.consumeInternalRecord(a2, i, o); + }, e.subrule = function(i, a2, o) { + return this.subruleInternalRecord(a2, i, o); + }, e.option = function(i, a2) { + return this.optionInternalRecord(a2, i); + }, e.or = function(i, a2) { + return this.orInternalRecord(a2, i); + }, e.many = function(i, a2) { + this.manyInternalRecord(i, a2); + }, e.atLeastOne = function(i, a2) { + this.atLeastOneInternalRecord(i, a2); + }, e.ACTION = e.ACTION_RECORD, e.BACKTRACK = e.BACKTRACK_RECORD, e.LA = e.LA_RECORD; + }); + }, t3.prototype.disableRecording = function() { + var e = this; + this.RECORDING_PHASE = false, this.TRACE_INIT("Deleting Recording methods", function() { + for (var r = 0; r < 10; r++) { + var n2 = r > 0 ? r : ""; + delete e["CONSUME" + n2], delete e["SUBRULE" + n2], delete e["OPTION" + n2], delete e["OR" + n2], delete e["MANY" + n2], delete e["MANY_SEP" + n2], delete e["AT_LEAST_ONE" + n2], delete e["AT_LEAST_ONE_SEP" + n2]; + } + delete e.consume, delete e.subrule, delete e.option, delete e.or, delete e.many, delete e.atLeastOne, delete e.ACTION, delete e.BACKTRACK, delete e.LA; + }); + }, t3.prototype.ACTION_RECORD = function(e) { + }, t3.prototype.BACKTRACK_RECORD = function(e, r) { + return function() { + return true; + }; + }, t3.prototype.LA_RECORD = function(e) { + return ru.END_OF_FILE; + }, t3.prototype.topLevelRuleRecord = function(e, r) { + try { + var n2 = new Pe.Rule({ definition: [], name: e }); + return n2.name = e, this.recordingProdStack.push(n2), r.call(this), this.recordingProdStack.pop(), n2; + } catch (i) { + if (i.KNOWN_RECORDER_ERROR !== true) try { + i.message = i.message + ` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`; + } catch (a2) { + throw i; + } + throw i; + } + }, t3.prototype.optionInternalRecord = function(e, r) { + return Ot2.call(this, Pe.Option, e, r); + }, t3.prototype.atLeastOneInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionMandatory, r, e); + }, t3.prototype.atLeastOneSepFirstInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionMandatoryWithSeparator, r, e, Ta); + }, t3.prototype.manyInternalRecord = function(e, r) { + Ot2.call(this, Pe.Repetition, r, e); + }, t3.prototype.manySepFirstInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionWithSeparator, r, e, Ta); + }, t3.prototype.orInternalRecord = function(e, r) { + return au.call(this, e, r); + }, t3.prototype.subruleInternalRecord = function(e, r, n2) { + if (ar(r), !e || oe.has(e, "ruleName") === false) { + var i = new Error(" argument is invalid" + (" expecting a Parser method reference but got: <" + JSON.stringify(e) + ">") + (` + inside top level rule: <` + this.recordingProdStack[0].name + ">")); + throw i.KNOWN_RECORDER_ERROR = true, i; + } + var a2 = oe.peek(this.recordingProdStack), o = e.ruleName, s = new Pe.NonTerminal({ idx: r, nonTerminalName: o, referencedRule: void 0 }); + return a2.definition.push(s), this.outputCst ? iu : ir; + }, t3.prototype.consumeInternalRecord = function(e, r, n2) { + if (ar(r), !ma.hasShortKeyProperty(e)) { + var i = new Error(" argument is invalid" + (" expecting a TokenType reference but got: <" + JSON.stringify(e) + ">") + (` + inside top level rule: <` + this.recordingProdStack[0].name + ">")); + throw i.KNOWN_RECORDER_ERROR = true, i; + } + var a2 = oe.peek(this.recordingProdStack), o = new Pe.Terminal({ idx: r, terminalType: e }); + return a2.definition.push(o), ga; + }, t3; + }(); + nr.GastRecorder = ou; + function Ot2(t3, e, r, n2) { + n2 === void 0 && (n2 = false), ar(r); + var i = oe.peek(this.recordingProdStack), a2 = oe.isFunction(e) ? e : e.DEF, o = new t3({ definition: [], idx: r }); + return n2 && (o.separator = e.SEP), oe.has(e, "MAX_LOOKAHEAD") && (o.maxLookahead = e.MAX_LOOKAHEAD), this.recordingProdStack.push(o), a2.call(this), i.definition.push(o), this.recordingProdStack.pop(), ir; + } + function au(t3, e) { + var r = this; + ar(e); + var n2 = oe.peek(this.recordingProdStack), i = oe.isArray(t3) === false, a2 = i === false ? t3 : t3.DEF, o = new Pe.Alternation({ definition: [], idx: e, ignoreAmbiguities: i && t3.IGNORE_AMBIGUITIES === true }); + oe.has(t3, "MAX_LOOKAHEAD") && (o.maxLookahead = t3.MAX_LOOKAHEAD); + var s = oe.some(a2, function(c2) { + return oe.isFunction(c2.GATE); + }); + return o.hasPredicates = s, n2.definition.push(o), oe.forEach(a2, function(c2) { + var f = new Pe.Alternative({ definition: [] }); + o.definition.push(f), oe.has(c2, "IGNORE_AMBIGUITIES") ? f.ignoreAmbiguities = c2.IGNORE_AMBIGUITIES : oe.has(c2, "GATE") && (f.ignoreAmbiguities = true), r.recordingProdStack.push(f), c2.ALT.call(r), r.recordingProdStack.pop(); + }), ir; + } + function Aa(t3) { + return t3 === 0 ? "" : "" + t3; + } + function ar(t3) { + if (t3 < 0 || t3 > ya) { + var e = new Error("Invalid DSL Method idx value: <" + t3 + `> + ` + ("Idx value must be a none negative value smaller than " + (ya + 1))); + throw e.KNOWN_RECORDER_ERROR = true, e; + } + } +}); +var Na = R2((or) => { + "use strict"; + Object.defineProperty(or, "__esModule", { value: true }); + or.PerformanceTracer = void 0; + var Oa = k(), su = ce(), uu = function() { + function t3() { + } + return t3.prototype.initPerformanceTracer = function(e) { + if (Oa.has(e, "traceInitPerf")) { + var r = e.traceInitPerf, n2 = typeof r == "number"; + this.traceInitMaxIdent = n2 ? r : Infinity, this.traceInitPerf = n2 ? r > 0 : r; + } else this.traceInitMaxIdent = 0, this.traceInitPerf = su.DEFAULT_PARSER_CONFIG.traceInitPerf; + this.traceInitIndent = -1; + }, t3.prototype.TRACE_INIT = function(e, r) { + if (this.traceInitPerf === true) { + this.traceInitIndent++; + var n2 = new Array(this.traceInitIndent + 1).join(" "); + this.traceInitIndent < this.traceInitMaxIdent && console.log(n2 + "--> <" + e + ">"); + var i = Oa.timer(r), a2 = i.time, o = i.value, s = a2 > 10 ? console.warn : console.log; + return this.traceInitIndent < this.traceInitMaxIdent && s(n2 + "<-- <" + e + "> time: " + a2 + "ms"), this.traceInitIndent--, o; + } else return r(); + }, t3; + }(); + or.PerformanceTracer = uu; +}); +var Ia = R2((sr) => { + "use strict"; + Object.defineProperty(sr, "__esModule", { value: true }); + sr.applyMixins = void 0; + function cu(t3, e) { + e.forEach(function(r) { + var n2 = r.prototype; + Object.getOwnPropertyNames(n2).forEach(function(i) { + if (i !== "constructor") { + var a2 = Object.getOwnPropertyDescriptor(n2, i); + a2 && (a2.get || a2.set) ? Object.defineProperty(t3.prototype, i, a2) : t3.prototype[i] = r.prototype[i]; + } + }); + }); + } + sr.applyMixins = cu; +}); +var ce = R2((U) => { + "use strict"; + var ka = U && U.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(U, "__esModule", { value: true }); + U.EmbeddedActionsParser = U.CstParser = U.Parser = U.EMPTY_ALT = U.ParserDefinitionErrorType = U.DEFAULT_RULE_CONFIG = U.DEFAULT_PARSER_CONFIG = U.END_OF_FILE = void 0; + var ee = k(), lu = pi(), Pa = Ue(), Sa = mt(), xa = Ui(), fu = zr(), pu = zi2(), hu = ra(), du = ia(), vu = oa(), mu = la(), Eu = pa(), Tu = va(), yu = Ra(), _u = Na(), gu = Ia(); + U.END_OF_FILE = Pa.createTokenInstance(Pa.EOF, "", NaN, NaN, NaN, NaN, NaN, NaN); + Object.freeze(U.END_OF_FILE); + U.DEFAULT_PARSER_CONFIG = Object.freeze({ recoveryEnabled: false, maxLookahead: 3, dynamicTokensEnabled: false, outputCst: true, errorMessageProvider: Sa.defaultParserErrorProvider, nodeLocationTracking: "none", traceInitPerf: false, skipValidations: false }); + U.DEFAULT_RULE_CONFIG = Object.freeze({ recoveryValueFunc: function() { + }, resyncEnabled: true }); + var Au; + (function(t3) { + t3[t3.INVALID_RULE_NAME = 0] = "INVALID_RULE_NAME", t3[t3.DUPLICATE_RULE_NAME = 1] = "DUPLICATE_RULE_NAME", t3[t3.INVALID_RULE_OVERRIDE = 2] = "INVALID_RULE_OVERRIDE", t3[t3.DUPLICATE_PRODUCTIONS = 3] = "DUPLICATE_PRODUCTIONS", t3[t3.UNRESOLVED_SUBRULE_REF = 4] = "UNRESOLVED_SUBRULE_REF", t3[t3.LEFT_RECURSION = 5] = "LEFT_RECURSION", t3[t3.NONE_LAST_EMPTY_ALT = 6] = "NONE_LAST_EMPTY_ALT", t3[t3.AMBIGUOUS_ALTS = 7] = "AMBIGUOUS_ALTS", t3[t3.CONFLICT_TOKENS_RULES_NAMESPACE = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE", t3[t3.INVALID_TOKEN_NAME = 9] = "INVALID_TOKEN_NAME", t3[t3.NO_NON_EMPTY_LOOKAHEAD = 10] = "NO_NON_EMPTY_LOOKAHEAD", t3[t3.AMBIGUOUS_PREFIX_ALTS = 11] = "AMBIGUOUS_PREFIX_ALTS", t3[t3.TOO_MANY_ALTS = 12] = "TOO_MANY_ALTS"; + })(Au = U.ParserDefinitionErrorType || (U.ParserDefinitionErrorType = {})); + function Ru(t3) { + return t3 === void 0 && (t3 = void 0), function() { + return t3; + }; + } + U.EMPTY_ALT = Ru; + var ur = function() { + function t3(e, r) { + this.definitionErrors = [], this.selfAnalysisDone = false; + var n2 = this; + if (n2.initErrorHandler(r), n2.initLexerAdapter(), n2.initLooksAhead(r), n2.initRecognizerEngine(e, r), n2.initRecoverable(r), n2.initTreeBuilder(r), n2.initContentAssist(), n2.initGastRecorder(r), n2.initPerformanceTracer(r), ee.has(r, "ignoredIssues")) throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`); + this.skipValidations = ee.has(r, "skipValidations") ? r.skipValidations : U.DEFAULT_PARSER_CONFIG.skipValidations; + } + return t3.performSelfAnalysis = function(e) { + throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead."); + }, t3.prototype.performSelfAnalysis = function() { + var e = this; + this.TRACE_INIT("performSelfAnalysis", function() { + var r; + e.selfAnalysisDone = true; + var n2 = e.className; + e.TRACE_INIT("toFastProps", function() { + ee.toFastProperties(e); + }), e.TRACE_INIT("Grammar Recording", function() { + try { + e.enableRecording(), ee.forEach(e.definedRulesNames, function(a2) { + var o = e[a2], s = o.originalGrammarAction, c2 = void 0; + e.TRACE_INIT(a2 + " Rule", function() { + c2 = e.topLevelRuleRecord(a2, s); + }), e.gastProductionsCache[a2] = c2; + }); + } finally { + e.disableRecording(); + } + }); + var i = []; + if (e.TRACE_INIT("Grammar Resolving", function() { + i = xa.resolveGrammar({ rules: ee.values(e.gastProductionsCache) }), e.definitionErrors = e.definitionErrors.concat(i); + }), e.TRACE_INIT("Grammar Validations", function() { + if (ee.isEmpty(i) && e.skipValidations === false) { + var a2 = xa.validateGrammar({ rules: ee.values(e.gastProductionsCache), maxLookahead: e.maxLookahead, tokenTypes: ee.values(e.tokensMap), errMsgProvider: Sa.defaultGrammarValidatorErrorProvider, grammarName: n2 }); + e.definitionErrors = e.definitionErrors.concat(a2); + } + }), ee.isEmpty(e.definitionErrors) && (e.recoveryEnabled && e.TRACE_INIT("computeAllProdsFollows", function() { + var a2 = lu.computeAllProdsFollows(ee.values(e.gastProductionsCache)); + e.resyncFollows = a2; + }), e.TRACE_INIT("ComputeLookaheadFunctions", function() { + e.preComputeLookaheadFunctions(ee.values(e.gastProductionsCache)); + })), !t3.DEFER_DEFINITION_ERRORS_HANDLING && !ee.isEmpty(e.definitionErrors)) throw r = ee.map(e.definitionErrors, function(a2) { + return a2.message; + }), new Error(`Parser Definition Errors detected: + ` + r.join(` +------------------------------- +`)); + }); + }, t3.DEFER_DEFINITION_ERRORS_HANDLING = false, t3; + }(); + U.Parser = ur; + gu.applyMixins(ur, [fu.Recoverable, pu.LooksAhead, hu.TreeBuilder, du.LexerAdapter, mu.RecognizerEngine, vu.RecognizerApi, Eu.ErrorHandler, Tu.ContentAssist, yu.GastRecorder, _u.PerformanceTracer]); + var Ou = function(t3) { + ka(e, t3); + function e(r, n2) { + n2 === void 0 && (n2 = U.DEFAULT_PARSER_CONFIG); + var i = this, a2 = ee.cloneObj(n2); + return a2.outputCst = true, i = t3.call(this, r, a2) || this, i; + } + return e; + }(ur); + U.CstParser = Ou; + var Nu = function(t3) { + ka(e, t3); + function e(r, n2) { + n2 === void 0 && (n2 = U.DEFAULT_PARSER_CONFIG); + var i = this, a2 = ee.cloneObj(n2); + return a2.outputCst = false, i = t3.call(this, r, a2) || this, i; + } + return e; + }(ur); + U.EmbeddedActionsParser = Nu; +}); +var La = R2((cr) => { + "use strict"; + Object.defineProperty(cr, "__esModule", { value: true }); + cr.createSyntaxDiagramsCode = void 0; + var Ca = Er(); + function Iu(t3, e) { + var r = e === void 0 ? {} : e, n2 = r.resourceBase, i = n2 === void 0 ? "https://unpkg.com/chevrotain@" + Ca.VERSION + "/diagrams/" : n2, a2 = r.css, o = a2 === void 0 ? "https://unpkg.com/chevrotain@" + Ca.VERSION + "/diagrams/diagrams.css" : a2, s = ` + + + + + +`, c2 = ` + +`, f = ` +\n\n\n\n`,p=`\n
\n`,l=`\n\n`,m=`\n\n`;return s+c+f+p+l+m}cr.createSyntaxDiagramsCode=Iu});var Fa=R(E=>{\"use strict\";Object.defineProperty(E,\"__esModule\",{value:!0});E.Parser=E.createSyntaxDiagramsCode=E.clearCache=E.GAstVisitor=E.serializeProduction=E.serializeGrammar=E.Terminal=E.Rule=E.RepetitionWithSeparator=E.RepetitionMandatoryWithSeparator=E.RepetitionMandatory=E.Repetition=E.Option=E.NonTerminal=E.Alternative=E.Alternation=E.defaultLexerErrorProvider=E.NoViableAltException=E.NotAllInputParsedException=E.MismatchedTokenException=E.isRecognitionException=E.EarlyExitException=E.defaultParserErrorProvider=E.tokenName=E.tokenMatcher=E.tokenLabel=E.EOF=E.createTokenInstance=E.createToken=E.LexerDefinitionErrorType=E.Lexer=E.EMPTY_ALT=E.ParserDefinitionErrorType=E.EmbeddedActionsParser=E.CstParser=E.VERSION=void 0;var ku=Er();Object.defineProperty(E,\"VERSION\",{enumerable:!0,get:function(){return ku.VERSION}});var lr=ce();Object.defineProperty(E,\"CstParser\",{enumerable:!0,get:function(){return lr.CstParser}});Object.defineProperty(E,\"EmbeddedActionsParser\",{enumerable:!0,get:function(){return lr.EmbeddedActionsParser}});Object.defineProperty(E,\"ParserDefinitionErrorType\",{enumerable:!0,get:function(){return lr.ParserDefinitionErrorType}});Object.defineProperty(E,\"EMPTY_ALT\",{enumerable:!0,get:function(){return lr.EMPTY_ALT}});var Ma=ft();Object.defineProperty(E,\"Lexer\",{enumerable:!0,get:function(){return Ma.Lexer}});Object.defineProperty(E,\"LexerDefinitionErrorType\",{enumerable:!0,get:function(){return Ma.LexerDefinitionErrorType}});var nt=Ue();Object.defineProperty(E,\"createToken\",{enumerable:!0,get:function(){return nt.createToken}});Object.defineProperty(E,\"createTokenInstance\",{enumerable:!0,get:function(){return nt.createTokenInstance}});Object.defineProperty(E,\"EOF\",{enumerable:!0,get:function(){return nt.EOF}});Object.defineProperty(E,\"tokenLabel\",{enumerable:!0,get:function(){return nt.tokenLabel}});Object.defineProperty(E,\"tokenMatcher\",{enumerable:!0,get:function(){return nt.tokenMatcher}});Object.defineProperty(E,\"tokenName\",{enumerable:!0,get:function(){return nt.tokenName}});var Pu=mt();Object.defineProperty(E,\"defaultParserErrorProvider\",{enumerable:!0,get:function(){return Pu.defaultParserErrorProvider}});var Nt=et();Object.defineProperty(E,\"EarlyExitException\",{enumerable:!0,get:function(){return Nt.EarlyExitException}});Object.defineProperty(E,\"isRecognitionException\",{enumerable:!0,get:function(){return Nt.isRecognitionException}});Object.defineProperty(E,\"MismatchedTokenException\",{enumerable:!0,get:function(){return Nt.MismatchedTokenException}});Object.defineProperty(E,\"NotAllInputParsedException\",{enumerable:!0,get:function(){return Nt.NotAllInputParsedException}});Object.defineProperty(E,\"NoViableAltException\",{enumerable:!0,get:function(){return Nt.NoViableAltException}});var Su=kr();Object.defineProperty(E,\"defaultLexerErrorProvider\",{enumerable:!0,get:function(){return Su.defaultLexerErrorProvider}});var Se=ne();Object.defineProperty(E,\"Alternation\",{enumerable:!0,get:function(){return Se.Alternation}});Object.defineProperty(E,\"Alternative\",{enumerable:!0,get:function(){return Se.Alternative}});Object.defineProperty(E,\"NonTerminal\",{enumerable:!0,get:function(){return Se.NonTerminal}});Object.defineProperty(E,\"Option\",{enumerable:!0,get:function(){return Se.Option}});Object.defineProperty(E,\"Repetition\",{enumerable:!0,get:function(){return Se.Repetition}});Object.defineProperty(E,\"RepetitionMandatory\",{enumerable:!0,get:function(){return Se.RepetitionMandatory}});Object.defineProperty(E,\"RepetitionMandatoryWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionMandatoryWithSeparator}});Object.defineProperty(E,\"RepetitionWithSeparator\",{enumerable:!0,get:function(){return Se.RepetitionWithSeparator}});Object.defineProperty(E,\"Rule\",{enumerable:!0,get:function(){return Se.Rule}});Object.defineProperty(E,\"Terminal\",{enumerable:!0,get:function(){return Se.Terminal}});var ba=ne();Object.defineProperty(E,\"serializeGrammar\",{enumerable:!0,get:function(){return ba.serializeGrammar}});Object.defineProperty(E,\"serializeProduction\",{enumerable:!0,get:function(){return ba.serializeProduction}});var xu=$e();Object.defineProperty(E,\"GAstVisitor\",{enumerable:!0,get:function(){return xu.GAstVisitor}});function Cu(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API.\n\t It performs no action other than printing this message.\n\t Please avoid using it as it will be completely removed in the future`)}E.clearCache=Cu;var Lu=La();Object.defineProperty(E,\"createSyntaxDiagramsCode\",{enumerable:!0,get:function(){return Lu.createSyntaxDiagramsCode}});var Mu=function(){function t(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\nSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return t}();E.Parser=Mu});export default Fa();\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tConeGeometry,\n\tCylinderGeometry,\n\tDataTexture,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhongMaterial,\n\tObject3D,\n\tPoints,\n\tPointsMaterial,\n\tQuaternion,\n\tRepeatWrapping,\n\tScene,\n\tShapeUtils,\n\tSphereGeometry,\n\tSRGBColorSpace,\n\tTextureLoader,\n\tVector2,\n\tVector3\n} from 'three';\nimport chevrotain from '../libs/chevrotain.module.min.js';\n\n\nclass VRMLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data, path ) {\n\n\t\tconst nodeMap = {};\n\n\t\tfunction generateVRMLTree( data ) {\n\n\t\t\t// create lexer, parser and visitor\n\n\t\t\tconst tokenData = createTokens();\n\n\t\t\tconst lexer = new VRMLLexer( tokenData.tokens );\n\t\t\tconst parser = new VRMLParser( tokenData.tokenVocabulary );\n\t\t\tconst visitor = createVisitor( parser.getBaseCstVisitorConstructor() );\n\n\t\t\t// lexing\n\n\t\t\tconst lexingResult = lexer.lex( data );\n\t\t\tparser.input = lexingResult.tokens;\n\n\t\t\t// parsing\n\n\t\t\tconst cstOutput = parser.vrml();\n\n\t\t\tif ( parser.errors.length > 0 ) {\n\n\t\t\t\tconsole.error( parser.errors );\n\n\t\t\t\tthrow Error( 'THREE.VRMLLoader: Parsing errors detected.' );\n\n\t\t\t}\n\n\t\t\t// actions\n\n\t\t\tconst ast = visitor.visit( cstOutput );\n\n\t\t\treturn ast;\n\n\t\t}\n\n\t\tfunction createTokens() {\n\n\t\t\tconst createToken = chevrotain.createToken;\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/concepts.html#SyntaxBasics\n\n\t\t\tconst RouteIdentifier = createToken( { name: 'RouteIdentifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*[\\.][^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/ } );\n\t\t\tconst Identifier = createToken( { name: 'Identifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]([^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d])*/, longer_alt: RouteIdentifier } );\n\n\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html\n\n\t\t\tconst nodeTypes = [\n\t\t\t\t'Anchor', 'Billboard', 'Collision', 'Group', 'Transform', // grouping nodes\n\t\t\t\t'Inline', 'LOD', 'Switch', // special groups\n\t\t\t\t'AudioClip', 'DirectionalLight', 'PointLight', 'Script', 'Shape', 'Sound', 'SpotLight', 'WorldInfo', // common nodes\n\t\t\t\t'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', 'TimeSensor', 'TouchSensor', 'VisibilitySensor', // sensors\n\t\t\t\t'Box', 'Cone', 'Cylinder', 'ElevationGrid', 'Extrusion', 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Sphere', // geometries\n\t\t\t\t'Color', 'Coordinate', 'Normal', 'TextureCoordinate', // geometric properties\n\t\t\t\t'Appearance', 'FontStyle', 'ImageTexture', 'Material', 'MovieTexture', 'PixelTexture', 'TextureTransform', // appearance\n\t\t\t\t'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', // interpolators\n\t\t\t\t'Background', 'Fog', 'NavigationInfo', 'Viewpoint', // bindable nodes\n\t\t\t\t'Text' // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate\n\t\t\t];\n\n\t\t\t//\n\n\t\t\tconst Version = createToken( {\n\t\t\t\tname: 'Version',\n\t\t\t\tpattern: /#VRML.*/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst NodeName = createToken( {\n\t\t\t\tname: 'NodeName',\n\t\t\t\tpattern: new RegExp( nodeTypes.join( '|' ) ),\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst DEF = createToken( {\n\t\t\t\tname: 'DEF',\n\t\t\t\tpattern: /DEF/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst USE = createToken( {\n\t\t\t\tname: 'USE',\n\t\t\t\tpattern: /USE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst ROUTE = createToken( {\n\t\t\t\tname: 'ROUTE',\n\t\t\t\tpattern: /ROUTE/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\tconst TO = createToken( {\n\t\t\t\tname: 'TO',\n\t\t\t\tpattern: /TO/,\n\t\t\t\tlonger_alt: Identifier\n\t\t\t} );\n\n\t\t\t//\n\n\t\t\tconst StringLiteral = createToken( { name: 'StringLiteral', pattern: /\"(?:[^\\\\\"\\n\\r]|\\\\[bfnrtv\"\\\\/]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*\"/ } );\n\t\t\tconst HexLiteral = createToken( { name: 'HexLiteral', pattern: /0[xX][0-9a-fA-F]+/ } );\n\t\t\tconst NumberLiteral = createToken( { name: 'NumberLiteral', pattern: /[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?/ } );\n\t\t\tconst TrueLiteral = createToken( { name: 'TrueLiteral', pattern: /TRUE/ } );\n\t\t\tconst FalseLiteral = createToken( { name: 'FalseLiteral', pattern: /FALSE/ } );\n\t\t\tconst NullLiteral = createToken( { name: 'NullLiteral', pattern: /NULL/ } );\n\t\t\tconst LSquare = createToken( { name: 'LSquare', pattern: /\\[/ } );\n\t\t\tconst RSquare = createToken( { name: 'RSquare', pattern: /]/ } );\n\t\t\tconst LCurly = createToken( { name: 'LCurly', pattern: /{/ } );\n\t\t\tconst RCurly = createToken( { name: 'RCurly', pattern: /}/ } );\n\t\t\tconst Comment = createToken( {\n\t\t\t\tname: 'Comment',\n\t\t\t\tpattern: /#.*/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\t// commas, blanks, tabs, newlines and carriage returns are whitespace characters wherever they appear outside of string fields\n\n\t\t\tconst WhiteSpace = createToken( {\n\t\t\t\tname: 'WhiteSpace',\n\t\t\t\tpattern: /[ ,\\s]/,\n\t\t\t\tgroup: chevrotain.Lexer.SKIPPED\n\t\t\t} );\n\n\t\t\tconst tokens = [\n\t\t\t\tWhiteSpace,\n\t\t\t\t// keywords appear before the Identifier\n\t\t\t\tNodeName,\n\t\t\t\tDEF,\n\t\t\t\tUSE,\n\t\t\t\tROUTE,\n\t\t\t\tTO,\n\t\t\t\tTrueLiteral,\n\t\t\t\tFalseLiteral,\n\t\t\t\tNullLiteral,\n\t\t\t\t// the Identifier must appear after the keywords because all keywords are valid identifiers\n\t\t\t\tVersion,\n\t\t\t\tIdentifier,\n\t\t\t\tRouteIdentifier,\n\t\t\t\tStringLiteral,\n\t\t\t\tHexLiteral,\n\t\t\t\tNumberLiteral,\n\t\t\t\tLSquare,\n\t\t\t\tRSquare,\n\t\t\t\tLCurly,\n\t\t\t\tRCurly,\n\t\t\t\tComment\n\t\t\t];\n\n\t\t\tconst tokenVocabulary = {};\n\n\t\t\tfor ( let i = 0, l = tokens.length; i < l; i ++ ) {\n\n\t\t\t\tconst token = tokens[ i ];\n\n\t\t\t\ttokenVocabulary[ token.name ] = token;\n\n\t\t\t}\n\n\t\t\treturn { tokens: tokens, tokenVocabulary: tokenVocabulary };\n\n\t\t}\n\n\n\t\tfunction createVisitor( BaseVRMLVisitor ) {\n\n\t\t\t// the visitor is created dynmaically based on the given base class\n\n\t\t\tclass VRMLToASTVisitor extends BaseVRMLVisitor {\n\n\t\t\t\tconstructor() {\n\n\t\t\t\t\tsuper();\n\n\t\t\t\t\tthis.validateVisitor();\n\n\t\t\t\t}\n\n\t\t\t\tvrml( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tversion: this.visit( ctx.version ),\n\t\t\t\t\t\tnodes: [],\n\t\t\t\t\t\troutes: []\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tdata.nodes.push( this.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.route ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.route.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst route = ctx.route[ i ];\n\n\t\t\t\t\t\t\tdata.routes.push( this.visit( route ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tversion( ctx ) {\n\n\t\t\t\t\treturn ctx.Version[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tnode( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.NodeName[ 0 ].image,\n\t\t\t\t\t\tfields: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( ctx.field ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = ctx.field.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst field = ctx.field[ i ];\n\n\t\t\t\t\t\t\tdata.fields.push( this.visit( field ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// DEF\n\n\t\t\t\t\tif ( ctx.def ) {\n\n\t\t\t\t\t\tdata.DEF = this.visit( ctx.def[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tfield( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tname: ctx.Identifier[ 0 ].image,\n\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\tvalues: null\n\t\t\t\t\t};\n\n\t\t\t\t\tlet result;\n\n\t\t\t\t\t// SFValue\n\n\t\t\t\t\tif ( ctx.singleFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.singleFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// MFValue\n\n\t\t\t\t\tif ( ctx.multiFieldValue ) {\n\n\t\t\t\t\t\tresult = this.visit( ctx.multiFieldValue[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.type = result.type;\n\t\t\t\t\tdata.values = result.values;\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t\tdef( ctx ) {\n\n\t\t\t\t\treturn ( ctx.Identifier || ctx.NodeName )[ 0 ].image;\n\n\t\t\t\t}\n\n\t\t\t\tuse( ctx ) {\n\n\t\t\t\t\treturn { USE: ( ctx.Identifier || ctx.NodeName )[ 0 ].image };\n\n\t\t\t\t}\n\n\t\t\t\tsingleFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\tmultiFieldValue( ctx ) {\n\n\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t}\n\n\t\t\t\troute( ctx ) {\n\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tFROM: ctx.RouteIdentifier[ 0 ].image,\n\t\t\t\t\t\tTO: ctx.RouteIdentifier[ 1 ].image\n\t\t\t\t\t};\n\n\t\t\t\t\treturn data;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction processField( scope, ctx ) {\n\n\t\t\t\tconst field = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tvalues: []\n\t\t\t\t};\n\n\t\t\t\tif ( ctx.node ) {\n\n\t\t\t\t\tfield.type = 'node';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst node = ctx.node[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( node ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.use ) {\n\n\t\t\t\t\tfield.type = 'use';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.use.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst use = ctx.use[ i ];\n\n\t\t\t\t\t\tfield.values.push( scope.visit( use ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.StringLiteral ) {\n\n\t\t\t\t\tfield.type = 'string';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.StringLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst stringLiteral = ctx.StringLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( stringLiteral.image.replace( /'|\"/g, '' ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NumberLiteral ) {\n\n\t\t\t\t\tfield.type = 'number';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.NumberLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst numberLiteral = ctx.NumberLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( parseFloat( numberLiteral.image ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.HexLiteral ) {\n\n\t\t\t\t\tfield.type = 'hex';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.HexLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst hexLiteral = ctx.HexLiteral[ i ];\n\n\t\t\t\t\t\tfield.values.push( hexLiteral.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.TrueLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.TrueLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst trueLiteral = ctx.TrueLiteral[ i ];\n\n\t\t\t\t\t\tif ( trueLiteral.image === 'TRUE' ) field.values.push( true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.FalseLiteral ) {\n\n\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\tfor ( let i = 0, l = ctx.FalseLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst falseLiteral = ctx.FalseLiteral[ i ];\n\n\t\t\t\t\t\tif ( falseLiteral.image === 'FALSE' ) field.values.push( false );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ctx.NullLiteral ) {\n\n\t\t\t\t\tfield.type = 'null';\n\n\t\t\t\t\tctx.NullLiteral.forEach( function () {\n\n\t\t\t\t\t\tfield.values.push( null );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\treturn field;\n\n\t\t\t}\n\n\t\t\treturn new VRMLToASTVisitor();\n\n\t\t}\n\n\t\tfunction parseTree( tree ) {\n\n\t\t\t// console.log( JSON.stringify( tree, null, 2 ) );\n\n\t\t\tconst nodes = tree.nodes;\n\t\t\tconst scene = new Scene();\n\n\t\t\t// first iteration: build nodemap based on DEF statements\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\n\t\t\t\tbuildNodeMap( node );\n\n\t\t\t}\n\n\t\t\t// second iteration: build nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst object = getNode( node );\n\n\t\t\t\tif ( object instanceof Object3D ) scene.add( object );\n\n\t\t\t\tif ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;\n\n\t\t\t}\n\n\t\t\treturn scene;\n\n\t\t}\n\n\t\tfunction buildNodeMap( node ) {\n\n\t\t\tif ( node.DEF ) {\n\n\t\t\t\tnodeMap[ node.DEF ] = node;\n\n\t\t\t}\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\n\t\t\t\tif ( field.type === 'node' ) {\n\n\t\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\t\tfor ( let j = 0, jl = fieldValues.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tbuildNodeMap( fieldValues[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction getNode( node ) {\n\n\t\t\t// handle case where a node refers to a different one\n\n\t\t\tif ( node.USE ) {\n\n\t\t\t\treturn resolveUSE( node.USE );\n\n\t\t\t}\n\n\t\t\tif ( node.build !== undefined ) return node.build;\n\n\t\t\tnode.build = buildNode( node );\n\n\t\t\treturn node.build;\n\n\t\t}\n\n\t\t// node builder\n\n\t\tfunction buildNode( node ) {\n\n\t\t\tconst nodeName = node.name;\n\t\t\tlet build;\n\n\t\t\tswitch ( nodeName ) {\n\n\t\t\t\tcase 'Anchor':\n\t\t\t\tcase 'Group':\n\t\t\t\tcase 'Transform':\n\t\t\t\tcase 'Collision':\n\t\t\t\t\tbuild = buildGroupingNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Background':\n\t\t\t\t\tbuild = buildBackgroundNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Shape':\n\t\t\t\t\tbuild = buildShapeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Appearance':\n\t\t\t\t\tbuild = buildAppearanceNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Material':\n\t\t\t\t\tbuild = buildMaterialNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ImageTexture':\n\t\t\t\t\tbuild = buildImageTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PixelTexture':\n\t\t\t\t\tbuild = buildPixelTextureNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TextureTransform':\n\t\t\t\t\tbuild = buildTextureTransformNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedFaceSet':\n\t\t\t\t\tbuild = buildIndexedFaceSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'IndexedLineSet':\n\t\t\t\t\tbuild = buildIndexedLineSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointSet':\n\t\t\t\t\tbuild = buildPointSetNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Box':\n\t\t\t\t\tbuild = buildBoxNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cone':\n\t\t\t\t\tbuild = buildConeNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Cylinder':\n\t\t\t\t\tbuild = buildCylinderNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sphere':\n\t\t\t\t\tbuild = buildSphereNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ElevationGrid':\n\t\t\t\t\tbuild = buildElevationGridNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Extrusion':\n\t\t\t\t\tbuild = buildExtrusionNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Color':\n\t\t\t\tcase 'Coordinate':\n\t\t\t\tcase 'Normal':\n\t\t\t\tcase 'TextureCoordinate':\n\t\t\t\t\tbuild = buildGeometricNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WorldInfo':\n\t\t\t\t\tbuild = buildWorldInfoNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Billboard':\n\n\t\t\t\tcase 'Inline':\n\t\t\t\tcase 'LOD':\n\t\t\t\tcase 'Switch':\n\n\t\t\t\tcase 'AudioClip':\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\tcase 'PointLight':\n\t\t\t\tcase 'Script':\n\t\t\t\tcase 'Sound':\n\t\t\t\tcase 'SpotLight':\n\n\t\t\t\tcase 'CylinderSensor':\n\t\t\t\tcase 'PlaneSensor':\n\t\t\t\tcase 'ProximitySensor':\n\t\t\t\tcase 'SphereSensor':\n\t\t\t\tcase 'TimeSensor':\n\t\t\t\tcase 'TouchSensor':\n\t\t\t\tcase 'VisibilitySensor':\n\n\t\t\t\tcase 'Text':\n\n\t\t\t\tcase 'FontStyle':\n\t\t\t\tcase 'MovieTexture':\n\n\t\t\t\tcase 'ColorInterpolator':\n\t\t\t\tcase 'CoordinateInterpolator':\n\t\t\t\tcase 'NormalInterpolator':\n\t\t\t\tcase 'OrientationInterpolator':\n\t\t\t\tcase 'PositionInterpolator':\n\t\t\t\tcase 'ScalarInterpolator':\n\n\t\t\t\tcase 'Fog':\n\t\t\t\tcase 'NavigationInfo':\n\t\t\t\tcase 'Viewpoint':\n\t\t\t\t\t// node not supported yet\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown node:', nodeName );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( build !== undefined && node.DEF !== undefined && build.hasOwnProperty( 'name' ) === true ) {\n\n\t\t\t\tbuild.name = node.DEF;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGroupingNode( node ) {\n\n\t\t\tconst object = new Group();\n\n\t\t\t//\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bboxCenter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bboxSize':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'children':\n\t\t\t\t\t\tparseFieldChildren( fieldValues, object );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'description':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'collide':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'parameter':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\tconst axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] ).normalize();\n\t\t\t\t\t\tconst angle = fieldValues[ 3 ];\n\t\t\t\t\t\tobject.quaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tobject.scale.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scaleOrientation':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\tobject.position.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'proxy':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildBackgroundNode( node ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tlet groundAngle, groundColor;\n\t\t\tlet skyAngle, skyColor;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'groundAngle':\n\t\t\t\t\t\tgroundAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'groundColor':\n\t\t\t\t\t\tgroundColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'backUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'frontUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'leftUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rightUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'topUrl':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyAngle':\n\t\t\t\t\t\tskyAngle = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skyColor':\n\t\t\t\t\t\tskyColor = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst radius = 10000;\n\n\t\t\t// sky\n\n\t\t\tif ( skyColor ) {\n\n\t\t\t\tconst skyGeometry = new SphereGeometry( radius, 32, 16 );\n\t\t\t\tconst skyMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, depthWrite: false, depthTest: false } );\n\n\t\t\t\tif ( skyColor.length > 3 ) {\n\n\t\t\t\t\tpaintFaces( skyGeometry, radius, skyAngle, toColorArray( skyColor ), true );\n\t\t\t\t\tskyMaterial.vertexColors = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tskyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ] );\n\t\t\t\t\tskyMaterial.color.convertSRGBToLinear();\n\n\t\t\t\t}\n\n\t\t\t\tconst sky = new Mesh( skyGeometry, skyMaterial );\n\t\t\t\tgroup.add( sky );\n\n\t\t\t}\n\n\t\t\t// ground\n\n\t\t\tif ( groundColor ) {\n\n\t\t\t\tif ( groundColor.length > 0 ) {\n\n\t\t\t\t\tconst groundGeometry = new SphereGeometry( radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI );\n\t\t\t\t\tconst groundMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, vertexColors: true, depthWrite: false, depthTest: false } );\n\n\t\t\t\t\tpaintFaces( groundGeometry, radius, groundAngle, toColorArray( groundColor ), false );\n\n\t\t\t\t\tconst ground = new Mesh( groundGeometry, groundMaterial );\n\t\t\t\t\tgroup.add( ground );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// render background group first\n\n\t\t\tgroup.renderOrder = - Infinity;\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction buildShapeNode( node ) {\n\n\t\t\tconst fields = node.fields;\n\n\t\t\t// if the appearance field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\tlet material = new MeshBasicMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0x000000\n\t\t\t} );\n\t\t\tlet geometry;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'appearance':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tmaterial = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'geometry':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tgeometry = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build 3D object\n\n\t\t\tlet object;\n\n\t\t\tif ( geometry && geometry.attributes.position ) {\n\n\t\t\t\tconst type = geometry._type;\n\n\t\t\t\tif ( type === 'points' ) { // points\n\n\t\t\t\t\tconst pointsMaterial = new PointsMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tpointsMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tpointsMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Points( geometry, pointsMaterial );\n\n\t\t\t\t} else if ( type === 'line' ) { // lines\n\n\t\t\t\t\tconst lineMaterial = new LineBasicMaterial( {\n\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\tcolor: 0xffffff,\n\t\t\t\t\t\topacity: material.opacity,\n\t\t\t\t\t\ttransparent: material.transparent\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tlineMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new LineSegments( geometry, lineMaterial );\n\n\t\t\t\t} else { // consider meshes\n\n\t\t\t\t\t// check \"solid\" hint (it's placed in the geometry but affects the material)\n\n\t\t\t\t\tif ( geometry._solid !== undefined ) {\n\n\t\t\t\t\t\tmaterial.side = ( geometry._solid ) ? FrontSide : DoubleSide;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for vertex colors\n\n\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tobject = new Object3D();\n\n\t\t\t\t// if the geometry field is NULL or no vertices are defined the object is not drawn\n\n\t\t\t\tobject.visible = false;\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tfunction buildAppearanceNode( node ) {\n\n\t\t\tlet material = new MeshPhongMaterial();\n\t\t\tlet transformData;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\tconst materialData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\tif ( materialData.diffuseColor ) material.color.copy( materialData.diffuseColor );\n\t\t\t\t\t\t\tif ( materialData.emissiveColor ) material.emissive.copy( materialData.emissiveColor );\n\t\t\t\t\t\t\tif ( materialData.shininess ) material.shininess = materialData.shininess;\n\t\t\t\t\t\t\tif ( materialData.specularColor ) material.specular.copy( materialData.specularColor );\n\t\t\t\t\t\t\tif ( materialData.transparency ) material.opacity = 1 - materialData.transparency;\n\t\t\t\t\t\t\tif ( materialData.transparency > 0 ) material.transparent = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the material field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\t\t\t\t\tmaterial = new MeshBasicMaterial( {\n\t\t\t\t\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\t\t\t\t\tcolor: 0x000000\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst textureNode = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( textureNode !== null ) {\n\n\t\t\t\t\t\t\tif ( textureNode.name === 'ImageTexture' || textureNode.name === 'PixelTexture' ) {\n\n\t\t\t\t\t\t\t\tmaterial.map = getNode( textureNode );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// MovieTexture not supported yet\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'textureTransform':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\ttransformData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only apply texture transform data if a texture was defined\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\t// respect VRML lighting model\n\n\t\t\t\tif ( material.map.__type ) {\n\n\t\t\t\t\tswitch ( material.map.__type ) {\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete material.map.__type;\n\n\t\t\t\t}\n\n\t\t\t\t// apply texture transform\n\n\t\t\t\tif ( transformData ) {\n\n\t\t\t\t\tmaterial.map.center.copy( transformData.center );\n\t\t\t\t\tmaterial.map.rotation = transformData.rotation;\n\t\t\t\t\tmaterial.map.repeat.copy( transformData.scale );\n\t\t\t\t\tmaterial.map.offset.copy( transformData.translation );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildMaterialNode( node ) {\n\n\t\t\tconst materialData = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'ambientIntensity':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'diffuseColor':\n\t\t\t\t\t\tmaterialData.diffuseColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.diffuseColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'emissiveColor':\n\t\t\t\t\t\tmaterialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.emissiveColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tmaterialData.shininess = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'specularColor':\n\t\t\t\t\t\tmaterialData.specularColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\tmaterialData.specularColor.convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tmaterialData.transparency = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materialData;\n\n\t\t}\n\n\t\tfunction parseHexColor( hex, textureType, color ) {\n\n\t\t\tlet value;\n\n\t\t\tswitch ( textureType ) {\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY:\n\t\t\t\t\t// Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image\n\t\t\t\t\tvalue = parseInt( hex );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t// Intensity+Alpha texture: A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte.\n\t\t\t\t\tvalue = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.r = value;\n\t\t\t\t\tcolor.g = value;\n\t\t\t\t\tcolor.b = value;\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t// RGB texture: Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t// RGBA texture: Four-component images specify the alpha opacity byte after red/green/blue\n\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 8, 10 ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureType( num_components ) {\n\n\t\t\tlet type;\n\n\t\t\tswitch ( num_components ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY_ALPHA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGB;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4:\n\t\t\t\t\ttype = TEXTURE_TYPE.RGBA;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t}\n\n\t\t\treturn type;\n\n\t\t}\n\n\t\tfunction buildPixelTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'image':\n\t\t\t\t\t\tconst width = fieldValues[ 0 ];\n\t\t\t\t\t\tconst height = fieldValues[ 1 ];\n\t\t\t\t\t\tconst num_components = fieldValues[ 2 ];\n\n\t\t\t\t\t\tconst textureType = getTextureType( num_components );\n\n\t\t\t\t\t\tconst data = new Uint8Array( 4 * width * height );\n\n\t\t\t\t\t\tconst color = { r: 0, g: 0, b: 0, a: 0 };\n\n\t\t\t\t\t\tfor ( let j = 3, k = 0, jl = fieldValues.length; j < jl; j ++, k ++ ) {\n\n\t\t\t\t\t\t\tparseHexColor( fieldValues[ j ], textureType, color );\n\n\t\t\t\t\t\t\tconst stride = k * 4;\n\n\t\t\t\t\t\t\tdata[ stride + 0 ] = color.r;\n\t\t\t\t\t\t\tdata[ stride + 1 ] = color.g;\n\t\t\t\t\t\t\tdata[ stride + 2 ] = color.b;\n\t\t\t\t\t\t\tdata[ stride + 3 ] = color.a;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttexture = new DataTexture( data, width, height );\n\t\t\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\ttexture.__type = textureType; // needed for material modifications\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildImageTextureNode( node ) {\n\n\t\t\tlet texture;\n\t\t\tlet wrapS = RepeatWrapping;\n\t\t\tlet wrapT = RepeatWrapping;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'url':\n\t\t\t\t\t\tconst url = fieldValues[ 0 ];\n\t\t\t\t\t\tif ( url ) texture = textureLoader.load( url );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture ) {\n\n\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\ttexture.wrapT = wrapT;\n\t\t\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction buildTextureTransformNode( node ) {\n\n\t\t\tconst transformData = {\n\t\t\t\tcenter: new Vector2(),\n\t\t\t\trotation: new Vector2(),\n\t\t\t\tscale: new Vector2(),\n\t\t\t\ttranslation: new Vector2()\n\t\t\t};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'center':\n\t\t\t\t\t\ttransformData.center.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\ttransformData.rotation = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\ttransformData.scale.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\ttransformData.translation.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transformData;\n\n\t\t}\n\n\t\tfunction buildGeometricNode( node ) {\n\n\t\t\treturn node.fields[ 0 ].values;\n\n\t\t}\n\n\t\tfunction buildWorldInfoNode( node ) {\n\n\t\t\tconst worldInfo = {};\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'title':\n\t\t\t\t\t\tworldInfo.title = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'info':\n\t\t\t\t\t\tworldInfo.info = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn worldInfo;\n\n\t\t}\n\n\t\tfunction buildIndexedFaceSetNode( node ) {\n\n\t\t\tlet color, coord, normal, texCoord;\n\t\t\tlet ccw = true, solid = true, creaseAngle = 0;\n\t\t\tlet colorIndex, coordIndex, normalIndex, texCoordIndex;\n\t\t\tlet colorPerVertex = true, normalPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalIndex':\n\t\t\t\t\t\tnormalIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoordIndex':\n\t\t\t\t\t\ttexCoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( coordIndex === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Missing coordIndex.' );\n\n\t\t\t\treturn new BufferGeometry(); // handle VRML files with incomplete geometry definition\n\n\t\t\t}\n\n\t\t\tconst triangulatedCoordIndex = triangulateFaceIndex( coordIndex, ccw );\n\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\t\t\tlet uvAttribute;\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedColorIndex = triangulateFaceIndex( colorIndex, ccw );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedColorIndex, color, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceColors = flattenData( color, colorIndex );\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( flattenFaceColors, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceColors = triangulateFaceData( color, coordIndex );\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === true ) {\n\n\t\t\t\t\t// consider vertex normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tconst triangulatedNormalIndex = triangulateFaceIndex( normalIndex, ccw );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedNormalIndex, normal, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the coordIndex field is used to choose normals from the Normal node\n\n\t\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( normal, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// consider face normals\n\n\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet\n\n\t\t\t\t\t\tconst flattenFaceNormals = flattenData( normal, normalIndex );\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( flattenFaceNormals, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\tconst triangulatedFaceNormals = triangulateFaceData( normal, coordIndex );\n\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( triangulatedCoordIndex, coord, creaseAngle );\n\n\t\t\t}\n\n\t\t\tif ( texCoord ) {\n\n\t\t\t\t// texture coordinates are always defined on vertex level\n\n\t\t\t\tif ( texCoordIndex && texCoordIndex.length > 0 ) {\n\n\t\t\t\t\t// if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\tconst triangulatedTexCoordIndex = triangulateFaceIndex( texCoordIndex, ccw );\n\t\t\t\t\tuvAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2 );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if the texCoordIndex field is empty, then the coordIndex array is used to choose texture coordinates from the TextureCoordinate node\n\n\t\t\t\t\tuvAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( texCoord, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst positionAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\t// optional attributes\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\t\t\tif ( uvAttribute ) geometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildIndexedLineSetNode( node ) {\n\n\t\t\tlet color, coord;\n\t\t\tlet colorIndex, coordIndex;\n\t\t\tlet colorPerVertex = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build lines\n\n\t\t\tlet colorAttribute;\n\n\t\t\tconst expandedLineIndex = expandLineIndex( coordIndex ); // create an index for three.js's linesegment primitive\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.\n\n\t\t\t\t\t\tconst expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( expandedLineIndex, expandedColorIndex, color, 3 ); // compute data on vertex level\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the colors are applied to each polyline of the IndexedLineSet in order.\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet\n\n\t\t\t\t\t\tconst flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML primitve\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\tconst expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( coord, 3 ) );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\tgeometry._type = 'line';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildPointSetNode( node ) {\n\n\t\t\tlet color, coord;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\tconst coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\tif ( color ) {\n\n\t\t\t\tconst colorAttribute = new Float32BufferAttribute( color, 3 );\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry._type = 'points';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildBoxNode( node ) {\n\n\t\t\tconst size = new Vector3( 2, 2, 2 );\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'size':\n\t\t\t\t\t\tsize.x = fieldValues[ 0 ];\n\t\t\t\t\t\tsize.y = fieldValues[ 1 ];\n\t\t\t\t\t\tsize.z = fieldValues[ 2 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BoxGeometry( size.x, size.y, size.z );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildConeNode( node ) {\n\n\t\t\tlet radius = 1, height = 2, openEnded = false;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\topenEnded = ! fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bottomRadius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new ConeGeometry( radius, height, 16, 1, openEnded );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildCylinderNode( node ) {\n\n\t\t\tlet radius = 1, height = 2;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'top':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new CylinderGeometry( radius, radius, height, 16, 1 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildSphereNode( node ) {\n\n\t\t\tlet radius = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new SphereGeometry( radius, 16, 16 );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildElevationGridNode( node ) {\n\n\t\t\tlet color;\n\t\t\tlet normal;\n\t\t\tlet texCoord;\n\t\t\tlet height;\n\n\t\t\tlet colorPerVertex = true;\n\t\t\tlet normalPerVertex = true;\n\t\t\tlet solid = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet xDimension = 2;\n\t\t\tlet zDimension = 2;\n\t\t\tlet xSpacing = 1;\n\t\t\tlet zSpacing = 1;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\tconst normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\tconst texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'height':\n\t\t\t\t\t\theight = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xDimension':\n\t\t\t\t\t\txDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'xSpacing':\n\t\t\t\t\t\txSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zDimension':\n\t\t\t\t\t\tzDimension = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'zSpacing':\n\t\t\t\t\t\tzSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// vertex data\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < zDimension; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < xDimension; j ++ ) {\n\n\t\t\t\t\t// compute a row major index\n\n\t\t\t\t\tconst index = ( i * xDimension ) + j;\n\n\t\t\t\t\t// vertices\n\n\t\t\t\t\tconst x = xSpacing * i;\n\t\t\t\t\tconst y = height[ index ];\n\t\t\t\t\tconst z = zSpacing * j;\n\n\t\t\t\t\tvertices.push( x, y, z );\n\n\t\t\t\t\t// colors\n\n\t\t\t\t\tif ( color && colorPerVertex === true ) {\n\n\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// normals\n\n\t\t\t\t\tif ( normal && normalPerVertex === true ) {\n\n\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\tnormals.push( xn, yn, zn );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tif ( texCoord ) {\n\n\t\t\t\t\t\tconst s = texCoord[ index * 2 + 0 ];\n\t\t\t\t\t\tconst t = texCoord[ index * 2 + 1 ];\n\n\t\t\t\t\t\tuvs.push( s, t );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuvs.push( i / ( xDimension - 1 ), j / ( zDimension - 1 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t// from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid\n\n\t\t\t\t\tconst a = i + j * xDimension;\n\t\t\t\t\tconst b = i + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst c = ( i + 1 ) + ( j + 1 ) * xDimension;\n\t\t\t\t\tconst d = ( i + 1 ) + j * xDimension;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, a, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, d, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst uvAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( uvs, 2 ) );\n\t\t\tlet colorAttribute;\n\t\t\tlet normalAttribute;\n\n\t\t\t// color attribute\n\n\t\t\tif ( color ) {\n\n\t\t\t\tif ( colorPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst r = color[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst g = color[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one color per quad\n\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolorAttribute = new Float32BufferAttribute( colors, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tconvertColorsToLinearSRGB( colorAttribute );\n\n\t\t\t}\n\n\t\t\t// normal attribute\n\n\t\t\tif ( normal ) {\n\n\t\t\t\tif ( normalPerVertex === false ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\tconst xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\t\tconst yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\t\tconst zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t// one normal per quad\n\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnormalAttribute = new Float32BufferAttribute( normals, 3 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tnormalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction buildExtrusionNode( node ) {\n\n\t\t\tlet crossSection = [ 1, 1, 1, - 1, - 1, - 1, - 1, 1, 1, 1 ];\n\t\t\tlet spine = [ 0, 0, 0, 0, 1, 0 ];\n\t\t\tlet scale;\n\t\t\tlet orientation;\n\n\t\t\tlet beginCap = true;\n\t\t\tlet ccw = true;\n\t\t\tlet creaseAngle = 0;\n\t\t\tlet endCap = true;\n\t\t\tlet solid = true;\n\n\t\t\tconst fields = node.fields;\n\n\t\t\tfor ( let i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\tconst field = fields[ i ];\n\t\t\t\tconst fieldName = field.name;\n\t\t\t\tconst fieldValues = field.values;\n\n\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\tcase 'beginCap':\n\t\t\t\t\t\tbeginCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'crossSection':\n\t\t\t\t\t\tcrossSection = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'endCap':\n\t\t\t\t\t\tendCap = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'orientation':\n\t\t\t\t\t\torientation = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tscale = fieldValues;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'spine':\n\t\t\t\t\t\tspine = fieldValues; // only extrusion along the Y-axis are supported so far\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst crossSectionClosed = ( crossSection[ 0 ] === crossSection[ crossSection.length - 2 ] && crossSection[ 1 ] === crossSection[ crossSection.length - 1 ] );\n\n\t\t\t// vertices\n\n\t\t\tconst vertices = [];\n\t\t\tconst spineVector = new Vector3();\n\t\t\tconst scaling = new Vector3();\n\n\t\t\tconst axis = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\n\t\t\tfor ( let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4 ) {\n\n\t\t\t\tspineVector.fromArray( spine, i );\n\n\t\t\t\tscaling.x = scale ? scale[ j + 0 ] : 1;\n\t\t\t\tscaling.y = 1;\n\t\t\t\tscaling.z = scale ? scale[ j + 1 ] : 1;\n\n\t\t\t\taxis.x = orientation ? orientation[ o + 0 ] : 0;\n\t\t\t\taxis.y = orientation ? orientation[ o + 1 ] : 0;\n\t\t\t\taxis.z = orientation ? orientation[ o + 2 ] : 1;\n\t\t\t\tconst angle = orientation ? orientation[ o + 3 ] : 0;\n\n\t\t\t\tfor ( let k = 0, kl = crossSection.length; k < kl; k += 2 ) {\n\n\t\t\t\t\tvertex.x = crossSection[ k + 0 ];\n\t\t\t\t\tvertex.y = 0;\n\t\t\t\t\tvertex.z = crossSection[ k + 1 ];\n\n\t\t\t\t\t// scale\n\n\t\t\t\t\tvertex.multiply( scaling );\n\n\t\t\t\t\t// rotate\n\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\tvertex.applyQuaternion( quaternion );\n\n\t\t\t\t\t// translate\n\n\t\t\t\t\tvertex.add( spineVector );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tconst indices = [];\n\n\t\t\tconst spineCount = spine.length / 3;\n\t\t\tconst crossSectionCount = crossSection.length / 2;\n\n\t\t\tfor ( let i = 0; i < spineCount - 1; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < crossSectionCount - 1; j ++ ) {\n\n\t\t\t\t\tconst a = j + i * crossSectionCount;\n\t\t\t\t\tlet b = ( j + 1 ) + i * crossSectionCount;\n\t\t\t\t\tconst c = j + ( i + 1 ) * crossSectionCount;\n\t\t\t\t\tlet d = ( j + 1 ) + ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\tif ( ( j === crossSectionCount - 2 ) && ( crossSectionClosed === true ) ) {\n\n\t\t\t\t\t\tb = i * crossSectionCount;\n\t\t\t\t\t\td = ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\tindices.push( c, b, d );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\tindices.push( c, d, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// triangulate cap\n\n\t\t\tif ( beginCap === true || endCap === true ) {\n\n\t\t\t\tconst contour = [];\n\n\t\t\t\tfor ( let i = 0, l = crossSection.length; i < l; i += 2 ) {\n\n\t\t\t\t\tcontour.push( new Vector2( crossSection[ i ], crossSection[ i + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst faces = ShapeUtils.triangulateShape( contour, [] );\n\t\t\t\tconst capIndices = [];\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t\tcapIndices.push( face[ 0 ], face[ 1 ], face[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// begin cap\n\n\t\t\t\tif ( beginCap === true ) {\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 1 ], capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 2 ], capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// end cap\n\n\t\t\t\tif ( endCap === true ) {\n\n\t\t\t\t\tconst indexOffset = crossSectionCount * ( spineCount - 1 ); // references to the first vertex of the last cross section\n\n\t\t\t\t\tfor ( let i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 2 ], indexOffset + capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 1 ], indexOffset + capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tconst normalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\t// no uvs yet\n\n\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\tgeometry._solid = solid;\n\t\t\tgeometry._type = 'mesh';\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction resolveUSE( identifier ) {\n\n\t\t\tconst node = nodeMap[ identifier ];\n\t\t\tconst build = getNode( node );\n\n\t\t\t// because the same 3D objects can have different transformations, it's necessary to clone them.\n\t\t\t// materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid\n\t\t\t// any side effects\n\n\t\t\treturn ( build.isObject3D || build.isMaterial ) ? build.clone() : build;\n\n\t\t}\n\n\t\tfunction parseFieldChildren( children, owner ) {\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = getNode( children[ i ] );\n\n\t\t\t\tif ( object instanceof Object3D ) owner.add( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction triangulateFaceIndex( index, ccw ) {\n\n\t\t\tconst indices = [];\n\n\t\t\t// since face defintions can have more than three vertices, it's necessary to\n\t\t\t// perform a simple triangulation\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ start ];\n\t\t\t\tconst i2 = index[ i + ( ccw ? 1 : 2 ) ];\n\t\t\t\tconst i3 = index[ i + ( ccw ? 2 : 1 ) ];\n\n\t\t\t\tindices.push( i1, i2, i3 );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart = i + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction triangulateFaceData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\ti += 3;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tfunction flattenData( data, index ) {\n\n\t\t\tconst flattenData = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\n\t\t\t\tconst stride = i1 * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\tflattenData.push( x, y, z );\n\n\t\t\t}\n\n\t\t\treturn flattenData;\n\n\t\t}\n\n\t\tfunction expandLineIndex( index ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst i1 = index[ i ];\n\t\t\t\tconst i2 = index[ i + 1 ];\n\n\t\t\t\tindices.push( i1, i2 );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn indices;\n\n\t\t}\n\n\t\tfunction expandLineData( data, index ) {\n\n\t\t\tconst triangulatedData = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\tconst stride = start * 3;\n\n\t\t\t\tconst x = data[ stride ];\n\t\t\t\tconst y = data[ stride + 1 ];\n\t\t\t\tconst z = data[ stride + 2 ];\n\n\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\ti += 2;\n\t\t\t\t\tstart ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn triangulatedData;\n\n\t\t}\n\n\t\tconst vA = new Vector3();\n\t\tconst vB = new Vector3();\n\t\tconst vC = new Vector3();\n\n\t\tconst uvA = new Vector2();\n\t\tconst uvB = new Vector2();\n\t\tconst uvC = new Vector2();\n\n\t\tfunction computeAttributeFromIndexedData( coordIndex, index, data, itemSize ) {\n\n\t\t\tconst array = [];\n\n\t\t\t// we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices\n\n\t\t\tfor ( let i = 0, l = coordIndex.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tif ( itemSize === 2 ) {\n\n\t\t\t\t\tuvA.fromArray( data, a * itemSize );\n\t\t\t\t\tuvB.fromArray( data, b * itemSize );\n\t\t\t\t\tuvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( uvA.x, uvA.y );\n\t\t\t\t\tarray.push( uvB.x, uvB.y );\n\t\t\t\t\tarray.push( uvC.x, uvC.y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvA.fromArray( data, a * itemSize );\n\t\t\t\t\tvB.fromArray( data, b * itemSize );\n\t\t\t\t\tvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vB.x, vB.y, vB.z );\n\t\t\t\t\tarray.push( vC.x, vC.y, vC.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t\t}\n\n\t\tfunction computeAttributeFromFaceData( index, faceData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 3, j ++ ) {\n\n\t\t\t\tvA.fromArray( faceData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction computeAttributeFromLineData( index, lineData ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, j = 0, l = index.length; i < l; i += 2, j ++ ) {\n\n\t\t\t\tvA.fromArray( lineData, j * 3 );\n\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t}\n\n\t\tfunction toNonIndexedAttribute( indices, attribute ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( array2, itemSize );\n\n\t\t}\n\n\t\tconst ab = new Vector3();\n\t\tconst cb = new Vector3();\n\n\t\tfunction computeNormalAttribute( index, coord, creaseAngle ) {\n\n\t\t\tconst faces = [];\n\t\t\tconst vertexNormals = {};\n\n\t\t\t// prepare face and raw vertex normals\n\n\t\t\tfor ( let i = 0, l = index.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = index[ i ];\n\t\t\t\tconst b = index[ i + 1 ];\n\t\t\t\tconst c = index[ i + 2 ];\n\n\t\t\t\tconst face = new Face( a, b, c );\n\n\t\t\t\tvA.fromArray( coord, a * 3 );\n\t\t\t\tvB.fromArray( coord, b * 3 );\n\t\t\t\tvC.fromArray( coord, c * 3 );\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t\tif ( vertexNormals[ a ] === undefined ) vertexNormals[ a ] = [];\n\t\t\t\tif ( vertexNormals[ b ] === undefined ) vertexNormals[ b ] = [];\n\t\t\t\tif ( vertexNormals[ c ] === undefined ) vertexNormals[ c ] = [];\n\n\t\t\t\tvertexNormals[ a ].push( face.normal );\n\t\t\t\tvertexNormals[ b ].push( face.normal );\n\t\t\t\tvertexNormals[ c ].push( face.normal );\n\n\t\t\t\tfaces.push( face );\n\n\t\t\t}\n\n\t\t\t// compute vertex normals and build final geometry\n\n\t\t\tconst normals = [];\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst nA = weightedNormal( vertexNormals[ face.a ], face.normal, creaseAngle );\n\t\t\t\tconst nB = weightedNormal( vertexNormals[ face.b ], face.normal, creaseAngle );\n\t\t\t\tconst nC = weightedNormal( vertexNormals[ face.c ], face.normal, creaseAngle );\n\n\t\t\t\tvA.fromArray( coord, face.a * 3 );\n\t\t\t\tvB.fromArray( coord, face.b * 3 );\n\t\t\t\tvC.fromArray( coord, face.c * 3 );\n\n\t\t\t\tnormals.push( nA.x, nA.y, nA.z );\n\t\t\t\tnormals.push( nB.x, nB.y, nB.z );\n\t\t\t\tnormals.push( nC.x, nC.y, nC.z );\n\n\t\t\t}\n\n\t\t\treturn new Float32BufferAttribute( normals, 3 );\n\n\t\t}\n\n\t\tfunction weightedNormal( normals, vector, creaseAngle ) {\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tif ( creaseAngle === 0 ) {\n\n\t\t\t\tnormal.copy( vector );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( normals[ i ].angleTo( vector ) < creaseAngle ) {\n\n\t\t\t\t\t\tnormal.add( normals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn normal.normalize();\n\n\t\t}\n\n\t\tfunction toColorArray( colors ) {\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\tarray.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction convertColorsToLinearSRGB( attribute ) {\n\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tcolor.fromBufferAttribute( attribute, i );\n\t\t\t\tcolor.convertSRGBToLinear();\n\n\t\t\t\tattribute.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Vertically paints the faces interpolating between the\n\t\t * specified colors at the specified angels. This is used for the Background\n\t\t * node, but could be applied to other nodes with multiple faces as well.\n\t\t *\n\t\t * When used with the Background node, default is directionIsDown is true if\n\t\t * interpolating the skyColor down from the Zenith. When interpolationg up from\n\t\t * the Nadir i.e. interpolating the groundColor, the directionIsDown is false.\n\t\t *\n\t\t * The first angle is never specified, it is the Zenith (0 rad). Angles are specified\n\t\t * in radians. The geometry is thought a sphere, but could be anything. The color interpolation\n\t\t * is linear along the Y axis in any case.\n\t\t *\n\t\t * You must specify one more color than you have angles at the beginning of the colors array.\n\t\t * This is the color of the Zenith (the top of the shape).\n\t\t *\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {number} radius\n\t\t * @param {array} angles\n\t\t * @param {array} colors\n\t\t * @param {boolean} topDown - Whether to work top down or bottom up.\n\t\t */\n\t\tfunction paintFaces( geometry, radius, angles, colors, topDown ) {\n\n\t\t\t// compute threshold values\n\n\t\t\tconst thresholds = [];\n\t\t\tconst startAngle = ( topDown === true ) ? 0 : Math.PI;\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tlet angle = ( i === 0 ) ? 0 : angles[ i - 1 ];\n\t\t\t\tangle = ( topDown === true ) ? angle : ( startAngle - angle );\n\n\t\t\t\tconst point = new Vector3();\n\t\t\t\tpoint.setFromSphericalCoords( radius, angle, 0 );\n\n\t\t\t\tthresholds.push( point );\n\n\t\t\t}\n\n\t\t\t// generate vertex colors\n\n\t\t\tconst indices = geometry.index;\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst colorAttribute = new BufferAttribute( new Float32Array( geometry.attributes.position.count * 3 ), 3 );\n\n\t\t\tconst position = new Vector3();\n\t\t\tconst color = new Color();\n\n\t\t\tfor ( let i = 0; i < indices.count; i ++ ) {\n\n\t\t\t\tconst index = indices.getX( i );\n\t\t\t\tposition.fromBufferAttribute( positionAttribute, index );\n\n\t\t\t\tlet thresholdIndexA, thresholdIndexB;\n\t\t\t\tlet t = 1;\n\n\t\t\t\tfor ( let j = 1; j < thresholds.length; j ++ ) {\n\n\t\t\t\t\tthresholdIndexA = j - 1;\n\t\t\t\t\tthresholdIndexB = j;\n\n\t\t\t\t\tconst thresholdA = thresholds[ thresholdIndexA ];\n\t\t\t\t\tconst thresholdB = thresholds[ thresholdIndexB ];\n\n\t\t\t\t\tif ( topDown === true ) {\n\n\t\t\t\t\t\t// interpolation for sky color\n\n\t\t\t\t\t\tif ( position.y <= thresholdA.y && position.y > thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// interpolation for ground color\n\n\t\t\t\t\t\tif ( position.y >= thresholdA.y && position.y < thresholdB.y ) {\n\n\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst colorA = colors[ thresholdIndexA ];\n\t\t\t\tconst colorB = colors[ thresholdIndexB ];\n\n\t\t\t\tcolor.copy( colorA ).lerp( colorB, t ).convertSRGBToLinear();\n\n\t\t\t\tcolorAttribute.setXYZ( index, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\t// check version (only 2.0 is supported)\n\n\t\tif ( data.indexOf( '#VRML V2.0' ) === - 1 ) {\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Version of VRML asset not supported.' );\n\n\t\t}\n\n\t\t// create JSON representing the tree structure of the VRML asset\n\n\t\tconst tree = generateVRMLTree( data );\n\n\t\t// parse the tree structure to a three.js scene\n\n\t\tconst scene = parseTree( tree );\n\n\t\treturn scene;\n\n\t}\n\n}\n\nclass VRMLLexer {\n\n\tconstructor( tokens ) {\n\n\t\tthis.lexer = new chevrotain.Lexer( tokens );\n\n\t}\n\n\tlex( inputText ) {\n\n\t\tconst lexingResult = this.lexer.tokenize( inputText );\n\n\t\tif ( lexingResult.errors.length > 0 ) {\n\n\t\t\tconsole.error( lexingResult.errors );\n\n\t\t\tthrow Error( 'THREE.VRMLLexer: Lexing errors detected.' );\n\n\t\t}\n\n\t\treturn lexingResult;\n\n\t}\n\n}\n\nconst CstParser = chevrotain.CstParser;\n\nclass VRMLParser extends CstParser {\n\n\tconstructor( tokenVocabulary ) {\n\n\t\tsuper( tokenVocabulary );\n\n\t\tconst $ = this;\n\n\t\tconst Version = tokenVocabulary[ 'Version' ];\n\t\tconst LCurly = tokenVocabulary[ 'LCurly' ];\n\t\tconst RCurly = tokenVocabulary[ 'RCurly' ];\n\t\tconst LSquare = tokenVocabulary[ 'LSquare' ];\n\t\tconst RSquare = tokenVocabulary[ 'RSquare' ];\n\t\tconst Identifier = tokenVocabulary[ 'Identifier' ];\n\t\tconst RouteIdentifier = tokenVocabulary[ 'RouteIdentifier' ];\n\t\tconst StringLiteral = tokenVocabulary[ 'StringLiteral' ];\n\t\tconst HexLiteral = tokenVocabulary[ 'HexLiteral' ];\n\t\tconst NumberLiteral = tokenVocabulary[ 'NumberLiteral' ];\n\t\tconst TrueLiteral = tokenVocabulary[ 'TrueLiteral' ];\n\t\tconst FalseLiteral = tokenVocabulary[ 'FalseLiteral' ];\n\t\tconst NullLiteral = tokenVocabulary[ 'NullLiteral' ];\n\t\tconst DEF = tokenVocabulary[ 'DEF' ];\n\t\tconst USE = tokenVocabulary[ 'USE' ];\n\t\tconst ROUTE = tokenVocabulary[ 'ROUTE' ];\n\t\tconst TO = tokenVocabulary[ 'TO' ];\n\t\tconst NodeName = tokenVocabulary[ 'NodeName' ];\n\n\t\t$.RULE( 'vrml', function () {\n\n\t\t\t$.SUBRULE( $.version );\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t} );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.route );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'version', function () {\n\n\t\t\t$.CONSUME( Version );\n\n\t\t} );\n\n\t\t$.RULE( 'node', function () {\n\n\t\t\t$.OPTION( function () {\n\n\t\t\t\t$.SUBRULE( $.def );\n\n\t\t\t} );\n\n\t\t\t$.CONSUME( NodeName );\n\t\t\t$.CONSUME( LCurly );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.field );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RCurly );\n\n\t\t} );\n\n\t\t$.RULE( 'field', function () {\n\n\t\t\t$.CONSUME( Identifier );\n\n\t\t\t$.OR2( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.singleFieldValue );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.multiFieldValue );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'def', function () {\n\n\t\t\t$.CONSUME( DEF );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'use', function () {\n\n\t\t\t$.CONSUME( USE );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'singleFieldValue', function () {\n\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( TrueLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( FalseLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'multiFieldValue', function () {\n\n\t\t\t$.CONSUME( LSquare );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RSquare );\n\n\t\t} );\n\n\t\t$.RULE( 'route', function () {\n\n\t\t\t$.CONSUME( ROUTE );\n\t\t\t$.CONSUME( RouteIdentifier );\n\t\t\t$.CONSUME( TO );\n\t\t\t$.CONSUME2( RouteIdentifier );\n\n\t\t} );\n\n\t\tthis.performSelfAnalysis();\n\n\t}\n\n}\n\nclass Face {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\t\tthis.normal = new Vector3();\n\n\t}\n\n}\n\nconst TEXTURE_TYPE = {\n\tINTENSITY: 1,\n\tINTENSITY_ALPHA: 2,\n\tRGB: 3,\n\tRGBA: 4\n};\n\nexport { VRMLLoader };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass VTKLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\t// connectivity of the triangles\n\t\t\tconst indices = [];\n\n\t\t\t// triangles vertices\n\t\t\tconst positions = [];\n\n\t\t\t// red, green, blue colors in the range 0 to 1\n\t\t\tconst colors = [];\n\n\t\t\t// normal vector, one per vertex\n\t\t\tconst normals = [];\n\n\t\t\tlet result;\n\n\t\t\t// pattern for detecting the end of a number sequence\n\t\t\tconst patWord = /^[^\\d.\\s-]+/;\n\n\t\t\t// pattern for reading vertices, 3 floats or integers\n\t\t\tconst pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g;\n\n\t\t\t// pattern for connectivity, an integer followed by any number of ints\n\t\t\t// the first integer is the number of polygon nodes\n\t\t\tconst patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/;\n\n\t\t\t// indicates start of vertex data section\n\t\t\tconst patPOINTS = /^POINTS /;\n\n\t\t\t// indicates start of polygon connectivity section\n\t\t\tconst patPOLYGONS = /^POLYGONS /;\n\n\t\t\t// indicates start of triangle strips section\n\t\t\tconst patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;\n\n\t\t\t// POINT_DATA number_of_values\n\t\t\tconst patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/;\n\n\t\t\t// CELL_DATA number_of_polys\n\t\t\tconst patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/;\n\n\t\t\t// Start of color section\n\t\t\tconst patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/;\n\n\t\t\t// NORMALS Normals float\n\t\t\tconst patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/;\n\n\t\t\tlet inPointsSection = false;\n\t\t\tlet inPolygonsSection = false;\n\t\t\tlet inTriangleStripSection = false;\n\t\t\tlet inPointDataSection = false;\n\t\t\tlet inCellDataSection = false;\n\t\t\tlet inColorSection = false;\n\t\t\tlet inNormalsSection = false;\n\n\t\t\tconst color = new Color();\n\n\t\t\tconst lines = data.split( '\\n' );\n\n\t\t\tfor ( const i in lines ) {\n\n\t\t\t\tconst line = lines[ i ].trim();\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( inPointsSection ) {\n\n\t\t\t\t\t// get the vertices\n\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\tconst x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tconst y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tconst z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPolygonsSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\tconst i0 = parseInt( inds[ 0 ] );\n\t\t\t\t\t\t\tlet k = 1;\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ k ] );\n\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ k + 1 ] );\n\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\t\t\t\t\t\t\t\tk ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inTriangleStripSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tconst numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tconst inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( let j = 0; j < numVertices - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( j % 2 === 1 ) {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconst i0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\tconst i1 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tconst i2 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPointDataSection || inCellDataSection ) {\n\n\t\t\t\t\tif ( inColorSection ) {\n\n\t\t\t\t\t\t// Get the colors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst r = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst g = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst b = parseFloat( result[ 3 ] );\n\n\t\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inNormalsSection ) {\n\n\t\t\t\t\t\t// Get the normal vectors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tconst nx = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tconst ny = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tconst nz = parseFloat( result[ 3 ] );\n\t\t\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( patPOLYGONS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patPOINTS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = true;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patTRIANGLE_STRIPS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = true;\n\n\t\t\t\t} else if ( patPOINT_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinPointDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCELL_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinCellDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCOLOR_SCALARS.exec( line ) !== null ) {\n\n\t\t\t\t\tinColorSection = true;\n\t\t\t\t\tinNormalsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patNORMALS.exec( line ) !== null ) {\n\n\t\t\t\t\tinNormalsSection = true;\n\t\t\t\t\tinColorSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( indices );\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tif ( normals.length === positions.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( colors.length !== indices.length ) {\n\n\t\t\t\t// stagger\n\n\t\t\t\tif ( colors.length === positions.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// cell\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\t\t\t\tconst numTriangles = geometry.attributes.position.count / 3;\n\n\t\t\t\tif ( colors.length === ( numTriangles * 3 ) ) {\n\n\t\t\t\t\tconst newColors = [];\n\n\t\t\t\t\tfor ( let i = 0; i < numTriangles; i ++ ) {\n\n\t\t\t\t\t\tconst r = colors[ 3 * i + 0 ];\n\t\t\t\t\t\tconst g = colors[ 3 * i + 1 ];\n\t\t\t\t\t\tconst b = colors[ 3 * i + 2 ];\n\n\t\t\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\t\t\t\t\t\tnewColors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( newColors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst buffer = new Uint8Array( data );\n\t\t\tconst dataView = new DataView( data );\n\n\t\t\t// Points and normals, by default, are empty\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tlet index = 0;\n\n\t\t\tfunction findString( buffer, start ) {\n\n\t\t\t\tlet index = start;\n\t\t\t\tlet c = buffer[ index ];\n\t\t\t\tconst s = [];\n\t\t\t\twhile ( c !== 10 ) {\n\n\t\t\t\t\ts.push( String.fromCharCode( c ) );\n\t\t\t\t\tindex ++;\n\t\t\t\t\tc = buffer[ index ];\n\n\t\t\t\t}\n\n\t\t\t\treturn { start: start,\n\t\t\t\t\tend: index,\n\t\t\t\t\tnext: index + 1,\n\t\t\t\t\tparsedString: s.join( '' ) };\n\n\t\t\t}\n\n\t\t\tlet state, line;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\t// Get a string\n\t\t\t\tstate = findString( buffer, index );\n\t\t\t\tline = state.parsedString;\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tconst dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( line.indexOf( 'POINTS' ) === 0 ) {\n\n\t\t\t\t\t// Add the points\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Each point is 3 4-byte floats\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tpoints = new Float32Array( numberOfPoints * 3 );\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tpoints[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tpoints[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tpoints[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex = pointIndex + 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'TRIANGLE_STRIPS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// retrieves the n-2 triangles from the triangle strip\n\t\t\t\t\t\tfor ( let j = 0; j < indexCount - 2; j ++ ) {\n\n\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POLYGONS' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tconst size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tconst count = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tconst indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tconst strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( let s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// divide the polygon in n-2 triangle\n\t\t\t\t\t\tfor ( let j = 1; j < indexCount - 1; j ++ ) {\n\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ 0 ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POINT_DATA' ) === 0 ) {\n\n\t\t\t\t\tconst numberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Grab the next line\n\t\t\t\t\tstate = findString( buffer, state.next );\n\n\t\t\t\t\t// Now grab the binary data\n\t\t\t\t\tconst count = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tnormals = new Float32Array( numberOfPoints * 3 );\n\t\t\t\t\tlet pointIndex = state.next;\n\t\t\t\t\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tnormals[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tnormals[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tnormals[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex += 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Increment past our data\n\t\t\t\t\tstate.next = state.next + count;\n\n\t\t\t\t}\n\n\t\t\t\t// Increment index\n\t\t\t\tindex = state.next;\n\n\t\t\t\tif ( index >= buffer.byteLength ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction Float32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Float32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction Int32Concat( first, second ) {\n\n\t\t\tconst firstLength = first.length, result = new Int32Array( firstLength + second.length );\n\n\t\t\tresult.set( first );\n\t\t\tresult.set( second, firstLength );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction parseXML( stringFile ) {\n\n\t\t\t// Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n\t\t\tfunction xmlToJson( xml ) {\n\n\t\t\t\t// Create the return object\n\t\t\t\tlet obj = {};\n\n\t\t\t\tif ( xml.nodeType === 1 ) { // element\n\n\t\t\t\t\t// do attributes\n\n\t\t\t\t\tif ( xml.attributes ) {\n\n\t\t\t\t\t\tif ( xml.attributes.length > 0 ) {\n\n\t\t\t\t\t\t\tobj[ 'attributes' ] = {};\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < xml.attributes.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst attribute = xml.attributes.item( j );\n\t\t\t\t\t\t\t\tobj[ 'attributes' ][ attribute.nodeName ] = attribute.nodeValue.trim();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( xml.nodeType === 3 ) { // text\n\n\t\t\t\t\tobj = xml.nodeValue.trim();\n\n\t\t\t\t}\n\n\t\t\t\t// do children\n\t\t\t\tif ( xml.hasChildNodes() ) {\n\n\t\t\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\t\t\tconst item = xml.childNodes.item( i );\n\t\t\t\t\t\tconst nodeName = item.nodeName;\n\n\t\t\t\t\t\tif ( typeof obj[ nodeName ] === 'undefined' ) {\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ] = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( typeof obj[ nodeName ].push === 'undefined' ) {\n\n\t\t\t\t\t\t\t\tconst old = obj[ nodeName ];\n\t\t\t\t\t\t\t\tobj[ nodeName ] = [ old ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) {\n\n\t\t\t\t\t\t\t\tif ( Array.isArray( tmp[ '#text' ] ) ) {\n\n\t\t\t\t\t\t\t\t\ttmp[ '#text' ] = tmp[ '#text' ][ 0 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tobj[ nodeName ].push( tmp );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\n\t\t\t}\n\n\t\t\t// Taken from Base64-js\n\t\t\tfunction Base64toByteArray( b64 ) {\n\n\t\t\t\tconst Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\t\t\t\tconst revLookup = [];\n\t\t\t\tconst code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\t\t\t\tfor ( let i = 0, l = code.length; i < l; ++ i ) {\n\n\t\t\t\t\trevLookup[ code.charCodeAt( i ) ] = i;\n\n\t\t\t\t}\n\n\t\t\t\trevLookup[ '-'.charCodeAt( 0 ) ] = 62;\n\t\t\t\trevLookup[ '_'.charCodeAt( 0 ) ] = 63;\n\n\t\t\t\tconst len = b64.length;\n\n\t\t\t\tif ( len % 4 > 0 ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid string. Length must be a multiple of 4' );\n\n\t\t\t\t}\n\n\t\t\t\tconst placeHolders = b64[ len - 2 ] === '=' ? 2 : b64[ len - 1 ] === '=' ? 1 : 0;\n\t\t\t\tconst arr = new Arr( len * 3 / 4 - placeHolders );\n\t\t\t\tconst l = placeHolders > 0 ? len - 4 : len;\n\n\t\t\t\tlet L = 0;\n\t\t\t\tlet i, j;\n\n\t\t\t\tfor ( i = 0, j = 0; i < l; i += 4, j += 3 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 18 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 12 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] << 6 ) | revLookup[ b64.charCodeAt( i + 3 ) ];\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF0000 ) >> 16;\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF00 ) >> 8;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\tif ( placeHolders === 2 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 2 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] >> 4 );\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t} else if ( placeHolders === 1 ) {\n\n\t\t\t\t\tconst tmp = ( revLookup[ b64.charCodeAt( i ) ] << 10 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 4 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] >> 2 );\n\t\t\t\t\tarr[ L ++ ] = ( tmp >> 8 ) & 0xFF;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\treturn arr;\n\n\t\t\t}\n\n\t\t\tfunction parseDataArray( ele, compressed ) {\n\n\t\t\t\tlet numBytes = 0;\n\n\t\t\t\tif ( json.attributes.header_type === 'UInt64' ) {\n\n\t\t\t\t\tnumBytes = 8;\n\n\t\t\t\t}\telse if ( json.attributes.header_type === 'UInt32' ) {\n\n\t\t\t\t\tnumBytes = 4;\n\n\t\t\t\t}\n\n\t\t\t\tlet txt, content;\n\n\t\t\t\t// Check the format\n\t\t\t\tif ( ele.attributes.format === 'binary' && compressed ) {\n\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// VTP data with the header has the following structure:\n\t\t\t\t\t// [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n\t\t\t\t\t//\n\t\t\t\t\t// Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n\t\t\t\t\t// [#blocks] = Number of blocks\n\t\t\t\t\t// [#u-size] = Block size before compression\n\t\t\t\t\t// [#p-size] = Size of last partial block (zero if it not needed)\n\t\t\t\t\t// [#c-size-i] = Size in bytes of block i after compression\n\t\t\t\t\t//\n\t\t\t\t\t// The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n\t\t\t\t\t// computed by summing the compressed block sizes from preceding blocks according to the header.\n\n\t\t\t\t\tconst textNode = ele[ '#text' ];\n\t\t\t\t\tconst rawData = Array.isArray( textNode ) ? textNode[ 0 ] : textNode;\n\n\t\t\t\t\tconst byteData = Base64toByteArray( rawData );\n\n\t\t\t\t\t// Each data point consists of 8 bits regardless of the header type\n\t\t\t\t\tconst dataPointSize = 8;\n\n\t\t\t\t\tlet blocks = byteData[ 0 ];\n\t\t\t\t\tfor ( let i = 1; i < numBytes - 1; i ++ ) {\n\n\t\t\t\t\t\tblocks = blocks | ( byteData[ i ] << ( i * dataPointSize ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet headerSize = ( blocks + 3 ) * numBytes;\n\t\t\t\t\tconst padding = ( ( headerSize % 3 ) > 0 ) ? 3 - ( headerSize % 3 ) : 0;\n\t\t\t\t\theaderSize = headerSize + padding;\n\n\t\t\t\t\tconst dataOffsets = [];\n\t\t\t\t\tlet currentOffset = headerSize;\n\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t// Get the blocks sizes after the compression.\n\t\t\t\t\t// There are three blocks before c-size-i, so we skip 3*numBytes\n\t\t\t\t\tconst cSizeStart = 3 * numBytes;\n\n\t\t\t\t\tfor ( let i = 0; i < blocks; i ++ ) {\n\n\t\t\t\t\t\tlet currentBlockSize = byteData[ i * numBytes + cSizeStart ];\n\n\t\t\t\t\t\tfor ( let j = 1; j < numBytes - 1; j ++ ) {\n\n\t\t\t\t\t\t\tcurrentBlockSize = currentBlockSize | ( byteData[ i * numBytes + cSizeStart + j ] << ( j * dataPointSize ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentOffset = currentOffset + currentBlockSize;\n\t\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0; i < dataOffsets.length - 1; i ++ ) {\n\n\t\t\t\t\t\tconst data = fflate.unzlibSync( byteData.slice( dataOffsets[ i ], dataOffsets[ i + 1 ] ) );\n\t\t\t\t\t\tcontent = data.buffer;\n\n\t\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\t\tcontent = new Float32Array( content );\n\t\t\t\t\t\t\ttxt = Float32Concat( txt, content );\n\n\t\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' || ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( content );\n\t\t\t\t\t\t\ttxt = Int32Concat( txt, content );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\tif ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ele.attributes.format === 'binary' && ! compressed ) {\n\n\t\t\t\t\t\tcontent = Base64toByteArray( ele[ '#text' ] );\n\n\t\t\t\t\t\t// VTP data for the uncompressed case has the following structure:\n\t\t\t\t\t\t// [#bytes][DATA]\n\t\t\t\t\t\t// where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n\t\t\t\t\t\tcontent = content.slice( numBytes ).buffer;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ele[ '#text' ] ) {\n\n\t\t\t\t\t\t\tcontent = ele[ '#text' ].split( /\\s+/ ).filter( function ( el ) {\n\n\t\t\t\t\t\t\t\tif ( el !== '' ) return el;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( 0 ).buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\t// Get the content and optimize it\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\ttxt = new Float32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\ttxt = new Int32Array( content );\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // endif ( ele.attributes.format === 'binary' && compressed )\n\n\t\t\t\treturn txt;\n\n\t\t\t}\n\n\t\t\t// Main part\n\t\t\t// Get Dom\n\t\t\tconst dom = new DOMParser().parseFromString( stringFile, 'application/xml' );\n\n\t\t\t// Get the doc\n\t\t\tconst doc = dom.documentElement;\n\t\t\t// Convert to json\n\t\t\tconst json = xmlToJson( doc );\n\t\t\tlet points = [];\n\t\t\tlet normals = [];\n\t\t\tlet indices = [];\n\n\t\t\tif ( json.AppendedData ) {\n\n\t\t\t\tconst appendedData = json.AppendedData[ '#text' ].slice( 1 );\n\t\t\t\tconst piece = json.PolyData.Piece;\n\n\t\t\t\tconst sections = [ 'PointData', 'CellData', 'Points', 'Verts', 'Lines', 'Strips', 'Polys' ];\n\t\t\t\tlet sectionIndex = 0;\n\n\t\t\t\tconst offsets = sections.map( s => {\n\n\t\t\t\t\tconst sect = piece[ s ];\n\n\t\t\t\t\tif ( sect && sect.DataArray ) {\n\n\t\t\t\t\t\tconst arr = Array.isArray( sect.DataArray ) ? sect.DataArray : [ sect.DataArray ];\n\n\t\t\t\t\t\treturn arr.map( a => a.attributes.offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\n\t\t\t\t} ).flat();\n\n\t\t\t\tfor ( const sect of sections ) {\n\n\t\t\t\t\tconst section = piece[ sect ];\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tfor ( const sectionEle of section.DataArray ) {\n\n\t\t\t\t\t\t\t\tsectionEle[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\t\tsectionEle.attributes.format = 'binary';\n\t\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsection.DataArray[ '#text' ] = appendedData.slice( offsets[ sectionIndex ], offsets[ sectionIndex + 1 ] );\n\t\t\t\t\t\t\tsection.DataArray.attributes.format = 'binary';\n\t\t\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.PolyData ) {\n\n\t\t\t\tconst piece = json.PolyData.Piece;\n\t\t\t\tconst compressed = json.attributes.hasOwnProperty( 'compressor' );\n\n\t\t\t\t// Can be optimized\n\t\t\t\t// Loop through the sections\n\t\t\t\tconst sections = [ 'PointData', 'Points', 'Strips', 'Polys' ];// +['CellData', 'Verts', 'Lines'];\n\t\t\t\tlet sectionIndex = 0;\n\t\t\t\tconst numberOfSections = sections.length;\n\n\t\t\t\twhile ( sectionIndex < numberOfSections ) {\n\n\t\t\t\t\tconst section = piece[ sections[ sectionIndex ] ];\n\n\t\t\t\t\t// If it has a DataArray in it\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\t// Depending on the number of DataArrays\n\n\t\t\t\t\t\tlet arr;\n\n\t\t\t\t\t\tif ( Array.isArray( section.DataArray ) ) {\n\n\t\t\t\t\t\t\tarr = section.DataArray;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tarr = [ section.DataArray ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet dataArrayIndex = 0;\n\t\t\t\t\t\tconst numberOfDataArrays = arr.length;\n\n\t\t\t\t\t\twhile ( dataArrayIndex < numberOfDataArrays ) {\n\n\t\t\t\t\t\t\t// Parse the DataArray\n\t\t\t\t\t\t\tif ( ( '#text' in arr[ dataArrayIndex ] ) && ( arr[ dataArrayIndex ][ '#text' ].length > 0 ) ) {\n\n\t\t\t\t\t\t\t\tarr[ dataArrayIndex ].text = parseDataArray( arr[ dataArrayIndex ], compressed );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdataArrayIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( sections[ sectionIndex ] ) {\n\n\t\t\t\t\t\t\t// if iti is point data\n\t\t\t\t\t\t\tcase 'PointData':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\t\t\t\t\t\t\t\t\tconst normalsName = section.attributes.Normals;\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = arr.length; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( normalsName === arr[ i ].attributes.Name ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst components = arr[ i ].attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\t\t\tnormals = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\t\t\tnormals.set( arr[ i ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is points\n\t\t\t\t\t\t\tcase 'Points':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst components = section.DataArray.attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\tpoints = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\tpoints.set( section.DataArray.text, 0 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is strips\n\t\t\t\t\t\t\tcase 'Strips':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfStrips = parseInt( piece.attributes.NumberOfStrips );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfStrips > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfStrips + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0;\n\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, len = numberOfStrips; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst strip = [];\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let s = 0, len1 = offset[ i ], len0 = 0; s < len1 - len0; s ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tstrip.push( connectivity[ s ] );\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let j = 0, len1 = offset[ i ], len0 = 0; j < len1 - len0 - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is polys\n\t\t\t\t\t\t\tcase 'Polys':\n\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t\tconst numberOfPolys = parseInt( piece.attributes.NumberOfPolys );\n\n\t\t\t\t\t\t\t\t\tif ( numberOfPolys > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tconst connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconst offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\tconst size = numberOfPolys + connectivity.length;\n\t\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfPolys );\n\t\t\t\t\t\t\t\t\t\tlet indicesIndex = 0, connectivityIndex = 0;\n\t\t\t\t\t\t\t\t\t\tlet i = 0, len0 = 0;\n\t\t\t\t\t\t\t\t\t\tconst len = numberOfPolys;\n\n\t\t\t\t\t\t\t\t\t\twhile ( i < len ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst poly = [];\n\t\t\t\t\t\t\t\t\t\t\tlet s = 0;\n\t\t\t\t\t\t\t\t\t\t\tconst len1 = offset[ i ];\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( s < len1 - len0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tpoly.push( connectivity[ connectivityIndex ++ ] );\n\t\t\t\t\t\t\t\t\t\t\t\ts ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tlet j = 1;\n\n\t\t\t\t\t\t\t\t\t\t\twhile ( j < len1 - len0 - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ 0 ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\tj ++;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ti ++;\n\t\t\t\t\t\t\t\t\t\t\tlen0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unsupported DATASET type' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst textDecoder = new TextDecoder();\n\n\t\t// get the 5 first lines of the files to check if there is the key word binary\n\t\tconst meta = textDecoder.decode( new Uint8Array( data, 0, 250 ) ).split( '\\n' );\n\n\t\tif ( meta[ 0 ].indexOf( 'xml' ) !== - 1 ) {\n\n\t\t\treturn parseXML( textDecoder.decode( data ) );\n\n\t\t} else if ( meta[ 2 ].includes( 'ASCII' ) ) {\n\n\t\t\treturn parseASCII( textDecoder.decode( data ) );\n\n\t\t} else {\n\n\t\t\treturn parseBinary( data );\n\n\t\t}\n\n\t}\n\n}\n\nexport { VTKLoader };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from 'three';\n\nclass XYZLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\t\tconst color = new Color();\n\n\t\tfor ( let line of lines ) {\n\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.charAt( 0 ) === '#' ) continue; // skip comments\n\n\t\t\tconst lineValues = line.split( /\\s+/ );\n\n\t\t\tif ( lineValues.length === 3 ) {\n\n\t\t\t\t// XYZ\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( lineValues.length === 6 ) {\n\n\t\t\t\t// XYZRGB\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t\tconst r = parseFloat( lineValues[ 3 ] ) / 255;\n\t\t\t\tconst g = parseFloat( lineValues[ 4 ] ) / 255;\n\t\t\t\tconst b = parseFloat( lineValues[ 5 ] ) / 255;\n\n\t\t\t\tcolor.set( r, g, b ).convertSRGBToLinear();\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\tif ( colors.length > 0 ) {\n\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { XYZLoader };\n", "/**\n * MeshGouraudMaterial\n *\n * Lambert illumination model with Gouraud (per-vertex) shading\n *\n */\n\nimport { UniformsUtils, UniformsLib, ShaderMaterial, Color, MultiplyOperation } from 'three';\n\nconst GouraudShader = {\n\n\tname: 'GouraudShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.specularmap,\n\t\tUniformsLib.envmap,\n\t\tUniformsLib.aomap,\n\t\tUniformsLib.lightmap,\n\t\tUniformsLib.emissivemap,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.lights,\n\t\t{\n\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// inlining legacy \n\n\t\t\tvec3 diffuse = vec3( 1.0 );\n\n\t\t\tvec3 geometryPosition = mvPosition.xyz;\n\t\t\tvec3 geometryNormal = normalize( transformedNormal );\n\t\t\tvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\n\n\t\t\tvec3 backGeometryNormal = - geometryNormal;\n\n\t\t\tvLightFront = vec3( 0.0 );\n\t\t\tvIndirectFront = vec3( 0.0 );\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tvLightBack = vec3( 0.0 );\n\t\t\t\tvIndirectBack = vec3( 0.0 );\n\t\t\t#endif\n\n\t\t\tIncidentLight directLight;\n\t\t\tfloat dotNL;\n\t\t\tvec3 directLightColor_Diffuse;\n\n\t\t\tvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\tvIndirectFront += getLightProbeIrradiance( lightProbe, geometryNormal );\n\n\t\t\t#endif\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\n\t\t\t\t#if defined( USE_LIGHT_PROBES )\n\n\t\t\t\t\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometryNormal );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#if NUM_POINT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetPointLightInfo( pointLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_SPOT_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetSpotLightInfo( spotLights[ i ], geometryPosition, directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_DIR_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\t\t\tgetDirectionalLightInfo( directionalLights[ i ], directLight );\n\n\t\t\t\t\tdotNL = dot( geometryNormal, directLight.direction );\n\t\t\t\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\t\t\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#if NUM_HEMI_LIGHTS > 0\n\n\t\t\t\t#pragma unroll_loop_start\n\t\t\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\t\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\n\t\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometryNormal );\n\n\t\t\t\t\t#endif\n\n\t\t\t\t}\n\t\t\t\t#pragma unroll_loop_end\n\n\t\t\t#endif\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define GOURAUD\n\n\t\tuniform vec3 diffuse;\n\t\tuniform vec3 emissive;\n\t\tuniform float opacity;\n\n\t\tvarying vec3 vLightFront;\n\t\tvarying vec3 vIndirectFront;\n\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvarying vec3 vLightBack;\n\t\t\tvarying vec3 vIndirectBack;\n\t\t#endif\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t\t\tvec3 totalEmissiveRadiance = emissive;\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t\t// accumulation\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_LIGHTMAP\n\n\t\t\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\t\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\t\t\treflectedLight.indirectDiffuse += lightMapIrradiance;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\n\t\t\t#else\n\n\t\t\t\treflectedLight.directDiffuse = vLightFront;\n\n\t\t\t#endif\n\n\t\t\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\n\t\t\t// modulation\n\n\t\t\t#include \n\n\t\t\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t\t\t#include \n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\n//\n\nclass MeshGouraudMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshGouraudMaterial = true;\n\n\t\tthis.type = 'MeshGouraudMaterial';\n\n\t\t//this.color = new THREE.Color( 0xffffff ); // diffuse\n\n\t\t//this.map = null;\n\n\t\t//this.lightMap = null;\n\t\t//this.lightMapIntensity = 1.0;\n\n\t\t//this.aoMap = null;\n\t\t//this.aoMapIntensity = 1.0;\n\n\t\t//this.emissive = new THREE.Color( 0x000000 );\n\t\t//this.emissiveIntensity = 1.0;\n\t\t//this.emissiveMap = null;\n\n\t\t//this.specularMap = null;\n\n\t\t//this.alphaMap = null;\n\n\t\t//this.envMap = null;\n\t\tthis.combine = MultiplyOperation; // combine has no uniform\n\t\t//this.reflectivity = 1;\n\t\t//this.refractionRatio = 0.98;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = true; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tconst shader = GouraudShader;\n\n\t\tthis.defines = Object.assign( {}, shader.defines );\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tthis.vertexShader = shader.vertexShader;\n\t\tthis.fragmentShader = shader.fragmentShader;\n\n\t\tconst exposePropertyNames = [\n\t\t\t'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity',\n\t\t\t'emissive', 'emissiveIntensity', 'emissiveMap', 'specularMap', 'alphaMap',\n\t\t\t'envMap', 'reflectivity', 'refractionRatio', 'opacity', 'diffuse'\n\t\t];\n\n\t\tfor ( const propertyName of exposePropertyNames ) {\n\n\t\t\tObject.defineProperty( this, propertyName, {\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms[ propertyName ].value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms[ propertyName ].value = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tObject.defineProperty( this, 'color', Object.getOwnPropertyDescriptor( this, 'diffuse' ) );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshGouraudMaterial };\n", "import {\n\tVector3\n} from 'three';\n\nclass Capsule {\n\n\tconstructor( start = new Vector3( 0, 0, 0 ), end = new Vector3( 0, 1, 0 ), radius = 1 ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.radius = radius;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Capsule( this.start.clone(), this.end.clone(), this.radius );\n\n\t}\n\n\tset( start, end, radius ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\t\tthis.radius = radius;\n\n\t}\n\n\tcopy( capsule ) {\n\n\t\tthis.start.copy( capsule.start );\n\t\tthis.end.copy( capsule.end );\n\t\tthis.radius = capsule.radius;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.copy( this.end ).add( this.start ).multiplyScalar( 0.5 );\n\n\t}\n\n\ttranslate( v ) {\n\n\t\tthis.start.add( v );\n\t\tthis.end.add( v );\n\n\t}\n\n\tcheckAABBAxis( p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius ) {\n\n\t\treturn (\n\t\t\t( minx - p1x < radius || minx - p2x < radius ) &&\n\t\t\t( p1x - maxx < radius || p2x - maxx < radius ) &&\n\t\t\t( miny - p1y < radius || miny - p2y < radius ) &&\n\t\t\t( p1y - maxy < radius || p2y - maxy < radius )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn (\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.y, this.end.x, this.end.y,\n\t\t\t\tbox.min.x, box.max.x, box.min.y, box.max.y,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.x, this.start.z, this.end.x, this.end.z,\n\t\t\t\tbox.min.x, box.max.x, box.min.z, box.max.z,\n\t\t\t\tthis.radius ) &&\n\t\t\tthis.checkAABBAxis(\n\t\t\t\tthis.start.y, this.start.z, this.end.y, this.end.z,\n\t\t\t\tbox.min.y, box.max.y, box.min.z, box.max.z,\n\t\t\t\tthis.radius )\n\t\t);\n\n\t}\n\n}\n\nexport { Capsule };\n", "import { MathUtils } from 'three';\n\nconst _hsl = {};\n\nclass ColorConverter {\n\n\tstatic setHSV( color, h, s, v ) {\n\n\t\t// https://gist.github.com/xpansive/1337890#file-index-js\n\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tv = MathUtils.clamp( v, 0, 1 );\n\n\t\treturn color.setHSL( h, ( s * v ) / ( ( h = ( 2 - s ) * v ) < 1 ? h : ( 2 - h ) ), h * 0.5 );\n\n\t}\n\n\tstatic getHSV( color, target ) {\n\n\t\tcolor.getHSL( _hsl );\n\n\t\t// based on https://gist.github.com/xpansive/1337890#file-index-js\n\t\t_hsl.s *= ( _hsl.l < 0.5 ) ? _hsl.l : ( 1 - _hsl.l );\n\n\t\ttarget.h = _hsl.h;\n\t\ttarget.s = 2 * _hsl.s / ( _hsl.l + _hsl.s );\n\t\ttarget.v = _hsl.l + _hsl.s;\n\n\t\treturn target;\n\n\t}\n\n}\n\nexport { ColorConverter };\n", "// https://cs.nyu.edu/~perlin/noise/\n\nconst _p = [ 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10,\n\t 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87,\n\t 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211,\n\t 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208,\n\t 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,\n\t 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119,\n\t 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232,\n\t 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,\n\t 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205,\n\t 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 ];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_p[ 256 + i ] = _p[ i ];\n\n}\n\nfunction fade( t ) {\n\n\treturn t * t * t * ( t * ( t * 6 - 15 ) + 10 );\n\n}\n\nfunction lerp( t, a, b ) {\n\n\treturn a + t * ( b - a );\n\n}\n\nfunction grad( hash, x, y, z ) {\n\n\tconst h = hash & 15;\n\tconst u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;\n\treturn ( ( h & 1 ) == 0 ? u : - u ) + ( ( h & 2 ) == 0 ? v : - v );\n\n}\n\nclass ImprovedNoise {\n\n\tnoise( x, y, z ) {\n\n\t\tconst floorX = Math.floor( x ), floorY = Math.floor( y ), floorZ = Math.floor( z );\n\n\t\tconst X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;\n\n\t\tx -= floorX;\n\t\ty -= floorY;\n\t\tz -= floorZ;\n\n\t\tconst xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;\n\n\t\tconst u = fade( x ), v = fade( y ), w = fade( z );\n\n\t\tconst A = _p[ X ] + Y, AA = _p[ A ] + Z, AB = _p[ A + 1 ] + Z, B = _p[ X + 1 ] + Y, BA = _p[ B ] + Z, BB = _p[ B + 1 ] + Z;\n\n\t\treturn lerp( w, lerp( v, lerp( u, grad( _p[ AA ], x, y, z ),\n\t\t\tgrad( _p[ BA ], xMinus1, y, z ) ),\n\t\tlerp( u, grad( _p[ AB ], x, yMinus1, z ),\n\t\t\tgrad( _p[ BB ], xMinus1, yMinus1, z ) ) ),\n\t\tlerp( v, lerp( u, grad( _p[ AA + 1 ], x, y, zMinus1 ),\n\t\t\tgrad( _p[ BA + 1 ], xMinus1, y, zMinus1 ) ),\n\t\tlerp( u, grad( _p[ AB + 1 ], x, yMinus1, zMinus1 ),\n\t\t\tgrad( _p[ BB + 1 ], xMinus1, yMinus1, zMinus1 ) ) ) );\n\n\t}\n\n}\n\nexport { ImprovedNoise };\n", "import {\n\tColor,\n\tLinearSRGBColorSpace,\n\tMathUtils\n} from 'three';\n\nclass Lut {\n\n \tconstructor( colormap, count = 32 ) {\n\n\t\tthis.isLut = true;\n\n\t\tthis.lut = [];\n\t\tthis.map = [];\n\t\tthis.n = 0;\n\t\tthis.minV = 0;\n\t\tthis.maxV = 1;\n\n\t\tthis.setColorMap( colormap, count );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value.isLut === true ) {\n\n\t\t\tthis.copy( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetMin( min ) {\n\n\t\tthis.minV = min;\n\n\t\treturn this;\n\n\t}\n\n\tsetMax( max ) {\n\n\t\tthis.maxV = max;\n\n\t\treturn this;\n\n\t}\n\n\tsetColorMap( colormap, count = 32 ) {\n\n\t\tthis.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow;\n\t\tthis.n = count;\n\n\t\tconst step = 1.0 / this.n;\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\n\t\tthis.lut.length = 0;\n\n\t\t// sample at 0\n\n\t\tthis.lut.push( new Color( this.map[ 0 ][ 1 ] ) );\n\n\t\t// sample at 1/n, ..., (n-1)/n\n\n\t\tfor ( let i = 1; i < count; i ++ ) {\n\n\t\t\tconst alpha = i * step;\n\n\t\t\tfor ( let j = 0; j < this.map.length - 1; j ++ ) {\n\n\t\t\t\tif ( alpha > this.map[ j ][ 0 ] && alpha <= this.map[ j + 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j + 1 ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j + 1 ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tconst color = new Color().lerpColors( minColor, maxColor, ( alpha - min ) / ( max - min ) );\n\n\t\t\t\t\tthis.lut.push( color );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// sample at 1\n\n\t\tthis.lut.push( new Color( this.map[ this.map.length - 1 ][ 1 ] ) );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( lut ) {\n\n\t\tthis.lut = lut.lut;\n\t\tthis.map = lut.map;\n\t\tthis.n = lut.n;\n\t\tthis.minV = lut.minV;\n\t\tthis.maxV = lut.maxV;\n\n\t\treturn this;\n\n\t}\n\n\tgetColor( alpha ) {\n\n\t\talpha = MathUtils.clamp( alpha, this.minV, this.maxV );\n\n\t\talpha = ( alpha - this.minV ) / ( this.maxV - this.minV );\n\n\t\tconst colorPosition = Math.round( alpha * this.n );\n\n\t\treturn this.lut[ colorPosition ];\n\n\t}\n\n\taddColorMap( name, arrayOfColors ) {\n\n\t\tColorMapKeywords[ name ] = arrayOfColors;\n\n\t\treturn this;\n\n\t}\n\n\tcreateCanvas() {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = 1;\n\t\tcanvas.height = this.n;\n\n\t\tthis.updateCanvas( canvas );\n\n\t\treturn canvas;\n\n\t}\n\n\tupdateCanvas( canvas ) {\n\n\t\tconst ctx = canvas.getContext( '2d', { alpha: false } );\n\n\t\tconst imageData = ctx.getImageData( 0, 0, 1, this.n );\n\n\t\tconst data = imageData.data;\n\n\t\tlet k = 0;\n\n\t\tconst step = 1.0 / this.n;\n\n\t\tconst minColor = new Color();\n\t\tconst maxColor = new Color();\n\t\tconst finalColor = new Color();\n\n\t\tfor ( let i = 1; i >= 0; i -= step ) {\n\n\t\t\tfor ( let j = this.map.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tif ( i < this.map[ j ][ 0 ] && i >= this.map[ j - 1 ][ 0 ] ) {\n\n\t\t\t\t\tconst min = this.map[ j - 1 ][ 0 ];\n\t\t\t\t\tconst max = this.map[ j ][ 0 ];\n\n\t\t\t\t\tminColor.setHex( this.map[ j - 1 ][ 1 ], LinearSRGBColorSpace );\n\t\t\t\t\tmaxColor.setHex( this.map[ j ][ 1 ], LinearSRGBColorSpace );\n\n\t\t\t\t\tfinalColor.lerpColors( minColor, maxColor, ( i - min ) / ( max - min ) );\n\n\t\t\t\t\tdata[ k * 4 ] = Math.round( finalColor.r * 255 );\n\t\t\t\t\tdata[ k * 4 + 1 ] = Math.round( finalColor.g * 255 );\n\t\t\t\t\tdata[ k * 4 + 2 ] = Math.round( finalColor.b * 255 );\n\t\t\t\t\tdata[ k * 4 + 3 ] = 255;\n\n\t\t\t\t\tk += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.putImageData( imageData, 0, 0 );\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nconst ColorMapKeywords = {\n\n\t'rainbow': [[ 0.0, 0x0000FF ], [ 0.2, 0x00FFFF ], [ 0.5, 0x00FF00 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFF0000 ]],\n\t'cooltowarm': [[ 0.0, 0x3C4EC2 ], [ 0.2, 0x9BBCFF ], [ 0.5, 0xDCDCDC ], [ 0.8, 0xF6A385 ], [ 1.0, 0xB40426 ]],\n\t'blackbody': [[ 0.0, 0x000000 ], [ 0.2, 0x780000 ], [ 0.5, 0xE63200 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFFFFFF ]],\n\t'grayscale': [[ 0.0, 0x000000 ], [ 0.2, 0x404040 ], [ 0.5, 0x7F7F80 ], [ 0.8, 0xBFBFBF ], [ 1.0, 0xFFFFFF ]]\n\n};\n\nexport { Lut, ColorMapKeywords };\n", "import {\n\tTriangle,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Utility class for sampling weighted random points on the surface of a mesh.\n *\n * Building the sampler is a one-time O(n) operation. Once built, any number of\n * random samples may be selected in O(logn) time. Memory usage is O(n).\n *\n * References:\n * - http://www.joesfer.com/?p=84\n * - https://stackoverflow.com/a/4322940/1314762\n */\n\nconst _face = new Triangle();\nconst _color = new Vector3();\nconst _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();\n\nclass MeshSurfaceSampler {\n\n\tconstructor( mesh ) {\n\n\t\tthis.geometry = mesh.geometry;\n\t\tthis.randomFunction = Math.random;\n\n\t\tthis.indexAttribute = this.geometry.index;\n\t\tthis.positionAttribute = this.geometry.getAttribute( 'position' );\n\t\tthis.normalAttribute = this.geometry.getAttribute( 'normal' );\n\t\tthis.colorAttribute = this.geometry.getAttribute( 'color' );\n\t\tthis.uvAttribute = this.geometry.getAttribute( 'uv' );\n\t\tthis.weightAttribute = null;\n\n\t\tthis.distribution = null;\n\n\t}\n\n\tsetWeightAttribute( name ) {\n\n\t\tthis.weightAttribute = name ? this.geometry.getAttribute( name ) : null;\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tconst positionAttribute = this.positionAttribute;\n\t\tconst weightAttribute = this.weightAttribute;\n\n\t\tconst totalFaces = indexAttribute ? ( indexAttribute.count / 3 ) : ( positionAttribute.count / 3 );\n\t\tconst faceWeights = new Float32Array( totalFaces );\n\n\t\t// Accumulate weights for each mesh face.\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tlet faceWeight = 1;\n\n\t\t\tlet i0 = 3 * i;\n\t\t\tlet i1 = 3 * i + 1;\n\t\t\tlet i2 = 3 * i + 2;\n\n\t\t\tif ( indexAttribute ) {\n\n\t\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\tif ( weightAttribute ) {\n\n\t\t\t\tfaceWeight = weightAttribute.getX( i0 )\n\t\t\t\t\t+ weightAttribute.getX( i1 )\n\t\t\t\t\t+ weightAttribute.getX( i2 );\n\n\t\t\t}\n\n\t\t\t_face.a.fromBufferAttribute( positionAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( positionAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( positionAttribute, i2 );\n\t\t\tfaceWeight *= _face.getArea();\n\n\t\t\tfaceWeights[ i ] = faceWeight;\n\n\t\t}\n\n\t\t// Store cumulative total face weights in an array, where weight index\n\t\t// corresponds to face index.\n\n\t\tconst distribution = new Float32Array( totalFaces );\n\t\tlet cumulativeTotal = 0;\n\n\t\tfor ( let i = 0; i < totalFaces; i ++ ) {\n\n\t\t\tcumulativeTotal += faceWeights[ i ];\n\t\t\tdistribution[ i ] = cumulativeTotal;\n\n\t\t}\n\n\t\tthis.distribution = distribution;\n\t\treturn this;\n\n\t}\n\n\tsetRandomGenerator( randomFunction ) {\n\n\t\tthis.randomFunction = randomFunction;\n\t\treturn this;\n\n\t}\n\n\tsample( targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tconst faceIndex = this.sampleFaceIndex();\n\t\treturn this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );\n\n\t}\n\n\tsampleFaceIndex() {\n\n\t\tconst cumulativeTotal = this.distribution[ this.distribution.length - 1 ];\n\t\treturn this.binarySearch( this.randomFunction() * cumulativeTotal );\n\n\t}\n\n\tbinarySearch( x ) {\n\n\t\tconst dist = this.distribution;\n\t\tlet start = 0;\n\t\tlet end = dist.length - 1;\n\n\t\tlet index = - 1;\n\n\t\twhile ( start <= end ) {\n\n\t\t\tconst mid = Math.ceil( ( start + end ) / 2 );\n\n\t\t\tif ( mid === 0 || dist[ mid - 1 ] <= x && dist[ mid ] > x ) {\n\n\t\t\t\tindex = mid;\n\n\t\t\t\tbreak;\n\n\t\t\t} else if ( x < dist[ mid ] ) {\n\n\t\t\t\tend = mid - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstart = mid + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\tsampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {\n\n\t\tlet u = this.randomFunction();\n\t\tlet v = this.randomFunction();\n\n\t\tif ( u + v > 1 ) {\n\n\t\t\tu = 1 - u;\n\t\t\tv = 1 - v;\n\n\t\t}\n\n\t\t// get the vertex attribute indices\n\t\tconst indexAttribute = this.indexAttribute;\n\t\tlet i0 = faceIndex * 3;\n\t\tlet i1 = faceIndex * 3 + 1;\n\t\tlet i2 = faceIndex * 3 + 2;\n\t\tif ( indexAttribute ) {\n\n\t\t\ti0 = indexAttribute.getX( i0 );\n\t\t\ti1 = indexAttribute.getX( i1 );\n\t\t\ti2 = indexAttribute.getX( i2 );\n\n\t\t}\n\n\t\t_face.a.fromBufferAttribute( this.positionAttribute, i0 );\n\t\t_face.b.fromBufferAttribute( this.positionAttribute, i1 );\n\t\t_face.c.fromBufferAttribute( this.positionAttribute, i2 );\n\n\t\ttargetPosition\n\t\t\t.set( 0, 0, 0 )\n\t\t\t.addScaledVector( _face.a, u )\n\t\t\t.addScaledVector( _face.b, v )\n\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\tif ( targetNormal !== undefined ) {\n\n\t\t\tif ( this.normalAttribute !== undefined ) {\n\n\t\t\t\t_face.a.fromBufferAttribute( this.normalAttribute, i0 );\n\t\t\t\t_face.b.fromBufferAttribute( this.normalAttribute, i1 );\n\t\t\t\t_face.c.fromBufferAttribute( this.normalAttribute, i2 );\n\t\t\t\ttargetNormal.set( 0, 0, 0 ).addScaledVector( _face.a, u ).addScaledVector( _face.b, v ).addScaledVector( _face.c, 1 - ( u + v ) ).normalize();\n\n\t\t\t} else {\n\n\t\t\t\t_face.getNormal( targetNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetColor !== undefined && this.colorAttribute !== undefined ) {\n\n\t\t\t_face.a.fromBufferAttribute( this.colorAttribute, i0 );\n\t\t\t_face.b.fromBufferAttribute( this.colorAttribute, i1 );\n\t\t\t_face.c.fromBufferAttribute( this.colorAttribute, i2 );\n\n\t\t\t_color\n\t\t\t\t.set( 0, 0, 0 )\n\t\t\t\t.addScaledVector( _face.a, u )\n\t\t\t\t.addScaledVector( _face.b, v )\n\t\t\t\t.addScaledVector( _face.c, 1 - ( u + v ) );\n\n\t\t\ttargetColor.r = _color.x;\n\t\t\ttargetColor.g = _color.y;\n\t\t\ttargetColor.b = _color.z;\n\n\t\t}\n\n\t\tif ( targetUV !== undefined && this.uvAttribute !== undefined ) {\n\n\t\t\t_uva.fromBufferAttribute( this.uvAttribute, i0 );\n\t\t\t_uvb.fromBufferAttribute( this.uvAttribute, i1 );\n\t\t\t_uvc.fromBufferAttribute( this.uvAttribute, i2 );\n\t\t\ttargetUV.set( 0, 0 ).addScaledVector( _uva, u ).addScaledVector( _uvb, v ).addScaledVector( _uvc, 1 - ( u + v ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshSurfaceSampler };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMatrix4,\n\tMatrix3,\n\tRay,\n\tVector3\n} from 'three';\n\n// module scope helper variables\n\nconst a = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst b = {\n\tc: null, // center\n\tu: [ new Vector3(), new Vector3(), new Vector3() ], // basis vectors\n\te: [] // half width\n};\n\nconst R = [[], [], []];\nconst AbsR = [[], [], []];\nconst t = [];\n\nconst xAxis = new Vector3();\nconst yAxis = new Vector3();\nconst zAxis = new Vector3();\nconst v1 = new Vector3();\nconst size = new Vector3();\nconst closestPoint = new Vector3();\nconst rotationMatrix = new Matrix3();\nconst aabb = new Box3();\nconst matrix = new Matrix4();\nconst inverse = new Matrix4();\nconst localRay = new Ray();\n\n// OBB\n\nclass OBB {\n\n\tconstructor( center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3() ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t}\n\n\tset( center, halfSize, rotation ) {\n\n\t\tthis.center = center;\n\t\tthis.halfSize = halfSize;\n\t\tthis.rotation = rotation;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( obb ) {\n\n\t\tthis.center.copy( obb.center );\n\t\tthis.halfSize.copy( obb.halfSize );\n\t\tthis.rotation.copy( obb.rotation );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tgetSize( result ) {\n\n\t\treturn result.copy( this.halfSize ).multiplyScalar( 2 );\n\n\t}\n\n\t/**\n\t* Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.1.4)\n\t*/\n\tclampPoint( point, result ) {\n\n\t\tconst halfSize = this.halfSize;\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// start at the center position of the OBB\n\n\t\tresult.copy( this.center );\n\n\t\t// project the target onto the OBB axes and walk towards that point\n\n\t\tconst x = MathUtils.clamp( v1.dot( xAxis ), - halfSize.x, halfSize.x );\n\t\tresult.add( xAxis.multiplyScalar( x ) );\n\n\t\tconst y = MathUtils.clamp( v1.dot( yAxis ), - halfSize.y, halfSize.y );\n\t\tresult.add( yAxis.multiplyScalar( y ) );\n\n\t\tconst z = MathUtils.clamp( v1.dot( zAxis ), - halfSize.z, halfSize.z );\n\t\tresult.add( zAxis.multiplyScalar( z ) );\n\n\t\treturn result;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tv1.subVectors( point, this.center );\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// project v1 onto each axis and check if these points lie inside the OBB\n\n\t\treturn Math.abs( v1.dot( xAxis ) ) <= this.halfSize.x &&\n\t\t\t\tMath.abs( v1.dot( yAxis ) ) <= this.halfSize.y &&\n\t\t\t\tMath.abs( v1.dot( zAxis ) ) <= this.halfSize.z;\n\n\t}\n\n\tintersectsBox3( box3 ) {\n\n\t\treturn this.intersectsOBB( obb.fromBox3( box3 ) );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// find the point on the OBB closest to the sphere center\n\n\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t// if that point is inside the sphere, the OBB and sphere intersect\n\n\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\t/**\n\t* Reference: OBB-OBB Intersection in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 4.4.1)\n\t*\n\t*/\n\tintersectsOBB( obb, epsilon = Number.EPSILON ) {\n\n\t\t// prepare data structures (the code uses the same nomenclature like the reference)\n\n\t\ta.c = this.center;\n\t\ta.e[ 0 ] = this.halfSize.x;\n\t\ta.e[ 1 ] = this.halfSize.y;\n\t\ta.e[ 2 ] = this.halfSize.z;\n\t\tthis.rotation.extractBasis( a.u[ 0 ], a.u[ 1 ], a.u[ 2 ] );\n\n\t\tb.c = obb.center;\n\t\tb.e[ 0 ] = obb.halfSize.x;\n\t\tb.e[ 1 ] = obb.halfSize.y;\n\t\tb.e[ 2 ] = obb.halfSize.z;\n\t\tobb.rotation.extractBasis( b.u[ 0 ], b.u[ 1 ], b.u[ 2 ] );\n\n\t\t// compute rotation matrix expressing b in a's coordinate frame\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tR[ i ][ j ] = a.u[ i ].dot( b.u[ j ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute translation vector\n\n\t\tv1.subVectors( b.c, a.c );\n\n\t\t// bring translation into a's coordinate frame\n\n\t\tt[ 0 ] = v1.dot( a.u[ 0 ] );\n\t\tt[ 1 ] = v1.dot( a.u[ 1 ] );\n\t\tt[ 2 ] = v1.dot( a.u[ 2 ] );\n\n\t\t// compute common subexpressions. Add in an epsilon term to\n\t\t// counteract arithmetic errors when two edges are parallel and\n\t\t// their cross product is (near) null\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tAbsR[ i ][ j ] = Math.abs( R[ i ][ j ] ) + epsilon;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet ra, rb;\n\n\t\t// test axes L = A0, L = A1, L = A2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ i ];\n\t\t\trb = b.e[ 0 ] * AbsR[ i ][ 0 ] + b.e[ 1 ] * AbsR[ i ][ 1 ] + b.e[ 2 ] * AbsR[ i ][ 2 ];\n\t\t\tif ( Math.abs( t[ i ] ) > ra + rb ) return false;\n\n\n\t\t}\n\n\t\t// test axes L = B0, L = B1, L = B2\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tra = a.e[ 0 ] * AbsR[ 0 ][ i ] + a.e[ 1 ] * AbsR[ 1 ][ i ] + a.e[ 2 ] * AbsR[ 2 ][ i ];\n\t\t\trb = b.e[ i ];\n\t\t\tif ( Math.abs( t[ 0 ] * R[ 0 ][ i ] + t[ 1 ] * R[ 1 ][ i ] + t[ 2 ] * R[ 2 ][ i ] ) > ra + rb ) return false;\n\n\t\t}\n\n\t\t// test axis L = A0 x B0\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 0 ] - t[ 1 ] * R[ 2 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B1\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 2 ] + b.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 1 ] - t[ 1 ] * R[ 2 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A0 x B2\n\n\t\tra = a.e[ 1 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 1 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 0 ][ 1 ] + b.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\tif ( Math.abs( t[ 2 ] * R[ 1 ][ 2 ] - t[ 1 ] * R[ 2 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 0 ] + a.e[ 2 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 1 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 0 ] - t[ 2 ] * R[ 0 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 1 ] + a.e[ 2 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 2 ] + b.e[ 2 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 1 ] - t[ 2 ] * R[ 0 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A1 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 2 ][ 2 ] + a.e[ 2 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 1 ][ 1 ] + b.e[ 1 ] * AbsR[ 1 ][ 0 ];\n\t\tif ( Math.abs( t[ 0 ] * R[ 2 ][ 2 ] - t[ 2 ] * R[ 0 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B0\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 0 ] + a.e[ 1 ] * AbsR[ 0 ][ 0 ];\n\t\trb = b.e[ 1 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 1 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 0 ] - t[ 0 ] * R[ 1 ][ 0 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B1\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 1 ] + a.e[ 1 ] * AbsR[ 0 ][ 1 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 2 ] + b.e[ 2 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 1 ] - t[ 0 ] * R[ 1 ][ 1 ] ) > ra + rb ) return false;\n\n\t\t// test axis L = A2 x B2\n\n\t\tra = a.e[ 0 ] * AbsR[ 1 ][ 2 ] + a.e[ 1 ] * AbsR[ 0 ][ 2 ];\n\t\trb = b.e[ 0 ] * AbsR[ 2 ][ 1 ] + b.e[ 1 ] * AbsR[ 2 ][ 0 ];\n\t\tif ( Math.abs( t[ 1 ] * R[ 0 ][ 2 ] - t[ 0 ] * R[ 1 ][ 2 ] ) > ra + rb ) return false;\n\n\t\t// since no separating axis is found, the OBBs must be intersecting\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t* Reference: Testing Box Against Plane in Real-Time Collision Detection\n\t* by Christer Ericson (chapter 5.2.3)\n\t*/\n\tintersectsPlane( plane ) {\n\n\t\tthis.rotation.extractBasis( xAxis, yAxis, zAxis );\n\n\t\t// compute the projection interval radius of this OBB onto L(t) = this->center + t * p.normal;\n\n\t\tconst r = this.halfSize.x * Math.abs( plane.normal.dot( xAxis ) ) +\n\t\t\t\tthis.halfSize.y * Math.abs( plane.normal.dot( yAxis ) ) +\n\t\t\t\tthis.halfSize.z * Math.abs( plane.normal.dot( zAxis ) );\n\n\t\t// compute distance of the OBB's center from the plane\n\n\t\tconst d = plane.normal.dot( this.center ) - plane.constant;\n\n\t\t// Intersection occurs when distance d falls within [-r,+r] interval\n\n\t\treturn Math.abs( d ) <= r;\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test and stores the intersection point\n\t* to the given 3D vector. If no intersection is detected, *null* is returned.\n\t*/\n\tintersectRay( ray, result ) {\n\n\t\t// the idea is to perform the intersection test in the local space\n\t\t// of the OBB.\n\n\t\tthis.getSize( size );\n\t\taabb.setFromCenterAndSize( v1.set( 0, 0, 0 ), size );\n\n\t\t// create a 4x4 transformation matrix\n\n\t\tmatrix.setFromMatrix3( this.rotation );\n\t\tmatrix.setPosition( this.center );\n\n\t\t// transform ray to the local space of the OBB\n\n\t\tinverse.copy( matrix ).invert();\n\t\tlocalRay.copy( ray ).applyMatrix4( inverse );\n\n\t\t// perform ray <-> AABB intersection test\n\n\t\tif ( localRay.intersectBox( aabb, result ) ) {\n\n\t\t\t// transform the intersection point back to world space\n\n\t\t\treturn result.applyMatrix4( matrix );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t* Performs a ray/OBB intersection test. Returns either true or false if\n\t* there is a intersection or not.\n\t*/\n\tintersectsRay( ray ) {\n\n\t\treturn this.intersectRay( ray, v1 ) !== null;\n\n\t}\n\n\tfromBox3( box3 ) {\n\n\t\tbox3.getCenter( this.center );\n\n\t\tbox3.getSize( this.halfSize ).multiplyScalar( 0.5 );\n\n\t\tthis.rotation.identity();\n\n\t\treturn this;\n\n\t}\n\n\tequals( obb ) {\n\n\t\treturn obb.center.equals( this.center ) &&\n\t\t\tobb.halfSize.equals( this.halfSize ) &&\n\t\t\tobb.rotation.equals( this.rotation );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst e = matrix.elements;\n\n\t\tlet sx = v1.set( e[ 0 ], e[ 1 ], e[ 2 ] ).length();\n\t\tconst sy = v1.set( e[ 4 ], e[ 5 ], e[ 6 ] ).length();\n\t\tconst sz = v1.set( e[ 8 ], e[ 9 ], e[ 10 ] ).length();\n\n\t\tconst det = matrix.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\trotationMatrix.setFromMatrix4( matrix );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\trotationMatrix.elements[ 0 ] *= invSX;\n\t\trotationMatrix.elements[ 1 ] *= invSX;\n\t\trotationMatrix.elements[ 2 ] *= invSX;\n\n\t\trotationMatrix.elements[ 3 ] *= invSY;\n\t\trotationMatrix.elements[ 4 ] *= invSY;\n\t\trotationMatrix.elements[ 5 ] *= invSY;\n\n\t\trotationMatrix.elements[ 6 ] *= invSZ;\n\t\trotationMatrix.elements[ 7 ] *= invSZ;\n\t\trotationMatrix.elements[ 8 ] *= invSZ;\n\n\t\tthis.rotation.multiply( rotationMatrix );\n\n\t\tthis.halfSize.x *= sx;\n\t\tthis.halfSize.y *= sy;\n\t\tthis.halfSize.z *= sz;\n\n\t\tv1.setFromMatrixPosition( matrix );\n\t\tthis.center.add( v1 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst obb = new OBB();\n\nexport { OBB };\n", "import {\n\tBox3,\n\tLine3,\n\tPlane,\n\tSphere,\n\tTriangle,\n\tVector3,\n\tLayers\n} from 'three';\nimport { Capsule } from '../math/Capsule.js';\n\n\nconst _v1 = new Vector3();\nconst _v2 = new Vector3();\nconst _point1 = new Vector3();\nconst _point2 = new Vector3();\nconst _plane = new Plane();\nconst _line1 = new Line3();\nconst _line2 = new Line3();\nconst _sphere = new Sphere();\nconst _capsule = new Capsule();\n\nconst _temp1 = new Vector3();\nconst _temp2 = new Vector3();\nconst _temp3 = new Vector3();\nconst EPS = 1e-10;\n\nfunction lineToLineClosestPoints( line1, line2, target1 = null, target2 = null ) {\n\n\tconst r = _temp1.copy( line1.end ).sub( line1.start );\n\tconst s = _temp2.copy( line2.end ).sub( line2.start );\n\tconst w = _temp3.copy( line2.start ).sub( line1.start );\n\n\tconst a = r.dot( s ),\n\t\tb = r.dot( r ),\n\t\tc = s.dot( s ),\n\t\td = s.dot( w ),\n\t\te = r.dot( w );\n\n\tlet t1, t2;\n\tconst divisor = b * c - a * a;\n\n\tif ( Math.abs( divisor ) < EPS ) {\n\n\t\tconst d1 = - d / c;\n\t\tconst d2 = ( a - d ) / c;\n\n\t\tif ( Math.abs( d1 - 0.5 ) < Math.abs( d2 - 0.5 ) ) {\n\n\t\t\tt1 = 0;\n\t\t\tt2 = d1;\n\n\t\t} else {\n\n\t\t\tt1 = 1;\n\t\t\tt2 = d2;\n\n\t\t}\n\n\t} else {\n\n\t\tt1 = ( d * a + e * c ) / divisor;\n\t\tt2 = ( t1 * a - d ) / c;\n\n\t}\n\n\tt2 = Math.max( 0, Math.min( 1, t2 ) );\n\tt1 = Math.max( 0, Math.min( 1, t1 ) );\n\n\tif ( target1 ) {\n\n\t\ttarget1.copy( r ).multiplyScalar( t1 ).add( line1.start );\n\n\t}\n\n\tif ( target2 ) {\n\n\t\ttarget2.copy( s ).multiplyScalar( t2 ).add( line2.start );\n\n\t}\n\n}\n\nclass Octree {\n\n\tconstructor( box ) {\n\n\t\tthis.box = box;\n\t\tthis.bounds = new Box3();\n\n\t\tthis.subTrees = [];\n\t\tthis.triangles = [];\n\t\tthis.layers = new Layers();\n\n\t}\n\n\taddTriangle( triangle ) {\n\n\t\tthis.bounds.min.x = Math.min( this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.min.y = Math.min( this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.min.z = Math.min( this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\t\tthis.bounds.max.x = Math.max( this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x );\n\t\tthis.bounds.max.y = Math.max( this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y );\n\t\tthis.bounds.max.z = Math.max( this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z );\n\n\t\tthis.triangles.push( triangle );\n\n\t\treturn this;\n\n\t}\n\n\tcalcBox() {\n\n\t\tthis.box = this.bounds.clone();\n\n\t\t// offset small amount to account for regular grid\n\t\tthis.box.min.x -= 0.01;\n\t\tthis.box.min.y -= 0.01;\n\t\tthis.box.min.z -= 0.01;\n\n\t\treturn this;\n\n\t}\n\n\tsplit( level ) {\n\n\t\tif ( ! this.box ) return;\n\n\t\tconst subTrees = [];\n\t\tconst halfsize = _v2.copy( this.box.max ).sub( this.box.min ).multiplyScalar( 0.5 );\n\n\t\tfor ( let x = 0; x < 2; x ++ ) {\n\n\t\t\tfor ( let y = 0; y < 2; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z < 2; z ++ ) {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tconst v = _v1.set( x, y, z );\n\n\t\t\t\t\tbox.min.copy( this.box.min ).add( v.multiply( halfsize ) );\n\t\t\t\t\tbox.max.copy( box.min ).add( halfsize );\n\n\t\t\t\t\tsubTrees.push( new Octree( box ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet triangle;\n\n\t\twhile ( triangle = this.triangles.pop() ) {\n\n\t\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\t\tif ( subTrees[ i ].box.intersectsTriangle( triangle ) ) {\n\n\t\t\t\t\tsubTrees[ i ].triangles.push( triangle );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < subTrees.length; i ++ ) {\n\n\t\t\tconst len = subTrees[ i ].triangles.length;\n\n\t\t\tif ( len > 8 && level < 16 ) {\n\n\t\t\t\tsubTrees[ i ].split( level + 1 );\n\n\t\t\t}\n\n\t\t\tif ( len !== 0 ) {\n\n\t\t\t\tthis.subTrees.push( subTrees[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tbuild() {\n\n\t\tthis.calcBox();\n\t\tthis.split( 0 );\n\n\t\treturn this;\n\n\t}\n\n\tgetRayTriangles( ray, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\t\t\tif ( ! ray.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getRayTriangles( ray, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn triangles;\n\n\t}\n\n\ttriangleCapsuleIntersect( capsule, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tconst d1 = _plane.distanceToPoint( capsule.start ) - capsule.radius;\n\t\tconst d2 = _plane.distanceToPoint( capsule.end ) - capsule.radius;\n\n\t\tif ( ( d1 > 0 && d2 > 0 ) || ( d1 < - capsule.radius && d2 < - capsule.radius ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst delta = Math.abs( d1 / ( Math.abs( d1 ) + Math.abs( d2 ) ) );\n\t\tconst intersectPoint = _v1.copy( capsule.start ).lerp( capsule.end, delta );\n\n\t\tif ( triangle.containsPoint( intersectPoint ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs( Math.min( d1, d2 ) ) };\n\n\t\t}\n\n\t\tconst r2 = capsule.radius * capsule.radius;\n\n\t\tconst line1 = _line1.set( capsule.start, capsule.end );\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst line2 = _line2.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\n\t\t\tlineToLineClosestPoints( line1, line2, _point1, _point2 );\n\n\t\t\tif ( _point1.distanceToSquared( _point2 ) < r2 ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tnormal: _point1.clone().sub( _point2 ).normalize(),\n\t\t\t\t\tpoint: _point2.clone(),\n\t\t\t\t\tdepth: capsule.radius - _point1.distanceTo( _point2 )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\ttriangleSphereIntersect( sphere, triangle ) {\n\n\t\ttriangle.getPlane( _plane );\n\n\t\tif ( ! sphere.intersectsPlane( _plane ) ) return false;\n\n\t\tconst depth = Math.abs( _plane.distanceToSphere( sphere ) );\n\t\tconst r2 = sphere.radius * sphere.radius - depth * depth;\n\n\t\tconst plainPoint = _plane.projectPoint( sphere.center, _v1 );\n\n\t\tif ( triangle.containsPoint( sphere.center ) ) {\n\n\t\t\treturn { normal: _plane.normal.clone(), point: plainPoint.clone(), depth: Math.abs( _plane.distanceToSphere( sphere ) ) };\n\n\t\t}\n\n\t\tconst lines = [\n\t\t\t[ triangle.a, triangle.b ],\n\t\t\t[ triangle.b, triangle.c ],\n\t\t\t[ triangle.c, triangle.a ]\n\t\t];\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\t_line1.set( lines[ i ][ 0 ], lines[ i ][ 1 ] );\n\t\t\t_line1.closestPointToPoint( plainPoint, true, _v2 );\n\n\t\t\tconst d = _v2.distanceToSquared( sphere.center );\n\n\t\t\tif ( d < r2 ) {\n\n\t\t\t\treturn { normal: sphere.center.clone().sub( _v2 ).normalize(), point: _v2.clone(), depth: sphere.radius - Math.sqrt( d ) };\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetSphereTriangles( sphere, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! sphere.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getSphereTriangles( sphere, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetCapsuleTriangles( capsule, triangles ) {\n\n\t\tfor ( let i = 0; i < this.subTrees.length; i ++ ) {\n\n\t\t\tconst subTree = this.subTrees[ i ];\n\n\t\t\tif ( ! capsule.intersectsBox( subTree.box ) ) continue;\n\n\t\t\tif ( subTree.triangles.length > 0 ) {\n\n\t\t\t\tfor ( let j = 0; j < subTree.triangles.length; j ++ ) {\n\n\t\t\t\t\tif ( triangles.indexOf( subTree.triangles[ j ] ) === - 1 ) triangles.push( subTree.triangles[ j ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsubTree.getCapsuleTriangles( capsule, triangles );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsphereIntersect( sphere ) {\n\n\t\t_sphere.copy( sphere );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getSphereTriangles( sphere, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleSphereIntersect( _sphere, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_sphere.center.add( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _sphere.center.clone().sub( sphere.center );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tcapsuleIntersect( capsule ) {\n\n\t\t_capsule.copy( capsule );\n\n\t\tconst triangles = [];\n\t\tlet result, hit = false;\n\n\t\tthis.getCapsuleTriangles( _capsule, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tif ( result = this.triangleCapsuleIntersect( _capsule, triangles[ i ] ) ) {\n\n\t\t\t\thit = true;\n\n\t\t\t\t_capsule.translate( result.normal.multiplyScalar( result.depth ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hit ) {\n\n\t\t\tconst collisionVector = _capsule.getCenter( new Vector3() ).sub( capsule.getCenter( _v1 ) );\n\t\t\tconst depth = collisionVector.length();\n\n\t\t\treturn { normal: collisionVector.normalize(), depth: depth };\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\trayIntersect( ray ) {\n\n\t\tif ( ray.direction.length() === 0 ) return;\n\n\t\tconst triangles = [];\n\t\tlet triangle, position, distance = 1e100;\n\n\t\tthis.getRayTriangles( ray, triangles );\n\n\t\tfor ( let i = 0; i < triangles.length; i ++ ) {\n\n\t\t\tconst result = ray.intersectTriangle( triangles[ i ].a, triangles[ i ].b, triangles[ i ].c, true, _v1 );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tconst newdistance = result.sub( ray.origin ).length();\n\n\t\t\t\tif ( distance > newdistance ) {\n\n\t\t\t\t\tposition = result.clone().add( ray.origin );\n\t\t\t\t\tdistance = newdistance;\n\t\t\t\t\ttriangle = triangles[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn distance < 1e100 ? { distance: distance, triangle: triangle, position: position } : false;\n\n\t}\n\n\tfromGraphNode( group ) {\n\n\t\tgroup.updateWorldMatrix( true, true );\n\n\t\tgroup.traverse( ( obj ) => {\n\n\t\t\tif ( obj.isMesh === true ) {\n\n\t\t\t\tif ( this.layers.test( obj.layers ) ) {\n\n\t\t\t\t\tlet geometry, isTemp = false;\n\n\t\t\t\t\tif ( obj.geometry.index !== null ) {\n\n\t\t\t\t\t\tisTemp = true;\n\t\t\t\t\t\tgeometry = obj.geometry.toNonIndexed();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\t\t\tconst v1 = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tconst v2 = new Vector3().fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\t\tconst v3 = new Vector3().fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\t\tv1.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv2.applyMatrix4( obj.matrixWorld );\n\t\t\t\t\t\tv3.applyMatrix4( obj.matrixWorld );\n\n\t\t\t\t\t\tthis.addTriangle( new Triangle( v1, v2, v3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isTemp ) {\n\n\t\t\t\t\t\tgeometry.dispose();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.build();\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tthis.box = null;\n\t\tthis.bounds.makeEmpty();\n\n\t\tthis.subTrees.length = 0;\n\t\tthis.triangles.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Octree };\n", "// Ported from Stefan Gustavson's java implementation\n// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n// Read Stefan's excellent paper for details on how this code works.\n//\n// Sean McCullough banksean@gmail.com\n//\n// Added 4D noise\n\n/**\n * You can pass in a random number generator object if you like.\n * It is assumed to have a random() method.\n */\nclass SimplexNoise {\n\n\tconstructor( r = Math ) {\n\n\t\tthis.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],\n\t\t\t[ 1, 0, 1 ], [ - 1, 0, 1 ], [ 1, 0, - 1 ], [ - 1, 0, - 1 ],\n\t\t\t[ 0, 1, 1 ], [ 0, - 1, 1 ], [ 0, 1, - 1 ], [ 0, - 1, - 1 ]];\n\n\t\tthis.grad4 = [[ 0, 1, 1, 1 ], [ 0, 1, 1, - 1 ], [ 0, 1, - 1, 1 ], [ 0, 1, - 1, - 1 ],\n\t\t\t[ 0, - 1, 1, 1 ], [ 0, - 1, 1, - 1 ], [ 0, - 1, - 1, 1 ], [ 0, - 1, - 1, - 1 ],\n\t\t\t[ 1, 0, 1, 1 ], [ 1, 0, 1, - 1 ], [ 1, 0, - 1, 1 ], [ 1, 0, - 1, - 1 ],\n\t\t\t[ - 1, 0, 1, 1 ], [ - 1, 0, 1, - 1 ], [ - 1, 0, - 1, 1 ], [ - 1, 0, - 1, - 1 ],\n\t\t\t[ 1, 1, 0, 1 ], [ 1, 1, 0, - 1 ], [ 1, - 1, 0, 1 ], [ 1, - 1, 0, - 1 ],\n\t\t\t[ - 1, 1, 0, 1 ], [ - 1, 1, 0, - 1 ], [ - 1, - 1, 0, 1 ], [ - 1, - 1, 0, - 1 ],\n\t\t\t[ 1, 1, 1, 0 ], [ 1, 1, - 1, 0 ], [ 1, - 1, 1, 0 ], [ 1, - 1, - 1, 0 ],\n\t\t\t[ - 1, 1, 1, 0 ], [ - 1, 1, - 1, 0 ], [ - 1, - 1, 1, 0 ], [ - 1, - 1, - 1, 0 ]];\n\n\t\tthis.p = [];\n\n\t\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t\tthis.p[ i ] = Math.floor( r.random() * 256 );\n\n\t\t}\n\n\t\t// To remove the need for index wrapping, double the permutation table length\n\t\tthis.perm = [];\n\n\t\tfor ( let i = 0; i < 512; i ++ ) {\n\n\t\t\tthis.perm[ i ] = this.p[ i & 255 ];\n\n\t\t}\n\n\t\t// A lookup table to traverse the simplex around a given point in 4D.\n\t\t// Details can be found where this table is used, in the 4D noise method.\n\t\tthis.simplex = [\n\t\t\t[ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 2, 3, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 2, 3, 0 ],\n\t\t\t[ 0, 2, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 3, 2, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 1, 2, 0, 3 ], [ 0, 0, 0, 0 ], [ 1, 3, 0, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ],\n\t\t\t[ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 0, 3, 1 ], [ 0, 0, 0, 0 ], [ 2, 1, 3, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 2, 0, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 0, 0, 0, 0 ], [ 3, 1, 2, 0 ],\n\t\t\t[ 2, 1, 0, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 1, 0, 2 ], [ 0, 0, 0, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ]];\n\n\t}\n\n\tdot( g, x, y ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y;\n\n\t}\n\n\tdot3( g, x, y, z ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;\n\n\t}\n\n\tdot4( g, x, y, z, w ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;\n\n\t}\n\n\tnoise( xin, yin ) {\n\n\t\tlet n0; // Noise contributions from the three corners\n\t\tlet n1;\n\t\tlet n2;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F2 = 0.5 * ( Math.sqrt( 3.0 ) - 1.0 );\n\t\tconst s = ( xin + yin ) * F2; // Hairy factor for 2D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst G2 = ( 3.0 - Math.sqrt( 3.0 ) ) / 6.0;\n\t\tconst t = ( i + j ) * G2;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y) space\n\t\tconst Y0 = j - t;\n\t\tconst x0 = xin - X0; // The x,y distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\n\t\t// For the 2D case, the simplex shape is an equilateral triangle.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n\t\tlet j1;\n\t\tif ( x0 > y0 ) {\n\n\t\t\ti1 = 1; j1 = 0;\n\n\t\t\t// lower triangle, XY order: (0,0)->(1,0)->(1,1)\n\n\t\t}\telse {\n\n\t\t\ti1 = 0; j1 = 1;\n\n\t\t} // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n\n\t\t// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n\t\t// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n\t\t// c = (3-sqrt(3))/6\n\t\tconst x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\t\tconst y1 = y0 - j1 + G2;\n\t\tconst x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n\t\tconst y2 = y0 - 1.0 + 2.0 * G2;\n\t\t// Work out the hashed gradient indices of the three simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + 1 + this.perm[ jj + 1 ] ] % 12;\n\t\t// Calculate the contribution from the three corners\n\t\tlet t0 = 0.5 - x0 * x0 - y0 * y0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient\n\n\t\t}\n\n\t\tlet t1 = 0.5 - x1 * x1 - y1 * y1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot( this.grad3[ gi1 ], x1, y1 );\n\n\t\t}\n\n\t\tlet t2 = 0.5 - x2 * x2 - y2 * y2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot( this.grad3[ gi2 ], x2, y2 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to return values in the interval [-1,1].\n\t\treturn 70.0 * ( n0 + n1 + n2 );\n\n\t}\n\n\t// 3D simplex noise\n\tnoise3d( xin, yin, zin ) {\n\n\t\tlet n0; // Noise contributions from the four corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F3 = 1.0 / 3.0;\n\t\tconst s = ( xin + yin + zin ) * F3; // Very nice and simple skew factor for 3D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst k = Math.floor( zin + s );\n\t\tconst G3 = 1.0 / 6.0; // Very nice and simple unskew factor, too\n\t\tconst t = ( i + j + k ) * G3;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst x0 = xin - X0; // The x,y,z distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\t\tconst z0 = zin - Z0;\n\n\t\t// For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second corner of simplex in (i,j,k) coords\n\n\t\tlet j1;\n\t\tlet k1;\n\t\tlet i2; // Offsets for third corner of simplex in (i,j,k) coords\n\t\tlet j2;\n\t\tlet k2;\n\t\tif ( x0 >= y0 ) {\n\n\t\t\tif ( y0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t\t// X Y Z order\n\n\t\t\t} else if ( x0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t\t// X Z Y order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t} // Z X Y order\n\n\t\t} else { // x0 y0 ) ? 32 : 0;\n\t\tconst c2 = ( x0 > z0 ) ? 16 : 0;\n\t\tconst c3 = ( y0 > z0 ) ? 8 : 0;\n\t\tconst c4 = ( x0 > w0 ) ? 4 : 0;\n\t\tconst c5 = ( y0 > w0 ) ? 2 : 0;\n\t\tconst c6 = ( z0 > w0 ) ? 1 : 0;\n\t\tconst c = c1 + c2 + c3 + c4 + c5 + c6;\n\n\t\t// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n\t\t// Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0;\n\t\tconst j1 = simplex[ c ][ 1 ] >= 3 ? 1 : 0;\n\t\tconst k1 = simplex[ c ][ 2 ] >= 3 ? 1 : 0;\n\t\tconst l1 = simplex[ c ][ 3 ] >= 3 ? 1 : 0;\n\t\t// The number 2 in the \"simplex\" array is at the second largest coordinate.\n\t\tconst i2 = simplex[ c ][ 0 ] >= 2 ? 1 : 0;\n\t\tconst j2 = simplex[ c ][ 1 ] >= 2 ? 1 : 0;\n\t\tconst k2 = simplex[ c ][ 2 ] >= 2 ? 1 : 0;\n\t\tconst l2 = simplex[ c ][ 3 ] >= 2 ? 1 : 0;\n\t\t// The number 1 in the \"simplex\" array is at the second smallest coordinate.\n\t\tconst i3 = simplex[ c ][ 0 ] >= 1 ? 1 : 0;\n\t\tconst j3 = simplex[ c ][ 1 ] >= 1 ? 1 : 0;\n\t\tconst k3 = simplex[ c ][ 2 ] >= 1 ? 1 : 0;\n\t\tconst l3 = simplex[ c ][ 3 ] >= 1 ? 1 : 0;\n\t\t// The fifth corner has all coordinate offsets = 1, so no need to look that up.\n\t\tconst x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n\t\tconst y1 = y0 - j1 + G4;\n\t\tconst z1 = z0 - k1 + G4;\n\t\tconst w1 = w0 - l1 + G4;\n\t\tconst x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G4;\n\t\tconst z2 = z0 - k2 + 2.0 * G4;\n\t\tconst w2 = w0 - l2 + 2.0 * G4;\n\t\tconst x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n\t\tconst y3 = y0 - j3 + 3.0 * G4;\n\t\tconst z3 = z0 - k3 + 3.0 * G4;\n\t\tconst w3 = w0 - l3 + 3.0 * G4;\n\t\tconst x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n\t\tconst y4 = y0 - 1.0 + 4.0 * G4;\n\t\tconst z4 = z0 - 1.0 + 4.0 * G4;\n\t\tconst w4 = w0 - 1.0 + 4.0 * G4;\n\t\t// Work out the hashed gradient indices of the five simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst ll = l & 255;\n\t\tconst gi0 = perm[ ii + perm[ jj + perm[ kk + perm[ ll ] ] ] ] % 32;\n\t\tconst gi1 = perm[ ii + i1 + perm[ jj + j1 + perm[ kk + k1 + perm[ ll + l1 ] ] ] ] % 32;\n\t\tconst gi2 = perm[ ii + i2 + perm[ jj + j2 + perm[ kk + k2 + perm[ ll + l2 ] ] ] ] % 32;\n\t\tconst gi3 = perm[ ii + i3 + perm[ jj + j3 + perm[ kk + k3 + perm[ ll + l3 ] ] ] ] % 32;\n\t\tconst gi4 = perm[ ii + 1 + perm[ jj + 1 + perm[ kk + 1 + perm[ ll + 1 ] ] ] ] % 32;\n\t\t// Calculate the contribution from the five corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this.dot4( grad4[ gi0 ], x0, y0, z0, w0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this.dot4( grad4[ gi1 ], x1, y1, z1, w1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this.dot4( grad4[ gi2 ], x2, y2, z2, w2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this.dot4( grad4[ gi3 ], x3, y3, z3, w3 );\n\n\t\t}\n\n\t\tlet t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n\t\tif ( t4 < 0 ) n4 = 0.0;\n\t\telse {\n\n\t\t\tt4 *= t4;\n\t\t\tn4 = t4 * t4 * this.dot4( grad4[ gi4 ], x4, y4, z4, w4 );\n\n\t\t}\n\n\t\t// Sum up and scale the result to cover the range [-1,1]\n\t\treturn 27.0 * ( n0 + n1 + n2 + n3 + n4 );\n\n\t}\n\n}\n\nexport { SimplexNoise };\n", "import {\n\tLine3,\n\tMesh,\n\tPlane,\n\tVector3\n} from 'three';\nimport { ConvexGeometry } from '../geometries/ConvexGeometry.js';\n\n/**\n * @fileoverview This class can be used to subdivide a convex Geometry object into pieces.\n *\n * Usage:\n *\n * Use the function prepareBreakableObject to prepare a Mesh object to be broken.\n *\n * Then, call the various functions to subdivide the object (subdivideByImpact, cutByPlane)\n *\n * Sub-objects that are product of subdivision don't need prepareBreakableObject to be called on them.\n *\n * Requisites for the object:\n *\n * - Mesh object must have a buffer geometry and a material\n *\n * - Vertex normals must be planar (not smoothed)\n *\n * - The geometry must be convex (this is not checked in the library). You can create convex\n * geometries with ConvexGeometry. The BoxGeometry, SphereGeometry and other convex primitives\n * can also be used.\n *\n * Note: This lib adds member variables to object's userData member (see prepareBreakableObject function)\n * Use with caution and read the code when using with other libs.\n *\n * @param {double} minSizeForBreak Min size a debris can have to break.\n * @param {double} smallDelta Max distance to consider that a point belongs to a plane.\n *\n*/\n\nconst _v1 = new Vector3();\n\nclass ConvexObjectBreaker {\n\n\tconstructor( minSizeForBreak = 1.4, smallDelta = 0.0001 ) {\n\n\t\tthis.minSizeForBreak = minSizeForBreak;\n\t\tthis.smallDelta = smallDelta;\n\n\t\tthis.tempLine1 = new Line3();\n\t\tthis.tempPlane1 = new Plane();\n\t\tthis.tempPlane2 = new Plane();\n\t\tthis.tempPlane_Cut = new Plane();\n\t\tthis.tempCM1 = new Vector3();\n\t\tthis.tempCM2 = new Vector3();\n\t\tthis.tempVector3 = new Vector3();\n\t\tthis.tempVector3_2 = new Vector3();\n\t\tthis.tempVector3_3 = new Vector3();\n\t\tthis.tempVector3_P0 = new Vector3();\n\t\tthis.tempVector3_P1 = new Vector3();\n\t\tthis.tempVector3_P2 = new Vector3();\n\t\tthis.tempVector3_N0 = new Vector3();\n\t\tthis.tempVector3_N1 = new Vector3();\n\t\tthis.tempVector3_AB = new Vector3();\n\t\tthis.tempVector3_CB = new Vector3();\n\t\tthis.tempResultObjects = { object1: null, object2: null };\n\n\t\tthis.segments = [];\n\t\tconst n = 30 * 30;\n\t\tfor ( let i = 0; i < n; i ++ ) this.segments[ i ] = false;\n\n\t}\n\n\tprepareBreakableObject( object, mass, velocity, angularVelocity, breakable ) {\n\n\t\t// object is a Object3d (normally a Mesh), must have a buffer geometry, and it must be convex.\n\t\t// Its material property is propagated to its children (sub-pieces)\n\t\t// mass must be > 0\n\n\t\tconst userData = object.userData;\n\t\tuserData.mass = mass;\n\t\tuserData.velocity = velocity.clone();\n\t\tuserData.angularVelocity = angularVelocity.clone();\n\t\tuserData.breakable = breakable;\n\n\t}\n\n\t/*\n\t * @param {int} maxRadialIterations Iterations for radial cuts.\n\t * @param {int} maxRandomIterations Max random iterations for not-radial cuts\n\t *\n\t * Returns the array of pieces\n\t */\n\tsubdivideByImpact( object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations ) {\n\n\t\tconst debris = [];\n\n\t\tconst tempPlane1 = this.tempPlane1;\n\t\tconst tempPlane2 = this.tempPlane2;\n\n\t\tthis.tempVector3.addVectors( pointOfImpact, normal );\n\t\ttempPlane1.setFromCoplanarPoints( pointOfImpact, object.position, this.tempVector3 );\n\n\t\tconst maxTotalIterations = maxRandomIterations + maxRadialIterations;\n\n\t\tconst scope = this;\n\n\t\tfunction subdivideRadial( subObject, startAngle, endAngle, numIterations ) {\n\n\t\t\tif ( Math.random() < numIterations * 0.05 || numIterations > maxTotalIterations ) {\n\n\t\t\t\tdebris.push( subObject );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet angle = Math.PI;\n\n\t\t\tif ( numIterations === 0 ) {\n\n\t\t\t\ttempPlane2.normal.copy( tempPlane1.normal );\n\t\t\t\ttempPlane2.constant = tempPlane1.constant;\n\n\t\t\t} else {\n\n\t\t\t\tif ( numIterations <= maxRadialIterations ) {\n\n\t\t\t\t\tangle = ( endAngle - startAngle ) * ( 0.2 + 0.6 * Math.random() ) + startAngle;\n\n\t\t\t\t\t// Rotate tempPlane2 at impact point around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( object.position ).sub( pointOfImpact ).applyAxisAngle( normal, angle ).add( pointOfImpact );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( pointOfImpact, scope.tempVector3, scope.tempVector3_2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tangle = ( ( 0.5 * ( numIterations & 1 ) ) + 0.2 * ( 2 - Math.random() ) ) * Math.PI;\n\n\t\t\t\t\t// Rotate tempPlane2 at object position around normal axis and the angle\n\t\t\t\t\tscope.tempVector3_2.copy( pointOfImpact ).sub( subObject.position ).applyAxisAngle( normal, angle ).add( subObject.position );\n\t\t\t\t\tscope.tempVector3_3.copy( normal ).add( subObject.position );\n\t\t\t\t\ttempPlane2.setFromCoplanarPoints( subObject.position, scope.tempVector3_3, scope.tempVector3_2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Perform the cut\n\t\t\tscope.cutByPlane( subObject, tempPlane2, scope.tempResultObjects );\n\n\t\t\tconst obj1 = scope.tempResultObjects.object1;\n\t\t\tconst obj2 = scope.tempResultObjects.object2;\n\n\t\t\tif ( obj1 ) {\n\n\t\t\t\tsubdivideRadial( obj1, startAngle, angle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t\tif ( obj2 ) {\n\n\t\t\t\tsubdivideRadial( obj2, angle, endAngle, numIterations + 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsubdivideRadial( object, 0, 2 * Math.PI, 0 );\n\n\t\treturn debris;\n\n\t}\n\n\tcutByPlane( object, plane, output ) {\n\n\t\t// Returns breakable objects in output.object1 and output.object2 members, the resulting 2 pieces of the cut.\n\t\t// object2 can be null if the plane doesn't cut the object.\n\t\t// object1 can be null only in case of internal error\n\t\t// Returned value is number of pieces, 0 for error.\n\n\t\tconst geometry = object.geometry;\n\t\tconst coords = geometry.attributes.position.array;\n\t\tconst normals = geometry.attributes.normal.array;\n\n\t\tconst numPoints = coords.length / 3;\n\t\tlet numFaces = numPoints / 3;\n\n\t\tlet indices = geometry.getIndex();\n\n\t\tif ( indices ) {\n\n\t\t\tindices = indices.array;\n\t\t\tnumFaces = indices.length / 3;\n\n\t\t}\n\n\t\tfunction getVertexIndex( faceIdx, vert ) {\n\n\t\t\t// vert = 0, 1 or 2.\n\n\t\t\tconst idx = faceIdx * 3 + vert;\n\n\t\t\treturn indices ? indices[ idx ] : idx;\n\n\t\t}\n\n\t\tconst points1 = [];\n\t\tconst points2 = [];\n\n\t\tconst delta = this.smallDelta;\n\n\t\t// Reset segments mark\n\t\tconst numPointPairs = numPoints * numPoints;\n\t\tfor ( let i = 0; i < numPointPairs; i ++ ) this.segments[ i ] = false;\n\n\t\tconst p0 = this.tempVector3_P0;\n\t\tconst p1 = this.tempVector3_P1;\n\t\tconst n0 = this.tempVector3_N0;\n\t\tconst n1 = this.tempVector3_N1;\n\n\t\t// Iterate through the faces to mark edges shared by coplanar faces\n\t\tfor ( let i = 0; i < numFaces - 1; i ++ ) {\n\n\t\t\tconst a1 = getVertexIndex( i, 0 );\n\t\t\tconst b1 = getVertexIndex( i, 1 );\n\t\t\tconst c1 = getVertexIndex( i, 2 );\n\n\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\tn0.set( normals[ a1 ], normals[ a1 ] + 1, normals[ a1 ] + 2 );\n\n\t\t\tfor ( let j = i + 1; j < numFaces; j ++ ) {\n\n\t\t\t\tconst a2 = getVertexIndex( j, 0 );\n\t\t\t\tconst b2 = getVertexIndex( j, 1 );\n\t\t\t\tconst c2 = getVertexIndex( j, 2 );\n\n\t\t\t\t// Assuming all 3 vertices have the same normal\n\t\t\t\tn1.set( normals[ a2 ], normals[ a2 ] + 1, normals[ a2 ] + 2 );\n\n\t\t\t\tconst coplanar = 1 - n0.dot( n1 ) < delta;\n\n\t\t\t\tif ( coplanar ) {\n\n\t\t\t\t\tif ( a1 === a2 || a1 === b2 || a1 === c2 ) {\n\n\t\t\t\t\t\tif ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + b1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ b1 * numPoints + a1 ] = true;\n\n\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\tthis.segments[ c1 * numPoints + a1 ] = true;\n\t\t\t\t\t\t\tthis.segments[ a1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\telse if ( b1 === a2 || b1 === b2 || b1 === c2 ) {\n\n\t\t\t\t\t\tthis.segments[ c1 * numPoints + b1 ] = true;\n\t\t\t\t\t\tthis.segments[ b1 * numPoints + c1 ] = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Transform the plane to object local space\n\t\tconst localPlane = this.tempPlane_Cut;\n\t\tobject.updateMatrix();\n\t\tConvexObjectBreaker.transformPlaneToLocalSpace( plane, object.matrix, localPlane );\n\n\t\t// Iterate through the faces adding points to both pieces\n\t\tfor ( let i = 0; i < numFaces; i ++ ) {\n\n\t\t\tconst va = getVertexIndex( i, 0 );\n\t\t\tconst vb = getVertexIndex( i, 1 );\n\t\t\tconst vc = getVertexIndex( i, 2 );\n\n\t\t\tfor ( let segment = 0; segment < 3; segment ++ ) {\n\n\t\t\t\tconst i0 = segment === 0 ? va : ( segment === 1 ? vb : vc );\n\t\t\t\tconst i1 = segment === 0 ? vb : ( segment === 1 ? vc : va );\n\n\t\t\t\tconst segmentState = this.segments[ i0 * numPoints + i1 ];\n\n\t\t\t\tif ( segmentState ) continue; // The segment already has been processed in another face\n\n\t\t\t\t// Mark segment as processed (also inverted segment)\n\t\t\t\tthis.segments[ i0 * numPoints + i1 ] = true;\n\t\t\t\tthis.segments[ i1 * numPoints + i0 ] = true;\n\n\t\t\t\tp0.set( coords[ 3 * i0 ], coords[ 3 * i0 + 1 ], coords[ 3 * i0 + 2 ] );\n\t\t\t\tp1.set( coords[ 3 * i1 ], coords[ 3 * i1 + 1 ], coords[ 3 * i1 + 2 ] );\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark0 = 0;\n\n\t\t\t\tlet d = localPlane.distanceToPoint( p0 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark0 = 2;\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark0 = 1;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmark0 = 3;\n\t\t\t\t\tpoints1.push( p0.clone() );\n\t\t\t\t\tpoints2.push( p0.clone() );\n\n\t\t\t\t}\n\n\t\t\t\t// mark: 1 for negative side, 2 for positive side, 3 for coplanar point\n\t\t\t\tlet mark1 = 0;\n\n\t\t\t\td = localPlane.distanceToPoint( p1 );\n\n\t\t\t\tif ( d > delta ) {\n\n\t\t\t\t\tmark1 = 2;\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t} else if ( d < - delta ) {\n\n\t\t\t\t\tmark1 = 1;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\n\t\t\t\t}\telse {\n\n\t\t\t\t\tmark1 = 3;\n\t\t\t\t\tpoints1.push( p1.clone() );\n\t\t\t\t\tpoints2.push( p1.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( mark0 === 1 && mark1 === 2 ) || ( mark0 === 2 && mark1 === 1 ) ) {\n\n\t\t\t\t\t// Intersection of segment with the plane\n\n\t\t\t\t\tthis.tempLine1.start.copy( p0 );\n\t\t\t\t\tthis.tempLine1.end.copy( p1 );\n\n\t\t\t\t\tlet intersection = new Vector3();\n\t\t\t\t\tintersection = localPlane.intersectLine( this.tempLine1, intersection );\n\n\t\t\t\t\tif ( intersection === null ) {\n\n\t\t\t\t\t\t// Shouldn't happen\n\t\t\t\t\t\tconsole.error( 'Internal error: segment does not intersect plane.' );\n\t\t\t\t\t\toutput.segmentedObject1 = null;\n\t\t\t\t\t\toutput.segmentedObject2 = null;\n\t\t\t\t\t\treturn 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints1.push( intersection );\n\t\t\t\t\tpoints2.push( intersection.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Calculate debris mass (very fast and imprecise):\n\t\tconst newMass = object.userData.mass * 0.5;\n\n\t\t// Calculate debris Center of Mass (again fast and imprecise)\n\t\tthis.tempCM1.set( 0, 0, 0 );\n\t\tlet radius1 = 0;\n\t\tconst numPoints1 = points1.length;\n\n\t\tif ( numPoints1 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) this.tempCM1.add( points1[ i ] );\n\n\t\t\tthis.tempCM1.divideScalar( numPoints1 );\n\t\t\tfor ( let i = 0; i < numPoints1; i ++ ) {\n\n\t\t\t\tconst p = points1[ i ];\n\t\t\t\tp.sub( this.tempCM1 );\n\t\t\t\tradius1 = Math.max( radius1, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM1.add( object.position );\n\n\t\t}\n\n\t\tthis.tempCM2.set( 0, 0, 0 );\n\t\tlet radius2 = 0;\n\t\tconst numPoints2 = points2.length;\n\t\tif ( numPoints2 > 0 ) {\n\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) this.tempCM2.add( points2[ i ] );\n\n\t\t\tthis.tempCM2.divideScalar( numPoints2 );\n\t\t\tfor ( let i = 0; i < numPoints2; i ++ ) {\n\n\t\t\t\tconst p = points2[ i ];\n\t\t\t\tp.sub( this.tempCM2 );\n\t\t\t\tradius2 = Math.max( radius2, p.x, p.y, p.z );\n\n\t\t\t}\n\n\t\t\tthis.tempCM2.add( object.position );\n\n\t\t}\n\n\t\tlet object1 = null;\n\t\tlet object2 = null;\n\n\t\tlet numObjects = 0;\n\n\t\tif ( numPoints1 > 4 ) {\n\n\t\t\tobject1 = new Mesh( new ConvexGeometry( points1 ), object.material );\n\t\t\tobject1.position.copy( this.tempCM1 );\n\t\t\tobject1.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object1, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius1 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\tif ( numPoints2 > 4 ) {\n\n\t\t\tobject2 = new Mesh( new ConvexGeometry( points2 ), object.material );\n\t\t\tobject2.position.copy( this.tempCM2 );\n\t\t\tobject2.quaternion.copy( object.quaternion );\n\n\t\t\tthis.prepareBreakableObject( object2, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius2 > this.minSizeForBreak );\n\n\t\t\tnumObjects ++;\n\n\t\t}\n\n\t\toutput.object1 = object1;\n\t\toutput.object2 = object2;\n\n\t\treturn numObjects;\n\n\t}\n\n\tstatic transformFreeVector( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tv.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tv.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformFreeVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a free vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z;\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z;\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z;\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformTiedVectorInverse( v, m ) {\n\n\t\t// input:\n\t\t// vector interpreted as a tied (ordinary) vector\n\t\t// THREE.Matrix4 orthogonal matrix (matrix without scale)\n\n\t\tconst x = v.x, y = v.y, z = v.z;\n\t\tconst e = m.elements;\n\n\t\tv.x = e[ 0 ] * x + e[ 1 ] * y + e[ 2 ] * z - e[ 12 ];\n\t\tv.y = e[ 4 ] * x + e[ 5 ] * y + e[ 6 ] * z - e[ 13 ];\n\t\tv.z = e[ 8 ] * x + e[ 9 ] * y + e[ 10 ] * z - e[ 14 ];\n\n\t\treturn v;\n\n\t}\n\n\tstatic transformPlaneToLocalSpace( plane, m, resultPlane ) {\n\n\t\tresultPlane.normal.copy( plane.normal );\n\t\tresultPlane.constant = plane.constant;\n\n\t\tconst referencePoint = ConvexObjectBreaker.transformTiedVectorInverse( plane.coplanarPoint( _v1 ), m );\n\n\t\tConvexObjectBreaker.transformFreeVectorInverse( resultPlane.normal, m );\n\n\t\t// recalculate constant (like in setFromNormalAndCoplanarPoint)\n\t\tresultPlane.constant = - referencePoint.dot( resultPlane.normal );\n\n\t}\n\n}\n\nexport { ConvexObjectBreaker };\n", "import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\nclass Pass {\n\n\tconstructor() {\n\n\t\tthis.isPass = true;\n\n\t\t// if set to true, the pass is processed by the composer\n\t\tthis.enabled = true;\n\n\t\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\t\tthis.needsSwap = true;\n\n\t\t// if set to true, the pass clears its buffer before rendering\n\t\tthis.clear = false;\n\n\t\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\tsetSize( /* width, height */ ) {}\n\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\nclass FullScreenQuad {\n\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n", "import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tFloatType,\n\tNearestFilter,\n\tRGBAFormat,\n\tShaderMaterial,\n\tWebGLRenderTarget\n} from 'three';\n\nimport { FullScreenQuad } from '../postprocessing/Pass.js';\n\n/**\n * GPUComputationRenderer, based on SimulationRenderer by zz85\n *\n * The GPUComputationRenderer uses the concept of variables. These variables are RGBA float textures that hold 4 floats\n * for each compute element (texel)\n *\n * Each variable has a fragment shader that defines the computation made to obtain the variable in question.\n * You can use as many variables you need, and make dependencies so you can use textures of other variables in the shader\n * (the sampler uniforms are added automatically) Most of the variables will need themselves as dependency.\n *\n * The renderer has actually two render targets per variable, to make ping-pong. Textures from the current frame are used\n * as inputs to render the textures of the next frame.\n *\n * The render targets of the variables can be used as input textures for your visualization shaders.\n *\n * Variable names should be valid identifiers and should not collide with THREE GLSL used identifiers.\n * a common approach could be to use 'texture' prefixing the variable name; i.e texturePosition, textureVelocity...\n *\n * The size of the computation (sizeX * sizeY) is defined as 'resolution' automatically in the shader. For example:\n * #DEFINE resolution vec2( 1024.0, 1024.0 )\n *\n * -------------\n *\n * Basic use:\n *\n * // Initialization...\n *\n * // Create computation renderer\n * const gpuCompute = new GPUComputationRenderer( 1024, 1024, renderer );\n *\n * // Create initial state float textures\n * const pos0 = gpuCompute.createTexture();\n * const vel0 = gpuCompute.createTexture();\n * // and fill in here the texture data...\n *\n * // Add texture variables\n * const velVar = gpuCompute.addVariable( \"textureVelocity\", fragmentShaderVel, vel0 );\n * const posVar = gpuCompute.addVariable( \"texturePosition\", fragmentShaderPos, pos0 );\n *\n * // Add variable dependencies\n * gpuCompute.setVariableDependencies( velVar, [ velVar, posVar ] );\n * gpuCompute.setVariableDependencies( posVar, [ velVar, posVar ] );\n *\n * // Add custom uniforms\n * velVar.material.uniforms.time = { value: 0.0 };\n *\n * // Check for completeness\n * const error = gpuCompute.init();\n * if ( error !== null ) {\n *\t\tconsole.error( error );\n * }\n *\n *\n * // In each frame...\n *\n * // Compute!\n * gpuCompute.compute();\n *\n * // Update texture uniforms in your visualization materials with the gpu renderer output\n * myMaterial.uniforms.myTexture.value = gpuCompute.getCurrentRenderTarget( posVar ).texture;\n *\n * // Do your rendering\n * renderer.render( myScene, myCamera );\n *\n * -------------\n *\n * Also, you can use utility functions to create ShaderMaterial and perform computations (rendering between textures)\n * Note that the shaders can have multiple input textures.\n *\n * const myFilter1 = gpuCompute.createShaderMaterial( myFilterFragmentShader1, { theTexture: { value: null } } );\n * const myFilter2 = gpuCompute.createShaderMaterial( myFilterFragmentShader2, { theTexture: { value: null } } );\n *\n * const inputTexture = gpuCompute.createTexture();\n *\n * // Fill in here inputTexture...\n *\n * myFilter1.uniforms.theTexture.value = inputTexture;\n *\n * const myRenderTarget = gpuCompute.createRenderTarget();\n * myFilter2.uniforms.theTexture.value = myRenderTarget.texture;\n *\n * const outputRenderTarget = gpuCompute.createRenderTarget();\n *\n * // Now use the output texture where you want:\n * myMaterial.uniforms.map.value = outputRenderTarget.texture;\n *\n * // And compute each frame, before rendering to screen:\n * gpuCompute.doRenderTarget( myFilter1, myRenderTarget );\n * gpuCompute.doRenderTarget( myFilter2, outputRenderTarget );\n *\n *\n *\n * @param {int} sizeX Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {int} sizeY Computation problem size is always 2d: sizeX * sizeY elements.\n * @param {WebGLRenderer} renderer The renderer\n */\n\nclass GPUComputationRenderer {\n\n\tconstructor( sizeX, sizeY, renderer ) {\n\n\t\tthis.variables = [];\n\n\t\tthis.currentTextureIndex = 0;\n\n\t\tlet dataType = FloatType;\n\n\t\tconst passThruUniforms = {\n\t\t\tpassThruTexture: { value: null }\n\t\t};\n\n\t\tconst passThruShader = createShaderMaterial( getPassThroughFragmentShader(), passThruUniforms );\n\n\t\tconst quad = new FullScreenQuad( passThruShader );\n\n\t\tthis.setDataType = function ( type ) {\n\n\t\t\tdataType = type;\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addVariable = function ( variableName, computeFragmentShader, initialValueTexture ) {\n\n\t\t\tconst material = this.createShaderMaterial( computeFragmentShader );\n\n\t\t\tconst variable = {\n\t\t\t\tname: variableName,\n\t\t\t\tinitialValueTexture: initialValueTexture,\n\t\t\t\tmaterial: material,\n\t\t\t\tdependencies: null,\n\t\t\t\trenderTargets: [],\n\t\t\t\twrapS: null,\n\t\t\t\twrapT: null,\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter\n\t\t\t};\n\n\t\t\tthis.variables.push( variable );\n\n\t\t\treturn variable;\n\n\t\t};\n\n\t\tthis.setVariableDependencies = function ( variable, dependencies ) {\n\n\t\t\tvariable.dependencies = dependencies;\n\n\t\t};\n\n\t\tthis.init = function () {\n\n\t\t\tif ( renderer.capabilities.maxVertexTextures === 0 ) {\n\n\t\t\t\treturn 'No support for vertex shader textures.';\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < this.variables.length; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Creates rendertargets and initialize them with input texture\n\t\t\t\tvariable.renderTargets[ 0 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tvariable.renderTargets[ 1 ] = this.createRenderTarget( sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 0 ] );\n\t\t\t\tthis.renderTexture( variable.initialValueTexture, variable.renderTargets[ 1 ] );\n\n\t\t\t\t// Adds dependencies uniforms to the ShaderMaterial\n\t\t\t\tconst material = variable.material;\n\t\t\t\tconst uniforms = material.uniforms;\n\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tfor ( let d = 0; d < variable.dependencies.length; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tif ( depVar.name !== variable.name ) {\n\n\t\t\t\t\t\t\t// Checks if variable exists\n\t\t\t\t\t\t\tlet found = false;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < this.variables.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( depVar.name === this.variables[ j ].name ) {\n\n\t\t\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( ! found ) {\n\n\t\t\t\t\t\t\t\treturn 'Variable dependency not found. Variable=' + variable.name + ', dependency=' + depVar.name;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuniforms[ depVar.name ] = { value: null };\n\n\t\t\t\t\t\tmaterial.fragmentShader = '\\nuniform sampler2D ' + depVar.name + ';\\n' + material.fragmentShader;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = 0;\n\n\t\t\treturn null;\n\n\t\t};\n\n\t\tthis.compute = function () {\n\n\t\t\tconst currentTextureIndex = this.currentTextureIndex;\n\t\t\tconst nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0;\n\n\t\t\tfor ( let i = 0, il = this.variables.length; i < il; i ++ ) {\n\n\t\t\t\tconst variable = this.variables[ i ];\n\n\t\t\t\t// Sets texture dependencies uniforms\n\t\t\t\tif ( variable.dependencies !== null ) {\n\n\t\t\t\t\tconst uniforms = variable.material.uniforms;\n\n\t\t\t\t\tfor ( let d = 0, dl = variable.dependencies.length; d < dl; d ++ ) {\n\n\t\t\t\t\t\tconst depVar = variable.dependencies[ d ];\n\n\t\t\t\t\t\tuniforms[ depVar.name ].value = depVar.renderTargets[ currentTextureIndex ].texture;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Performs the computation for this variable\n\t\t\t\tthis.doRenderTarget( variable.material, variable.renderTargets[ nextTextureIndex ] );\n\n\t\t\t}\n\n\t\t\tthis.currentTextureIndex = nextTextureIndex;\n\n\t\t};\n\n\t\tthis.getCurrentRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex ];\n\n\t\t};\n\n\t\tthis.getAlternateRenderTarget = function ( variable ) {\n\n\t\t\treturn variable.renderTargets[ this.currentTextureIndex === 0 ? 1 : 0 ];\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tquad.dispose();\n\n\t\t\tconst variables = this.variables;\n\n\t\t\tfor ( let i = 0; i < variables.length; i ++ ) {\n\n\t\t\t\tconst variable = variables[ i ];\n\n\t\t\t\tif ( variable.initialValueTexture ) variable.initialValueTexture.dispose();\n\n\t\t\t\tconst renderTargets = variable.renderTargets;\n\n\t\t\t\tfor ( let j = 0; j < renderTargets.length; j ++ ) {\n\n\t\t\t\t\tconst renderTarget = renderTargets[ j ];\n\t\t\t\t\trenderTarget.dispose();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction addResolutionDefine( materialShader ) {\n\n\t\t\tmaterialShader.defines.resolution = 'vec2( ' + sizeX.toFixed( 1 ) + ', ' + sizeY.toFixed( 1 ) + ' )';\n\n\t\t}\n\n\t\tthis.addResolutionDefine = addResolutionDefine;\n\n\n\t\t// The following functions can be used to compute things manually\n\n\t\tfunction createShaderMaterial( computeFragmentShader, uniforms ) {\n\n\t\t\tuniforms = uniforms || {};\n\n\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\tname: 'GPUComputationShader',\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: getPassThroughVertexShader(),\n\t\t\t\tfragmentShader: computeFragmentShader\n\t\t\t} );\n\n\t\t\taddResolutionDefine( material );\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tthis.createShaderMaterial = createShaderMaterial;\n\n\t\tthis.createRenderTarget = function ( sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter ) {\n\n\t\t\tsizeXTexture = sizeXTexture || sizeX;\n\t\t\tsizeYTexture = sizeYTexture || sizeY;\n\n\t\t\twrapS = wrapS || ClampToEdgeWrapping;\n\t\t\twrapT = wrapT || ClampToEdgeWrapping;\n\n\t\t\tminFilter = minFilter || NearestFilter;\n\t\t\tmagFilter = magFilter || NearestFilter;\n\n\t\t\tconst renderTarget = new WebGLRenderTarget( sizeXTexture, sizeYTexture, {\n\t\t\t\twrapS: wrapS,\n\t\t\t\twrapT: wrapT,\n\t\t\t\tminFilter: minFilter,\n\t\t\t\tmagFilter: magFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: dataType,\n\t\t\t\tdepthBuffer: false\n\t\t\t} );\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.createTexture = function () {\n\n\t\t\tconst data = new Float32Array( sizeX * sizeY * 4 );\n\t\t\tconst texture = new DataTexture( data, sizeX, sizeY, RGBAFormat, FloatType );\n\t\t\ttexture.needsUpdate = true;\n\t\t\treturn texture;\n\n\t\t};\n\n\t\tthis.renderTexture = function ( input, output ) {\n\n\t\t\t// Takes a texture, and render out in rendertarget\n\t\t\t// input = Texture\n\t\t\t// output = RenderTarget\n\n\t\t\tpassThruUniforms.passThruTexture.value = input;\n\n\t\t\tthis.doRenderTarget( passThruShader, output );\n\n\t\t\tpassThruUniforms.passThruTexture.value = null;\n\n\t\t};\n\n\t\tthis.doRenderTarget = function ( material, output ) {\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\tquad.material = material;\n\t\t\trenderer.setRenderTarget( output );\n\t\t\tquad.render( renderer );\n\t\t\tquad.material = passThruShader;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t};\n\n\t\t// Shaders\n\n\t\tfunction getPassThroughVertexShader() {\n\n\t\t\treturn\t'void main()\t{\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_Position = vec4( position, 1.0 );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t\tfunction getPassThroughFragmentShader() {\n\n\t\t\treturn\t'uniform sampler2D passThruTexture;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'void main() {\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'\tgl_FragColor = texture2D( passThruTexture, uv );\\n' +\n\t\t\t\t\t'\\n' +\n\t\t\t\t\t'}\\n';\n\n\t\t}\n\n\t}\n\n}\n\nexport { GPUComputationRenderer };\n", "import {\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _translationObject = new Vector3();\nconst _quaternionObject = new Quaternion();\nconst _scaleObject = new Vector3();\n\nconst _translationWorld = new Vector3();\nconst _quaternionWorld = new Quaternion();\nconst _scaleWorld = new Vector3();\n\nclass Gyroscope extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.matrixAutoUpdate && this.updateMatrix();\n\n\t\t// update matrixWorld\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent !== null ) {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\tthis.matrixWorld.decompose( _translationWorld, _quaternionWorld, _scaleWorld );\n\t\t\t\tthis.matrix.decompose( _translationObject, _quaternionObject, _scaleObject );\n\n\t\t\t\tthis.matrixWorld.compose( _translationWorld, _quaternionObject, _scaleWorld );\n\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t}\n\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tthis.children[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n}\n\nexport { Gyroscope };\n", "import {\n\tAnimationMixer,\n\tBox3,\n\tMesh,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\n\nclass MD2Character {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\t\tthis.animationFPS = 6;\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.activeAnimation = null;\n\n\t\tthis.mixer = null;\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\tthis.loadCounter = 0;\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction createPart( geometry, skinMap ) {\n\n\t\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t\t//\n\n\t\t\tconst mesh = new Mesh( geometry, materialTexture );\n\t\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\t//\n\n\t\t\tmesh.materialTexture = materialTexture;\n\t\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\n\t\t\tif ( scope.loadCounter === 0 ) scope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\n\t\t\tscope.meshBody.clipOffset = 0;\n\t\t\tscope.activeAnimationClipName = mesh.geometry.animations[ 0 ].name;\n\n\t\t\tscope.mixer = new AnimationMixer( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( rate !== 0 ) {\n\n\t\t\tthis.mixer.timeScale = 1 / rate;\n\n\t\t} else {\n\n\t\t\tthis.mixer.timeScale = 0;\n\n\t\t}\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tthis.syncWeaponAnimation();\n\n\t\t}\n\n\t}\n\n\tsetAnimation( clipName ) {\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tif ( this.meshBody.activeAction ) {\n\n\t\t\t\tthis.meshBody.activeAction.stop();\n\t\t\t\tthis.meshBody.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshBody );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshBody.activeAction = action.play();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.activeClipName = clipName;\n\n\t\tthis.syncWeaponAnimation();\n\n\t}\n\n\tsyncWeaponAnimation() {\n\n\t\tconst clipName = this.activeClipName;\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tif ( this.meshWeapon.activeAction ) {\n\n\t\t\t\tthis.meshWeapon.activeAction.stop();\n\t\t\t\tthis.meshWeapon.activeAction = null;\n\n\t\t\t}\n\n\t\t\tconst action = this.mixer.clipAction( clipName, this.meshWeapon );\n\n\t\t\tif ( action ) {\n\n\t\t\t\tthis.meshWeapon.activeAction = action.syncWith( this.meshBody.activeAction ).play();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.mixer ) this.mixer.update( delta );\n\n\t}\n\n}\n\nexport { MD2Character };\n", "import {\n\tMathUtils,\n\tMesh\n} from 'three';\n\nclass MorphBlendMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.animationsMap = {};\n\t\tthis.animationsList = [];\n\n\t\t// prepare default animation\n\t\t// (all frames played together in 1 second)\n\n\t\tconst numFrames = Object.keys( this.morphTargetDictionary ).length;\n\n\t\tconst name = '__default';\n\n\t\tconst startFrame = 0;\n\t\tconst endFrame = numFrames - 1;\n\n\t\tconst fps = numFrames / 1;\n\n\t\tthis.createAnimation( name, startFrame, endFrame, fps );\n\t\tthis.setAnimationWeight( name, 1 );\n\n\t}\n\n\tcreateAnimation( name, start, end, fps ) {\n\n\t\tconst animation = {\n\n\t\t\tstart: start,\n\t\t\tend: end,\n\n\t\t\tlength: end - start + 1,\n\n\t\t\tfps: fps,\n\t\t\tduration: ( end - start ) / fps,\n\n\t\t\tlastFrame: 0,\n\t\t\tcurrentFrame: 0,\n\n\t\t\tactive: false,\n\n\t\t\ttime: 0,\n\t\t\tdirection: 1,\n\t\t\tweight: 1,\n\n\t\t\tdirectionBackwards: false,\n\t\t\tmirroredLoop: false\n\n\t\t};\n\n\t\tthis.animationsMap[ name ] = animation;\n\t\tthis.animationsList.push( animation );\n\n\t}\n\n\tautoCreateAnimations( fps ) {\n\n\t\tconst pattern = /([a-z]+)_?(\\d+)/i;\n\n\t\tlet firstAnimation;\n\n\t\tconst frameRanges = {};\n\n\t\tlet i = 0;\n\n\t\tfor ( const key in this.morphTargetDictionary ) {\n\n\t\t\tconst chunks = key.match( pattern );\n\n\t\t\tif ( chunks && chunks.length > 1 ) {\n\n\t\t\t\tconst name = chunks[ 1 ];\n\n\t\t\t\tif ( ! frameRanges[ name ] ) frameRanges[ name ] = { start: Infinity, end: - Infinity };\n\n\t\t\t\tconst range = frameRanges[ name ];\n\n\t\t\t\tif ( i < range.start ) range.start = i;\n\t\t\t\tif ( i > range.end ) range.end = i;\n\n\t\t\t\tif ( ! firstAnimation ) firstAnimation = name;\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\tfor ( const name in frameRanges ) {\n\n\t\t\tconst range = frameRanges[ name ];\n\t\t\tthis.createAnimation( name, range.start, range.end, fps );\n\n\t\t}\n\n\t\tthis.firstAnimation = firstAnimation;\n\n\t}\n\n\tsetAnimationDirectionForward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = 1;\n\t\t\tanimation.directionBackwards = false;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDirectionBackward( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.direction = - 1;\n\t\t\tanimation.directionBackwards = true;\n\n\t\t}\n\n\t}\n\n\tsetAnimationFPS( name, fps ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.fps = fps;\n\t\t\tanimation.duration = ( animation.end - animation.start ) / animation.fps;\n\n\t\t}\n\n\t}\n\n\tsetAnimationDuration( name, duration ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.duration = duration;\n\t\t\tanimation.fps = ( animation.end - animation.start ) / animation.duration;\n\n\t\t}\n\n\t}\n\n\tsetAnimationWeight( name, weight ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.weight = weight;\n\n\t\t}\n\n\t}\n\n\tsetAnimationTime( name, time ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = time;\n\n\t\t}\n\n\t}\n\n\tgetAnimationTime( name ) {\n\n\t\tlet time = 0;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\ttime = animation.time;\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\tgetAnimationDuration( name ) {\n\n\t\tlet duration = - 1;\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tduration = animation.duration;\n\n\t\t}\n\n\t\treturn duration;\n\n\t}\n\n\tplayAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.time = 0;\n\t\t\tanimation.active = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.MorphBlendMesh: animation[' + name + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tstopAnimation( name ) {\n\n\t\tconst animation = this.animationsMap[ name ];\n\n\t\tif ( animation ) {\n\n\t\t\tanimation.active = false;\n\n\t\t}\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tfor ( let i = 0, il = this.animationsList.length; i < il; i ++ ) {\n\n\t\t\tconst animation = this.animationsList[ i ];\n\n\t\t\tif ( ! animation.active ) continue;\n\n\t\t\tconst frameTime = animation.duration / animation.length;\n\n\t\t\tanimation.time += animation.direction * delta;\n\n\t\t\tif ( animation.mirroredLoop ) {\n\n\t\t\t\tif ( animation.time > animation.duration || animation.time < 0 ) {\n\n\t\t\t\t\tanimation.direction *= - 1;\n\n\t\t\t\t\tif ( animation.time > animation.duration ) {\n\n\t\t\t\t\t\tanimation.time = animation.duration;\n\t\t\t\t\t\tanimation.directionBackwards = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( animation.time < 0 ) {\n\n\t\t\t\t\t\tanimation.time = 0;\n\t\t\t\t\t\tanimation.directionBackwards = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tanimation.time = animation.time % animation.duration;\n\n\t\t\t\tif ( animation.time < 0 ) animation.time += animation.duration;\n\n\t\t\t}\n\n\t\t\tconst keyframe = animation.start + MathUtils.clamp( Math.floor( animation.time / frameTime ), 0, animation.length - 1 );\n\t\t\tconst weight = animation.weight;\n\n\t\t\tif ( keyframe !== animation.currentFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = 0;\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = 1 * weight;\n\n\t\t\t\tthis.morphTargetInfluences[ keyframe ] = 0;\n\n\t\t\t\tanimation.lastFrame = animation.currentFrame;\n\t\t\t\tanimation.currentFrame = keyframe;\n\n\t\t\t}\n\n\t\t\tlet mix = ( animation.time % frameTime ) / frameTime;\n\n\t\t\tif ( animation.directionBackwards ) mix = 1 - mix;\n\n\t\t\tif ( animation.currentFrame !== animation.lastFrame ) {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = mix * weight;\n\t\t\t\tthis.morphTargetInfluences[ animation.lastFrame ] = ( 1 - mix ) * weight;\n\n\t\t\t} else {\n\n\t\t\t\tthis.morphTargetInfluences[ animation.currentFrame ] = weight;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { MorphBlendMesh };\n", "import {\n\tBox3,\n\tMathUtils,\n\tMeshLambertMaterial,\n\tObject3D,\n\tTextureLoader,\n\tUVMapping,\n\tSRGBColorSpace\n} from 'three';\nimport { MD2Loader } from '../loaders/MD2Loader.js';\nimport { MorphBlendMesh } from '../misc/MorphBlendMesh.js';\n\nclass MD2CharacterComplex {\n\n\tconstructor() {\n\n\t\tthis.scale = 1;\n\n\t\t// animation parameters\n\n\t\tthis.animationFPS = 6;\n\t\tthis.transitionFrames = 15;\n\n\t\t// movement model parameters\n\n\t\tthis.maxSpeed = 275;\n\t\tthis.maxReverseSpeed = - 275;\n\n\t\tthis.frontAcceleration = 600;\n\t\tthis.backAcceleration = 600;\n\n\t\tthis.frontDecceleration = 600;\n\n\t\tthis.angularSpeed = 2.5;\n\n\t\t// rig\n\n\t\tthis.root = new Object3D();\n\n\t\tthis.meshBody = null;\n\t\tthis.meshWeapon = null;\n\n\t\tthis.controls = null;\n\n\t\t// skins\n\n\t\tthis.skinsBody = [];\n\t\tthis.skinsWeapon = [];\n\n\t\tthis.weapons = [];\n\n\t\tthis.currentSkin = undefined;\n\n\t\t//\n\n\t\tthis.onLoadComplete = function () {};\n\n\t\t// internals\n\n\t\tthis.meshes = [];\n\t\tthis.animations = {};\n\n\t\tthis.loadCounter = 0;\n\n\t\t// internal movement control variables\n\n\t\tthis.speed = 0;\n\t\tthis.bodyOrientation = 0;\n\n\t\tthis.walkSpeed = this.maxSpeed;\n\t\tthis.crouchSpeed = this.maxSpeed * 0.5;\n\n\t\t// internal animation parameters\n\n\t\tthis.activeAnimation = null;\n\t\tthis.oldAnimation = null;\n\n\t\t// API\n\n\t}\n\n\tenableShadows( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].castShadow = enable;\n\t\t\tthis.meshes[ i ].receiveShadow = enable;\n\n\t\t}\n\n\t}\n\n\tsetVisible( enable ) {\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.meshes[ i ].visible = enable;\n\t\t\tthis.meshes[ i ].visible = enable;\n\n\t\t}\n\n\t}\n\n\tshareParts( original ) {\n\n\t\tthis.animations = original.animations;\n\t\tthis.walkSpeed = original.walkSpeed;\n\t\tthis.crouchSpeed = original.crouchSpeed;\n\n\t\tthis.skinsBody = original.skinsBody;\n\t\tthis.skinsWeapon = original.skinsWeapon;\n\n\t\t// BODY\n\n\t\tconst mesh = this._createPart( original.meshBody.geometry, this.skinsBody[ 0 ] );\n\t\tmesh.scale.set( this.scale, this.scale, this.scale );\n\n\t\tthis.root.position.y = original.root.position.y;\n\t\tthis.root.add( mesh );\n\n\t\tthis.meshBody = mesh;\n\n\t\tthis.meshes.push( mesh );\n\n\t\t// WEAPONS\n\n\t\tfor ( let i = 0; i < original.weapons.length; i ++ ) {\n\n\t\t\tconst meshWeapon = this._createPart( original.weapons[ i ].geometry, this.skinsWeapon[ i ] );\n\t\t\tmeshWeapon.scale.set( this.scale, this.scale, this.scale );\n\t\t\tmeshWeapon.visible = false;\n\n\t\t\tmeshWeapon.name = original.weapons[ i ].name;\n\n\t\t\tthis.root.add( meshWeapon );\n\n\t\t\tthis.weapons[ i ] = meshWeapon;\n\t\t\tthis.meshWeapon = meshWeapon;\n\n\t\t\tthis.meshes.push( meshWeapon );\n\n\t\t}\n\n\t}\n\n\tloadParts( config ) {\n\n\t\tconst scope = this;\n\n\t\tfunction loadTextures( baseUrl, textureUrls ) {\n\n\t\t\tconst textureLoader = new TextureLoader();\n\t\t\tconst textures = [];\n\n\t\t\tfor ( let i = 0; i < textureUrls.length; i ++ ) {\n\n\t\t\t\ttextures[ i ] = textureLoader.load( baseUrl + textureUrls[ i ], checkLoadingComplete );\n\t\t\t\ttextures[ i ].mapping = UVMapping;\n\t\t\t\ttextures[ i ].name = textureUrls[ i ];\n\t\t\t\ttextures[ i ].colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tfunction checkLoadingComplete() {\n\n\t\t\tscope.loadCounter -= 1;\n\t\t\tif ( scope.loadCounter === 0 ) \tscope.onLoadComplete();\n\n\t\t}\n\n\t\tthis.animations = config.animations;\n\t\tthis.walkSpeed = config.walkSpeed;\n\t\tthis.crouchSpeed = config.crouchSpeed;\n\n\t\tthis.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n\n\t\tconst weaponsTextures = [];\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ];\n\n\t\t// SKINS\n\n\t\tthis.skinsBody = loadTextures( config.baseUrl + 'skins/', config.skins );\n\t\tthis.skinsWeapon = loadTextures( config.baseUrl + 'skins/', weaponsTextures );\n\n\t\t// BODY\n\n\t\tconst loader = new MD2Loader();\n\n\t\tloader.load( config.baseUrl + config.body, function ( geo ) {\n\n\t\t\tconst boundingBox = new Box3();\n\t\t\tboundingBox.setFromBufferAttribute( geo.attributes.position );\n\n\t\t\tscope.root.position.y = - scope.scale * boundingBox.min.y;\n\n\t\t\tconst mesh = scope._createPart( geo, scope.skinsBody[ 0 ] );\n\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\n\t\t\tscope.root.add( mesh );\n\n\t\t\tscope.meshBody = mesh;\n\t\t\tscope.meshes.push( mesh );\n\n\t\t\tcheckLoadingComplete();\n\n\t\t} );\n\n\t\t// WEAPONS\n\n\t\tconst generateCallback = function ( index, name ) {\n\n\t\t\treturn function ( geo ) {\n\n\t\t\t\tconst mesh = scope._createPart( geo, scope.skinsWeapon[ index ] );\n\t\t\t\tmesh.scale.set( scope.scale, scope.scale, scope.scale );\n\t\t\t\tmesh.visible = false;\n\n\t\t\t\tmesh.name = name;\n\n\t\t\t\tscope.root.add( mesh );\n\n\t\t\t\tscope.weapons[ index ] = mesh;\n\t\t\t\tscope.meshWeapon = mesh;\n\t\t\t\tscope.meshes.push( mesh );\n\n\t\t\t\tcheckLoadingComplete();\n\n\t\t\t};\n\n\t\t};\n\n\t\tfor ( let i = 0; i < config.weapons.length; i ++ ) {\n\n\t\t\tloader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) );\n\n\t\t}\n\n\t}\n\n\tsetPlaybackRate( rate ) {\n\n\t\tif ( this.meshBody ) this.meshBody.duration = this.meshBody.baseDuration / rate;\n\t\tif ( this.meshWeapon ) this.meshWeapon.duration = this.meshWeapon.baseDuration / rate;\n\n\t}\n\n\tsetWireframe( wireframeEnabled ) {\n\n\t\tif ( wireframeEnabled ) {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe;\n\n\t\t} else {\n\n\t\t\tif ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture;\n\t\t\tif ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture;\n\n\t\t}\n\n\t}\n\n\tsetSkin( index ) {\n\n\t\tif ( this.meshBody && this.meshBody.material.wireframe === false ) {\n\n\t\t\tthis.meshBody.material.map = this.skinsBody[ index ];\n\t\t\tthis.currentSkin = index;\n\n\t\t}\n\n\t}\n\n\tsetWeapon( index ) {\n\n\t\tfor ( let i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false;\n\n\t\tconst activeWeapon = this.weapons[ index ];\n\n\t\tif ( activeWeapon ) {\n\n\t\t\tactiveWeapon.visible = true;\n\t\t\tthis.meshWeapon = activeWeapon;\n\n\t\t\tif ( this.activeAnimation ) {\n\n\t\t\t\tactiveWeapon.playAnimation( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationTime( this.activeAnimation, this.meshBody.getAnimationTime( this.activeAnimation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetAnimation( animationName ) {\n\n\t\tif ( animationName === this.activeAnimation || ! animationName ) return;\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshBody.playAnimation( animationName );\n\n\t\t\tthis.oldAnimation = this.activeAnimation;\n\t\t\tthis.activeAnimation = animationName;\n\n\t\t\tthis.blendCounter = this.transitionFrames;\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.setAnimationWeight( animationName, 0 );\n\t\t\tthis.meshWeapon.playAnimation( animationName );\n\n\t\t}\n\n\n\t}\n\n\tupdate( delta ) {\n\n\t\tif ( this.controls ) this.updateMovementModel( delta );\n\n\t\tif ( this.animations ) {\n\n\t\t\tthis.updateBehaviors();\n\t\t\tthis.updateAnimations( delta );\n\n\t\t}\n\n\t}\n\n\tupdateAnimations( delta ) {\n\n\t\tlet mix = 1;\n\n\t\tif ( this.blendCounter > 0 ) {\n\n\t\t\tmix = ( this.transitionFrames - this.blendCounter ) / this.transitionFrames;\n\t\t\tthis.blendCounter -= 1;\n\n\t\t}\n\n\t\tif ( this.meshBody ) {\n\n\t\t\tthis.meshBody.update( delta );\n\n\t\t\tthis.meshBody.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshBody.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t\tif ( this.meshWeapon ) {\n\n\t\t\tthis.meshWeapon.update( delta );\n\n\t\t\tthis.meshWeapon.setAnimationWeight( this.activeAnimation, mix );\n\t\t\tthis.meshWeapon.setAnimationWeight( this.oldAnimation, 1 - mix );\n\n\t\t}\n\n\t}\n\n\tupdateBehaviors() {\n\n\t\tconst controls = this.controls;\n\t\tconst animations = this.animations;\n\n\t\tlet moveAnimation, idleAnimation;\n\n\t\t// crouch vs stand\n\n\t\tif ( controls.crouch ) {\n\n\t\t\tmoveAnimation = animations[ 'crouchMove' ];\n\t\t\tidleAnimation = animations[ 'crouchIdle' ];\n\n\t\t} else {\n\n\t\t\tmoveAnimation = animations[ 'move' ];\n\t\t\tidleAnimation = animations[ 'idle' ];\n\n\t\t}\n\n\t\t// actions\n\n\t\tif ( controls.jump ) {\n\n\t\t\tmoveAnimation = animations[ 'jump' ];\n\t\t\tidleAnimation = animations[ 'jump' ];\n\n\t\t}\n\n\t\tif ( controls.attack ) {\n\n\t\t\tif ( controls.crouch ) {\n\n\t\t\t\tmoveAnimation = animations[ 'crouchAttack' ];\n\t\t\t\tidleAnimation = animations[ 'crouchAttack' ];\n\n\t\t\t} else {\n\n\t\t\t\tmoveAnimation = animations[ 'attack' ];\n\t\t\t\tidleAnimation = animations[ 'attack' ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animations\n\n\t\tif ( controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight ) {\n\n\t\t\tif ( this.activeAnimation !== moveAnimation ) {\n\n\t\t\t\tthis.setAnimation( moveAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tif ( Math.abs( this.speed ) < 0.2 * this.maxSpeed && ! ( controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.activeAnimation !== idleAnimation ) {\n\n\t\t\t\tthis.setAnimation( idleAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// set animation direction\n\n\t\tif ( controls.moveForward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionForward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( controls.moveBackward ) {\n\n\t\t\tif ( this.meshBody ) {\n\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshBody.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t\tif ( this.meshWeapon ) {\n\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.activeAnimation );\n\t\t\t\tthis.meshWeapon.setAnimationDirectionBackward( this.oldAnimation );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMovementModel( delta ) {\n\n\t\tfunction exponentialEaseOut( k ) {\n\n\t\t\treturn k === 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1;\n\n\t\t}\n\n\t\tconst controls = this.controls;\n\n\t\t// speed based on controls\n\n\t\tif ( controls.crouch ) \tthis.maxSpeed = this.crouchSpeed;\n\t\telse this.maxSpeed = this.walkSpeed;\n\n\t\tthis.maxReverseSpeed = - this.maxSpeed;\n\n\t\tif ( controls.moveForward ) this.speed = MathUtils.clamp( this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\t\tif ( controls.moveBackward ) this.speed = MathUtils.clamp( this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t// orientation based on controls\n\t\t// (don't just stand while turning)\n\n\t\tconst dir = 1;\n\n\t\tif ( controls.moveLeft ) {\n\n\t\t\tthis.bodyOrientation += delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\tif ( controls.moveRight ) {\n\n\t\t\tthis.bodyOrientation -= delta * this.angularSpeed;\n\t\t\tthis.speed = MathUtils.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed );\n\n\t\t}\n\n\t\t// speed decay\n\n\t\tif ( ! ( controls.moveForward || controls.moveBackward ) ) {\n\n\t\t\tif ( this.speed > 0 ) {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed );\n\n\t\t\t} else {\n\n\t\t\t\tconst k = exponentialEaseOut( this.speed / this.maxReverseSpeed );\n\t\t\t\tthis.speed = MathUtils.clamp( this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// displacement\n\n\t\tconst forwardDelta = this.speed * delta;\n\n\t\tthis.root.position.x += Math.sin( this.bodyOrientation ) * forwardDelta;\n\t\tthis.root.position.z += Math.cos( this.bodyOrientation ) * forwardDelta;\n\n\t\t// steering\n\n\t\tthis.root.rotation.y = this.bodyOrientation;\n\n\t}\n\n\t// internal\n\n\t_createPart( geometry, skinMap ) {\n\n\t\tconst materialWireframe = new MeshLambertMaterial( { color: 0xffaa00, wireframe: true } );\n\t\tconst materialTexture = new MeshLambertMaterial( { color: 0xffffff, wireframe: false, map: skinMap } );\n\n\t\t//\n\n\t\tconst mesh = new MorphBlendMesh( geometry, materialTexture );\n\t\tmesh.rotation.y = - Math.PI / 2;\n\n\t\t//\n\n\t\tmesh.materialTexture = materialTexture;\n\t\tmesh.materialWireframe = materialWireframe;\n\n\t\t//\n\n\t\tmesh.autoCreateAnimations( this.animationFPS );\n\n\t\treturn mesh;\n\n\t}\n\n}\n\nexport { MD2CharacterComplex };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMesh\n} from 'three';\n\nclass MorphAnimMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'MorphAnimMesh';\n\n\t\tthis.mixer = new AnimationMixer( this );\n\t\tthis.activeAction = null;\n\n\t}\n\n\tsetDirectionForward() {\n\n\t\tthis.mixer.timeScale = 1.0;\n\n\t}\n\n\tsetDirectionBackward() {\n\n\t\tthis.mixer.timeScale = - 1.0;\n\n\t}\n\n\tplayAnimation( label, fps ) {\n\n\t\tif ( this.activeAction ) {\n\n\t\t\tthis.activeAction.stop();\n\t\t\tthis.activeAction = null;\n\n\t\t}\n\n\t\tconst clip = AnimationClip.findByName( this, label );\n\n\t\tif ( clip ) {\n\n\t\t\tconst action = this.mixer.clipAction( clip );\n\t\t\taction.timeScale = ( clip.tracks.length * fps ) / clip.duration;\n\t\t\tthis.activeAction = action.play();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.MorphAnimMesh: animations[' + label + '] undefined in .playAnimation()' );\n\n\t\t}\n\n\t}\n\n\tupdateAnimation( delta ) {\n\n\t\tthis.mixer.update( delta );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.mixer = new AnimationMixer( this );\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MorphAnimMesh };\n", "/**\n * potpack - by [@mourner](https://github.com/mourner)\n * \n * A tiny JavaScript function for packing 2D rectangles into a near-square container, \n * which is useful for generating CSS sprites and WebGL textures. Similar to \n * [shelf-pack](https://github.com/mapbox/shelf-pack), but static (you can't add items \n * once a layout is generated), and aims for maximal space utilization.\n *\n * A variation of algorithms used in [rectpack2D](https://github.com/TeamHypersomnia/rectpack2D)\n * and [bin-pack](https://github.com/bryanburgers/bin-pack), which are in turn based \n * on [this article by Blackpawn](http://blackpawn.com/texts/lightmaps/default.html).\n * \n * @license\n * ISC License\n * \n * Copyright (c) 2018, Mapbox\n * \n * Permission to use, copy, modify, and/or distribute this software for any purpose\n * with or without fee is hereby granted, provided that the above copyright notice\n * and this permission notice appear in all copies.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n * THIS SOFTWARE.\n */\n\nfunction potpack(boxes) {\n\n\t// calculate total box area and maximum box width\n\tlet area = 0;\n\tlet maxWidth = 0;\n\t\n\tfor (const box of boxes) {\n\t\tarea += box.w * box.h;\n\t\tmaxWidth = Math.max(maxWidth, box.w);\n\t}\n\t\n\t// sort the boxes for insertion by height, descending\n\tboxes.sort((a, b) => b.h - a.h);\n\t\n\t// aim for a squarish resulting container,\n\t// slightly adjusted for sub-100% space utilization\n\tconst startWidth = Math.max(Math.ceil(Math.sqrt(area / 0.95)), maxWidth);\n\t\n\t// start with a single empty space, unbounded at the bottom\n\tconst spaces = [{x: 0, y: 0, w: startWidth, h: Infinity}];\n\t\n\tlet width = 0;\n\tlet height = 0;\n\t\n\tfor (const box of boxes) {\n\t\t// look through spaces backwards so that we check smaller spaces first\n\t\tfor (let i = spaces.length - 1; i >= 0; i--) {\n\t\t\tconst space = spaces[i];\n\t\t\t\n\t\t\t// look for empty spaces that can accommodate the current box\n\t\t\tif (box.w > space.w || box.h > space.h) continue;\n\t\t\t\n\t\t\t// found the space; add the box to its top-left corner\n\t\t\t// |-------|-------|\n\t\t\t// | box | |\n\t\t\t// |_______| |\n\t\t\t// | space |\n\t\t\t// |_______________|\n\t\t\tbox.x = space.x;\n\t\t\tbox.y = space.y;\n\t\t\t\n\t\t\theight = Math.max(height, box.y + box.h);\n\t\t\twidth = Math.max(width, box.x + box.w);\n\t\t\t\n\t\t\tif (box.w === space.w && box.h === space.h) {\n\t\t\t\t// space matches the box exactly; remove it\n\t\t\t\tconst last = spaces.pop();\n\t\t\t\tif (i < spaces.length) spaces[i] = last;\n\t\t\t\n\t\t\t} else if (box.h === space.h) {\n\t\t\t\t// space matches the box height; update it accordingly\n\t\t\t\t// |-------|---------------|\n\t\t\t\t// | box | updated space |\n\t\t\t\t// |_______|_______________|\n\t\t\t\tspace.x += box.w;\n\t\t\t\tspace.w -= box.w;\n\t\t\t\n\t\t\t} else if (box.w === space.w) {\n\t\t\t\t// space matches the box width; update it accordingly\n\t\t\t\t// |---------------|\n\t\t\t\t// | box |\n\t\t\t\t// |_______________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |_______________|\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t\n\t\t\t} else {\n\t\t\t\t// otherwise the box splits the space into two spaces\n\t\t\t\t// |-------|-----------|\n\t\t\t\t// | box | new space |\n\t\t\t\t// |_______|___________|\n\t\t\t\t// | updated space |\n\t\t\t\t// |___________________|\n\t\t\t\tspaces.push({\n\t\t\t\t\tx: space.x + box.w,\n\t\t\t\t\ty: space.y,\n\t\t\t\t\tw: space.w - box.w,\n\t\t\t\t\th: box.h\n\t\t\t\t});\n\t\t\t\tspace.y += box.h;\n\t\t\t\tspace.h -= box.h;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\t\n\treturn {\n\t\tw: width, // container width\n\t\th: height, // container height\n\t\tfill: (area / (width * height)) || 0 // space utilization\n\t};\n}\n\nexport { potpack };", "import * as THREE from 'three';\nimport { potpack } from '../libs/potpack.module.js';\n\n/**\n * Progressive Light Map Accumulator, by [zalo](https://github.com/zalo/)\n *\n * To use, simply construct a `ProgressiveLightMap` object,\n * `plmap.addObjectsToLightMap(object)` an array of semi-static\n * objects and lights to the class once, and then call\n * `plmap.update(camera)` every frame to begin accumulating\n * lighting samples.\n *\n * This should begin accumulating lightmaps which apply to\n * your objects, so you can start jittering lighting to achieve\n * the texture-space effect you're looking for.\n *\n * @param {WebGLRenderer} renderer A WebGL Rendering Context\n * @param {number} res The side-long dimension of you total lightmap\n */\nclass ProgressiveLightMap {\n\n\tconstructor( renderer, res = 1024 ) {\n\n\t\tthis.renderer = renderer;\n\t\tthis.res = res;\n\t\tthis.lightMapContainers = [];\n\t\tthis.compiled = false;\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.background = null;\n\t\tthis.tinyTarget = new THREE.WebGLRenderTarget( 1, 1 );\n\t\tthis.buffer1Active = false;\n\t\tthis.firstUpdate = true;\n\t\tthis.warned = false;\n\n\t\t// Create the Progressive LightMap Texture\n\t\tconst format = /(Android|iPad|iPhone|iPod)/g.test( navigator.userAgent ) ? THREE.HalfFloatType : THREE.FloatType;\n\t\tthis.progressiveLightMap1 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2 = new THREE.WebGLRenderTarget( this.res, this.res, { type: format } );\n\t\tthis.progressiveLightMap2.texture.channel = 1;\n\n\t\t// Inject some spicy new logic into a standard phong material\n\t\tthis.uvMat = new THREE.MeshPhongMaterial();\n\t\tthis.uvMat.uniforms = {};\n\t\tthis.uvMat.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'attribute vec2 uv1;\\n' +\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\t'#define LIGHTMAP_UV uv1\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((LIGHTMAP_UV - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to average in the Previous frame's Shadows\n\t\t\tconst bodyStart = shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_LIGHTMAP\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t`\\nvec3 texelOld = texture2D(previousShadowMap, vLightMapUv).rgb;\n\t\t\t\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n\t\t\t}`;\n\n\t\t\t// Set the Previous Frame's Texture Buffer and Averaging Window\n\t\t\tshader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };\n\t\t\tshader.uniforms.averagingWindow = { value: 100 };\n\n\t\t\tthis.uvMat.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tthis.uvMat.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Sets these objects' materials' lightmaps and modifies their uv1's.\n\t * @param {Object3D} objects An array of objects and lights to set up your lightmap.\n\t */\n\taddObjectsToLightMap( objects ) {\n\n\t\t// Prepare list of UV bounding boxes for packing later...\n\t\tthis.uv_boxes = []; const padding = 3 / this.res;\n\n\t\tfor ( let ob = 0; ob < objects.length; ob ++ ) {\n\n\t\t\tconst object = objects[ ob ];\n\n\t\t\t// If this object is a light, simply add it to the internal scene\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tthis.scene.attach( object ); continue;\n\n\t\t\t}\n\n\t\t\tif ( ! object.geometry.hasAttribute( 'uv' ) ) {\n\n\t\t\t\tconsole.warn( 'All lightmap objects need UVs!' ); continue;\n\n\t\t\t}\n\n\t\t\tif ( this.blurringPlane == null ) {\n\n\t\t\t\tthis._initializeBlurPlane( this.res, this.progressiveLightMap1 );\n\n\t\t\t}\n\n\t\t\t// Apply the lightmap to the object\n\t\t\tobject.material.lightMap = this.progressiveLightMap2.texture;\n\t\t\tobject.material.dithering = true;\n\t\t\tobject.castShadow = true;\n\t\t\tobject.receiveShadow = true;\n\t\t\tobject.renderOrder = 1000 + ob;\n\n\t\t\t// Prepare UV boxes for potpack\n\t\t\t// TODO: Size these by object surface area\n\t\t\tthis.uv_boxes.push( { w: 1 + ( padding * 2 ),\n\t\t\t\t\t\t\t\t h: 1 + ( padding * 2 ), index: ob } );\n\n\t\t\tthis.lightMapContainers.push( { basicMat: object.material, object: object } );\n\n\t\t\tthis.compiled = false;\n\n\t\t}\n\n\t\t// Pack the objects' lightmap UVs into the same global space\n\t\tconst dimensions = potpack( this.uv_boxes );\n\t\tthis.uv_boxes.forEach( ( box ) => {\n\n\t\t\tconst uv1 = objects[ box.index ].geometry.getAttribute( 'uv' ).clone();\n\t\t\tfor ( let i = 0; i < uv1.array.length; i += uv1.itemSize ) {\n\n\t\t\t\tuv1.array[ i ] = ( uv1.array[ i ] + box.x + padding ) / dimensions.w;\n\t\t\t\tuv1.array[ i + 1 ] = ( uv1.array[ i + 1 ] + box.y + padding ) / dimensions.h;\n\n\t\t\t}\n\n\t\t\tobjects[ box.index ].geometry.setAttribute( 'uv1', uv1 );\n\t\t\tobjects[ box.index ].geometry.getAttribute( 'uv1' ).needsUpdate = true;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * This function renders each mesh one at a time into their respective surface maps\n\t * @param {Camera} camera Standard Rendering Camera\n\t * @param {number} blendWindow When >1, samples will accumulate over time.\n\t * @param {boolean} blurEdges Whether to fix UV Edges via blurring\n\t */\n\tupdate( camera, blendWindow = 100, blurEdges = true ) {\n\n\t\tif ( this.blurringPlane == null ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Store the original Render Target\n\t\tconst oldTarget = this.renderer.getRenderTarget();\n\n\t\t// The blurring plane applies blur to the seams of the lightmap\n\t\tthis.blurringPlane.visible = blurEdges;\n\n\t\t// Steal the Object3D from the real world to our special dimension\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.oldScene =\n\t\t\t\tthis.lightMapContainers[ l ].object.parent;\n\t\t\tthis.scene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Render once normally to initialize everything\n\t\tif ( this.firstUpdate ) {\n\n\t\t\tthis.renderer.setRenderTarget( this.tinyTarget ); // Tiny for Speed\n\t\t\tthis.renderer.render( this.scene, camera );\n\t\t\tthis.firstUpdate = false;\n\n\t\t}\n\n\t\t// Set each object's material to the UV Unwrapped Surface Mapping Version\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.uvMat.uniforms.averagingWindow = { value: blendWindow };\n\t\t\tthis.lightMapContainers[ l ].object.material = this.uvMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.frustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled = false;\n\n\t\t}\n\n\t\t// Ping-pong two surface buffers for reading/writing\n\t\tconst activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n\t\tconst inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n\n\t\t// Render the object's surface maps\n\t\tthis.renderer.setRenderTarget( activeMap );\n\t\tthis.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };\n\t\tthis.buffer1Active = ! this.buffer1Active;\n\t\tthis.renderer.render( this.scene, camera );\n\n\t\t// Restore the object's Real-time Material and add it back to the original world\n\t\tfor ( let l = 0; l < this.lightMapContainers.length; l ++ ) {\n\n\t\t\tthis.lightMapContainers[ l ].object.frustumCulled =\n\t\t\t\tthis.lightMapContainers[ l ].object.oldFrustumCulled;\n\t\t\tthis.lightMapContainers[ l ].object.material = this.lightMapContainers[ l ].basicMat;\n\t\t\tthis.lightMapContainers[ l ].object.oldScene.attach( this.lightMapContainers[ l ].object );\n\n\t\t}\n\n\t\t// Restore the original Render Target\n\t\tthis.renderer.setRenderTarget( oldTarget );\n\n\t}\n\n\t/** DEBUG\n\t * Draw the lightmap in the main scene. Call this after adding the objects to it.\n\t * @param {boolean} visible Whether the debug plane should be visible\n\t * @param {Vector3} position Where the debug plane should be drawn\n\t*/\n\tshowDebugLightmap( visible, position = undefined ) {\n\n\t\tif ( this.lightMapContainers.length == 0 ) {\n\n\t\t\tif ( ! this.warned ) {\n\n\t\t\t\tconsole.warn( 'Call this after adding the objects!' ); this.warned = true;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.labelMesh == null ) {\n\n\t\t\tthis.labelMaterial = new THREE.MeshBasicMaterial(\n\t\t\t\t{ map: this.progressiveLightMap1.texture, side: THREE.DoubleSide } );\n\t\t\tthis.labelPlane = new THREE.PlaneGeometry( 100, 100 );\n\t\t\tthis.labelMesh = new THREE.Mesh( this.labelPlane, this.labelMaterial );\n\t\t\tthis.labelMesh.position.y = 250;\n\t\t\tthis.lightMapContainers[ 0 ].object.parent.add( this.labelMesh );\n\n\t\t}\n\n\t\tif ( position != undefined ) {\n\n\t\t\tthis.labelMesh.position.copy( position );\n\n\t\t}\n\n\t\tthis.labelMesh.visible = visible;\n\n\t}\n\n\t/**\n\t * INTERNAL Creates the Blurring Plane\n\t * @param {number} res The square resolution of this object's lightMap.\n\t * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with.\n\t */\n\t_initializeBlurPlane( res, lightMap = null ) {\n\n\t\tconst blurMaterial = new THREE.MeshBasicMaterial();\n\t\tblurMaterial.uniforms = { previousShadowMap: { value: null },\n\t\t\t\t\t\t\t\t pixelOffset: { value: 1.0 / res },\n\t\t\t\t\t\t\t\t polygonOffset: true, polygonOffsetFactor: - 1, polygonOffsetUnits: 3.0 };\n\t\tblurMaterial.onBeforeCompile = ( shader ) => {\n\n\t\t\t// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n\t\t\tshader.vertexShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.vertexShader.slice( 0, - 1 ) +\n\t\t\t\t'\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';\n\n\t\t\t// Fragment Shader: Set Pixels to 9-tap box blur the current frame's Shadows\n\t\t\tconst bodyStart\t= shader.fragmentShader.indexOf( 'void main() {' );\n\t\t\tshader.fragmentShader =\n\t\t\t\t'#define USE_UV\\n' +\n\t\t\t\tshader.fragmentShader.slice( 0, bodyStart ) +\n\t\t\t\t'\tuniform sampler2D previousShadowMap;\\n\tuniform float pixelOffset;\\n' +\n\t\t\t\tshader.fragmentShader.slice( bodyStart - 1, - 1 ) +\n\t\t\t\t\t`\tgl_FragColor.rgb = (\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\n\t\t\t\t\t\t\t\t\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\n\t\t\t\t}`;\n\n\t\t\t// Set the LightMap Accumulation Buffer\n\t\t\tshader.uniforms.previousShadowMap = { value: lightMap.texture };\n\t\t\tshader.uniforms.pixelOffset = { value: 0.5 / res };\n\t\t\tblurMaterial.uniforms = shader.uniforms;\n\n\t\t\t// Set the new Shader to this\n\t\t\tblurMaterial.userData.shader = shader;\n\n\t\t\tthis.compiled = true;\n\n\t\t};\n\n\t\tthis.blurringPlane = new THREE.Mesh( new THREE.PlaneGeometry( 1, 1 ), blurMaterial );\n\t\tthis.blurringPlane.name = 'Blurring Plane';\n\t\tthis.blurringPlane.frustumCulled = false;\n\t\tthis.blurringPlane.renderOrder = 0;\n\t\tthis.blurringPlane.material.depthWrite = false;\n\t\tthis.scene.add( this.blurringPlane );\n\n\t}\n\n}\n\nexport { ProgressiveLightMap };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tQuaternion,\n\tRaycaster,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\n\nclass RollerCoasterGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = [ 1, 1, 1 ];\n\t\tconst color2 = [ 1, 1, 0 ];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\t\tconst right = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\n\t\t// shapes\n\n\t\tconst step = [\n\t\t\tnew Vector3( - 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 ),\n\n\t\t\tnew Vector3( 0, - 0.050, 0 ),\n\t\t\tnew Vector3( 0.225, 0, 0 ),\n\t\t\tnew Vector3( 0, - 0.175, 0 )\n\t\t];\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tlet sides = 5;\n\t\tconst tube1 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube1.push( new Vector3( Math.sin( angle ) * 0.06, Math.cos( angle ) * 0.06, 0 ) );\n\n\t\t}\n\n\t\tsides = 6;\n\t\tconst tube2 = [];\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\ttube2.push( new Vector3( Math.sin( angle ) * 0.025, Math.cos( angle ) * 0.025, 0 ) );\n\n\t\t}\n\n\t\tconst vector = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tfunction drawShape( shape, color ) {\n\n\t\t\tnormal.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = 0; j < shape.length; j ++ ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\tfor ( let j = shape.length - 1; j >= 0; j -- ) {\n\n\t\t\t\tvector.copy( shape[ j ] );\n\t\t\t\tvector.applyQuaternion( quaternion );\n\t\t\t\tvector.add( point );\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, offset, color ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 ).add( offset );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( point );\n\n\t\t\t\tvector2.copy( point2 ).add( offset );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( point );\n\n\t\t\t\tvector3.copy( point2 ).add( offset );\n\t\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\t\tvector3.add( prevPoint );\n\n\t\t\t\tvector4.copy( point1 ).add( offset );\n\t\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\t\tvector4.add( prevPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( prevQuaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\t\t\t\tcolors.push( color[ 0 ], color[ 1 ], color[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst offset = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\n\t\t\tup.set( 0, 1, 0 );\n\n\t\t\tforward.subVectors( point, prevPoint ).normalize();\n\t\t\tright.crossVectors( up, forward ).normalize();\n\t\t\tup.crossVectors( forward, right );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tdrawShape( step, color2 );\n\n\t\t\t}\n\n\t\t\textrudeShape( tube1, offset.set( 0, - 0.125, 0 ), color2 );\n\t\t\textrudeShape( tube2, offset.set( 0.2, 0, 0 ), color1 );\n\t\t\textrudeShape( tube2, offset.set( - 0.2, 0, 0 ), color1 );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\t// console.log( vertices.length );\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterLiftersGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\n\t\tconst quaternion = new Quaternion();\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\n\t\tconst point = new Vector3();\n\t\tconst tangent = new Vector3();\n\n\t\t// shapes\n\n\t\tconst tube1 = [\n\t\t\tnew Vector3( 0, 0.05, - 0.05 ),\n\t\t\tnew Vector3( 0, 0.05, 0.05 ),\n\t\t\tnew Vector3( 0, - 0.05, 0 )\n\t\t];\n\n\t\tconst tube2 = [\n\t\t\tnew Vector3( - 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0 )\n\t\t];\n\n\t\tconst tube3 = [\n\t\t\tnew Vector3( 0.05, 0, - 0.05 ),\n\t\t\tnew Vector3( 0.05, 0, 0.05 ),\n\t\t\tnew Vector3( - 0.05, 0, 0 )\n\t\t];\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tconst normal1 = new Vector3();\n\t\tconst normal2 = new Vector3();\n\t\tconst normal3 = new Vector3();\n\t\tconst normal4 = new Vector3();\n\n\t\tfunction extrudeShape( shape, fromPoint, toPoint ) {\n\n\t\t\tfor ( let j = 0, jl = shape.length; j < jl; j ++ ) {\n\n\t\t\t\tconst point1 = shape[ j ];\n\t\t\t\tconst point2 = shape[ ( j + 1 ) % jl ];\n\n\t\t\t\tvector1.copy( point1 );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( fromPoint );\n\n\t\t\t\tvector2.copy( point2 );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( fromPoint );\n\n\t\t\t\tvector3.copy( point2 );\n\t\t\t\tvector3.applyQuaternion( quaternion );\n\t\t\t\tvector3.add( toPoint );\n\n\t\t\t\tvector4.copy( point1 );\n\t\t\t\tvector4.applyQuaternion( quaternion );\n\t\t\t\tvector4.add( toPoint );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\t\t//\n\n\t\t\t\tnormal1.copy( point1 );\n\t\t\t\tnormal1.applyQuaternion( quaternion );\n\t\t\t\tnormal1.normalize();\n\n\t\t\t\tnormal2.copy( point2 );\n\t\t\t\tnormal2.applyQuaternion( quaternion );\n\t\t\t\tnormal2.normalize();\n\n\t\t\t\tnormal3.copy( point2 );\n\t\t\t\tnormal3.applyQuaternion( quaternion );\n\t\t\t\tnormal3.normalize();\n\n\t\t\t\tnormal4.copy( point1 );\n\t\t\t\tnormal4.applyQuaternion( quaternion );\n\t\t\t\tnormal4.normalize();\n\n\t\t\t\tnormals.push( normal1.x, normal1.y, normal1.z );\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t\tnormals.push( normal2.x, normal2.y, normal2.z );\n\t\t\t\tnormals.push( normal3.x, normal3.y, normal3.z );\n\t\t\t\tnormals.push( normal4.x, normal4.y, normal4.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst fromPoint = new Vector3();\n\t\tconst toPoint = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\ttangent.copy( curve.getTangentAt( i / divisions ) );\n\n\t\t\tconst angle = Math.atan2( tangent.x, tangent.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\t//\n\n\t\t\tif ( point.y > 10 ) {\n\n\t\t\t\tfromPoint.set( - 0.75, - 0.35, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.75, - 0.35, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube1, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( - 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( - 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube2, fromPoint, toPoint );\n\n\t\t\t\tfromPoint.set( 0.7, - 0.3, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0.7, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t} else {\n\n\t\t\t\tfromPoint.set( 0, - 0.2, 0 );\n\t\t\t\tfromPoint.applyQuaternion( quaternion );\n\t\t\t\tfromPoint.add( point );\n\n\t\t\t\ttoPoint.set( 0, - point.y, 0 );\n\t\t\t\ttoPoint.applyQuaternion( quaternion );\n\t\t\t\ttoPoint.add( point );\n\n\t\t\t\textrudeShape( tube3, fromPoint, toPoint );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'normal', new BufferAttribute( new Float32Array( normals ), 3 ) );\n\n\t}\n\n}\n\nclass RollerCoasterShadowGeometry extends BufferGeometry {\n\n\tconstructor( curve, divisions ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tconst up = new Vector3( 0, 1, 0 );\n\t\tconst forward = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\t\tprevQuaternion.setFromAxisAngle( up, Math.PI / 2 );\n\n\t\tconst point = new Vector3();\n\n\t\tconst prevPoint = new Vector3();\n\t\tprevPoint.copy( curve.getPointAt( 0 ) );\n\t\tprevPoint.y = 0;\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\tfor ( let i = 1; i <= divisions; i ++ ) {\n\n\t\t\tpoint.copy( curve.getPointAt( i / divisions ) );\n\t\t\tpoint.y = 0;\n\n\t\t\tforward.subVectors( point, prevPoint );\n\n\t\t\tconst angle = Math.atan2( forward.x, forward.z );\n\n\t\t\tquaternion.setFromAxisAngle( up, angle );\n\n\t\t\tvector1.set( - 0.3, 0, 0 );\n\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\tvector1.add( point );\n\n\t\t\tvector2.set( 0.3, 0, 0 );\n\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\tvector2.add( point );\n\n\t\t\tvector3.set( 0.3, 0, 0 );\n\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\tvector3.add( prevPoint );\n\n\t\t\tvector4.set( - 0.3, 0, 0 );\n\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\tvector4.add( prevPoint );\n\n\t\t\tvertices.push( vector1.x, vector1.y, vector1.z );\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tvertices.push( vector2.x, vector2.y, vector2.z );\n\t\t\tvertices.push( vector3.x, vector3.y, vector3.z );\n\t\t\tvertices.push( vector4.x, vector4.y, vector4.z );\n\n\t\t\tprevPoint.copy( point );\n\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass SkyGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < 100; i ++ ) {\n\n\t\t\tconst x = Math.random() * 800 - 400;\n\t\t\tconst y = Math.random() * 50 + 50;\n\t\t\tconst z = Math.random() * 800 - 400;\n\n\t\t\tconst size = Math.random() * 40 + 20;\n\n\t\t\tvertices.push( x - size, y, z - size );\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t\tvertices.push( x + size, y, z - size );\n\t\t\tvertices.push( x + size, y, z + size );\n\t\t\tvertices.push( x - size, y, z + size );\n\n\t\t}\n\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\n\t}\n\n}\n\nclass TreesGeometry extends BufferGeometry {\n\n\tconstructor( landscape ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst raycaster = new Raycaster();\n\t\traycaster.ray.direction.set( 0, - 1, 0 );\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0; i < 2000; i ++ ) {\n\n\t\t\tconst x = Math.random() * 500 - 250;\n\t\t\tconst z = Math.random() * 500 - 250;\n\n\t\t\traycaster.ray.origin.set( x, 50, z );\n\n\t\t\tconst intersections = raycaster.intersectObject( landscape );\n\n\t\t\tif ( intersections.length === 0 ) continue;\n\n\t\t\tconst y = intersections[ 0 ].point.y;\n\n\t\t\tconst height = Math.random() * 5 + 0.5;\n\n\t\t\tlet angle = Math.random() * Math.PI * 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tangle += Math.PI / 2;\n\n\t\t\tvertices.push( x + Math.sin( angle ), y, z + Math.cos( angle ) );\n\t\t\tvertices.push( x, y + height, z );\n\t\t\tvertices.push( x + Math.sin( angle + Math.PI ), y, z + Math.cos( angle + Math.PI ) );\n\n\t\t\tconst random = Math.random() * 0.1;\n\n\t\t\tfor ( let j = 0; j < 6; j ++ ) {\n\n\t\t\t\t_color.setRGB( 0.2 + random, 0.4 + random, 0, SRGBColorSpace );\n\n\t\t\t\tcolors.push( _color.r, _color.g, _color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 3 ) );\n\n\t}\n\n}\n\nexport { RollerCoasterGeometry, RollerCoasterLiftersGeometry, RollerCoasterShadowGeometry, SkyGeometry, TreesGeometry };\n", "class Timer {\n\n\tconstructor() {\n\n\t\tthis._previousTime = 0;\n\t\tthis._currentTime = 0;\n\t\tthis._startTime = now();\n\n\t\tthis._delta = 0;\n\t\tthis._elapsed = 0;\n\n\t\tthis._timescale = 1;\n\n\t\t// use Page Visibility API to avoid large time delta values\n\n\t\tthis._usePageVisibilityAPI = ( typeof document !== 'undefined' && document.hidden !== undefined );\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tthis._pageVisibilityHandler = handleVisibilityChange.bind( this );\n\n\t\t\tdocument.addEventListener( 'visibilitychange', this._pageVisibilityHandler, false );\n\n\t\t}\n\n\t}\n\n\tgetDelta() {\n\n\t\treturn this._delta / 1000;\n\n\t}\n\n\tgetElapsed() {\n\n\t\treturn this._elapsed / 1000;\n\n\t}\n\n\tgetTimescale() {\n\n\t\treturn this._timescale;\n\n\t}\n\n\tsetTimescale( timescale ) {\n\n\t\tthis._timescale = timescale;\n\n\t\treturn this;\n\n\t}\n\n\treset() {\n\n\t\tthis._currentTime = now() - this._startTime;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this._usePageVisibilityAPI === true ) {\n\n\t\t\tdocument.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( timestamp ) {\n\n\n\t\tif ( this._usePageVisibilityAPI === true && document.hidden === true ) {\n\n\t\t\tthis._delta = 0;\n\n\t\t} else {\n\n\t\t\tthis._previousTime = this._currentTime;\n\t\t\tthis._currentTime = ( timestamp !== undefined ? timestamp : now() ) - this._startTime;\n\n\t\t\tthis._delta = ( this._currentTime - this._previousTime ) * this._timescale;\n\t\t\tthis._elapsed += this._delta; // _elapsed is the accumulation of all previous deltas\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass FixedTimer extends Timer {\n\n\tconstructor( fps = 60 ) {\n\n\t\tsuper();\n\t\tthis._delta = ( 1 / fps ) * 1000;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._elapsed += ( this._delta * this._timescale ); // _elapsed is the accumulation of all previous deltas\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now();\n\n}\n\nfunction handleVisibilityChange() {\n\n\tif ( document.hidden === false ) this.reset();\n\n}\n\nexport { Timer, FixedTimer };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tVector3\n} from 'three';\n\nfunction TubePainter() {\n\n\tconst BUFFER_SIZE = 1000000 * 3;\n\n\tconst positions = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tpositions.usage = DynamicDrawUsage;\n\n\tconst normals = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tnormals.usage = DynamicDrawUsage;\n\n\tconst colors = new BufferAttribute( new Float32Array( BUFFER_SIZE ), 3 );\n\tcolors.usage = DynamicDrawUsage;\n\n\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', positions );\n\tgeometry.setAttribute( 'normal', normals );\n\tgeometry.setAttribute( 'color', colors );\n\tgeometry.drawRange.count = 0;\n\n\tconst material = new MeshStandardMaterial( {\n\t\tvertexColors: true\n\t} );\n\n\tconst mesh = new Mesh( geometry, material );\n\tmesh.frustumCulled = false;\n\n\t//\n\n\tfunction getPoints( size ) {\n\n\t\tconst PI2 = Math.PI * 2;\n\n\t\tconst sides = 10;\n\t\tconst array = [];\n\t\tconst radius = 0.01 * size;\n\n\t\tfor ( let i = 0; i < sides; i ++ ) {\n\n\t\t\tconst angle = ( i / sides ) * PI2;\n\t\t\tarray.push( new Vector3( Math.sin( angle ) * radius, Math.cos( angle ) * radius, 0 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t//\n\n\tconst vector1 = new Vector3();\n\tconst vector2 = new Vector3();\n\tconst vector3 = new Vector3();\n\tconst vector4 = new Vector3();\n\n\tconst color = new Color( 0xffffff );\n\tlet size = 1;\n\n\tfunction stroke( position1, position2, matrix1, matrix2 ) {\n\n\t\tif ( position1.distanceToSquared( position2 ) === 0 ) return;\n\n\t\tlet count = geometry.drawRange.count;\n\n\t\tconst points = getPoints( size );\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tconst vertex1 = points[ i ];\n\t\t\tconst vertex2 = points[ ( i + 1 ) % il ];\n\n\t\t\t// positions\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).add( position2 );\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).add( position1 );\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).add( position1 );\n\n\t\t\tvector1.toArray( positions.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( positions.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( positions.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( positions.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( positions.array, ( count + 5 ) * 3 );\n\n\t\t\t// normals\n\n\t\t\tvector1.copy( vertex1 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector2.copy( vertex2 ).applyMatrix4( matrix2 ).normalize();\n\t\t\tvector3.copy( vertex2 ).applyMatrix4( matrix1 ).normalize();\n\t\t\tvector4.copy( vertex1 ).applyMatrix4( matrix1 ).normalize();\n\n\t\t\tvector1.toArray( normals.array, ( count + 0 ) * 3 );\n\t\t\tvector2.toArray( normals.array, ( count + 1 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 2 ) * 3 );\n\n\t\t\tvector2.toArray( normals.array, ( count + 3 ) * 3 );\n\t\t\tvector3.toArray( normals.array, ( count + 4 ) * 3 );\n\t\t\tvector4.toArray( normals.array, ( count + 5 ) * 3 );\n\n\t\t\t// colors\n\n\t\t\tcolor.toArray( colors.array, ( count + 0 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 1 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 2 ) * 3 );\n\n\t\t\tcolor.toArray( colors.array, ( count + 3 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 4 ) * 3 );\n\t\t\tcolor.toArray( colors.array, ( count + 5 ) * 3 );\n\n\t\t\tcount += 6;\n\n\t\t}\n\n\t\tgeometry.drawRange.count = count;\n\n\t}\n\n\t//\n\n\tconst up = new Vector3( 0, 1, 0 );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\tconst matrix1 = new Matrix4();\n\tconst matrix2 = new Matrix4();\n\n\tfunction moveTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tpoint2.copy( position );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction lineTo( position ) {\n\n\t\tpoint1.copy( position );\n\t\tmatrix1.lookAt( point2, point1, up );\n\n\t\tstroke( point1, point2, matrix1, matrix2 );\n\n\t\tpoint2.copy( point1 );\n\t\tmatrix2.copy( matrix1 );\n\n\t}\n\n\tfunction setSize( value ) {\n\n\t\tsize = value;\n\n\t}\n\n\t//\n\n\tlet count = 0;\n\n\tfunction update() {\n\n\t\tconst start = count;\n\t\tconst end = geometry.drawRange.count;\n\n\t\tif ( start === end ) return;\n\n\t\tpositions.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tpositions.needsUpdate = true;\n\n\t\tnormals.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tnormals.needsUpdate = true;\n\n\t\tcolors.addUpdateRange( start * 3, ( end - start ) * 3 );\n\t\tcolors.needsUpdate = true;\n\n\t\tcount = geometry.drawRange.count;\n\n\t}\n\n\treturn {\n\t\tmesh: mesh,\n\t\tmoveTo: moveTo,\n\t\tlineTo: lineTo,\n\t\tsetSize: setSize,\n\t\tupdate: update\n\t};\n\n}\n\nexport { TubePainter };\n", "// Original src: https://github.com/zz85/threejs-path-flow\nconst CHANNELS = 4;\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 4;\n\nimport {\n\tDataTexture,\n\tDataUtils,\n\tRGBAFormat,\n\tHalfFloatType,\n\tRepeatWrapping,\n\tMesh,\n\tInstancedMesh,\n\tLinearFilter,\n\tDynamicDrawUsage,\n\tMatrix4\n} from 'three';\n\n/**\n * Make a new DataTexture to store the descriptions of the curves.\n *\n * @param { number } numberOfCurves the number of curves needed to be described by this texture.\n */\nexport function initSplineTexture( numberOfCurves = 1 ) {\n\n\tconst dataArray = new Uint16Array( TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS );\n\tconst dataTexture = new DataTexture(\n\t\tdataArray,\n\t\tTEXTURE_WIDTH,\n\t\tTEXTURE_HEIGHT * numberOfCurves,\n\t\tRGBAFormat,\n\t\tHalfFloatType\n\t);\n\n\tdataTexture.wrapS = RepeatWrapping;\n\tdataTexture.wrapY = RepeatWrapping;\n\tdataTexture.magFilter = LinearFilter;\n\tdataTexture.minFilter = LinearFilter;\n\tdataTexture.needsUpdate = true;\n\n\treturn dataTexture;\n\n}\n\n/**\n * Write the curve description to the data texture\n *\n * @param { DataTexture } texture The DataTexture to write to\n * @param { Curve } splineCurve The curve to describe\n * @param { number } offset Which curve slot to write to\n */\nexport function updateSplineTexture( texture, splineCurve, offset = 0 ) {\n\n\tconst numberOfPoints = Math.floor( TEXTURE_WIDTH * ( TEXTURE_HEIGHT / 4 ) );\n\tsplineCurve.arcLengthDivisions = numberOfPoints / 2;\n\tsplineCurve.updateArcLengths();\n\tconst points = splineCurve.getSpacedPoints( numberOfPoints );\n\tconst frenetFrames = splineCurve.computeFrenetFrames( numberOfPoints, true );\n\n\tfor ( let i = 0; i < numberOfPoints; i ++ ) {\n\n\t\tconst rowOffset = Math.floor( i / TEXTURE_WIDTH );\n\t\tconst rowIndex = i % TEXTURE_WIDTH;\n\n\t\tlet pt = points[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.tangents[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.normals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\t\tpt = frenetFrames.binormals[ i ];\n\t\tsetTextureValue( texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + ( TEXTURE_HEIGHT * offset ) );\n\n\t}\n\n\ttexture.needsUpdate = true;\n\n}\n\n\nfunction setTextureValue( texture, index, x, y, z, o ) {\n\n\tconst image = texture.image;\n\tconst { data } = image;\n\tconst i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset\n\tdata[ index * CHANNELS + i + 0 ] = DataUtils.toHalfFloat( x );\n\tdata[ index * CHANNELS + i + 1 ] = DataUtils.toHalfFloat( y );\n\tdata[ index * CHANNELS + i + 2 ] = DataUtils.toHalfFloat( z );\n\tdata[ index * CHANNELS + i + 3 ] = DataUtils.toHalfFloat( 1 );\n\n}\n\n/**\n * Create a new set of uniforms for describing the curve modifier\n *\n * @param { DataTexture } Texture which holds the curve description\n */\nexport function getUniforms( splineTexture ) {\n\n\tconst uniforms = {\n\t\tspineTexture: { value: splineTexture },\n\t\tpathOffset: { type: 'f', value: 0 }, // time of path curve\n\t\tpathSegment: { type: 'f', value: 1 }, // fractional length of path\n\t\tspineOffset: { type: 'f', value: 161 },\n\t\tspineLength: { type: 'f', value: 400 },\n\t\tflow: { type: 'i', value: 1 },\n\t};\n\treturn uniforms;\n\n}\n\nexport function modifyShader( material, uniforms, numberOfCurves = 1 ) {\n\n\tif ( material.__ok ) return;\n\tmaterial.__ok = true;\n\n\tmaterial.onBeforeCompile = ( shader ) => {\n\n\t\tif ( shader.__modified ) return;\n\t\tshader.__modified = true;\n\n\t\tObject.assign( shader.uniforms, uniforms );\n\n\t\tconst vertexShader = `\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;\n\t\tfloat textureStacks = ${TEXTURE_HEIGHT / 4}.;\n\n\t\t${shader.vertexShader}\n\t\t`\n\t\t// chunk import moved in front of modified shader below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformedNormal declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// vec3 transformed declaration overriden below\n\t\t\t.replace( '#include ', '' )\n\n\t\t\t// shader override\n\t\t\t.replace(\n\t\t\t\t/void\\s*main\\s*\\(\\)\\s*\\{/,\n\t\t\t\t`\nvoid main() {\n#include \n\nvec4 worldPos = modelMatrix * vec4(position, 1.);\n\nbool bend = flow > 0;\nfloat xWeight = bend ? 0. : 1.;\n\n#ifdef USE_INSTANCING\nfloat pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\nfloat spineLengthFromInstanceMatrix = instanceMatrix[3][0];\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n#else\nfloat spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\nfloat mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n#endif\n\nmt = mod(mt, textureStacks);\nfloat rowOffset = floor(mt);\n\n#ifdef USE_INSTANCING\nrowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;\n#endif\n\nvec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\nvec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\nmat3 basis = mat3(a, b, c);\n\nvec3 transformed = basis\n\t* vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n\t+ spinePos;\n\nvec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t` ).replace(\n\t\t\t\t'#include ',\n\t\t\t\t`vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;`\n\t\t\t);\n\n\t\tshader.vertexShader = vertexShader;\n\n\t};\n\n}\n\n/**\n * A helper class for making meshes bend aroudn curves\n */\nexport class Flow {\n\n\t/**\n\t * @param {Mesh} mesh The mesh to clone and modify to bend around the curve\n\t * @param {number} numberOfCurves The amount of space that should preallocated for additional curves\n\t */\n\tconstructor( mesh, numberOfCurves = 1 ) {\n\n\t\tconst obj3D = mesh.clone();\n\t\tconst splineTexure = initSplineTexture( numberOfCurves );\n\t\tconst uniforms = getUniforms( splineTexure );\n\t\tobj3D.traverse( function ( child ) {\n\n\t\t\tif (\n\t\t\t\tchild instanceof Mesh ||\n\t\t\t\tchild instanceof InstancedMesh\n\t\t\t) {\n\n\t\t\t\tif ( Array.isArray( child.material ) ) {\n\n\t\t\t\t\tconst materials = [];\n\n\t\t\t\t\tfor ( const material of child.material ) {\n\n\t\t\t\t\t\tconst newMaterial = material.clone();\n\t\t\t\t\t\tmodifyShader( newMaterial, uniforms, numberOfCurves );\n\t\t\t\t\t\tmaterials.push( newMaterial );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tchild.material = materials;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.material = child.material.clone();\n\t\t\t\t\tmodifyShader( child.material, uniforms, numberOfCurves );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.curveArray = new Array( numberOfCurves );\n\t\tthis.curveLengthArray = new Array( numberOfCurves );\n\n\t\tthis.object3D = obj3D;\n\t\tthis.splineTexure = splineTexure;\n\t\tthis.uniforms = uniforms;\n\n\t}\n\n\tupdateCurve( index, curve ) {\n\n\t\tif ( index >= this.curveArray.length ) throw Error( 'Index out of range for Flow' );\n\t\tconst curveLength = curve.getLength();\n\t\tthis.uniforms.spineLength.value = curveLength;\n\t\tthis.curveLengthArray[ index ] = curveLength;\n\t\tthis.curveArray[ index ] = curve;\n\t\tupdateSplineTexture( this.splineTexure, curve, index );\n\n\t}\n\n\tmoveAlongCurve( amount ) {\n\n\t\tthis.uniforms.pathOffset.value += amount;\n\n\t}\n\n}\nconst matrix = new Matrix4();\n\n/**\n * A helper class for creating instanced versions of flow, where the instances are placed on the curve.\n */\nexport class InstancedFlow extends Flow {\n\n\t/**\n\t *\n\t * @param {number} count The number of instanced elements\n\t * @param {number} curveCount The number of curves to preallocate for\n\t * @param {Geometry} geometry The geometry to use for the instanced mesh\n\t * @param {Material} material The material to use for the instanced mesh\n\t */\n\tconstructor( count, curveCount, geometry, material ) {\n\n\t\tconst mesh = new InstancedMesh(\n\t\t\tgeometry,\n\t\t\tmaterial,\n\t\t\tcount\n\t\t);\n\t\tmesh.instanceMatrix.setUsage( DynamicDrawUsage );\n\t\tmesh.frustumCulled = false;\n\t\tsuper( mesh, curveCount );\n\n\t\tthis.offsets = new Array( count ).fill( 0 );\n\t\tthis.whichCurve = new Array( count ).fill( 0 );\n\n\t}\n\n\t/**\n\t * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects\n\t * This writes that information to the matrix and marks it as needing update.\n\t *\n\t * @param {number} index of the instanced element to update\n\t */\n\twriteChanges( index ) {\n\n\t\tmatrix.makeTranslation(\n\t\t\tthis.curveLengthArray[ this.whichCurve[ index ] ],\n\t\t\tthis.whichCurve[ index ],\n\t\t\tthis.offsets[ index ]\n\t\t);\n\t\tthis.object3D.setMatrixAt( index, matrix );\n\t\tthis.object3D.instanceMatrix.needsUpdate = true;\n\n\t}\n\n\t/**\n\t * Move an individual element along the curve by a specific amount\n\t *\n\t * @param {number} index Which element to update\n\t * @param {number} offset Move by how much\n\t */\n\tmoveIndividualAlongCurve( index, offset ) {\n\n\t\tthis.offsets[ index ] += offset;\n\t\tthis.writeChanges( index );\n\n\t}\n\n\t/**\n\t * Select which curve to use for an element\n\t *\n\t * @param {number} index the index of the instanced element to update\n\t * @param {number} curveNo the index of the curve it should use\n\t */\n\tsetCurve( index, curveNo ) {\n\n\t\tif ( isNaN( curveNo ) ) throw Error( 'curve index being set is Not a Number (NaN)' );\n\t\tthis.whichCurve[ index ] = curveNo;\n\t\tthis.writeChanges( index );\n\n\t}\n\n}\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tVector3\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\nconst _A = new Vector3();\nconst _B = new Vector3();\nconst _C = new Vector3();\n\nclass EdgeSplitModifier {\n\n\tmodify( geometry, cutOffAngle, tryKeepNormals = true ) {\n\n\t\tfunction computeNormals() {\n\n\t\t\tnormals = new Float32Array( indexes.length * 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i += 3 ) {\n\n\t\t\t\tlet index = indexes[ i ];\n\n\t\t\t\t_A.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 1 ];\n\t\t\t\t_B.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\tindex = indexes[ i + 2 ];\n\t\t\t\t_C.set(\n\t\t\t\t\tpositions[ 3 * index ],\n\t\t\t\t\tpositions[ 3 * index + 1 ],\n\t\t\t\t\tpositions[ 3 * index + 2 ] );\n\n\t\t\t\t_C.sub( _B );\n\t\t\t\t_A.sub( _B );\n\n\t\t\t\tconst normal = _C.cross( _A ).normalize();\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tnormals[ 3 * ( i + j ) ] = normal.x;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 1 ] = normal.y;\n\t\t\t\t\tnormals[ 3 * ( i + j ) + 2 ] = normal.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction mapPositionsToIndexes() {\n\n\t\t\tpointToIndexMap = Array( positions.length / 3 );\n\n\t\t\tfor ( let i = 0; i < indexes.length; i ++ ) {\n\n\t\t\t\tconst index = indexes[ i ];\n\n\t\t\t\tif ( pointToIndexMap[ index ] == null ) {\n\n\t\t\t\t\tpointToIndexMap[ index ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tpointToIndexMap[ index ].push( i );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tfunction edgeSplitToGroups( indexes, cutOff, firstIndex ) {\n\n\t\t\t_A.set( normals[ 3 * firstIndex ], normals[ 3 * firstIndex + 1 ], normals[ 3 * firstIndex + 2 ] ).normalize();\n\n\t\t\tconst result = {\n\t\t\t\tsplitGroup: [],\n\t\t\t\tcurrentGroup: [ firstIndex ]\n\t\t\t};\n\n\t\t\tfor ( const j of indexes ) {\n\n\t\t\t\tif ( j !== firstIndex ) {\n\n\t\t\t\t\t_B.set( normals[ 3 * j ], normals[ 3 * j + 1 ], normals[ 3 * j + 2 ] ).normalize();\n\n\t\t\t\t\tif ( _B.dot( _A ) < cutOff ) {\n\n\t\t\t\t\t\tresult.splitGroup.push( j );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tresult.currentGroup.push( j );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\n\t\tfunction edgeSplit( indexes, cutOff, original = null ) {\n\n\t\t\tif ( indexes.length === 0 ) return;\n\n\t\t\tconst groupResults = [];\n\n\t\t\tfor ( const index of indexes ) {\n\n\t\t\t\tgroupResults.push( edgeSplitToGroups( indexes, cutOff, index ) );\n\n\t\t\t}\n\n\t\t\tlet result = groupResults[ 0 ];\n\n\t\t\tfor ( const groupResult of groupResults ) {\n\n\t\t\t\tif ( groupResult.currentGroup.length > result.currentGroup.length ) {\n\n\t\t\t\t\tresult = groupResult;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif ( original != null ) {\n\n\t\t\t\tsplitIndexes.push( {\n\t\t\t\t\toriginal: original,\n\t\t\t\t\tindexes: result.currentGroup\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( result.splitGroup.length ) {\n\n\t\t\t\tedgeSplit( result.splitGroup, cutOff, original || result.currentGroup[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet hadNormals = false;\n\t\tlet oldNormals = null;\n\n\t\tif ( geometry.attributes.normal ) {\n\n\t\t\thadNormals = true;\n\n\t\t\tgeometry = geometry.clone();\n\n\t\t\tif ( tryKeepNormals === true && geometry.index !== null ) {\n\n\t\t\t\toldNormals = geometry.attributes.normal.array;\n\n\t\t\t}\n\n\t\t\tgeometry.deleteAttribute( 'normal' );\n\n\t\t}\n\n\t\tif ( geometry.index == null ) {\n\n\t\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t}\n\n\t\tconst indexes = geometry.index.array;\n\t\tconst positions = geometry.getAttribute( 'position' ).array;\n\n\t\tlet normals;\n\t\tlet pointToIndexMap;\n\n\t\tcomputeNormals();\n\t\tmapPositionsToIndexes();\n\n\t\tconst splitIndexes = [];\n\n\t\tfor ( const vertexIndexes of pointToIndexMap ) {\n\n\t\t\tedgeSplit( vertexIndexes, Math.cos( cutOffAngle ) - 0.001 );\n\n\t\t}\n\n\t\tconst newAttributes = {};\n\t\tfor ( const name of Object.keys( geometry.attributes ) ) {\n\n\t\t\tconst oldAttribute = geometry.attributes[ name ];\n\t\t\tconst newArray = new oldAttribute.array.constructor( ( indexes.length + splitIndexes.length ) * oldAttribute.itemSize );\n\t\t\tnewArray.set( oldAttribute.array );\n\t\t\tnewAttributes[ name ] = new BufferAttribute( newArray, oldAttribute.itemSize, oldAttribute.normalized );\n\n\t\t}\n\n\t\tconst newIndexes = new Uint32Array( indexes.length );\n\t\tnewIndexes.set( indexes );\n\n\t\tfor ( let i = 0; i < splitIndexes.length; i ++ ) {\n\n\t\t\tconst split = splitIndexes[ i ];\n\t\t\tconst index = indexes[ split.original ];\n\n\t\t\tfor ( const attribute of Object.values( newAttributes ) ) {\n\n\t\t\t\tfor ( let j = 0; j < attribute.itemSize; j ++ ) {\n\n\t\t\t\t\tattribute.array[ ( indexes.length + i ) * attribute.itemSize + j ] =\n\t\t\t\t\t\tattribute.array[ index * attribute.itemSize + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const j of split.indexes ) {\n\n\t\t\t\tnewIndexes[ j ] = indexes.length + i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( newIndexes, 1 ) );\n\n\t\tfor ( const name of Object.keys( newAttributes ) ) {\n\n\t\t\tgeometry.setAttribute( name, newAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( hadNormals ) {\n\n\t\t\tgeometry.computeVertexNormals();\n\n\t\t\tif ( oldNormals !== null ) {\n\n\t\t\t\tconst changedNormals = new Array( oldNormals.length / 3 ).fill( false );\n\n\t\t\t\tfor ( const splitData of splitIndexes )\n\t\t\t\t\tchangedNormals[ splitData.original ] = true;\n\n\t\t\t\tfor ( let i = 0; i < changedNormals.length; i ++ ) {\n\n\t\t\t\t\tif ( changedNormals[ i ] === false ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ )\n\t\t\t\t\t\t\tgeometry.attributes.normal.array[ 3 * i + j ] = oldNormals[ 3 * i + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n\n\nexport { EdgeSplitModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js';\n\n/**\n *\tSimplification Geometry Modifier\n * - based on code and technique\n *\t - by Stan Melax in 1998\n *\t - Progressive Mesh type Polygon Reduction Algorithm\n * - http://www.melax.com/polychop/\n */\n\nconst _cb = new Vector3(), _ab = new Vector3();\n\nclass SimplifyModifier {\n\n\tmodify( geometry, count ) {\n\n\t\tgeometry = geometry.clone();\n\n\t\t// currently morphAttributes are not supported\n\t\tdelete geometry.morphAttributes.position;\n\t\tdelete geometry.morphAttributes.normal;\n\t\tconst attributes = geometry.attributes;\n\n\t\t// this modifier can only process indexed and non-indexed geomtries with at least a position attribute\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tif ( name !== 'position' && name !== 'uv' && name !== 'normal' && name !== 'tangent' && name !== 'color' ) geometry.deleteAttribute( name );\n\n\t\t}\n\n\t\tgeometry = BufferGeometryUtils.mergeVertices( geometry );\n\n\t\t//\n\t\t// put data of original geometry in different data structures\n\t\t//\n\n\t\tconst vertices = [];\n\t\tconst faces = [];\n\n\t\t// add vertices\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst uvAttribute = geometry.getAttribute( 'uv' );\n\t\tconst normalAttribute = geometry.getAttribute( 'normal' );\n\t\tconst tangentAttribute = geometry.getAttribute( 'tangent' );\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\tlet t = null;\n\t\tlet v2 = null;\n\t\tlet nor = null;\n\t\tlet col = null;\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tconst v = new Vector3().fromBufferAttribute( positionAttribute, i );\n\t\t\tif ( uvAttribute ) {\n\n\t\t\t\tv2 = new Vector2().fromBufferAttribute( uvAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( normalAttribute ) {\n\n\t\t\t\tnor = new Vector3().fromBufferAttribute( normalAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( tangentAttribute ) {\n\n\t\t\t\tt = new Vector4().fromBufferAttribute( tangentAttribute, i );\n\n\t\t\t}\n\n\t\t\tif ( colorAttribute ) {\n\n\t\t\t\tcol = new Color().fromBufferAttribute( colorAttribute, i );\n\n\t\t\t}\n\n\t\t\tconst vertex = new Vertex( v, v2, nor, t, col );\n\t\t\tvertices.push( vertex );\n\n\t\t}\n\n\t\t// add faces\n\n\t\tlet index = geometry.getIndex();\n\n\t\tif ( index !== null ) {\n\n\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\t\tconst a = i;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tconst triangle = new Triangle( vertices[ a ], vertices[ b ], vertices[ c ], a, b, c );\n\t\t\t\tfaces.push( triangle );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute all edge collapse costs\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tcomputeEdgeCostAtVertex( vertices[ i ] );\n\n\t\t}\n\n\t\tlet nextVertex;\n\n\t\tlet z = count;\n\n\t\twhile ( z -- ) {\n\n\t\t\tnextVertex = minimumCostEdge( vertices );\n\n\t\t\tif ( ! nextVertex ) {\n\n\t\t\t\tconsole.log( 'THREE.SimplifyModifier: No next vertex' );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcollapse( vertices, faces, nextVertex, nextVertex.collapseNeighbor );\n\n\t\t}\n\n\t\t//\n\n\t\tconst simplifiedGeometry = new BufferGeometry();\n\t\tconst position = [];\n\t\tconst uv = [];\n\t\tconst normal = [];\n\t\tconst tangent = [];\n\t\tconst color = [];\n\n\t\tindex = [];\n\n\t\t//\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst vertex = vertices[ i ];\n\t\t\tposition.push( vertex.position.x, vertex.position.y, vertex.position.z );\n\t\t\tif ( vertex.uv ) {\n\n\t\t\t\tuv.push( vertex.uv.x, vertex.uv.y );\n\n\t\t\t}\n\n\t\t\tif ( vertex.normal ) {\n\n\t\t\t\tnormal.push( vertex.normal.x, vertex.normal.y, vertex.normal.z );\n\n\t\t\t}\n\n\t\t\tif ( vertex.tangent ) {\n\n\t\t\t\ttangent.push( vertex.tangent.x, vertex.tangent.y, vertex.tangent.z, vertex.tangent.w );\n\n\t\t\t}\n\n\t\t\tif ( vertex.color ) {\n\n\t\t\t\tcolor.push( vertex.color.r, vertex.color.g, vertex.color.b );\n\n\t\t\t}\n\n\n\t\t\t// cache final index to GREATLY speed up faces reconstruction\n\t\t\tvertex.id = i;\n\n\t\t}\n\n\t\t//\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\t\t\tindex.push( face.v1.id, face.v2.id, face.v3.id );\n\n\t\t}\n\n\t\tsimplifiedGeometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( uv.length > 0 ) simplifiedGeometry.setAttribute( 'uv', new Float32BufferAttribute( uv, 2 ) );\n\t\tif ( normal.length > 0 ) simplifiedGeometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( tangent.length > 0 ) simplifiedGeometry.setAttribute( 'tangent', new Float32BufferAttribute( tangent, 4 ) );\n\t\tif ( color.length > 0 ) simplifiedGeometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\n\t\tsimplifiedGeometry.setIndex( index );\n\n\t\treturn simplifiedGeometry;\n\n\t}\n\n}\n\nfunction pushIfUnique( array, object ) {\n\n\tif ( array.indexOf( object ) === - 1 ) array.push( object );\n\n}\n\nfunction removeFromArray( array, object ) {\n\n\tconst k = array.indexOf( object );\n\tif ( k > - 1 ) array.splice( k, 1 );\n\n}\n\nfunction computeEdgeCollapseCost( u, v ) {\n\n\t// if we collapse edge uv by moving u to v then how\n\t// much different will the model change, i.e. the \"error\".\n\n\tconst edgelength = v.position.distanceTo( u.position );\n\tlet curvature = 0;\n\n\tconst sideFaces = [];\n\n\t// find the \"sides\" triangles that are on the edge uv\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tconst face = u.faces[ i ];\n\n\t\tif ( face.hasVertex( v ) ) {\n\n\t\t\tsideFaces.push( face );\n\n\t\t}\n\n\t}\n\n\t// use the triangle facing most away from the sides\n\t// to determine our curvature term\n\tfor ( let i = 0, il = u.faces.length; i < il; i ++ ) {\n\n\t\tlet minCurvature = 1;\n\t\tconst face = u.faces[ i ];\n\n\t\tfor ( let j = 0; j < sideFaces.length; j ++ ) {\n\n\t\t\tconst sideFace = sideFaces[ j ];\n\t\t\t// use dot product of face normals.\n\t\t\tconst dotProd = face.normal.dot( sideFace.normal );\n\t\t\tminCurvature = Math.min( minCurvature, ( 1.001 - dotProd ) / 2 );\n\n\t\t}\n\n\t\tcurvature = Math.max( curvature, minCurvature );\n\n\t}\n\n\t// crude approach in attempt to preserve borders\n\t// though it seems not to be totally correct\n\tconst borders = 0;\n\n\tif ( sideFaces.length < 2 ) {\n\n\t\t// we add some arbitrary cost for borders,\n\t\t// borders += 10;\n\t\tcurvature = 1;\n\n\t}\n\n\tconst amt = edgelength * curvature + borders;\n\n\treturn amt;\n\n}\n\nfunction computeEdgeCostAtVertex( v ) {\n\n\t// compute the edge collapse cost for all edges that start\n\t// from vertex v. Since we are only interested in reducing\n\t// the object by selecting the min cost edge at each step, we\n\t// only cache the cost of the least cost edge at this vertex\n\t// (in member variable collapse) as well as the value of the\n\t// cost (in member variable collapseCost).\n\n\tif ( v.neighbors.length === 0 ) {\n\n\t\t// collapse if no neighbors.\n\t\tv.collapseNeighbor = null;\n\t\tv.collapseCost = - 0.01;\n\n\t\treturn;\n\n\t}\n\n\tv.collapseCost = 100000;\n\tv.collapseNeighbor = null;\n\n\t// search all neighboring edges for \"least cost\" edge\n\tfor ( let i = 0; i < v.neighbors.length; i ++ ) {\n\n\t\tconst collapseCost = computeEdgeCollapseCost( v, v.neighbors[ i ] );\n\n\t\tif ( ! v.collapseNeighbor ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.collapseCost = collapseCost;\n\t\t\tv.minCost = collapseCost;\n\t\t\tv.totalCost = 0;\n\t\t\tv.costCount = 0;\n\n\t\t}\n\n\t\tv.costCount ++;\n\t\tv.totalCost += collapseCost;\n\n\t\tif ( collapseCost < v.minCost ) {\n\n\t\t\tv.collapseNeighbor = v.neighbors[ i ];\n\t\t\tv.minCost = collapseCost;\n\n\t\t}\n\n\t}\n\n\t// we average the cost of collapsing at this vertex\n\tv.collapseCost = v.totalCost / v.costCount;\n\t// v.collapseCost = v.minCost;\n\n}\n\nfunction removeVertex( v, vertices ) {\n\n\tconsole.assert( v.faces.length === 0 );\n\n\twhile ( v.neighbors.length ) {\n\n\t\tconst n = v.neighbors.pop();\n\t\tremoveFromArray( n.neighbors, v );\n\n\t}\n\n\tremoveFromArray( vertices, v );\n\n}\n\nfunction removeFace( f, faces ) {\n\n\tremoveFromArray( faces, f );\n\n\tif ( f.v1 ) removeFromArray( f.v1.faces, f );\n\tif ( f.v2 ) removeFromArray( f.v2.faces, f );\n\tif ( f.v3 ) removeFromArray( f.v3.faces, f );\n\n\t// TODO optimize this!\n\tconst vs = [ f.v1, f.v2, f.v3 ];\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst v1 = vs[ i ];\n\t\tconst v2 = vs[ ( i + 1 ) % 3 ];\n\n\t\tif ( ! v1 || ! v2 ) continue;\n\n\t\tv1.removeIfNonNeighbor( v2 );\n\t\tv2.removeIfNonNeighbor( v1 );\n\n\t}\n\n}\n\nfunction collapse( vertices, faces, u, v ) {\n\n\t// Collapse the edge uv by moving vertex u onto v\n\n\tif ( ! v ) {\n\n\t\t// u is a vertex all by itself so just delete it..\n\t\tremoveVertex( u, vertices );\n\t\treturn;\n\n\t}\n\n\tif ( v.uv ) {\n\n\t\tu.uv.copy( v.uv );\n\n\t}\n\n\tif ( v.normal ) {\n\n\t\tv.normal.add( u.normal ).normalize();\n\n\t}\n\n\tif ( v.tangent ) {\n\n\t\tv.tangent.add( u.tangent ).normalize();\n\n\t}\n\n\tconst tmpVertices = [];\n\n\tfor ( let i = 0; i < u.neighbors.length; i ++ ) {\n\n\t\ttmpVertices.push( u.neighbors[ i ] );\n\n\t}\n\n\n\t// delete triangles on edge uv:\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tif ( u.faces[ i ] && u.faces[ i ].hasVertex( v ) ) {\n\n\t\t\tremoveFace( u.faces[ i ], faces );\n\n\t\t}\n\n\t}\n\n\t// update remaining triangles to have v instead of u\n\tfor ( let i = u.faces.length - 1; i >= 0; i -- ) {\n\n\t\tu.faces[ i ].replaceVertex( u, v );\n\n\t}\n\n\n\tremoveVertex( u, vertices );\n\n\t// recompute the edge collapse costs in neighborhood\n\tfor ( let i = 0; i < tmpVertices.length; i ++ ) {\n\n\t\tcomputeEdgeCostAtVertex( tmpVertices[ i ] );\n\n\t}\n\n}\n\n\n\nfunction minimumCostEdge( vertices ) {\n\n\t// O(n * n) approach. TODO optimize this\n\n\tlet least = vertices[ 0 ];\n\n\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\tif ( vertices[ i ].collapseCost < least.collapseCost ) {\n\n\t\t\tleast = vertices[ i ];\n\n\t\t}\n\n\t}\n\n\treturn least;\n\n}\n\n// we use a triangle class to represent structure of face slightly differently\n\nclass Triangle {\n\n\tconstructor( v1, v2, v3, a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t\tthis.normal = new Vector3();\n\n\t\tthis.computeNormal();\n\n\t\tv1.faces.push( this );\n\t\tv1.addUniqueNeighbor( v2 );\n\t\tv1.addUniqueNeighbor( v3 );\n\n\t\tv2.faces.push( this );\n\t\tv2.addUniqueNeighbor( v1 );\n\t\tv2.addUniqueNeighbor( v3 );\n\n\n\t\tv3.faces.push( this );\n\t\tv3.addUniqueNeighbor( v1 );\n\t\tv3.addUniqueNeighbor( v2 );\n\n\t}\n\n\tcomputeNormal() {\n\n\t\tconst vA = this.v1.position;\n\t\tconst vB = this.v2.position;\n\t\tconst vC = this.v3.position;\n\n\t\t_cb.subVectors( vC, vB );\n\t\t_ab.subVectors( vA, vB );\n\t\t_cb.cross( _ab ).normalize();\n\n\t\tthis.normal.copy( _cb );\n\n\t}\n\n\thasVertex( v ) {\n\n\t\treturn v === this.v1 || v === this.v2 || v === this.v3;\n\n\t}\n\n\treplaceVertex( oldv, newv ) {\n\n\t\tif ( oldv === this.v1 ) this.v1 = newv;\n\t\telse if ( oldv === this.v2 ) this.v2 = newv;\n\t\telse if ( oldv === this.v3 ) this.v3 = newv;\n\n\t\tremoveFromArray( oldv.faces, this );\n\t\tnewv.faces.push( this );\n\n\n\t\toldv.removeIfNonNeighbor( this.v1 );\n\t\tthis.v1.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v2 );\n\t\tthis.v2.removeIfNonNeighbor( oldv );\n\n\t\toldv.removeIfNonNeighbor( this.v3 );\n\t\tthis.v3.removeIfNonNeighbor( oldv );\n\n\t\tthis.v1.addUniqueNeighbor( this.v2 );\n\t\tthis.v1.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v2.addUniqueNeighbor( this.v1 );\n\t\tthis.v2.addUniqueNeighbor( this.v3 );\n\n\t\tthis.v3.addUniqueNeighbor( this.v1 );\n\t\tthis.v3.addUniqueNeighbor( this.v2 );\n\n\t\tthis.computeNormal();\n\n\t}\n\n}\n\nclass Vertex {\n\n\tconstructor( v, uv, normal, tangent, color ) {\n\n\t\tthis.position = v;\n\t\tthis.uv = uv;\n\t\tthis.normal = normal;\n\t\tthis.tangent = tangent;\n\t\tthis.color = color;\n\n\t\tthis.id = - 1; // external use position in vertices list (for e.g. face generation)\n\n\t\tthis.faces = []; // faces vertex is connected\n\t\tthis.neighbors = []; // neighbouring vertices aka \"adjacentVertices\"\n\n\t\t// these will be computed in computeEdgeCostAtVertex()\n\t\tthis.collapseCost = 0; // cost of collapsing this vertex, the less the better. aka objdist\n\t\tthis.collapseNeighbor = null; // best candinate for collapsing\n\n\t}\n\n\taddUniqueNeighbor( vertex ) {\n\n\t\tpushIfUnique( this.neighbors, vertex );\n\n\t}\n\n\tremoveIfNonNeighbor( n ) {\n\n\t\tconst neighbors = this.neighbors;\n\t\tconst faces = this.faces;\n\n\t\tconst offset = neighbors.indexOf( n );\n\n\t\tif ( offset === - 1 ) return;\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tif ( faces[ i ].hasVertex( n ) ) return;\n\n\t\t}\n\n\t\tneighbors.splice( offset, 1 );\n\n\t}\n\n}\n\nexport { SimplifyModifier };\n", "import {\n\tBufferGeometry,\n\tColor,\n\tFloat32BufferAttribute,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Break faces with edges longer than maxEdgeLength\n */\n\nclass TessellateModifier {\n\n\tconstructor( maxEdgeLength = 0.1, maxIterations = 6 ) {\n\n\t\tthis.maxEdgeLength = maxEdgeLength;\n\t\tthis.maxIterations = maxIterations;\n\n\t}\n\n\tmodify( geometry ) {\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tgeometry = geometry.toNonIndexed();\n\n\t\t}\n\n\t\t//\n\n\t\tconst maxIterations = this.maxIterations;\n\t\tconst maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;\n\n\t\tconst va = new Vector3();\n\t\tconst vb = new Vector3();\n\t\tconst vc = new Vector3();\n\t\tconst vm = new Vector3();\n\t\tconst vs = [ va, vb, vc, vm ];\n\n\t\tconst na = new Vector3();\n\t\tconst nb = new Vector3();\n\t\tconst nc = new Vector3();\n\t\tconst nm = new Vector3();\n\t\tconst ns = [ na, nb, nc, nm ];\n\n\t\tconst ca = new Color();\n\t\tconst cb = new Color();\n\t\tconst cc = new Color();\n\t\tconst cm = new Color();\n\t\tconst cs = [ ca, cb, cc, cm ];\n\n\t\tconst ua = new Vector2();\n\t\tconst ub = new Vector2();\n\t\tconst uc = new Vector2();\n\t\tconst um = new Vector2();\n\t\tconst us = [ ua, ub, uc, um ];\n\n\t\tconst u2a = new Vector2();\n\t\tconst u2b = new Vector2();\n\t\tconst u2c = new Vector2();\n\t\tconst u2m = new Vector2();\n\t\tconst u2s = [ u2a, u2b, u2c, u2m ];\n\n\t\tconst attributes = geometry.attributes;\n\t\tconst hasNormals = attributes.normal !== undefined;\n\t\tconst hasColors = attributes.color !== undefined;\n\t\tconst hasUVs = attributes.uv !== undefined;\n\t\tconst hasUV1s = attributes.uv1 !== undefined;\n\n\t\tlet positions = attributes.position.array;\n\t\tlet normals = hasNormals ? attributes.normal.array : null;\n\t\tlet colors = hasColors ? attributes.color.array : null;\n\t\tlet uvs = hasUVs ? attributes.uv.array : null;\n\t\tlet uv1s = hasUV1s ? attributes.uv1.array : null;\n\n\t\tlet positions2 = positions;\n\t\tlet normals2 = normals;\n\t\tlet colors2 = colors;\n\t\tlet uvs2 = uvs;\n\t\tlet uv1s2 = uv1s;\n\n\t\tlet iteration = 0;\n\t\tlet tessellating = true;\n\n\t\tfunction addTriangle( a, b, c ) {\n\n\t\t\tconst v1 = vs[ a ];\n\t\t\tconst v2 = vs[ b ];\n\t\t\tconst v3 = vs[ c ];\n\n\t\t\tpositions2.push( v1.x, v1.y, v1.z );\n\t\t\tpositions2.push( v2.x, v2.y, v2.z );\n\t\t\tpositions2.push( v3.x, v3.y, v3.z );\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tconst n1 = ns[ a ];\n\t\t\t\tconst n2 = ns[ b ];\n\t\t\t\tconst n3 = ns[ c ];\n\n\t\t\t\tnormals2.push( n1.x, n1.y, n1.z );\n\t\t\t\tnormals2.push( n2.x, n2.y, n2.z );\n\t\t\t\tnormals2.push( n3.x, n3.y, n3.z );\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tconst c1 = cs[ a ];\n\t\t\t\tconst c2 = cs[ b ];\n\t\t\t\tconst c3 = cs[ c ];\n\n\t\t\t\tcolors2.push( c1.r, c1.g, c1.b );\n\t\t\t\tcolors2.push( c2.r, c2.g, c2.b );\n\t\t\t\tcolors2.push( c3.r, c3.g, c3.b );\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tconst u1 = us[ a ];\n\t\t\t\tconst u2 = us[ b ];\n\t\t\t\tconst u3 = us[ c ];\n\n\t\t\t\tuvs2.push( u1.x, u1.y );\n\t\t\t\tuvs2.push( u2.x, u2.y );\n\t\t\t\tuvs2.push( u3.x, u3.y );\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tconst u21 = u2s[ a ];\n\t\t\t\tconst u22 = u2s[ b ];\n\t\t\t\tconst u23 = u2s[ c ];\n\n\t\t\t\tuv1s2.push( u21.x, u21.y );\n\t\t\t\tuv1s2.push( u22.x, u22.y );\n\t\t\t\tuv1s2.push( u23.x, u23.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\twhile ( tessellating && iteration < maxIterations ) {\n\n\t\t\titeration ++;\n\t\t\ttessellating = false;\n\n\t\t\tpositions = positions2;\n\t\t\tpositions2 = [];\n\n\t\t\tif ( hasNormals ) {\n\n\t\t\t\tnormals = normals2;\n\t\t\t\tnormals2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tcolors = colors2;\n\t\t\t\tcolors2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUVs ) {\n\n\t\t\t\tuvs = uvs2;\n\t\t\t\tuvs2 = [];\n\n\t\t\t}\n\n\t\t\tif ( hasUV1s ) {\n\n\t\t\t\tuv1s = uv1s2;\n\t\t\t\tuv1s2 = [];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6 ) {\n\n\t\t\t\tva.fromArray( positions, i + 0 );\n\t\t\t\tvb.fromArray( positions, i + 3 );\n\t\t\t\tvc.fromArray( positions, i + 6 );\n\n\t\t\t\tif ( hasNormals ) {\n\n\t\t\t\t\tna.fromArray( normals, i + 0 );\n\t\t\t\t\tnb.fromArray( normals, i + 3 );\n\t\t\t\t\tnc.fromArray( normals, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tca.fromArray( colors, i + 0 );\n\t\t\t\t\tcb.fromArray( colors, i + 3 );\n\t\t\t\t\tcc.fromArray( colors, i + 6 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUVs ) {\n\n\t\t\t\t\tua.fromArray( uvs, i2 + 0 );\n\t\t\t\t\tub.fromArray( uvs, i2 + 2 );\n\t\t\t\t\tuc.fromArray( uvs, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasUV1s ) {\n\n\t\t\t\t\tu2a.fromArray( uv1s, i2 + 0 );\n\t\t\t\t\tu2b.fromArray( uv1s, i2 + 2 );\n\t\t\t\t\tu2c.fromArray( uv1s, i2 + 4 );\n\n\t\t\t\t}\n\n\t\t\t\tconst dab = va.distanceToSquared( vb );\n\t\t\t\tconst dbc = vb.distanceToSquared( vc );\n\t\t\t\tconst dac = va.distanceToSquared( vc );\n\n\t\t\t\tif ( dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared ) {\n\n\t\t\t\t\ttessellating = true;\n\n\t\t\t\t\tif ( dab >= dbc && dab >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vb, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nb, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cb, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, ub, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2b, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 3, 2 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t} else if ( dbc >= dab && dbc >= dac ) {\n\n\t\t\t\t\t\tvm.lerpVectors( vb, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( nb, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( cb, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ub, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2b, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 2, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvm.lerpVectors( va, vc, 0.5 );\n\t\t\t\t\t\tif ( hasNormals ) nm.lerpVectors( na, nc, 0.5 );\n\t\t\t\t\t\tif ( hasColors ) cm.lerpColors( ca, cc, 0.5 );\n\t\t\t\t\t\tif ( hasUVs ) um.lerpVectors( ua, uc, 0.5 );\n\t\t\t\t\t\tif ( hasUV1s ) u2m.lerpVectors( u2a, u2c, 0.5 );\n\n\t\t\t\t\t\taddTriangle( 0, 1, 3 );\n\t\t\t\t\t\taddTriangle( 3, 1, 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddTriangle( 0, 1, 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\n\t\tif ( hasNormals ) {\n\n\t\t\tgeometry2.setAttribute( 'normal', new Float32BufferAttribute( normals2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasColors ) {\n\n\t\t\tgeometry2.setAttribute( 'color', new Float32BufferAttribute( colors2, 3 ) );\n\n\t\t}\n\n\t\tif ( hasUVs ) {\n\n\t\t\tgeometry2.setAttribute( 'uv', new Float32BufferAttribute( uvs2, 2 ) );\n\n\t\t}\n\n\t\tif ( hasUV1s ) {\n\n\t\t\tgeometry2.setAttribute( 'uv1', new Float32BufferAttribute( uv1s2, 2 ) );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n}\n\nexport { TessellateModifier };\n", "import { Mesh, MeshBasicMaterial, SphereGeometry, Vector3 } from 'three';\n\n/**\n * A ground-projected skybox. The height is how far the camera that took the photo was above the ground - \n * a larger value will magnify the downward part of the image. By default the object is centered at the camera, \n * so it is often helpful to set skybox.position.y = height to put the ground at the origin. Set the radius \n * large enough to ensure your user's camera stays inside.\n */\n\nclass GroundedSkybox extends Mesh {\n\n\tconstructor( map, height, radius, resolution = 128 ) {\n\n\t\tif ( height <= 0 || radius <= 0 || resolution <= 0 ) {\n\n\t\t\tthrow new Error( 'GroundedSkybox height, radius, and resolution must be positive.' );\n\n\t\t}\n\n\t\tconst geometry = new SphereGeometry( radius, 2 * resolution, resolution );\n\t\tgeometry.scale( 1, 1, -1 );\n\n\t\tconst pos = geometry.getAttribute( 'position' );\n\t\tconst tmp = new Vector3();\n\n\t\tfor ( let i = 0; i < pos.count; ++ i ) {\n\n\t\t\ttmp.fromBufferAttribute( pos, i );\n\t\t\tif ( tmp.y < 0 ) {\n\n\t\t\t\t// Smooth out the transition from flat floor to sphere:\n\t\t\t\tconst y1 = - height * 3 / 2;\n\t\t\t\tconst f =\n\t\t\t\t\t\ttmp.y < y1 ? - height / tmp.y : ( 1 - tmp.y * tmp.y / ( 3 * y1 * y1 ) );\n\t\t\t\ttmp.multiplyScalar( f );\n\t\t\t\ttmp.toArray( pos.array, 3 * i );\n\n\t\t\t}\n\n\t\t}\n\n\t\tpos.needsUpdate = true;\n\n\t\tsuper( geometry, new MeshBasicMaterial( { map, depthWrite: false } ) );\n\n\t}\n\n}\n\nexport { GroundedSkybox };\n", "import {\n\tAdditiveBlending,\n\tBox2,\n\tBufferGeometry,\n\tColor,\n\tFramebufferTexture,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tMeshBasicMaterial,\n\tRawShaderMaterial,\n\tUnsignedByteType,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass Lensflare extends Mesh {\n\n\tconstructor() {\n\n\t\tsuper( Lensflare.Geometry, new MeshBasicMaterial( { opacity: 0, transparent: true } ) );\n\n\t\tthis.isLensflare = true;\n\n\t\tthis.type = 'Lensflare';\n\t\tthis.frustumCulled = false;\n\t\tthis.renderOrder = Infinity;\n\n\t\t//\n\n\t\tconst positionScreen = new Vector3();\n\t\tconst positionView = new Vector3();\n\n\t\t// textures\n\n\t\tconst tempMap = new FramebufferTexture( 16, 16 );\n\t\tconst occlusionMap = new FramebufferTexture( 16, 16 );\n\n\t\tlet currentType = UnsignedByteType;\n\n\t\t// material\n\n\t\tconst geometry = Lensflare.Geometry;\n\n\t\tconst material1a = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\tconst material1b = new RawShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: tempMap },\n\t\t\t\t'scale': { value: null },\n\t\t\t\t'screenPosition': { value: null }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}`,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: false\n\t\t} );\n\n\t\t// the following object is used for occlusionMap generation\n\n\t\tconst mesh1 = new Mesh( geometry, material1a );\n\n\t\t//\n\n\t\tconst elements = [];\n\n\t\tconst shader = LensflareElement.Shader;\n\n\t\tconst material2 = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: {\n\t\t\t\t'map': { value: null },\n\t\t\t\t'occlusionMap': { value: occlusionMap },\n\t\t\t\t'color': { value: new Color( 0xffffff ) },\n\t\t\t\t'scale': { value: new Vector2() },\n\t\t\t\t'screenPosition': { value: new Vector3() }\n\t\t\t},\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tconst mesh2 = new Mesh( geometry, material2 );\n\n\t\tthis.addElement = function ( element ) {\n\n\t\t\telements.push( element );\n\n\t\t};\n\n\t\t//\n\n\t\tconst scale = new Vector2();\n\t\tconst screenPositionPixels = new Vector2();\n\t\tconst validArea = new Box2();\n\t\tconst viewport = new Vector4();\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\trenderer.getCurrentViewport( viewport );\n\n\t\t\tconst renderTarget = renderer.getRenderTarget();\n\t\t\tconst type = ( renderTarget !== null ) ? renderTarget.texture.type : UnsignedByteType;\n\n\t\t\tif ( currentType !== type ) {\n\n\t\t\t\ttempMap.dispose();\n\t\t\t\tocclusionMap.dispose();\n\n\t\t\t\ttempMap.type = occlusionMap.type = type;\n\n\t\t\t\tcurrentType = type;\n\n\t\t\t}\n\n\t\t\tconst invAspect = viewport.w / viewport.z;\n\t\t\tconst halfViewportWidth = viewport.z / 2.0;\n\t\t\tconst halfViewportHeight = viewport.w / 2.0;\n\n\t\t\tlet size = 16 / viewport.w;\n\t\t\tscale.set( size * invAspect, size );\n\n\t\t\tvalidArea.min.set( viewport.x, viewport.y );\n\t\t\tvalidArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) );\n\n\t\t\t// calculate position in screen space\n\n\t\t\tpositionView.setFromMatrixPosition( this.matrixWorld );\n\t\t\tpositionView.applyMatrix4( camera.matrixWorldInverse );\n\n\t\t\tif ( positionView.z > 0 ) return; // lensflare is behind the camera\n\n\t\t\tpositionScreen.copy( positionView ).applyMatrix4( camera.projectionMatrix );\n\n\t\t\t// horizontal and vertical coordinate of the lower left corner of the pixels to copy\n\n\t\t\tscreenPositionPixels.x = viewport.x + ( positionScreen.x * halfViewportWidth ) + halfViewportWidth - 8;\n\t\t\tscreenPositionPixels.y = viewport.y + ( positionScreen.y * halfViewportHeight ) + halfViewportHeight - 8;\n\n\t\t\t// screen cull\n\n\t\t\tif ( validArea.containsPoint( screenPositionPixels ) ) {\n\n\t\t\t\t// save current RGB to temp texture\n\n\t\t\t\trenderer.copyFramebufferToTexture( tempMap, screenPositionPixels );\n\n\t\t\t\t// render pink quad\n\n\t\t\t\tlet uniforms = material1a.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1a, mesh1, null );\n\n\t\t\t\t// copy result to occlusionMap\n\n\t\t\t\trenderer.copyFramebufferToTexture( occlusionMap, screenPositionPixels );\n\n\t\t\t\t// restore graphics\n\n\t\t\t\tuniforms = material1b.uniforms;\n\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\n\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1b, mesh1, null );\n\n\t\t\t\t// render elements\n\n\t\t\t\tconst vecX = - positionScreen.x * 2;\n\t\t\t\tconst vecY = - positionScreen.y * 2;\n\n\t\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\t\tconst uniforms = material2.uniforms;\n\n\t\t\t\t\tuniforms[ 'color' ].value.copy( element.color );\n\t\t\t\t\tuniforms[ 'map' ].value = element.texture;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.x = positionScreen.x + vecX * element.distance;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value.y = positionScreen.y + vecY * element.distance;\n\n\t\t\t\t\tsize = element.size / viewport.w;\n\t\t\t\t\tconst invAspect = viewport.w / viewport.z;\n\n\t\t\t\t\tuniforms[ 'scale' ].value.set( size * invAspect, size );\n\n\t\t\t\t\tmaterial2.uniformsNeedUpdate = true;\n\n\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material2, mesh2, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tmaterial1a.dispose();\n\t\t\tmaterial1b.dispose();\n\t\t\tmaterial2.dispose();\n\n\t\t\ttempMap.dispose();\n\t\t\tocclusionMap.dispose();\n\n\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\telements[ i ].texture.dispose();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\n//\n\nclass LensflareElement {\n\n\tconstructor( texture, size = 1, distance = 0, color = new Color( 0xffffff ) ) {\n\n\t\tthis.texture = texture;\n\t\tthis.size = size;\n\t\tthis.distance = distance;\n\t\tthis.color = color;\n\n\t}\n\n}\n\nLensflareElement.Shader = {\n\n\tname: 'LensflareElementShader',\n\n\tuniforms: {\n\n\t\t'map': { value: null },\n\t\t'occlusionMap': { value: null },\n\t\t'color': { value: null },\n\t\t'scale': { value: null },\n\t\t'screenPosition': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform vec3 screenPosition;\n\t\tuniform vec2 scale;\n\n\t\tuniform sampler2D occlusionMap;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\n\t\t\tvec2 pos = position.xy;\n\n\t\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n\t\t\tvVisibility = visibility.r / 9.0;\n\t\t\tvVisibility *= 1.0 - visibility.g / 9.0;\n\t\t\tvVisibility *= visibility.b / 9.0;\n\n\t\t\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D map;\n\t\tuniform vec3 color;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texture = texture2D( map, vUV );\n\t\t\ttexture.a *= vVisibility;\n\t\t\tgl_FragColor = texture;\n\t\t\tgl_FragColor.rgb *= color;\n\n\t\t}`\n\n};\n\nLensflare.Geometry = ( function () {\n\n\tconst geometry = new BufferGeometry();\n\n\tconst float32Array = new Float32Array( [\n\t\t- 1, - 1, 0, 0, 0,\n\t\t1, - 1, 0, 1, 0,\n\t\t1, 1, 0, 1, 1,\n\t\t- 1, 1, 0, 0, 1\n\t] );\n\n\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\tgeometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\tgeometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\tgeometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\treturn geometry;\n\n} )();\n\nexport { Lensflare, LensflareElement };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDynamicDrawUsage,\n\tMesh,\n\tSphere,\n\tVector3\n} from 'three';\n\n/**\n * Port of http://webglsamples.org/blob/blob.html\n */\n\nclass MarchingCubes extends Mesh {\n\n\tconstructor( resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 10000 ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isMarchingCubes = true;\n\n\t\tconst scope = this;\n\n\t\t// temp buffers used in polygonize\n\n\t\tconst vlist = new Float32Array( 12 * 3 );\n\t\tconst nlist = new Float32Array( 12 * 3 );\n\t\tconst clist = new Float32Array( 12 * 3 );\n\n\t\tthis.enableUvs = enableUvs;\n\t\tthis.enableColors = enableColors;\n\n\t\t// functions have to be object properties\n\t\t// prototype functions kill performance\n\t\t// (tested and it was 4x slower !!!)\n\n\t\tthis.init = function ( resolution ) {\n\n\t\t\tthis.resolution = resolution;\n\n\t\t\t// parameters\n\n\t\t\tthis.isolation = 80.0;\n\n\t\t\t// size of field, 32 is pushing it in Javascript :)\n\n\t\t\tthis.size = resolution;\n\t\t\tthis.size2 = this.size * this.size;\n\t\t\tthis.size3 = this.size2 * this.size;\n\t\t\tthis.halfsize = this.size / 2.0;\n\n\t\t\t// deltas\n\n\t\t\tthis.delta = 2.0 / this.size;\n\t\t\tthis.yd = this.size;\n\t\t\tthis.zd = this.size2;\n\n\t\t\tthis.field = new Float32Array( this.size3 );\n\t\t\tthis.normal_cache = new Float32Array( this.size3 * 3 );\n\t\t\tthis.palette = new Float32Array( this.size3 * 3 );\n\n\t\t\t//\n\n\t\t\tthis.count = 0;\n\n\t\t\tconst maxVertexCount = maxPolyCount * 3;\n\n\t\t\tthis.positionArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst positionAttribute = new BufferAttribute( this.positionArray, 3 );\n\t\t\tpositionAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\tthis.normalArray = new Float32Array( maxVertexCount * 3 );\n\t\t\tconst normalAttribute = new BufferAttribute( this.normalArray, 3 );\n\t\t\tnormalAttribute.setUsage( DynamicDrawUsage );\n\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\tif ( this.enableUvs ) {\n\n\t\t\t\tthis.uvArray = new Float32Array( maxVertexCount * 2 );\n\t\t\t\tconst uvAttribute = new BufferAttribute( this.uvArray, 2 );\n\t\t\t\tuvAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t}\n\n\t\t\tif ( this.enableColors ) {\n\n\t\t\t\tthis.colorArray = new Float32Array( maxVertexCount * 3 );\n\t\t\t\tconst colorAttribute = new BufferAttribute( this.colorArray, 3 );\n\t\t\t\tcolorAttribute.setUsage( DynamicDrawUsage );\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( new Vector3(), 1 );\n\n\t\t};\n\n\t\t///////////////////////\n\t\t// Polygonization\n\t\t///////////////////////\n\n\t\tfunction lerp( a, b, t ) {\n\n\t\t\treturn a + ( b - a ) * t;\n\n\t\t}\n\n\t\tfunction VIntX( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x + mu * scope.delta;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q + 3 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q + 4 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q + 5 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntY( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y + mu * scope.delta;\n\t\t\tvlist[ offset + 2 ] = z;\n\n\t\t\tconst q2 = q + scope.yd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction VIntZ( q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2 ) {\n\n\t\t\tconst mu = ( isol - valp1 ) / ( valp2 - valp1 ),\n\t\t\t\tnc = scope.normal_cache;\n\n\t\t\tvlist[ offset + 0 ] = x;\n\t\t\tvlist[ offset + 1 ] = y;\n\t\t\tvlist[ offset + 2 ] = z + mu * scope.delta;\n\n\t\t\tconst q2 = q + scope.zd * 3;\n\n\t\t\tnlist[ offset + 0 ] = lerp( nc[ q + 0 ], nc[ q2 + 0 ], mu );\n\t\t\tnlist[ offset + 1 ] = lerp( nc[ q + 1 ], nc[ q2 + 1 ], mu );\n\t\t\tnlist[ offset + 2 ] = lerp( nc[ q + 2 ], nc[ q2 + 2 ], mu );\n\n\t\t\tclist[ offset + 0 ] = lerp( scope.palette[ c_offset1 * 3 + 0 ], scope.palette[ c_offset2 * 3 + 0 ], mu );\n\t\t\tclist[ offset + 1 ] = lerp( scope.palette[ c_offset1 * 3 + 1 ], scope.palette[ c_offset2 * 3 + 1 ], mu );\n\t\t\tclist[ offset + 2 ] = lerp( scope.palette[ c_offset1 * 3 + 2 ], scope.palette[ c_offset2 * 3 + 2 ], mu );\n\n\t\t}\n\n\t\tfunction compNorm( q ) {\n\n\t\t\tconst q3 = q * 3;\n\n\t\t\tif ( scope.normal_cache[ q3 ] === 0.0 ) {\n\n\t\t\t\tscope.normal_cache[ q3 + 0 ] = scope.field[ q - 1 ] - scope.field[ q + 1 ];\n\t\t\t\tscope.normal_cache[ q3 + 1 ] =\n\t\t\t\t\tscope.field[ q - scope.yd ] - scope.field[ q + scope.yd ];\n\t\t\t\tscope.normal_cache[ q3 + 2 ] =\n\t\t\t\t\tscope.field[ q - scope.zd ] - scope.field[ q + scope.zd ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Returns total number of triangles. Fills triangles.\n\t\t// (this is where most of time is spent - it's inner work of O(n3) loop )\n\n\t\tfunction polygonize( fx, fy, fz, q, isol ) {\n\n\t\t\t// cache indices\n\t\t\tconst q1 = q + 1,\n\t\t\t\tqy = q + scope.yd,\n\t\t\t\tqz = q + scope.zd,\n\t\t\t\tq1y = q1 + scope.yd,\n\t\t\t\tq1z = q1 + scope.zd,\n\t\t\t\tqyz = q + scope.yd + scope.zd,\n\t\t\t\tq1yz = q1 + scope.yd + scope.zd;\n\n\t\t\tlet cubeindex = 0;\n\t\t\tconst field0 = scope.field[ q ],\n\t\t\t\tfield1 = scope.field[ q1 ],\n\t\t\t\tfield2 = scope.field[ qy ],\n\t\t\t\tfield3 = scope.field[ q1y ],\n\t\t\t\tfield4 = scope.field[ qz ],\n\t\t\t\tfield5 = scope.field[ q1z ],\n\t\t\t\tfield6 = scope.field[ qyz ],\n\t\t\t\tfield7 = scope.field[ q1yz ];\n\n\t\t\tif ( field0 < isol ) cubeindex |= 1;\n\t\t\tif ( field1 < isol ) cubeindex |= 2;\n\t\t\tif ( field2 < isol ) cubeindex |= 8;\n\t\t\tif ( field3 < isol ) cubeindex |= 4;\n\t\t\tif ( field4 < isol ) cubeindex |= 16;\n\t\t\tif ( field5 < isol ) cubeindex |= 32;\n\t\t\tif ( field6 < isol ) cubeindex |= 128;\n\t\t\tif ( field7 < isol ) cubeindex |= 64;\n\n\t\t\t// if cube is entirely in/out of the surface - bail, nothing to draw\n\n\t\t\tconst bits = edgeTable[ cubeindex ];\n\t\t\tif ( bits === 0 ) return 0;\n\n\t\t\tconst d = scope.delta,\n\t\t\t\tfx2 = fx + d,\n\t\t\t\tfy2 = fy + d,\n\t\t\t\tfz2 = fz + d;\n\n\t\t\t// top of the cube\n\n\t\t\tif ( bits & 1 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tVIntX( q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1 );\n\n\t\t\t}\n\n\t\t\tif ( bits & 2 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntY( q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 4 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tVIntX( qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y );\n\n\t\t\t}\n\n\t\t\tif ( bits & 8 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qy );\n\t\t\t\tVIntY( q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy );\n\n\t\t\t}\n\n\t\t\t// bottom of the cube\n\n\t\t\tif ( bits & 16 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntX( qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 32 ) {\n\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntY(\n\t\t\t\t\tq1z * 3,\n\t\t\t\t\t15,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield5,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1z,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 64 ) {\n\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntX(\n\t\t\t\t\tqyz * 3,\n\t\t\t\t\t18,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz2,\n\t\t\t\t\tfield6,\n\t\t\t\t\tfield7,\n\t\t\t\t\tqyz,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 128 ) {\n\n\t\t\t\tcompNorm( qz );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntY( qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz );\n\n\t\t\t}\n\n\t\t\t// vertical lines of the cube\n\t\t\tif ( bits & 256 ) {\n\n\t\t\t\tcompNorm( q );\n\t\t\t\tcompNorm( qz );\n\t\t\t\tVIntZ( q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz );\n\n\t\t\t}\n\n\t\t\tif ( bits & 512 ) {\n\n\t\t\t\tcompNorm( q1 );\n\t\t\t\tcompNorm( q1z );\n\t\t\t\tVIntZ( q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z );\n\n\t\t\t}\n\n\t\t\tif ( bits & 1024 ) {\n\n\t\t\t\tcompNorm( q1y );\n\t\t\t\tcompNorm( q1yz );\n\t\t\t\tVIntZ(\n\t\t\t\t\tq1y * 3,\n\t\t\t\t\t30,\n\t\t\t\t\tisol,\n\t\t\t\t\tfx2,\n\t\t\t\t\tfy2,\n\t\t\t\t\tfz,\n\t\t\t\t\tfield3,\n\t\t\t\t\tfield7,\n\t\t\t\t\tq1y,\n\t\t\t\t\tq1yz\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( bits & 2048 ) {\n\n\t\t\t\tcompNorm( qy );\n\t\t\t\tcompNorm( qyz );\n\t\t\t\tVIntZ( qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz );\n\n\t\t\t}\n\n\t\t\tcubeindex <<= 4; // re-purpose cubeindex into an offset into triTable\n\n\t\t\tlet o1,\n\t\t\t\to2,\n\t\t\t\to3,\n\t\t\t\tnumtris = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// here is where triangles are created\n\n\t\t\twhile ( triTable[ cubeindex + i ] != - 1 ) {\n\n\t\t\t\to1 = cubeindex + i;\n\t\t\t\to2 = o1 + 1;\n\t\t\t\to3 = o1 + 2;\n\n\t\t\t\tposnormtriv(\n\t\t\t\t\tvlist,\n\t\t\t\t\tnlist,\n\t\t\t\t\tclist,\n\t\t\t\t\t3 * triTable[ o1 ],\n\t\t\t\t\t3 * triTable[ o2 ],\n\t\t\t\t\t3 * triTable[ o3 ]\n\t\t\t\t);\n\n\t\t\t\ti += 3;\n\t\t\t\tnumtris ++;\n\n\t\t\t}\n\n\t\t\treturn numtris;\n\n\t\t}\n\n\t\tfunction posnormtriv( pos, norm, colors, o1, o2, o3 ) {\n\n\t\t\tconst c = scope.count * 3;\n\n\t\t\t// positions\n\n\t\t\tscope.positionArray[ c + 0 ] = pos[ o1 ];\n\t\t\tscope.positionArray[ c + 1 ] = pos[ o1 + 1 ];\n\t\t\tscope.positionArray[ c + 2 ] = pos[ o1 + 2 ];\n\n\t\t\tscope.positionArray[ c + 3 ] = pos[ o2 ];\n\t\t\tscope.positionArray[ c + 4 ] = pos[ o2 + 1 ];\n\t\t\tscope.positionArray[ c + 5 ] = pos[ o2 + 2 ];\n\n\t\t\tscope.positionArray[ c + 6 ] = pos[ o3 ];\n\t\t\tscope.positionArray[ c + 7 ] = pos[ o3 + 1 ];\n\t\t\tscope.positionArray[ c + 8 ] = pos[ o3 + 2 ];\n\n\t\t\t// normals\n\n\t\t\tif ( scope.material.flatShading === true ) {\n\n\t\t\t\tconst nx = ( norm[ o1 + 0 ] + norm[ o2 + 0 ] + norm[ o3 + 0 ] ) / 3;\n\t\t\t\tconst ny = ( norm[ o1 + 1 ] + norm[ o2 + 1 ] + norm[ o3 + 1 ] ) / 3;\n\t\t\t\tconst nz = ( norm[ o1 + 2 ] + norm[ o2 + 2 ] + norm[ o3 + 2 ] ) / 3;\n\n\t\t\t\tscope.normalArray[ c + 0 ] = nx;\n\t\t\t\tscope.normalArray[ c + 1 ] = ny;\n\t\t\t\tscope.normalArray[ c + 2 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 3 ] = nx;\n\t\t\t\tscope.normalArray[ c + 4 ] = ny;\n\t\t\t\tscope.normalArray[ c + 5 ] = nz;\n\n\t\t\t\tscope.normalArray[ c + 6 ] = nx;\n\t\t\t\tscope.normalArray[ c + 7 ] = ny;\n\t\t\t\tscope.normalArray[ c + 8 ] = nz;\n\n\t\t\t} else {\n\n\t\t\t\tscope.normalArray[ c + 0 ] = norm[ o1 + 0 ];\n\t\t\t\tscope.normalArray[ c + 1 ] = norm[ o1 + 1 ];\n\t\t\t\tscope.normalArray[ c + 2 ] = norm[ o1 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 3 ] = norm[ o2 + 0 ];\n\t\t\t\tscope.normalArray[ c + 4 ] = norm[ o2 + 1 ];\n\t\t\t\tscope.normalArray[ c + 5 ] = norm[ o2 + 2 ];\n\n\t\t\t\tscope.normalArray[ c + 6 ] = norm[ o3 + 0 ];\n\t\t\t\tscope.normalArray[ c + 7 ] = norm[ o3 + 1 ];\n\t\t\t\tscope.normalArray[ c + 8 ] = norm[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( scope.enableUvs ) {\n\n\t\t\t\tconst d = scope.count * 2;\n\n\t\t\t\tscope.uvArray[ d + 0 ] = pos[ o1 + 0 ];\n\t\t\t\tscope.uvArray[ d + 1 ] = pos[ o1 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 2 ] = pos[ o2 + 0 ];\n\t\t\t\tscope.uvArray[ d + 3 ] = pos[ o2 + 2 ];\n\n\t\t\t\tscope.uvArray[ d + 4 ] = pos[ o3 + 0 ];\n\t\t\t\tscope.uvArray[ d + 5 ] = pos[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tif ( scope.enableColors ) {\n\n\t\t\t\tscope.colorArray[ c + 0 ] = colors[ o1 + 0 ];\n\t\t\t\tscope.colorArray[ c + 1 ] = colors[ o1 + 1 ];\n\t\t\t\tscope.colorArray[ c + 2 ] = colors[ o1 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 3 ] = colors[ o2 + 0 ];\n\t\t\t\tscope.colorArray[ c + 4 ] = colors[ o2 + 1 ];\n\t\t\t\tscope.colorArray[ c + 5 ] = colors[ o2 + 2 ];\n\n\t\t\t\tscope.colorArray[ c + 6 ] = colors[ o3 + 0 ];\n\t\t\t\tscope.colorArray[ c + 7 ] = colors[ o3 + 1 ];\n\t\t\t\tscope.colorArray[ c + 8 ] = colors[ o3 + 2 ];\n\n\t\t\t}\n\n\t\t\tscope.count += 3;\n\n\t\t}\n\n\t\t/////////////////////////////////////\n\t\t// Metaballs\n\t\t/////////////////////////////////////\n\n\t\t// Adds a reciprocal ball (nice and blobby) that, to be fast, fades to zero after\n\t\t// a fixed distance, determined by strength and subtract.\n\n\t\tthis.addBall = function ( ballx, bally, ballz, strength, subtract, colors ) {\n\n\t\t\tconst sign = Math.sign( strength );\n\t\t\tstrength = Math.abs( strength );\n\t\t\tconst userDefineColor = ! ( colors === undefined || colors === null );\n\t\t\tlet ballColor = new Color( ballx, bally, ballz );\n\n\t\t\tif ( userDefineColor ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tballColor =\n\t\t\t\t\t\tcolors instanceof Color\n\t\t\t\t\t\t\t? colors\n\t\t\t\t\t\t\t: Array.isArray( colors )\n\t\t\t\t\t\t\t\t? new Color(\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 0 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 1 ] ), 1 ),\n\t\t\t\t\t\t\t\t\tMath.min( Math.abs( colors[ 2 ] ), 1 )\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t: new Color( colors );\n\n\t\t\t\t} catch ( err ) {\n\n\t\t\t\t\tballColor = new Color( ballx, bally, ballz );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Let's solve the equation to find the radius:\n\t\t\t// 1.0 / (0.000001 + radius^2) * strength - subtract = 0\n\t\t\t// strength / (radius^2) = subtract\n\t\t\t// strength = subtract * radius^2\n\t\t\t// radius^2 = strength / subtract\n\t\t\t// radius = sqrt(strength / subtract)\n\n\t\t\tconst radius = this.size * Math.sqrt( strength / subtract ),\n\t\t\t\tzs = ballz * this.size,\n\t\t\t\tys = bally * this.size,\n\t\t\t\txs = ballx * this.size;\n\n\t\t\tlet min_z = Math.floor( zs - radius );\n\t\t\tif ( min_z < 1 ) min_z = 1;\n\t\t\tlet max_z = Math.floor( zs + radius );\n\t\t\tif ( max_z > this.size - 1 ) max_z = this.size - 1;\n\t\t\tlet min_y = Math.floor( ys - radius );\n\t\t\tif ( min_y < 1 ) min_y = 1;\n\t\t\tlet max_y = Math.floor( ys + radius );\n\t\t\tif ( max_y > this.size - 1 ) max_y = this.size - 1;\n\t\t\tlet min_x = Math.floor( xs - radius );\n\t\t\tif ( min_x < 1 ) min_x = 1;\n\t\t\tlet max_x = Math.floor( xs + radius );\n\t\t\tif ( max_x > this.size - 1 ) max_x = this.size - 1;\n\n\t\t\t// Don't polygonize in the outer layer because normals aren't\n\t\t\t// well-defined there.\n\n\t\t\tlet x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;\n\n\t\t\tfor ( z = min_z; z < max_z; z ++ ) {\n\n\t\t\t\tz_offset = this.size2 * z;\n\t\t\t\tfz = z / this.size - ballz;\n\t\t\t\tfz2 = fz * fz;\n\n\t\t\t\tfor ( y = min_y; y < max_y; y ++ ) {\n\n\t\t\t\t\ty_offset = z_offset + this.size * y;\n\t\t\t\t\tfy = y / this.size - bally;\n\t\t\t\t\tfy2 = fy * fy;\n\n\t\t\t\t\tfor ( x = min_x; x < max_x; x ++ ) {\n\n\t\t\t\t\t\tfx = x / this.size - ballx;\n\t\t\t\t\t\tval = strength / ( 0.000001 + fx * fx + fy2 + fz2 ) - subtract;\n\t\t\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\t\t\tthis.field[ y_offset + x ] += val * sign;\n\n\t\t\t\t\t\t\t// optimization\n\t\t\t\t\t\t\t// http://www.geisswerks.com/ryan/BLOBS/blobs.html\n\t\t\t\t\t\t\tconst ratio =\n\t\t\t\t\t\t\t\tMath.sqrt( ( x - xs ) * ( x - xs ) + ( y - ys ) * ( y - ys ) + ( z - zs ) * ( z - zs ) ) / radius;\n\t\t\t\t\t\t\tconst contrib =\n\t\t\t\t\t\t\t\t1 - ratio * ratio * ratio * ( ratio * ( ratio * 6 - 15 ) + 10 );\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 0 ] += ballColor.r * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 1 ] += ballColor.g * contrib;\n\t\t\t\t\t\t\tthis.palette[ ( y_offset + x ) * 3 + 2 ] += ballColor.b * contrib;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneX = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\txx,\n\t\t\t\tval,\n\t\t\t\txdiv,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( x = 0; x < dist; x ++ ) {\n\n\t\t\t\txdiv = x / size;\n\t\t\t\txx = xdiv * xdiv;\n\t\t\t\tval = strength / ( 0.0001 + xx ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcxy = x + y * yd;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\t\tfield[ zd * z + cxy ] += val;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneY = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tyy,\n\t\t\t\tval,\n\t\t\t\tydiv,\n\t\t\t\tcy,\n\t\t\t\tcxy,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( y = 0; y < dist; y ++ ) {\n\n\t\t\t\tydiv = y / size;\n\t\t\t\tyy = ydiv * ydiv;\n\t\t\t\tval = strength / ( 0.0001 + yy ) - subtract;\n\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcy = y * yd;\n\n\t\t\t\t\tfor ( x = 0; x < size; x ++ ) {\n\n\t\t\t\t\t\tcxy = cy + x;\n\n\t\t\t\t\t\tfor ( z = 0; z < size; z ++ ) field[ zd * z + cxy ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.addPlaneZ = function ( strength, subtract ) {\n\n\t\t\t// cache attribute lookups\n\n\t\t\tconst size = this.size,\n\t\t\t\tyd = this.yd,\n\t\t\t\tzd = this.zd,\n\t\t\t\tfield = this.field;\n\n\t\t\tlet x,\n\t\t\t\ty,\n\t\t\t\tz,\n\t\t\t\tzz,\n\t\t\t\tval,\n\t\t\t\tzdiv,\n\t\t\t\tcz,\n\t\t\t\tcyz,\n\t\t\t\tdist = size * Math.sqrt( strength / subtract );\n\n\t\t\tif ( dist > size ) dist = size;\n\n\t\t\tfor ( z = 0; z < dist; z ++ ) {\n\n\t\t\t\tzdiv = z / size;\n\t\t\t\tzz = zdiv * zdiv;\n\t\t\t\tval = strength / ( 0.0001 + zz ) - subtract;\n\t\t\t\tif ( val > 0.0 ) {\n\n\t\t\t\t\tcz = zd * z;\n\n\t\t\t\t\tfor ( y = 0; y < size; y ++ ) {\n\n\t\t\t\t\t\tcyz = cz + y * yd;\n\n\t\t\t\t\t\tfor ( x = 0; x < size; x ++ ) field[ cyz + x ] += val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/////////////////////////////////////\n\t\t// Updates\n\t\t/////////////////////////////////////\n\n\t\tthis.setCell = function ( x, y, z, value ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\tthis.field[ index ] = value;\n\n\t\t};\n\n\t\tthis.getCell = function ( x, y, z ) {\n\n\t\t\tconst index = this.size2 * z + this.size * y + x;\n\t\t\treturn this.field[ index ];\n\n\t\t};\n\n\t\tthis.blur = function ( intensity = 1 ) {\n\n\t\t\tconst field = this.field;\n\t\t\tconst fieldCopy = field.slice();\n\t\t\tconst size = this.size;\n\t\t\tconst size2 = this.size2;\n\t\t\tfor ( let x = 0; x < size; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < size; y ++ ) {\n\n\t\t\t\t\tfor ( let z = 0; z < size; z ++ ) {\n\n\t\t\t\t\t\tconst index = size2 * z + size * y + x;\n\t\t\t\t\t\tlet val = fieldCopy[ index ];\n\t\t\t\t\t\tlet count = 1;\n\n\t\t\t\t\t\tfor ( let x2 = - 1; x2 <= 1; x2 += 2 ) {\n\n\t\t\t\t\t\t\tconst x3 = x2 + x;\n\t\t\t\t\t\t\tif ( x3 < 0 || x3 >= size ) continue;\n\n\t\t\t\t\t\t\tfor ( let y2 = - 1; y2 <= 1; y2 += 2 ) {\n\n\t\t\t\t\t\t\t\tconst y3 = y2 + y;\n\t\t\t\t\t\t\t\tif ( y3 < 0 || y3 >= size ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let z2 = - 1; z2 <= 1; z2 += 2 ) {\n\n\t\t\t\t\t\t\t\t\tconst z3 = z2 + z;\n\t\t\t\t\t\t\t\t\tif ( z3 < 0 || z3 >= size ) continue;\n\n\t\t\t\t\t\t\t\t\tconst index2 = size2 * z3 + size * y3 + x3;\n\t\t\t\t\t\t\t\t\tconst val2 = fieldCopy[ index2 ];\n\n\t\t\t\t\t\t\t\t\tcount ++;\n\t\t\t\t\t\t\t\t\tval += intensity * ( val2 - val ) / count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfield[ index ] = val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t// wipe the normal cache\n\n\t\t\tfor ( let i = 0; i < this.size3; i ++ ) {\n\n\t\t\t\tthis.normal_cache[ i * 3 ] = 0.0;\n\t\t\t\tthis.field[ i ] = 0.0;\n\t\t\t\tthis.palette[ i * 3 ] = this.palette[ i * 3 + 1 ] = this.palette[\n\t\t\t\t\ti * 3 + 2\n\t\t\t\t] = 0.0;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.count = 0;\n\n\t\t\t// Triangulate. Yeah, this is slow.\n\n\t\t\tconst smin2 = this.size - 2;\n\n\t\t\tfor ( let z = 1; z < smin2; z ++ ) {\n\n\t\t\t\tconst z_offset = this.size2 * z;\n\t\t\t\tconst fz = ( z - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\tfor ( let y = 1; y < smin2; y ++ ) {\n\n\t\t\t\t\tconst y_offset = z_offset + this.size * y;\n\t\t\t\t\tconst fy = ( y - this.halfsize ) / this.halfsize; //+ 1\n\n\t\t\t\t\tfor ( let x = 1; x < smin2; x ++ ) {\n\n\t\t\t\t\t\tconst fx = ( x - this.halfsize ) / this.halfsize; //+ 1\n\t\t\t\t\t\tconst q = y_offset + x;\n\n\t\t\t\t\t\t polygonize( fx, fy, fz, q, this.isolation );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// set the draw range to only the processed triangles\n\n\t\t\tthis.geometry.setDrawRange( 0, this.count );\n\n\t\t\t// update geometry data\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\t\t\tgeometry.getAttribute( 'normal' ).needsUpdate = true;\n\n\t\t\tif ( this.enableUvs ) geometry.getAttribute( 'uv' ).needsUpdate = true;\n\t\t\tif ( this.enableColors ) geometry.getAttribute( 'color' ).needsUpdate = true;\n\n\t\t\t// safety check\n\n\t\t\tif ( this.count / 3 > maxPolyCount ) console.warn( 'THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.' );\n\n\t\t};\n\n\t\tthis.init( resolution );\n\n\t}\n\n}\n\n/////////////////////////////////////\n// Marching cubes lookup tables\n/////////////////////////////////////\n\n// These tables are straight from Paul Bourke's page:\n// http://paulbourke.net/geometry/polygonise/\n// who in turn got them from Cory Gene Bloyd.\n\nconst edgeTable = new Int32Array( [\n\t0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\n\t0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\n\t0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\n\t0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\n\t0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\n\t0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\n\t0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\n\t0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\n\t0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\n\t0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\n\t0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\n\t0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\n\t0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\n\t0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\n\t0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\n\t0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\n\t0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\n\t0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\n\t0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\n\t0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\n\t0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\n\t0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\n\t0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\n\t0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\n\t0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\n\t0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\n\t0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\n\t0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\n\t0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\n\t0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\n\t0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\n\t0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 ] );\n\nconst triTable = new Int32Array( [\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 9, 8, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 0, 2, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 8, 3, 2, 10, 8, 10, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 8, 11, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 2, 1, 9, 11, 9, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 11, 10, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 10, 1, 0, 8, 10, 8, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 9, 0, 3, 11, 9, 11, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 7, 3, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 1, 9, 4, 7, 1, 7, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 4, 7, 3, 0, 4, 1, 2, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 2, 10, 9, 0, 2, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 4, 7, 11, 2, 4, 2, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 8, 4, 7, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, - 1, - 1, - 1, - 1,\n\t3, 10, 1, 3, 11, 10, 7, 8, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, - 1, - 1, - 1, - 1,\n\t4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t4, 7, 11, 4, 11, 9, 9, 11, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 1, 5, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 5, 4, 8, 3, 5, 3, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 10, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 2, 10, 5, 4, 2, 4, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 11, 2, 0, 8, 11, 4, 9, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 5, 4, 0, 1, 5, 2, 3, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, - 1, - 1, - 1, - 1,\n\t10, 3, 11, 10, 1, 3, 9, 5, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, - 1, - 1, - 1, - 1,\n\t5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, - 1, - 1, - 1, - 1,\n\t5, 4, 8, 5, 8, 10, 10, 8, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 5, 7, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 3, 0, 9, 5, 3, 5, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 8, 0, 1, 7, 1, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 7, 8, 9, 5, 7, 10, 1, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, - 1, - 1, - 1, - 1,\n\t8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, - 1, - 1, - 1, - 1,\n\t2, 10, 5, 2, 5, 3, 3, 5, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 9, 5, 7, 8, 9, 3, 11, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, - 1, - 1, - 1, - 1,\n\t11, 2, 1, 11, 1, 7, 7, 1, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, - 1, - 1, - 1, - 1,\n\t5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, - 1,\n\t11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, - 1,\n\t11, 10, 5, 7, 11, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 8, 3, 1, 9, 8, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 2, 6, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 5, 1, 2, 6, 3, 0, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 6, 5, 9, 0, 6, 0, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 0, 8, 11, 2, 0, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, - 1, - 1, - 1, - 1,\n\t6, 3, 11, 6, 5, 3, 5, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, - 1, - 1, - 1, - 1,\n\t6, 5, 9, 6, 9, 11, 11, 9, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 3, 0, 4, 7, 3, 6, 5, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 5, 10, 6, 8, 4, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, - 1, - 1, - 1, - 1,\n\t6, 1, 2, 6, 5, 1, 4, 7, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, - 1, - 1, - 1, - 1,\n\t8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, - 1, - 1, - 1, - 1,\n\t7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, - 1,\n\t3, 11, 2, 7, 8, 4, 10, 6, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, - 1, - 1, - 1, - 1,\n\t9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, - 1,\n\t8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, - 1, - 1, - 1, - 1,\n\t5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, - 1,\n\t0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, - 1,\n\t6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 6, 4, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 10, 6, 4, 9, 10, 0, 8, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 0, 1, 10, 6, 0, 6, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t1, 4, 9, 1, 2, 4, 2, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, - 1, - 1, - 1, - 1,\n\t0, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 3, 2, 8, 2, 4, 4, 2, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 4, 9, 10, 6, 4, 11, 2, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, - 1, - 1, - 1, - 1,\n\t3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, - 1, - 1, - 1, - 1,\n\t6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, - 1,\n\t9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, - 1, - 1, - 1, - 1,\n\t8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, - 1,\n\t3, 11, 6, 3, 6, 0, 0, 6, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 4, 8, 11, 6, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 10, 6, 7, 8, 10, 8, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, - 1, - 1, - 1, - 1,\n\t10, 6, 7, 10, 7, 1, 1, 7, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, - 1,\n\t7, 8, 0, 7, 0, 6, 6, 0, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 3, 2, 6, 7, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, - 1, - 1, - 1, - 1,\n\t2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, - 1,\n\t1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, - 1,\n\t11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, - 1, - 1, - 1, - 1,\n\t8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, - 1,\n\t0, 9, 1, 11, 6, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, - 1, - 1, - 1, - 1,\n\t7, 11, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 8, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 9, 8, 3, 1, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 1, 2, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 8, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 9, 0, 2, 10, 9, 6, 11, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, - 1, - 1, - 1, - 1,\n\t7, 2, 3, 6, 2, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t7, 0, 8, 7, 6, 0, 6, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 7, 6, 2, 3, 7, 0, 1, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 10, 1, 7, 1, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, - 1, - 1, - 1, - 1,\n\t0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, - 1, - 1, - 1, - 1,\n\t7, 6, 10, 7, 10, 8, 8, 10, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 11, 8, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 3, 0, 6, 0, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 6, 11, 8, 4, 6, 9, 0, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, - 1, - 1, - 1, - 1,\n\t6, 8, 4, 6, 11, 8, 2, 10, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, - 1, - 1, - 1, - 1,\n\t4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, - 1, - 1, - 1, - 1,\n\t10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, - 1,\n\t8, 2, 3, 8, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 2, 4, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, - 1, - 1, - 1, - 1,\n\t1, 9, 4, 1, 4, 2, 2, 4, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, - 1, - 1, - 1, - 1,\n\t10, 1, 0, 10, 0, 6, 6, 0, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, - 1,\n\t10, 9, 4, 6, 10, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 5, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 5, 11, 7, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 1, 5, 4, 0, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 10, 1, 2, 7, 6, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, - 1, - 1, - 1, - 1,\n\t7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, - 1, - 1, - 1, - 1,\n\t3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, - 1,\n\t7, 2, 3, 7, 6, 2, 5, 4, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, - 1, - 1, - 1, - 1,\n\t3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, - 1, - 1, - 1, - 1,\n\t6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, - 1,\n\t9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, - 1, - 1, - 1, - 1,\n\t1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, - 1,\n\t4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, - 1,\n\t7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, - 1, - 1, - 1, - 1,\n\t6, 9, 5, 6, 11, 9, 11, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, - 1, - 1, - 1, - 1,\n\t0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, - 1, - 1, - 1, - 1,\n\t6, 11, 3, 6, 3, 5, 5, 3, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, - 1, - 1, - 1, - 1,\n\t0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, - 1,\n\t11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, - 1,\n\t6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, - 1, - 1, - 1, - 1,\n\t5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, - 1, - 1, - 1, - 1,\n\t9, 5, 6, 9, 6, 0, 0, 6, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, - 1,\n\t1, 5, 6, 2, 1, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, - 1,\n\t10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, - 1, - 1, - 1, - 1,\n\t0, 3, 8, 5, 6, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 5, 6, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 7, 5, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 5, 10, 11, 7, 5, 8, 3, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 11, 7, 5, 10, 11, 1, 9, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, - 1, - 1, - 1, - 1,\n\t11, 1, 2, 11, 7, 1, 7, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, - 1, - 1, - 1, - 1,\n\t9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, - 1, - 1, - 1, - 1,\n\t7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, - 1,\n\t2, 5, 10, 2, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, - 1, - 1, - 1, - 1,\n\t9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, - 1, - 1, - 1, - 1,\n\t9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, - 1,\n\t1, 3, 5, 3, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 7, 0, 7, 1, 1, 7, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 0, 3, 9, 3, 5, 5, 3, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 8, 7, 5, 9, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 8, 4, 5, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, - 1, - 1, - 1, - 1,\n\t0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, - 1, - 1, - 1, - 1,\n\t10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, - 1,\n\t2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, - 1, - 1, - 1, - 1,\n\t0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, - 1,\n\t0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, - 1,\n\t9, 4, 5, 2, 11, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, - 1, - 1, - 1, - 1,\n\t5, 10, 2, 5, 2, 4, 4, 2, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, - 1,\n\t5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 3, 5, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 4, 5, 1, 0, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, - 1, - 1, - 1, - 1,\n\t9, 4, 5, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 11, 7, 4, 9, 11, 9, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, - 1, - 1, - 1, - 1,\n\t1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, - 1, - 1, - 1, - 1,\n\t3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, - 1,\n\t4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, - 1, - 1, - 1, - 1,\n\t9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, - 1,\n\t11, 7, 4, 11, 4, 2, 2, 4, 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, - 1, - 1, - 1, - 1,\n\t2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, - 1, - 1, - 1, - 1,\n\t9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, - 1,\n\t3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, - 1,\n\t1, 10, 2, 8, 7, 4, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 7, 1, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, - 1, - 1, - 1, - 1,\n\t4, 0, 3, 7, 4, 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t4, 8, 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 8, 10, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 11, 9, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 1, 10, 0, 10, 8, 8, 10, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 1, 10, 11, 3, 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 2, 11, 1, 11, 9, 9, 11, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, - 1, - 1, - 1, - 1,\n\t0, 2, 11, 8, 0, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t3, 2, 11, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 10, 8, 9, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t9, 10, 2, 0, 9, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, - 1, - 1, - 1, - 1,\n\t1, 10, 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t1, 3, 8, 9, 1, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 9, 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t0, 3, 8, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1,\n\t- 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 ] );\n\nexport { MarchingCubes, edgeTable, triTable };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Reflector extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflector = true;\n\n\t\tthis.type = 'Reflector';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Reflector.ReflectorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst reflectorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = this.camera;\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\tthis.material = material;\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\treflectorPlane.setFromNormalAndCoplanarPoint( normal, reflectorWorldPosition );\n\t\t\treflectorPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant );\n\n\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\t// Render\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nReflector.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec4 vUv;\n\n\t\t#include \n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n};\n\nexport { Reflector };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget,\n\tDepthTexture,\n\tUnsignedShortType,\n\tNearestFilter,\n\tPlane,\n\tHalfFloatType\n} from 'three';\n\nclass ReflectorForSSRPass extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isReflectorForSSRPass = true;\n\n\t\tthis.type = 'ReflectorForSSRPass';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || ReflectorForSSRPass.ReflectorShader;\n\t\tconst useDepthTexture = options.useDepthTexture === true;\n\t\tconst yAxis = new Vector3( 0, 1, 0 );\n\t\tconst vecTemp0 = new Vector3();\n\t\tconst vecTemp1 = new Vector3();\n\n\t\t//\n\n\t\tscope.needsUpdate = false;\n\t\tscope.maxDistance = ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;\n\t\tscope.opacity = ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;\n\t\tscope.color = color;\n\t\tscope.resolution = options.resolution || new Vector2( window.innerWidth, window.innerHeight );\n\n\n\t\tscope._distanceAttenuation = ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( scope, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._distanceAttenuation === val ) return;\n\t\t\t\tscope._distanceAttenuation = val;\n\t\t\t\tscope.material.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tscope._fresnel = ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;\n\t\tObject.defineProperty( scope, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn scope._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( scope._fresnel === val ) return;\n\t\t\t\tscope._fresnel = val;\n\t\t\t\tscope.material.defines.FRESNEL = val;\n\t\t\t\tscope.material.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tconst normal = new Vector3();\n\t\tconst reflectorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst virtualCamera = new PerspectiveCamera();\n\n\t\tlet depthTexture;\n\n\t\tif ( useDepthTexture ) {\n\n\t\t\tdepthTexture = new DepthTexture();\n\t\t\tdepthTexture.type = UnsignedShortType;\n\t\t\tdepthTexture.minFilter = NearestFilter;\n\t\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\t}\n\n\t\tconst parameters = {\n\t\t\tdepthTexture: useDepthTexture ? depthTexture : null,\n\t\t\ttype: HalfFloatType\n\t\t};\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, parameters );\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\ttransparent: useDepthTexture,\n\t\t\tdefines: Object.assign( {}, ReflectorForSSRPass.ReflectorShader.defines, {\n\t\t\t\tuseDepthTexture\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tvertexShader: shader.vertexShader\n\t\t} );\n\n\t\tmaterial.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tif ( useDepthTexture ) {\n\n\t\t\tmaterial.uniforms[ 'tDepth' ].value = renderTarget.depthTexture;\n\n\t\t}\n\n\t\tthis.material = material;\n\n\t\tconst globalPlane = new Plane( new Vector3( 0, 1, 0 ), clipBias );\n\t\tconst globalPlanes = [ globalPlane ];\n\n\t\tthis.doRender = function ( renderer, scene, camera ) {\n\n\t\t\tmaterial.uniforms[ 'maxDistance' ].value = scope.maxDistance;\n\t\t\tmaterial.uniforms[ 'color' ].value = scope.color;\n\t\t\tmaterial.uniforms[ 'opacity' ].value = scope.opacity;\n\n\t\t\tvecTemp0.copy( camera.position ).normalize();\n\t\t\tvecTemp1.copy( vecTemp0 ).reflect( yAxis );\n\t\t\tmaterial.uniforms[ 'fresnelCoe' ].value = ( vecTemp0.dot( vecTemp1 ) + 1. ) / 2.; // TODO: Also need to use glsl viewPosition and viewNormal per pixel.\n\n\t\t\treflectorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( reflectorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when reflector is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( reflectorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( reflectorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( reflectorWorldPosition );\n\n\t\t\tvirtualCamera.position.copy( view );\n\t\t\tvirtualCamera.up.set( 0, 1, 0 );\n\t\t\tvirtualCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tvirtualCamera.up.reflect( normal );\n\t\t\tvirtualCamera.lookAt( target );\n\n\t\t\tvirtualCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tvirtualCamera.updateMatrixWorld();\n\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\tmaterial.uniforms[ 'virtualCameraNear' ].value = camera.near;\n\t\t\tmaterial.uniforms[ 'virtualCameraFar' ].value = camera.far;\n\t\t\tmaterial.uniforms[ 'virtualCameraMatrixWorld' ].value = virtualCamera.matrixWorld;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrix' ].value = camera.projectionMatrix;\n\t\t\tmaterial.uniforms[ 'virtualCameraProjectionMatrixInverse' ].value = camera.projectionMatrixInverse;\n\t\t\tmaterial.uniforms[ 'resolution' ].value = scope.resolution;\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( virtualCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( virtualCamera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t\t// scope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\t\t\tconst currentClippingPlanes = renderer.clippingPlanes;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\t\t\trenderer.clippingPlanes = globalPlanes;\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.clippingPlanes = currentClippingPlanes;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\t// scope.visible = true;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t}\n\n}\n\nReflectorForSSRPass.ReflectorShader = {\n\n\tname: 'ReflectorShader',\n\n\tdefines: {\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t},\n\n\tuniforms: {\n\n\t\tcolor: { value: null },\n\t\ttDiffuse: { value: null },\n\t\ttDepth: { value: null },\n\t\ttextureMatrix: { value: new Matrix4() },\n\t\tmaxDistance: { value: 180 },\n\t\topacity: { value: 0.5 },\n\t\tfresnelCoe: { value: null },\n\t\tvirtualCameraNear: { value: null },\n\t\tvirtualCameraFar: { value: null },\n\t\tvirtualCameraProjectionMatrix: { value: new Matrix4() },\n\t\tvirtualCameraMatrixWorld: { value: new Matrix4() },\n\t\tvirtualCameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tresolution: { value: new Vector2() },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float maxDistance;\n\t\tuniform float opacity;\n\t\tuniform float fresnelCoe;\n\t\tuniform float virtualCameraNear;\n\t\tuniform float virtualCameraFar;\n\t\tuniform mat4 virtualCameraProjectionMatrix;\n\t\tuniform mat4 virtualCameraProjectionMatrixInverse;\n\t\tuniform mat4 virtualCameraMatrixWorld;\n\t\tuniform vec2 resolution;\n\t\tvarying vec4 vUv;\n\t\t#include \n\t\tfloat blendOverlay( float base, float blend ) {\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\t\t}\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\treturn perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar );\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view\n\t\t}\n\t\tvoid main() {\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\t#ifdef useDepthTexture\n\t\t\t\tvec2 uv=(gl_FragCoord.xy-.5)/resolution.xy;\n\t\t\t\tuv.x=1.-uv.x;\n\t\t\t\tfloat depth = texture2DProj( tDepth, vUv ).r;\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\t\tfloat clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];\n\t\t\t\tvec3 viewPosition=getViewPosition( uv, depth, clipW );\n\t\t\t\tvec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;\n\t\t\t\tif(worldPosition.y>maxDistance) discard;\n\t\t\t\tfloat op=opacity;\n\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\tfloat ratio=1.-(worldPosition.y/maxDistance);\n\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t#endif\n\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t#endif\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), op );\n\t\t\t#else\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\t\t\t#endif\n\t\t}\n\t`,\n};\n\nexport { ReflectorForSSRPass };\n", "import {\n\tColor,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tQuaternion,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n\tHalfFloatType\n} from 'three';\n\nclass Refractor extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isRefractor = true;\n\n\t\tthis.type = 'Refractor';\n\t\tthis.camera = new PerspectiveCamera();\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0x7F7F7F );\n\t\tconst textureWidth = options.textureWidth || 512;\n\t\tconst textureHeight = options.textureHeight || 512;\n\t\tconst clipBias = options.clipBias || 0;\n\t\tconst shader = options.shader || Refractor.RefractorShader;\n\t\tconst multisample = ( options.multisample !== undefined ) ? options.multisample : 4;\n\n\t\t//\n\n\t\tconst virtualCamera = this.camera;\n\t\tvirtualCamera.matrixAutoUpdate = false;\n\t\tvirtualCamera.userData.refractor = true;\n\n\t\t//\n\n\t\tconst refractorPlane = new Plane();\n\t\tconst textureMatrix = new Matrix4();\n\n\t\t// render target\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight, { samples: multisample, type: HalfFloatType } );\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true // ensures, refractors are drawn from farthest to closest\n\t\t} );\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'tDiffuse' ].value = renderTarget.texture;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// functions\n\n\t\tconst visible = ( function () {\n\n\t\t\tconst refractorWorldPosition = new Vector3();\n\t\t\tconst cameraWorldPosition = new Vector3();\n\t\t\tconst rotationMatrix = new Matrix4();\n\n\t\t\tconst view = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\treturn function visible( camera ) {\n\n\t\t\t\trefractorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t\tview.subVectors( refractorWorldPosition, cameraWorldPosition );\n\n\t\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\t\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\t\treturn view.dot( normal ) < 0;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateRefractorPlane = ( function () {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst position = new Vector3();\n\t\t\tconst quaternion = new Quaternion();\n\t\t\tconst scale = new Vector3();\n\n\t\t\treturn function updateRefractorPlane() {\n\n\t\t\t\tscope.matrixWorld.decompose( position, quaternion, scale );\n\t\t\t\tnormal.set( 0, 0, 1 ).applyQuaternion( quaternion ).normalize();\n\n\t\t\t\t// flip the normal because we want to cull everything above the plane\n\n\t\t\t\tnormal.negate();\n\n\t\t\t\trefractorPlane.setFromNormalAndCoplanarPoint( normal, position );\n\n\t\t\t};\n\n\t\t} )();\n\n\t\tconst updateVirtualCamera = ( function () {\n\n\t\t\tconst clipPlane = new Plane();\n\t\t\tconst clipVector = new Vector4();\n\t\t\tconst q = new Vector4();\n\n\t\t\treturn function updateVirtualCamera( camera ) {\n\n\t\t\t\tvirtualCamera.matrixWorld.copy( camera.matrixWorld );\n\t\t\t\tvirtualCamera.matrixWorldInverse.copy( virtualCamera.matrixWorld ).invert();\n\t\t\t\tvirtualCamera.projectionMatrix.copy( camera.projectionMatrix );\n\t\t\t\tvirtualCamera.far = camera.far; // used in WebGLBackground\n\n\t\t\t\t// The following code creates an oblique view frustum for clipping.\n\t\t\t\t// see: Lengyel, Eric. “Oblique View Frustum Depth Projection and Clipping”.\n\t\t\t\t// Journal of Game Development, Vol. 1, No. 2 (2005), Charles River Media, pp. 5–16\n\n\t\t\t\tclipPlane.copy( refractorPlane );\n\t\t\t\tclipPlane.applyMatrix4( virtualCamera.matrixWorldInverse );\n\n\t\t\t\tclipVector.set( clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant );\n\n\t\t\t\t// calculate the clip-space corner point opposite the clipping plane and\n\t\t\t\t// transform it into camera space by multiplying it by the inverse of the projection matrix\n\n\t\t\t\tconst projectionMatrix = virtualCamera.projectionMatrix;\n\n\t\t\t\tq.x = ( Math.sign( clipVector.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\t\tq.y = ( Math.sign( clipVector.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\t\tq.z = - 1.0;\n\t\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t\t// calculate the scaled plane vector\n\n\t\t\t\tclipVector.multiplyScalar( 2.0 / clipVector.dot( q ) );\n\n\t\t\t\t// replacing the third row of the projection matrix\n\n\t\t\t\tprojectionMatrix.elements[ 2 ] = clipVector.x;\n\t\t\t\tprojectionMatrix.elements[ 6 ] = clipVector.y;\n\t\t\t\tprojectionMatrix.elements[ 10 ] = clipVector.z + 1.0 - clipBias;\n\t\t\t\tprojectionMatrix.elements[ 14 ] = clipVector.w;\n\n\t\t\t};\n\n\t\t} )();\n\n\t\t// This will update the texture matrix that is used for projective texture mapping in the shader.\n\t\t// see: http://developer.download.nvidia.com/assets/gamedev/docs/projective_texture_mapping.pdf\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\t// this matrix does range mapping to [ 0, 1 ]\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\t// we use \"Object Linear Texgen\", so we need to multiply the texture matrix T\n\t\t\t// (matrix above) with the projection and view matrix of the virtual camera\n\t\t\t// and the model matrix of the refractor\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction render( renderer, scene, camera ) {\n\n\t\t\tscope.visible = false;\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\trenderer.xr.enabled = false; // avoid camera modification\n\t\t\trenderer.shadowMap.autoUpdate = false; // avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, virtualCamera );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t\tscope.visible = true;\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t// ensure refractors are rendered only once per frame\n\n\t\t\tif ( camera.userData.refractor === true ) return;\n\n\t\t\t// avoid rendering when the refractor is viewed from behind\n\n\t\t\tif ( ! visible( camera ) === true ) return;\n\n\t\t\t// update\n\n\t\t\tupdateRefractorPlane();\n\n\t\t\tupdateTextureMatrix( camera );\n\n\t\t\tupdateVirtualCamera( camera );\n\n\t\t\trender( renderer, scene, camera );\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn renderTarget;\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\trenderTarget.dispose();\n\t\t\tscope.material.dispose();\n\n\t\t};\n\n\t}\n\n}\n\nRefractor.RefractorShader = {\n\n\tname: 'RefractorShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec4 vUv;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Refractor };\n", "import {\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tEqualStencilFunc,\n\tIncrementStencilOp\n} from 'three';\n\n/**\n * A shadow Mesh that follows a shadow-casting Mesh in the scene, but is confined to a single plane.\n */\n\nconst _shadowMatrix = new Matrix4();\n\nclass ShadowMesh extends Mesh {\n\n\tconstructor( mesh ) {\n\n\t\tconst shadowMaterial = new MeshBasicMaterial( {\n\n\t\t\tcolor: 0x000000,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.6,\n\t\t\tdepthWrite: false,\n\t\t\tstencilWrite: true,\n\t\t\tstencilFunc: EqualStencilFunc,\n\t\t\tstencilRef: 0,\n\t\t\tstencilZPass: IncrementStencilOp\n\n\t\t} );\n\n\t\tsuper( mesh.geometry, shadowMaterial );\n\n\t\tthis.isShadowMesh = true;\n\n\t\tthis.meshMatrix = mesh.matrixWorld;\n\n\t\tthis.frustumCulled = false;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdate( plane, lightPosition4D ) {\n\n\t\t// based on https://www.opengl.org/archives/resources/features/StencilTalk/tsld021.htm\n\n\t\tconst dot = plane.normal.x * lightPosition4D.x +\n\t\t\t plane.normal.y * lightPosition4D.y +\n\t\t\t plane.normal.z * lightPosition4D.z +\n\t\t\t - plane.constant * lightPosition4D.w;\n\n\t\tconst sme = _shadowMatrix.elements;\n\n\t\tsme[ 0 ] = dot - lightPosition4D.x * plane.normal.x;\n\t\tsme[ 4 ] = - lightPosition4D.x * plane.normal.y;\n\t\tsme[ 8 ] = - lightPosition4D.x * plane.normal.z;\n\t\tsme[ 12 ] = - lightPosition4D.x * - plane.constant;\n\n\t\tsme[ 1 ] = - lightPosition4D.y * plane.normal.x;\n\t\tsme[ 5 ] = dot - lightPosition4D.y * plane.normal.y;\n\t\tsme[ 9 ] = - lightPosition4D.y * plane.normal.z;\n\t\tsme[ 13 ] = - lightPosition4D.y * - plane.constant;\n\n\t\tsme[ 2 ] = - lightPosition4D.z * plane.normal.x;\n\t\tsme[ 6 ] = - lightPosition4D.z * plane.normal.y;\n\t\tsme[ 10 ] = dot - lightPosition4D.z * plane.normal.z;\n\t\tsme[ 14 ] = - lightPosition4D.z * - plane.constant;\n\n\t\tsme[ 3 ] = - lightPosition4D.w * plane.normal.x;\n\t\tsme[ 7 ] = - lightPosition4D.w * plane.normal.y;\n\t\tsme[ 11 ] = - lightPosition4D.w * plane.normal.z;\n\t\tsme[ 15 ] = dot - lightPosition4D.w * - plane.constant;\n\n\t\tthis.matrix.multiplyMatrices( _shadowMatrix, this.meshMatrix );\n\n\t}\n\n}\n\nexport { ShadowMesh };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3\n} from 'three';\n\n/**\n * Based on \"A Practical Analytic Model for Daylight\"\n * aka The Preetham Model, the de facto standard analytic skydome model\n * https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight\n *\n * First implemented by Simon Wallner\n * http://simonwallner.at/project/atmospheric-scattering/\n *\n * Improved by Martin Upitis\n * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR\n *\n * Three.js integration by zz85 http://twitter.com/blurspline\n*/\n\nclass Sky extends Mesh {\n\n\tconstructor() {\n\n\t\tconst shader = Sky.SkyShader;\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tsuper( new BoxGeometry( 1, 1, 1 ), material );\n\n\t\tthis.isSky = true;\n\n\t}\n\n}\n\nSky.SkyShader = {\n\n\tname: 'SkyShader',\n\n\tuniforms: {\n\t\t'turbidity': { value: 2 },\n\t\t'rayleigh': { value: 1 },\n\t\t'mieCoefficient': { value: 0.005 },\n\t\t'mieDirectionalG': { value: 0.8 },\n\t\t'sunPosition': { value: new Vector3() },\n\t\t'up': { value: new Vector3( 0, 1, 0 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tuniform vec3 sunPosition;\n\t\tuniform float rayleigh;\n\t\tuniform float turbidity;\n\t\tuniform float mieCoefficient;\n\t\tuniform vec3 up;\n\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float e = 2.71828182845904523536028747135266249775724709369995957;\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\t// wavelength of used primaries, according to preetham\n\t\tconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n\t\t// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n\t\t// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n\t\tconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n\t\t// mie stuff\n\t\t// K coefficient for the primaries\n\t\tconst float v = 4.0;\n\t\tconst vec3 K = vec3( 0.686, 0.678, 0.666 );\n\t\t// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n\t\tconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n\t\t// earth shadow hack\n\t\t// cutoffAngle = pi / 1.95;\n\t\tconst float cutoffAngle = 1.6110731556870734;\n\t\tconst float steepness = 1.5;\n\t\tconst float EE = 1000.0;\n\n\t\tfloat sunIntensity( float zenithAngleCos ) {\n\t\t\tzenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n\t\t\treturn EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n\t\t}\n\n\t\tvec3 totalMie( float T ) {\n\t\t\tfloat c = ( 0.2 * T ) * 10E-18;\n\t\t\treturn 0.434 * c * MieConst;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n\t\t\tvSunDirection = normalize( sunPosition );\n\n\t\t\tvSunE = sunIntensity( dot( vSunDirection, up ) );\n\n\t\t\tvSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n\t\t\tfloat rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n\t\t\t// extinction (absorbtion + out scattering)\n\t\t\t// rayleigh coefficients\n\t\t\tvBetaR = totalRayleigh * rayleighCoefficient;\n\n\t\t\t// mie coefficients\n\t\t\tvBetaM = totalMie( turbidity ) * mieCoefficient;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec3 vWorldPosition;\n\t\tvarying vec3 vSunDirection;\n\t\tvarying float vSunfade;\n\t\tvarying vec3 vBetaR;\n\t\tvarying vec3 vBetaM;\n\t\tvarying float vSunE;\n\n\t\tuniform float mieDirectionalG;\n\t\tuniform vec3 up;\n\n\t\t// constants for atmospheric scattering\n\t\tconst float pi = 3.141592653589793238462643383279502884197169;\n\n\t\tconst float n = 1.0003; // refractive index of air\n\t\tconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n\t\t// optical length at zenith for molecules\n\t\tconst float rayleighZenithLength = 8.4E3;\n\t\tconst float mieZenithLength = 1.25E3;\n\t\t// 66 arc seconds -> degrees, and the cosine of that\n\t\tconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n\t\t// 3.0 / ( 16.0 * pi )\n\t\tconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n\t\t// 1.0 / ( 4.0 * pi )\n\t\tconst float ONE_OVER_FOURPI = 0.07957747154594767;\n\n\t\tfloat rayleighPhase( float cosTheta ) {\n\t\t\treturn THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n\t\t}\n\n\t\tfloat hgPhase( float cosTheta, float g ) {\n\t\t\tfloat g2 = pow( g, 2.0 );\n\t\t\tfloat inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n\t\t\treturn ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec3 direction = normalize( vWorldPosition - cameraPosition );\n\n\t\t\t// optical length\n\t\t\t// cutoff angle at 90 to avoid singularity in next formula.\n\t\t\tfloat zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n\t\t\tfloat inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n\t\t\tfloat sR = rayleighZenithLength * inverse;\n\t\t\tfloat sM = mieZenithLength * inverse;\n\n\t\t\t// combined extinction factor\n\t\t\tvec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n\t\t\t// in scattering\n\t\t\tfloat cosTheta = dot( direction, vSunDirection );\n\n\t\t\tfloat rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n\t\t\tvec3 betaRTheta = vBetaR * rPhase;\n\n\t\t\tfloat mPhase = hgPhase( cosTheta, mieDirectionalG );\n\t\t\tvec3 betaMTheta = vBetaM * mPhase;\n\n\t\t\tvec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n\t\t\tLin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n\t\t\t// nightsky\n\t\t\tfloat theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n\t\t\tfloat phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n\t\t\tvec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n\t\t\tvec3 L0 = vec3( 0.1 ) * Fex;\n\n\t\t\t// composition + solar disc\n\t\t\tfloat sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n\t\t\tL0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n\t\t\tvec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n\t\t\tvec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n\t\t\tgl_FragColor = vec4( retColor, 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Sky };\n", "import {\n\tColor,\n\tFrontSide,\n\tMatrix4,\n\tMesh,\n\tPerspectiveCamera,\n\tPlane,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget\n} from 'three';\n\n/**\n * Work based on :\n * https://github.com/Slayvin: Flat mirror for three.js\n * https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror\n * http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tconst scope = this;\n\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0.0;\n\t\tconst alpha = options.alpha !== undefined ? options.alpha : 1.0;\n\t\tconst time = options.time !== undefined ? options.time : 0.0;\n\t\tconst normalSampler = options.waterNormals !== undefined ? options.waterNormals : null;\n\t\tconst sunDirection = options.sunDirection !== undefined ? options.sunDirection : new Vector3( 0.70707, 0.70707, 0.0 );\n\t\tconst sunColor = new Color( options.sunColor !== undefined ? options.sunColor : 0xffffff );\n\t\tconst waterColor = new Color( options.waterColor !== undefined ? options.waterColor : 0x7F7F7F );\n\t\tconst eye = options.eye !== undefined ? options.eye : new Vector3( 0, 0, 0 );\n\t\tconst distortionScale = options.distortionScale !== undefined ? options.distortionScale : 20.0;\n\t\tconst side = options.side !== undefined ? options.side : FrontSide;\n\t\tconst fog = options.fog !== undefined ? options.fog : false;\n\n\t\t//\n\n\t\tconst mirrorPlane = new Plane();\n\t\tconst normal = new Vector3();\n\t\tconst mirrorWorldPosition = new Vector3();\n\t\tconst cameraWorldPosition = new Vector3();\n\t\tconst rotationMatrix = new Matrix4();\n\t\tconst lookAtPosition = new Vector3( 0, 0, - 1 );\n\t\tconst clipPlane = new Vector4();\n\n\t\tconst view = new Vector3();\n\t\tconst target = new Vector3();\n\t\tconst q = new Vector4();\n\n\t\tconst textureMatrix = new Matrix4();\n\n\t\tconst mirrorCamera = new PerspectiveCamera();\n\n\t\tconst renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );\n\n\t\tconst mirrorShader = {\n\n\t\t\tname: 'MirrorShader',\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tUniformsLib[ 'lights' ],\n\t\t\t\t{\n\t\t\t\t\t'normalSampler': { value: null },\n\t\t\t\t\t'mirrorSampler': { value: null },\n\t\t\t\t\t'alpha': { value: 1.0 },\n\t\t\t\t\t'time': { value: 0.0 },\n\t\t\t\t\t'size': { value: 1.0 },\n\t\t\t\t\t'distortionScale': { value: 20.0 },\n\t\t\t\t\t'textureMatrix': { value: new Matrix4() },\n\t\t\t\t\t'sunColor': { value: new Color( 0x7F7F7F ) },\n\t\t\t\t\t'sunDirection': { value: new Vector3( 0.70707, 0.70707, 0 ) },\n\t\t\t\t\t'eye': { value: new Vector3() },\n\t\t\t\t\t'waterColor': { value: new Color( 0x555555 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t}`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \t\n\t\t\t\t}`\n\n\t\t};\n\n\t\tconst material = new ShaderMaterial( {\n\t\t\tname: mirrorShader.name,\n\t\t\tuniforms: UniformsUtils.clone( mirrorShader.uniforms ),\n\t\t\tvertexShader: mirrorShader.vertexShader,\n\t\t\tfragmentShader: mirrorShader.fragmentShader,\n\t\t\tlights: true,\n\t\t\tside: side,\n\t\t\tfog: fog\n\t\t} );\n\n\t\tmaterial.uniforms[ 'mirrorSampler' ].value = renderTarget.texture;\n\t\tmaterial.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\t\tmaterial.uniforms[ 'alpha' ].value = alpha;\n\t\tmaterial.uniforms[ 'time' ].value = time;\n\t\tmaterial.uniforms[ 'normalSampler' ].value = normalSampler;\n\t\tmaterial.uniforms[ 'sunColor' ].value = sunColor;\n\t\tmaterial.uniforms[ 'waterColor' ].value = waterColor;\n\t\tmaterial.uniforms[ 'sunDirection' ].value = sunDirection;\n\t\tmaterial.uniforms[ 'distortionScale' ].value = distortionScale;\n\n\t\tmaterial.uniforms[ 'eye' ].value = eye;\n\n\t\tscope.material = material;\n\n\t\tscope.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tmirrorWorldPosition.setFromMatrixPosition( scope.matrixWorld );\n\t\t\tcameraWorldPosition.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\trotationMatrix.extractRotation( scope.matrixWorld );\n\n\t\t\tnormal.set( 0, 0, 1 );\n\t\t\tnormal.applyMatrix4( rotationMatrix );\n\n\t\t\tview.subVectors( mirrorWorldPosition, cameraWorldPosition );\n\n\t\t\t// Avoid rendering when mirror is facing away\n\n\t\t\tif ( view.dot( normal ) > 0 ) return;\n\n\t\t\tview.reflect( normal ).negate();\n\t\t\tview.add( mirrorWorldPosition );\n\n\t\t\trotationMatrix.extractRotation( camera.matrixWorld );\n\n\t\t\tlookAtPosition.set( 0, 0, - 1 );\n\t\t\tlookAtPosition.applyMatrix4( rotationMatrix );\n\t\t\tlookAtPosition.add( cameraWorldPosition );\n\n\t\t\ttarget.subVectors( mirrorWorldPosition, lookAtPosition );\n\t\t\ttarget.reflect( normal ).negate();\n\t\t\ttarget.add( mirrorWorldPosition );\n\n\t\t\tmirrorCamera.position.copy( view );\n\t\t\tmirrorCamera.up.set( 0, 1, 0 );\n\t\t\tmirrorCamera.up.applyMatrix4( rotationMatrix );\n\t\t\tmirrorCamera.up.reflect( normal );\n\t\t\tmirrorCamera.lookAt( target );\n\n\t\t\tmirrorCamera.far = camera.far; // Used in WebGLBackground\n\n\t\t\tmirrorCamera.updateMatrixWorld();\n\t\t\tmirrorCamera.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t// Update the texture matrix\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\t\t\ttextureMatrix.multiply( mirrorCamera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( mirrorCamera.matrixWorldInverse );\n\n\t\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\t\tmirrorPlane.setFromNormalAndCoplanarPoint( normal, mirrorWorldPosition );\n\t\t\tmirrorPlane.applyMatrix4( mirrorCamera.matrixWorldInverse );\n\n\t\t\tclipPlane.set( mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant );\n\n\t\t\tconst projectionMatrix = mirrorCamera.projectionMatrix;\n\n\t\t\tq.x = ( Math.sign( clipPlane.x ) + projectionMatrix.elements[ 8 ] ) / projectionMatrix.elements[ 0 ];\n\t\t\tq.y = ( Math.sign( clipPlane.y ) + projectionMatrix.elements[ 9 ] ) / projectionMatrix.elements[ 5 ];\n\t\t\tq.z = - 1.0;\n\t\t\tq.w = ( 1.0 + projectionMatrix.elements[ 10 ] ) / projectionMatrix.elements[ 14 ];\n\n\t\t\t// Calculate the scaled plane vector\n\t\t\tclipPlane.multiplyScalar( 2.0 / clipPlane.dot( q ) );\n\n\t\t\t// Replacing the third row of the projection matrix\n\t\t\tprojectionMatrix.elements[ 2 ] = clipPlane.x;\n\t\t\tprojectionMatrix.elements[ 6 ] = clipPlane.y;\n\t\t\tprojectionMatrix.elements[ 10 ] = clipPlane.z + 1.0 - clipBias;\n\t\t\tprojectionMatrix.elements[ 14 ] = clipPlane.w;\n\n\t\t\teye.setFromMatrixPosition( camera.matrixWorld );\n\n\t\t\t// Render\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n\n\t\t\tscope.visible = false;\n\n\t\t\trenderer.xr.enabled = false; // Avoid camera modification and recursion\n\t\t\trenderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows\n\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.state.buffers.depth.setMask( true ); // make sure the depth buffer is writable so it can be properly cleared, see #18897\n\n\t\t\tif ( renderer.autoClear === false ) renderer.clear();\n\t\t\trenderer.render( scene, mirrorCamera );\n\n\t\t\tscope.visible = true;\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t\trenderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t// Restore viewport\n\n\t\t\tconst viewport = camera.viewport;\n\n\t\t\tif ( viewport !== undefined ) {\n\n\t\t\t\trenderer.state.viewport( viewport );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport { Water };\n", "import {\n\tClock,\n\tColor,\n\tMatrix4,\n\tMesh,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tTextureLoader,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n\tVector4\n} from 'three';\nimport { Reflector } from '../objects/Reflector.js';\nimport { Refractor } from '../objects/Refractor.js';\n\n/**\n * References:\n *\thttps://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf\n *\thttp://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html\n *\n */\n\nclass Water extends Mesh {\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tsuper( geometry );\n\n\t\tthis.isWater = true;\n\n\t\tthis.type = 'Water';\n\n\t\tconst scope = this;\n\n\t\tconst color = ( options.color !== undefined ) ? new Color( options.color ) : new Color( 0xFFFFFF );\n\t\tconst textureWidth = options.textureWidth !== undefined ? options.textureWidth : 512;\n\t\tconst textureHeight = options.textureHeight !== undefined ? options.textureHeight : 512;\n\t\tconst clipBias = options.clipBias !== undefined ? options.clipBias : 0;\n\t\tconst flowDirection = options.flowDirection !== undefined ? options.flowDirection : new Vector2( 1, 0 );\n\t\tconst flowSpeed = options.flowSpeed !== undefined ? options.flowSpeed : 0.03;\n\t\tconst reflectivity = options.reflectivity !== undefined ? options.reflectivity : 0.02;\n\t\tconst scale = options.scale !== undefined ? options.scale : 1;\n\t\tconst shader = options.shader !== undefined ? options.shader : Water.WaterShader;\n\n\t\tconst textureLoader = new TextureLoader();\n\n\t\tconst flowMap = options.flowMap || undefined;\n\t\tconst normalMap0 = options.normalMap0 || textureLoader.load( 'textures/water/Water_1_M_Normal.jpg' );\n\t\tconst normalMap1 = options.normalMap1 || textureLoader.load( 'textures/water/Water_2_M_Normal.jpg' );\n\n\t\tconst cycle = 0.15; // a cycle of a flow map phase\n\t\tconst halfCycle = cycle * 0.5;\n\t\tconst textureMatrix = new Matrix4();\n\t\tconst clock = new Clock();\n\n\t\t// internal components\n\n\t\tif ( Reflector === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Reflector not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( Refractor === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Water: Required component Refractor not found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst reflector = new Reflector( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\tconst refractor = new Refractor( geometry, {\n\t\t\ttextureWidth: textureWidth,\n\t\t\ttextureHeight: textureHeight,\n\t\t\tclipBias: clipBias\n\t\t} );\n\n\t\treflector.matrixAutoUpdate = false;\n\t\trefractor.matrixAutoUpdate = false;\n\n\t\t// material\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib[ 'fog' ],\n\t\t\t\tshader.uniforms\n\t\t\t] ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tfog: true\n\t\t} );\n\n\t\tif ( flowMap !== undefined ) {\n\n\t\t\tthis.material.defines.USE_FLOWMAP = '';\n\t\t\tthis.material.uniforms[ 'tFlowMap' ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: flowMap\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis.material.uniforms[ 'flowDirection' ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: flowDirection\n\t\t\t};\n\n\t\t}\n\n\t\t// maps\n\n\t\tnormalMap0.wrapS = normalMap0.wrapT = RepeatWrapping;\n\t\tnormalMap1.wrapS = normalMap1.wrapT = RepeatWrapping;\n\n\t\tthis.material.uniforms[ 'tReflectionMap' ].value = reflector.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tRefractionMap' ].value = refractor.getRenderTarget().texture;\n\t\tthis.material.uniforms[ 'tNormalMap0' ].value = normalMap0;\n\t\tthis.material.uniforms[ 'tNormalMap1' ].value = normalMap1;\n\n\t\t// water\n\n\t\tthis.material.uniforms[ 'color' ].value = color;\n\t\tthis.material.uniforms[ 'reflectivity' ].value = reflectivity;\n\t\tthis.material.uniforms[ 'textureMatrix' ].value = textureMatrix;\n\n\t\t// inital values\n\n\t\tthis.material.uniforms[ 'config' ].value.x = 0; // flowMapOffset0\n\t\tthis.material.uniforms[ 'config' ].value.y = halfCycle; // flowMapOffset1\n\t\tthis.material.uniforms[ 'config' ].value.z = halfCycle; // halfCycle\n\t\tthis.material.uniforms[ 'config' ].value.w = scale; // scale\n\n\t\t// functions\n\n\t\tfunction updateTextureMatrix( camera ) {\n\n\t\t\ttextureMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\ttextureMatrix.multiply( camera.projectionMatrix );\n\t\t\ttextureMatrix.multiply( camera.matrixWorldInverse );\n\t\t\ttextureMatrix.multiply( scope.matrixWorld );\n\n\t\t}\n\n\t\tfunction updateFlow() {\n\n\t\t\tconst delta = clock.getDelta();\n\t\t\tconst config = scope.material.uniforms[ 'config' ];\n\n\t\t\tconfig.value.x += flowSpeed * delta; // flowMapOffset0\n\t\t\tconfig.value.y = config.value.x + halfCycle; // flowMapOffset1\n\n\t\t\t// Important: The distance between offsets should be always the value of \"halfCycle\".\n\t\t\t// Moreover, both offsets should be in the range of [ 0, cycle ].\n\t\t\t// This approach ensures a smooth water flow and avoids \"reset\" effects.\n\n\t\t\tif ( config.value.x >= cycle ) {\n\n\t\t\t\tconfig.value.x = 0;\n\t\t\t\tconfig.value.y = halfCycle;\n\n\t\t\t} else if ( config.value.y >= cycle ) {\n\n\t\t\t\tconfig.value.y = config.value.y - cycle;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\tupdateTextureMatrix( camera );\n\t\t\tupdateFlow();\n\n\t\t\tscope.visible = false;\n\n\t\t\treflector.matrixWorld.copy( scope.matrixWorld );\n\t\t\trefractor.matrixWorld.copy( scope.matrixWorld );\n\n\t\t\treflector.onBeforeRender( renderer, scene, camera );\n\t\t\trefractor.onBeforeRender( renderer, scene, camera );\n\n\t\t\tscope.visible = true;\n\n\t\t};\n\n\t}\n\n}\n\nWater.WaterShader = {\n\n\tname: 'WaterShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\ttype: 'c',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'reflectivity': {\n\t\t\ttype: 'f',\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tReflectionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tRefractionMap': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap0': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tNormalMap1': {\n\t\t\ttype: 't',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\ttype: 'm4',\n\t\t\tvalue: null\n\t\t},\n\n\t\t'config': {\n\t\t\ttype: 'v4',\n\t\t\tvalue: new Vector4()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tvCoord = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvToEye = cameraPosition - worldPosition.xyz;\n\n\t\t\tvec4 mvPosition = viewMatrix * worldPosition; // used in fog_vertex\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tReflectionMap;\n\t\tuniform sampler2D tRefractionMap;\n\t\tuniform sampler2D tNormalMap0;\n\t\tuniform sampler2D tNormalMap1;\n\n\t\t#ifdef USE_FLOWMAP\n\t\t\tuniform sampler2D tFlowMap;\n\t\t#else\n\t\t\tuniform vec2 flowDirection;\n\t\t#endif\n\n\t\tuniform vec3 color;\n\t\tuniform float reflectivity;\n\t\tuniform vec4 config;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\tfloat flowMapOffset0 = config.x;\n\t\t\tfloat flowMapOffset1 = config.y;\n\t\t\tfloat halfCycle = config.z;\n\t\t\tfloat scale = config.w;\n\n\t\t\tvec3 toEye = normalize( vToEye );\n\n\t\t\t// determine flow direction\n\t\t\tvec2 flow;\n\t\t\t#ifdef USE_FLOWMAP\n\t\t\t\tflow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;\n\t\t\t#else\n\t\t\t\tflow = flowDirection;\n\t\t\t#endif\n\t\t\tflow.x *= - 1.0;\n\n\t\t\t// sample normal maps (distort uvs with flowdata)\n\t\t\tvec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );\n\t\t\tvec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );\n\n\t\t\t// linear interpolate to get the final normal color\n\t\t\tfloat flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;\n\t\t\tvec4 normalColor = mix( normalColor0, normalColor1, flowLerp );\n\n\t\t\t// calculate normal vector\n\t\t\tvec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n\n\t\t\t// calculate the fresnel term to blend reflection and refraction maps\n\t\t\tfloat theta = max( dot( toEye, normal ), 0.0 );\n\t\t\tfloat reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );\n\n\t\t\t// calculate final uv coords\n\t\t\tvec3 coord = vCoord.xyz / vCoord.w;\n\t\t\tvec2 uv = coord.xy + coord.z * normal.xz * 0.05;\n\n\t\t\tvec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );\n\t\t\tvec4 refractColor = texture2D( tRefractionMap, uv );\n\n\t\t\t// multiply water color with the mix of both textures\n\t\t\tgl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { Water };\n", "async function AmmoPhysics() {\n\n\tif ( 'Ammo' in window === false ) {\n\n\t\tconsole.error( 'AmmoPhysics: Couldn\\'t find Ammo.js' );\n\t\treturn;\n\n\t}\n\n\tconst AmmoLib = await Ammo(); // eslint-disable-line no-undef\n\n\tconst frameRate = 60;\n\n\tconst collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration();\n\tconst dispatcher = new AmmoLib.btCollisionDispatcher( collisionConfiguration );\n\tconst broadphase = new AmmoLib.btDbvtBroadphase();\n\tconst solver = new AmmoLib.btSequentialImpulseConstraintSolver();\n\tconst world = new AmmoLib.btDiscreteDynamicsWorld( dispatcher, broadphase, solver, collisionConfiguration );\n\tworld.setGravity( new AmmoLib.btVector3( 0, - 9.8, 0 ) );\n\n\tconst worldTransform = new AmmoLib.btTransform();\n\n\t//\n\n\tfunction getShape( geometry ) {\n\n\t\tconst parameters = geometry.parameters;\n\n\t\t// TODO change type to is*\n\n\t\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\t\tconst shape = new AmmoLib.btBoxShape( new AmmoLib.btVector3( sx, sy, sz ) );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\n\t\t\tconst shape = new AmmoLib.btSphereShape( radius );\n\t\t\tshape.setMargin( 0.05 );\n\n\t\t\treturn shape;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape !== null ) {\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\thandleInstancedMesh( mesh, mass, shape );\n\n\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\thandleMesh( mesh, mass, shape );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction handleMesh( mesh, mass, shape ) {\n\n\t\tconst position = mesh.position;\n\t\tconst quaternion = mesh.quaternion;\n\n\t\tconst transform = new AmmoLib.btTransform();\n\t\ttransform.setIdentity();\n\t\ttransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\ttransform.setRotation( new AmmoLib.btQuaternion( quaternion.x, quaternion.y, quaternion.z, quaternion.w ) );\n\n\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t// body.setFriction( 4 );\n\t\tworld.addRigidBody( body );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\n\t}\n\n\tfunction handleInstancedMesh( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst index = i * 16;\n\n\t\t\tconst transform = new AmmoLib.btTransform();\n\t\t\ttransform.setFromOpenGLMatrix( array.slice( index, index + 16 ) );\n\n\t\t\tconst motionState = new AmmoLib.btDefaultMotionState( transform );\n\n\t\t\tconst localInertia = new AmmoLib.btVector3( 0, 0, 0 );\n\t\t\tshape.calculateLocalInertia( mass, localInertia );\n\n\t\t\tconst rbInfo = new AmmoLib.btRigidBodyConstructionInfo( mass, motionState, shape, localInertia );\n\n\t\t\tconst body = new AmmoLib.btRigidBody( rbInfo );\n\t\t\tworld.addRigidBody( body );\n\n\t\t\tbodies.push( body );\n\n\t\t}\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\n\t\t\tmeshMap.set( mesh, bodies );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tconst bodies = meshMap.get( mesh );\n\t\t\tconst body = bodies[ index ];\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t} else if ( mesh.isMesh ) {\n\n\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\tbody.setAngularVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\t\t\tbody.setLinearVelocity( new AmmoLib.btVector3( 0, 0, 0 ) );\n\n\t\t\tworldTransform.setIdentity();\n\t\t\tworldTransform.setOrigin( new AmmoLib.btVector3( position.x, position.y, position.z ) );\n\t\t\tbody.setWorldTransform( worldTransform );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tlet lastTime = 0;\n\n\tfunction step() {\n\n\t\tconst time = performance.now();\n\n\t\tif ( lastTime > 0 ) {\n\n\t\t\tconst delta = ( time - lastTime ) / 1000;\n\n\t\t\tworld.stepSimulation( delta, 10 );\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tconst mesh = meshes[ i ];\n\n\t\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\n\t\t\t\t\t\tcompose( position, quaternion, array, j * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t\t} else if ( mesh.isMesh ) {\n\n\t\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\t\tconst motionState = body.getMotionState();\n\t\t\t\t\tmotionState.getWorldTransform( worldTransform );\n\n\t\t\t\t\tconst position = worldTransform.getOrigin();\n\t\t\t\t\tconst quaternion = worldTransform.getRotation();\n\t\t\t\t\tmesh.position.set( position.x(), position.y(), position.z() );\n\t\t\t\t\tmesh.quaternion.set( quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlastTime = time;\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition\n\t\t// addCompoundMesh\n\t};\n\n}\n\nfunction compose( position, quaternion, array, index ) {\n\n\tconst x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w();\n\tconst x2 = x + x, y2 = y + y, z2 = z + z;\n\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\tarray[ index + 0 ] = ( 1 - ( yy + zz ) );\n\tarray[ index + 1 ] = ( xy + wz );\n\tarray[ index + 2 ] = ( xz - wy );\n\tarray[ index + 3 ] = 0;\n\n\tarray[ index + 4 ] = ( xy - wz );\n\tarray[ index + 5 ] = ( 1 - ( xx + zz ) );\n\tarray[ index + 6 ] = ( yz + wx );\n\tarray[ index + 7 ] = 0;\n\n\tarray[ index + 8 ] = ( xz + wy );\n\tarray[ index + 9 ] = ( yz - wx );\n\tarray[ index + 10 ] = ( 1 - ( xx + yy ) );\n\tarray[ index + 11 ] = 0;\n\n\tarray[ index + 12 ] = position.x();\n\tarray[ index + 13 ] = position.y();\n\tarray[ index + 14 ] = position.z();\n\tarray[ index + 15 ] = 1;\n\n}\n\nexport { AmmoPhysics };\n", "import { Clock, Vector3, Quaternion, Matrix4 } from 'three';\n\nconst RAPIER_PATH = 'https://cdn.skypack.dev/@dimforge/rapier3d-compat@0.12.0';\n\nconst frameRate = 60;\n\nconst _scale = new Vector3( 1, 1, 1 );\nconst ZERO = new Vector3();\n\nlet RAPIER = null;\n\nfunction getShape( geometry ) {\n\n\tconst parameters = geometry.parameters;\n\n\t// TODO change type to is*\n\n\tif ( geometry.type === 'BoxGeometry' ) {\n\n\t\tconst sx = parameters.width !== undefined ? parameters.width / 2 : 0.5;\n\t\tconst sy = parameters.height !== undefined ? parameters.height / 2 : 0.5;\n\t\tconst sz = parameters.depth !== undefined ? parameters.depth / 2 : 0.5;\n\n\t\treturn RAPIER.ColliderDesc.cuboid( sx, sy, sz );\n\n\t} else if ( geometry.type === 'SphereGeometry' || geometry.type === 'IcosahedronGeometry' ) {\n\n\t\tconst radius = parameters.radius !== undefined ? parameters.radius : 1;\n\t\treturn RAPIER.ColliderDesc.ball( radius );\n\n\t}\n\n\treturn null;\n\n}\n\nasync function RapierPhysics() {\n\n\tif ( RAPIER === null ) {\n\n\t\tRAPIER = await import( RAPIER_PATH );\n\t\tawait RAPIER.init();\n\n\t}\n\n\t// Docs: https://rapier.rs/docs/api/javascript/JavaScript3D/\n\n\tconst gravity = new Vector3( 0.0, - 9.81, 0.0 );\n\tconst world = new RAPIER.World( gravity );\n\n\tconst meshes = [];\n\tconst meshMap = new WeakMap();\n\n\tconst _vector = new Vector3();\n\tconst _quaternion = new Quaternion();\n\tconst _matrix = new Matrix4();\n\n\tfunction addScene( scene ) {\n\n\t\tscene.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tconst physics = child.userData.physics;\n\n\t\t\t\tif ( physics ) {\n\n\t\t\t\t\taddMesh( child, physics.mass, physics.restitution );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tfunction addMesh( mesh, mass = 0, restitution = 0 ) {\n\n\t\tconst shape = getShape( mesh.geometry );\n\n\t\tif ( shape === null ) return;\n\n\t\tshape.setMass( mass );\n\t\tshape.setRestitution( restitution );\n\n\t\tconst body = mesh.isInstancedMesh\n\t\t\t\t\t\t\t? createInstancedBody( mesh, mass, shape )\n\t\t\t\t\t\t\t: createBody( mesh.position, mesh.quaternion, mass, shape );\n\n\t\tif ( mass > 0 ) {\n\n\t\t\tmeshes.push( mesh );\n\t\t\tmeshMap.set( mesh, body );\n\n\t\t}\n\n\t}\n\n\tfunction createInstancedBody( mesh, mass, shape ) {\n\n\t\tconst array = mesh.instanceMatrix.array;\n\n\t\tconst bodies = [];\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tconst position = _vector.fromArray( array, i * 16 + 12 );\n\t\t\tbodies.push( createBody( position, null, mass, shape ) );\n\n\t\t}\n\n\t\treturn bodies;\n\n\t}\n\n\tfunction createBody( position, quaternion, mass, shape ) {\n\n\t\tconst desc = mass > 0 ? RAPIER.RigidBodyDesc.dynamic() : RAPIER.RigidBodyDesc.fixed();\n\t\tdesc.setTranslation( ...position );\n\t\tif ( quaternion !== null ) desc.setRotation( quaternion );\n\n\t\tconst body = world.createRigidBody( desc );\n\t\tworld.createCollider( shape, body );\n\n\t\treturn body;\n\n\t}\n\n\tfunction setMeshPosition( mesh, position, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setAngvel( ZERO );\n\t\tbody.setLinvel( ZERO );\n\t\tbody.setTranslation( position );\n\n\t}\n\n\tfunction setMeshVelocity( mesh, velocity, index = 0 ) {\n\n\t\tlet body = meshMap.get( mesh );\n\n\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\tbody = body[ index ];\n\n\t\t}\n\n\t\tbody.setLinvel( velocity );\n\n\t}\n\n\t//\n\n\tconst clock = new Clock();\n\n\tfunction step() {\n\n\t\tworld.timestep = clock.getDelta();\n\t\tworld.step();\n\n\t\t//\n\n\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\tconst mesh = meshes[ i ];\n\n\t\t\tif ( mesh.isInstancedMesh ) {\n\n\t\t\t\tconst array = mesh.instanceMatrix.array;\n\t\t\t\tconst bodies = meshMap.get( mesh );\n\n\t\t\t\tfor ( let j = 0; j < bodies.length; j ++ ) {\n\n\t\t\t\t\tconst body = bodies[ j ];\n\n\t\t\t\t\tconst position = body.translation();\n\t\t\t\t\t_quaternion.copy( body.rotation() );\n\n\t\t\t\t\t_matrix.compose( position, _quaternion, _scale ).toArray( array, j * 16 );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.instanceMatrix.needsUpdate = true;\n\t\t\t\tmesh.computeBoundingSphere();\n\n\t\t\t} else {\n\n\t\t\t\tconst body = meshMap.get( mesh );\n\n\t\t\t\tmesh.position.copy( body.translation() );\n\t\t\t\tmesh.quaternion.copy( body.rotation() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// animate\n\n\tsetInterval( step, 1000 / frameRate );\n\n\treturn {\n\t\taddScene: addScene,\n\t\taddMesh: addMesh,\n\t\tsetMeshPosition: setMeshPosition,\n\t\tsetMeshVelocity: setMeshVelocity\n\t};\n\n}\n\nexport { RapierPhysics };\n", "/**\n * Afterimage shader\n * I created this effect inspired by a demo on codepen:\n * https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&\n */\n\nconst AfterimageShader = {\n\n\tname: 'AfterimageShader',\n\n\tuniforms: {\n\n\t\t'damp': { value: 0.96 },\n\t\t'tOld': { value: null },\n\t\t'tNew': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float damp;\n\n\t\tuniform sampler2D tOld;\n\t\tuniform sampler2D tNew;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec4 when_gt( vec4 x, float y ) {\n\n\t\t\treturn max( sign( x - y ), 0.0 );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 texelOld = texture2D( tOld, vUv );\n\t\t\tvec4 texelNew = texture2D( tNew, vUv );\n\n\t\t\ttexelOld *= damp * when_gt( texelOld, 0.1 );\n\n\t\t\tgl_FragColor = max(texelNew, texelOld);\n\n\t\t}`\n\n};\n\nexport { AfterimageShader };\n", "import {\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { AfterimageShader } from '../shaders/AfterimageShader.js';\n\nclass AfterimagePass extends Pass {\n\n\tconstructor( damp = 0.96 ) {\n\n\t\tsuper();\n\n\t\tthis.shader = AfterimageShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( this.shader.uniforms );\n\n\t\tthis.uniforms[ 'damp' ].value = damp;\n\n\t\tthis.textureComp = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.textureOld = new WebGLRenderTarget( window.innerWidth, window.innerHeight, {\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.compFsMaterial = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: this.shader.vertexShader,\n\t\t\tfragmentShader: this.shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.compFsQuad = new FullScreenQuad( this.compFsMaterial );\n\n\t\tthis.copyFsMaterial = new MeshBasicMaterial();\n\t\tthis.copyFsQuad = new FullScreenQuad( this.copyFsMaterial );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tthis.uniforms[ 'tOld' ].value = this.textureOld.texture;\n\t\tthis.uniforms[ 'tNew' ].value = readBuffer.texture;\n\n\t\trenderer.setRenderTarget( this.textureComp );\n\t\tthis.compFsQuad.render( renderer );\n\n\t\tthis.copyFsQuad.material.map = this.textureComp.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t\tthis.copyFsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Swap buffers.\n\t\tconst temp = this.textureOld;\n\t\tthis.textureOld = this.textureComp;\n\t\tthis.textureComp = temp;\n\t\t// Now textureOld contains the latest image, ready for the next frame.\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.textureComp.setSize( width, height );\n\t\tthis.textureOld.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.textureComp.dispose();\n\t\tthis.textureOld.dispose();\n\n\t\tthis.compFsMaterial.dispose();\n\t\tthis.copyFsMaterial.dispose();\n\n\t\tthis.compFsQuad.dispose();\n\t\tthis.copyFsQuad.dispose();\n\n\t}\n\n}\n\nexport { AfterimagePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Convolution shader\n * ported from o3d sample to WebGL / GLSL\n */\n\nconst ConvolutionShader = {\n\n\tname: 'ConvolutionShader',\n\n\tdefines: {\n\n\t\t'KERNEL_SIZE_FLOAT': '25.0',\n\t\t'KERNEL_SIZE_INT': '25'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'uImageIncrement': { value: new Vector2( 0.001953125, 0.0 ) },\n\t\t'cKernel': { value: [] }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float cKernel[ KERNEL_SIZE_INT ];\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 uImageIncrement;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 imageCoord = vUv;\n\t\t\tvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tfor( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\n\n\t\t\t\tsum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\n\t\t\t\timageCoord += uImageIncrement;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`,\n\n\tbuildKernel: function ( sigma ) {\n\n\t\t// We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.\n\n\t\tconst kMaxKernelSize = 25;\n\t\tlet kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;\n\n\t\tif ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;\n\n\t\tconst halfWidth = ( kernelSize - 1 ) * 0.5;\n\n\t\tconst values = new Array( kernelSize );\n\t\tlet sum = 0.0;\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) {\n\n\t\t\tvalues[ i ] = gauss( i - halfWidth, sigma );\n\t\t\tsum += values[ i ];\n\n\t\t}\n\n\t\t// normalize the kernel\n\n\t\tfor ( let i = 0; i < kernelSize; ++ i ) values[ i ] /= sum;\n\n\t\treturn values;\n\n\t}\n\n};\n\nfunction gauss( x, sigma ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );\n\n}\n\nexport { ConvolutionShader };\n", "import {\n\tAdditiveBlending,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { ConvolutionShader } from '../shaders/ConvolutionShader.js';\n\nclass BloomPass extends Pass {\n\n\tconstructor( strength = 1, kernelSize = 25, sigma = 4 ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.renderTargetX = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetX.texture.name = 'BloomPass.x';\n\t\tthis.renderTargetY = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\tthis.renderTargetY.texture.name = 'BloomPass.y';\n\n\t\t// combine material\n\n\t\tthis.combineUniforms = UniformsUtils.clone( CombineShader.uniforms );\n\n\t\tthis.combineUniforms[ 'strength' ].value = strength;\n\n\t\tthis.materialCombine = new ShaderMaterial( {\n\n\t\t\tname: CombineShader.name,\n\t\t\tuniforms: this.combineUniforms,\n\t\t\tvertexShader: CombineShader.vertexShader,\n\t\t\tfragmentShader: CombineShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\ttransparent: true\n\n\t\t} );\n\n\t\t// convolution material\n\n\t\tconst convolutionShader = ConvolutionShader;\n\n\t\tthis.convolutionUniforms = UniformsUtils.clone( convolutionShader.uniforms );\n\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\t\tthis.convolutionUniforms[ 'cKernel' ].value = ConvolutionShader.buildKernel( sigma );\n\n\t\tthis.materialConvolution = new ShaderMaterial( {\n\n\t\t\tname: convolutionShader.name,\n\t\t\tuniforms: this.convolutionUniforms,\n\t\t\tvertexShader: convolutionShader.vertexShader,\n\t\t\tfragmentShader: convolutionShader.fragmentShader,\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_SIZE_FLOAT': kernelSize.toFixed( 1 ),\n\t\t\t\t'KERNEL_SIZE_INT': kernelSize.toFixed( 0 )\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render quad with blured scene into texture (convolution pass 1)\n\n\t\tthis.fsQuad.material = this.materialConvolution;\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurX;\n\n\t\trenderer.setRenderTarget( this.renderTargetX );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\n\t\t// Render quad with blured scene into texture (convolution pass 2)\n\n\t\tthis.convolutionUniforms[ 'tDiffuse' ].value = this.renderTargetX.texture;\n\t\tthis.convolutionUniforms[ 'uImageIncrement' ].value = BloomPass.blurY;\n\n\t\trenderer.setRenderTarget( this.renderTargetY );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Render original scene with superimposed blur to texture\n\n\t\tthis.fsQuad.material = this.materialCombine;\n\n\t\tthis.combineUniforms[ 'tDiffuse' ].value = this.renderTargetY.texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetX.setSize( width, height );\n\t\tthis.renderTargetY.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetX.dispose();\n\t\tthis.renderTargetY.dispose();\n\n\t\tthis.materialCombine.dispose();\n\t\tthis.materialConvolution.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nconst CombineShader = {\n\n\tname: 'CombineShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'strength': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float strength;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = strength * texel;\n\n\t\t}`\n\n};\n\nBloomPass.blurX = new Vector2( 0.001953125, 0.0 );\nBloomPass.blurY = new Vector2( 0.0, 0.001953125 );\n\nexport { BloomPass };\n", "/**\n * Depth-of-field shader with bokeh\n * ported from GLSL shader by Martins Upitis\n * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html\n */\n\nconst BokehShader = {\n\n\tname: 'BokehShader',\n\n\tdefines: {\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t},\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'aspect': { value: 1.0 },\n\t\t'aperture': { value: 0.025 },\n\t\t'maxblur': { value: 0.01 },\n\t\t'nearClip': { value: 1.0 },\n\t\t'farClip': { value: 1000.0 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float maxblur; // max blur amount\n\t\tuniform float aperture; // aperture - bigger values for shallower depth of field\n\n\t\tuniform float nearClip;\n\t\tuniform float farClip;\n\n\t\tuniform float focus;\n\t\tuniform float aspect;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, nearClip, farClip );\n\t\t\t#endif\n\t\t}\n\n\n\t\tvoid main() {\n\n\t\t\tvec2 aspectcorrect = vec2( 1.0, aspect );\n\n\t\t\tfloat viewZ = getViewZ( getDepth( vUv ) );\n\n\t\t\tfloat factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\n\n\t\t\tvec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\n\n\t\t\tvec2 dofblur9 = dofblur * 0.9;\n\t\t\tvec2 dofblur7 = dofblur * 0.7;\n\t\t\tvec2 dofblur4 = dofblur * 0.4;\n\n\t\t\tvec4 col = vec4( 0.0 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\n\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n\t\t\tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\n\n\t\t\tgl_FragColor = col / 41.0;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { BokehShader };\n", "import {\n\tColor,\n\tHalfFloatType,\n\tMeshDepthMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { BokehShader } from '../shaders/BokehShader.js';\n\n/**\n * Depth-of-field post-process with bokeh shader\n */\n\nclass BokehPass extends Pass {\n\n\tconstructor( scene, camera, params ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tconst focus = ( params.focus !== undefined ) ? params.focus : 1.0;\n\t\tconst aperture = ( params.aperture !== undefined ) ? params.aperture : 0.025;\n\t\tconst maxblur = ( params.maxblur !== undefined ) ? params.maxblur : 1.0;\n\n\t\t// render targets\n\n\t\tthis.renderTargetDepth = new WebGLRenderTarget( 1, 1, { // will be resized later\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\n\t\tthis.renderTargetDepth.texture.name = 'BokehPass.depth';\n\n\t\t// depth material\n\n\t\tthis.materialDepth = new MeshDepthMaterial();\n\t\tthis.materialDepth.depthPacking = RGBADepthPacking;\n\t\tthis.materialDepth.blending = NoBlending;\n\n\t\t// bokeh material\n\n\t\tconst bokehShader = BokehShader;\n\t\tconst bokehUniforms = UniformsUtils.clone( bokehShader.uniforms );\n\n\t\tbokehUniforms[ 'tDepth' ].value = this.renderTargetDepth.texture;\n\n\t\tbokehUniforms[ 'focus' ].value = focus;\n\t\tbokehUniforms[ 'aspect' ].value = camera.aspect;\n\t\tbokehUniforms[ 'aperture' ].value = aperture;\n\t\tbokehUniforms[ 'maxblur' ].value = maxblur;\n\t\tbokehUniforms[ 'nearClip' ].value = camera.near;\n\t\tbokehUniforms[ 'farClip' ].value = camera.far;\n\n\t\tthis.materialBokeh = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, bokehShader.defines ),\n\t\t\tuniforms: bokehUniforms,\n\t\t\tvertexShader: bokehShader.vertexShader,\n\t\t\tfragmentShader: bokehShader.fragmentShader\n\t\t} );\n\n\t\tthis.uniforms = bokehUniforms;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.materialBokeh );\n\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Render depth into texture\n\n\t\tthis.scene.overrideMaterial = this.materialDepth;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( 0xffffff );\n\t\trenderer.setClearAlpha( 1.0 );\n\t\trenderer.setRenderTarget( this.renderTargetDepth );\n\t\trenderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// Render bokeh composite\n\n\t\tthis.uniforms[ 'tColor' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'nearClip' ].value = this.camera.near;\n\t\tthis.uniforms[ 'farClip' ].value = this.camera.far;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = null;\n\t\trenderer.setClearColor( this._oldClearColor );\n\t\trenderer.setClearAlpha( oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.materialBokeh.uniforms[ 'aspect' ].value = width / height;\n\n\t\tthis.renderTargetDepth.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetDepth.dispose();\n\n\t\tthis.materialDepth.dispose();\n\t\tthis.materialBokeh.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { BokehPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass ClearPass extends Pass {\n\n\tconstructor( clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tlet oldClearAlpha;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\trenderer.clear();\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ClearPass };\n", "import {\n\tBackSide,\n\tBoxGeometry,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass CubeTexturePass extends Pass {\n\n\tconstructor( camera, tCube, opacity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.camera = camera;\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.cubeShader = ShaderLib[ 'cube' ];\n\t\tthis.cubeMesh = new Mesh(\n\t\t\tnew BoxGeometry( 10, 10, 10 ),\n\t\t\tnew ShaderMaterial( {\n\t\t\t\tuniforms: UniformsUtils.clone( this.cubeShader.uniforms ),\n\t\t\t\tvertexShader: this.cubeShader.vertexShader,\n\t\t\t\tfragmentShader: this.cubeShader.fragmentShader,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\tside: BackSide\n\t\t\t} )\n\t\t);\n\n\t\tObject.defineProperty( this.cubeMesh.material, 'envMap', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.tCube.value;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.tCube = tCube;\n\t\tthis.opacity = opacity;\n\n\t\tthis.cubeScene = new Scene();\n\t\tthis.cubeCamera = new PerspectiveCamera();\n\t\tthis.cubeScene.add( this.cubeMesh );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\t\tthis.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld );\n\n\t\tthis.cubeMesh.material.uniforms.tCube.value = this.tCube;\n\t\tthis.cubeMesh.material.uniforms.tFlip.value = ( this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\tthis.cubeMesh.material.uniforms.opacity.value = this.opacity;\n\t\tthis.cubeMesh.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.cubeScene, this.cubeCamera );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cubeMesh.geometry.dispose();\n\t\tthis.cubeMesh.material.dispose();\n\n\t}\n\n}\n\nexport { CubeTexturePass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Dot screen shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst DotScreenShader = {\n\n\tname: 'DotScreenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tSize': { value: new Vector2( 256, 256 ) },\n\t\t'center': { value: new Vector2( 0.5, 0.5 ) },\n\t\t'angle': { value: 1.57 },\n\t\t'scale': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec2 center;\n\t\tuniform float angle;\n\t\tuniform float scale;\n\t\tuniform vec2 tSize;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tfloat pattern() {\n\n\t\t\tfloat s = sin( angle ), c = cos( angle );\n\n\t\t\tvec2 tex = vUv * tSize - center;\n\t\t\tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\n\n\t\t\treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat average = ( color.r + color.g + color.b ) / 3.0;\n\n\t\t\tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\n\n\t\t}`\n\n};\n\nexport { DotScreenShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DotScreenShader } from '../shaders/DotScreenShader.js';\n\nclass DotScreenPass extends Pass {\n\n\tconstructor( center, angle, scale ) {\n\n\t\tsuper();\n\n\t\tconst shader = DotScreenShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tif ( center !== undefined ) this.uniforms[ 'center' ].value.copy( center );\n\t\tif ( angle !== undefined ) this.uniforms[ 'angle' ].value = angle;\n\t\tif ( scale !== undefined ) this.uniforms[ 'scale' ].value = scale;\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'tSize' ].value.set( readBuffer.width, readBuffer.height );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { DotScreenPass };\n", "/**\n * Full-screen textured quad shader\n */\n\nconst CopyShader = {\n\n\tname: 'CopyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass ShaderPass extends Pass {\n\n\tconstructor( shader, textureID ) {\n\n\t\tsuper();\n\n\t\tthis.textureID = ( textureID !== undefined ) ? textureID : 'tDiffuse';\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { ShaderPass };\n", "import { Pass } from './Pass.js';\n\nclass MaskPass extends Pass {\n\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.inverse = false;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer and make them writable for subsequent rendering/clearing\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\tstate.buffers.color.setMask( true );\n\t\tstate.buffers.depth.setMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\nclass ClearMaskPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t}\n\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n", "import {\n\tClock,\n\tHalfFloatType,\n\tNoBlending,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { MaskPass } from './MaskPass.js';\nimport { ClearMaskPass } from './MaskPass.js';\n\nclass EffectComposer {\n\n\tconstructor( renderer, renderTarget ) {\n\n\t\tthis.renderer = renderer;\n\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\tthis.renderToScreen = true;\n\n\t\tthis.passes = [];\n\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\t\tthis.copyPass.material.blending = NoBlending;\n\n\t\tthis.clock = new Clock();\n\n\t}\n\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\n\t\tthis.copyPass.dispose();\n\n\t}\n\n}\n\nexport { EffectComposer };\n", "const FilmShader = {\n\n\tname: 'FilmShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'time': { value: 0.0 },\n\t\t'intensity': { value: 0.5 },\n\t\t'grayscale': { value: false }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform float intensity;\n\t\tuniform bool grayscale;\n\t\tuniform float time;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat noise = rand( fract( vUv + time ) );\n\n\t\t\tvec3 color = base.rgb + base.rgb * clamp( 0.1 + noise, 0.0, 1.0 );\n\n\t\t\tcolor = mix( base.rgb, color, intensity );\n\n\t\t\tif ( grayscale ) {\n\n\t\t\t\tcolor = vec3( luminance( color ) ); // assuming linear-srgb\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( color, base.a );\n\n\t\t}`,\n\n};\n\nexport { FilmShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { FilmShader } from '../shaders/FilmShader.js';\n\nclass FilmPass extends Pass {\n\n\tconstructor( intensity = 0.5, grayscale = false ) {\n\n\t\tsuper();\n\n\t\tconst shader = FilmShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t\tthis.uniforms.intensity.value = intensity; // (0 = no effect, 1 = full effect)\n\t\tthis.uniforms.grayscale.value = grayscale;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime /*, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'time' ].value += deltaTime;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { FilmPass };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst DigitalGlitch = {\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }, //diffuse texture\n\t\t'tDisp': { value: null }, //displacement texture for digital glitch squares\n\t\t'byp': { value: 0 }, //apply the glitch ?\n\t\t'amount': { value: 0.08 },\n\t\t'angle': { value: 0.02 },\n\t\t'seed': { value: 0.02 },\n\t\t'seed_x': { value: 0.02 }, //-1,1\n\t\t'seed_y': { value: 0.02 }, //-1,1\n\t\t'distortion_x': { value: 0.5 },\n\t\t'distortion_y': { value: 0.6 },\n\t\t'col_s': { value: 0.05 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform int byp; //should we apply the glitch ?\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDisp;\n\n\t\tuniform float amount;\n\t\tuniform float angle;\n\t\tuniform float seed;\n\t\tuniform float seed_x;\n\t\tuniform float seed_y;\n\t\tuniform float distortion_x;\n\t\tuniform float distortion_y;\n\t\tuniform float col_s;\n\n\t\tvarying vec2 vUv;\n\n\n\t\tfloat rand(vec2 co){\n\t\t\treturn fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tif(byp<1) {\n\t\t\t\tvec2 p = vUv;\n\t\t\t\tfloat xs = floor(gl_FragCoord.x / 0.5);\n\t\t\t\tfloat ys = floor(gl_FragCoord.y / 0.5);\n\t\t\t\t//based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch\n\t\t\t\tfloat disp = texture2D(tDisp, p*seed*seed).r;\n\t\t\t\tif(p.ydistortion_x-col_s*seed) {\n\t\t\t\t\tif(seed_x>0.){\n\t\t\t\t\t\tp.y = 1. - (p.y + distortion_y);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.y = distortion_y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(p.xdistortion_y-col_s*seed) {\n\t\t\t\t\tif(seed_y>0.){\n\t\t\t\t\t\tp.x=distortion_x;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.x = 1. - (p.x + distortion_x);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tp.x+=disp*seed_x*(seed/5.);\n\t\t\t\tp.y+=disp*seed_y*(seed/5.);\n\t\t\t\t//base from RGB shift shader\n\t\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\t\tvec4 cr = texture2D(tDiffuse, p + offset);\n\t\t\t\tvec4 cga = texture2D(tDiffuse, p);\n\t\t\t\tvec4 cb = texture2D(tDiffuse, p - offset);\n\t\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\t\t\t\t//add noise\n\t\t\t\tvec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);\n\t\t\t\tgl_FragColor = gl_FragColor+ snow;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgl_FragColor=texture2D (tDiffuse, vUv);\n\t\t\t}\n\t\t}`\n\n};\n\nexport { DigitalGlitch };\n", "import {\n\tDataTexture,\n\tFloatType,\n\tMathUtils,\n\tRedFormat,\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { DigitalGlitch } from '../shaders/DigitalGlitch.js';\n\nclass GlitchPass extends Pass {\n\n\tconstructor( dt_size = 64 ) {\n\n\t\tsuper();\n\n\t\tconst shader = DigitalGlitch;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.heightMap = this.generateHeightmap( dt_size );\n\n\t\tthis.uniforms[ 'tDisp' ].value = this.heightMap;\n\n\t\tthis.material = new ShaderMaterial( {\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\tthis.goWild = false;\n\t\tthis.curF = 0;\n\t\tthis.generateTrigger();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'seed' ].value = Math.random();//default seeding\n\t\tthis.uniforms[ 'byp' ].value = 0;\n\n\t\tif ( this.curF % this.randX == 0 || this.goWild == true ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 30;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 1, 1 );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.curF = 0;\n\t\t\tthis.generateTrigger();\n\n\t\t} else if ( this.curF % this.randX < this.randX / 5 ) {\n\n\t\t\tthis.uniforms[ 'amount' ].value = Math.random() / 90;\n\t\t\tthis.uniforms[ 'angle' ].value = MathUtils.randFloat( - Math.PI, Math.PI );\n\t\t\tthis.uniforms[ 'distortion_x' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'distortion_y' ].value = MathUtils.randFloat( 0, 1 );\n\t\t\tthis.uniforms[ 'seed_x' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\t\t\tthis.uniforms[ 'seed_y' ].value = MathUtils.randFloat( - 0.3, 0.3 );\n\n\t\t} else if ( this.goWild == false ) {\n\n\t\t\tthis.uniforms[ 'byp' ].value = 1;\n\n\t\t}\n\n\t\tthis.curF ++;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgenerateTrigger() {\n\n\t\tthis.randX = MathUtils.randInt( 120, 240 );\n\n\t}\n\n\tgenerateHeightmap( dt_size ) {\n\n\t\tconst data_arr = new Float32Array( dt_size * dt_size );\n\t\tconst length = dt_size * dt_size;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst val = MathUtils.randFloat( 0, 1 );\n\t\t\tdata_arr[ i ] = val;\n\n\t\t}\n\n\t\tconst texture = new DataTexture( data_arr, dt_size, dt_size, RedFormat, FloatType );\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.heightMap.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { GlitchPass };\n", "import {\n\tDataTexture,\n\tMatrix4,\n\tRepeatWrapping,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * - implemented algorithm - GTAO\n * - https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf\n * - https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf\n *\n * - other AO algorithms that are not implemented here:\n * - Screen Space Ambient Occlusion (SSAO), see also SSAOShader.js\n *\t - http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n *\t - https://learnopengl.com/Advanced-Lighting/SSAO\n *\t - https://creativecoding.soe.ucsc.edu/courses/cmpm164/_schedule/AmbientOcclusion.pdf\n *\t - https://drive.google.com/file/d/1SyagcEVplIm2KkRD3WQYSO9O0Iyi1hfy/edit\n * - Scalable Ambient Occlusion (SAO), see also SAOShader.js\n *\t - https://casual-effects.com/research/McGuire2012SAO/index.html\n *\t - https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf\n * - N8HO\n *\t - https://github.com/N8python/n8ao\n * - Horizon Based Ambient Occlusion (HBAO)\n *\t - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.577.2286&rep=rep1&type=pdf\n *\t - https://www.derschmale.com/2013/12/20/an-alternative-implementation-for-hbao-2/\n *\n * - further reading\n * \t - https://ceur-ws.org/Vol-3027/paper5.pdf\n * - https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf\n * - https://web.ics.purdue.edu/~tmcgraw/papers/mcgraw-ao-2008.pdf\n * - https://www.activision.com/cdn/research/Practical_Real_Time_Strategies_for_Accurate_Indirect_Occlusion_NEW%20VERSION_COLOR.pdf\n * - https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.2463&rep=rep1&type=pdf\n * - https://www.intel.com/content/www/us/en/developer/articles/technical/adaptive-screen-space-ambient-occlusion.html\n */\n\nconst GTAOShader = {\n\n\tname: 'GTAOShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1,\n\t\tSAMPLES: 16,\n\t\tNORMAL_VECTOR_TYPE: 1,\n\t\tDEPTH_SWIZZLING: 'x',\n\t\tSCREEN_SPACE_RADIUS: 0,\n\t\tSCREEN_SPACE_RADIUS_SCALE: 100.0,\n\t\tSCENE_CLIP_BOX: 0,\n\t},\n\n\tuniforms: {\n\t\ttNormal: { value: null },\n\t\ttDepth: { value: null },\n\t\ttNoise: { value: null },\n\t\tresolution: { value: new Vector2() },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t\tcameraProjectionMatrix: { value: new Matrix4() },\n\t\tcameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tcameraWorldMatrix: { value: new Matrix4() },\n\t\tradius: { value: 0.25 },\n\t\tdistanceExponent: { value: 1. },\n\t\tthickness: { value: 1. },\n\t\tdistanceFallOff: { value: 1. },\n\t\tscale: { value: 1. },\n\t\tsceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) },\n\t\tsceneBoxMax: { value: new Vector3( 1, 1, 1 ) },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\t\t\n\t\tuniform mat4 cameraWorldMatrix;\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float thickness;\n\t\tuniform float distanceFallOff;\n\t\tuniform float scale;\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tuniform vec3 sceneBoxMin;\n\t\t\tuniform vec3 sceneBoxMax;\n\t\t#endif\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) { \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) { \n\t\t\treturn texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(uv);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getSceneUvAndDepth(vec3 sampleViewPos) {\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleSceneDepth = getDepth(sampleUv);\n\t\t\treturn vec3(sampleUv, sampleSceneDepth);\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth >= 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\n\t\t\tfloat radiusToUse = radius;\n\t\t\tfloat distanceFalloffToUse = thickness;\n\t\t\t#if SCREEN_SPACE_RADIUS == 1\n\t\t\t\tfloat radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;\n\t\t\t\tradiusToUse *= radiusScale;\n\t\t\t\tdistanceFalloffToUse *= radiusScale;\n\t\t\t#endif\n\n\t\t\t#if SCENE_CLIP_BOX == 1\n\t\t\t\tvec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;\n\t\t\t\tfloat boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));\n\t\t\t\tif (boxDistance > radiusToUse) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\t\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n\t\t\tvec3 tangent = normalize(vec3(randomVec.xy, 0.));\n\t\t\tvec3 bitangent = vec3(-tangent.y, tangent.x, 0.);\n\t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));\n\n\t\t\tconst int DIRECTIONS = SAMPLES < 30 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t\tfloat ao = 0.0;\n\t\t\tfor (int i = 0; i < DIRECTIONS; ++i) {\n\t\t\t\t\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w); \n\t\t\t\tsampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);\n\n\t\t\t\tvec3 viewDir = normalize(-viewPos.xyz);\n\t\t\t\tvec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));\n\t\t\t\tvec3 sliceTangent = cross(sliceBitangent, viewDir);\n\t\t\t\tvec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));\n\t\t\t\t\n\t\t\t\tvec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);\n\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));\n\t\t\t\t\n\t\t\t\tfor (int j = 0; j < STEPS; ++j) {\n\t\t\t\t\tvec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);\t\n\n\t\t\t\t\tvec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);\n\t\t\t\t\tvec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\t\t\n\n\t\t\t\t\tsampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);\n\t\t\t\t\tsampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tviewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);\n\t\t\t\tfloat nx = dot(normalInSlice, sliceTangent);\n\t\t\t\tfloat ny = dot(normalInSlice, viewDir);\n\t\t\t\tfloat nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);\n\t\t\t\tfloat nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);\n\t\t\t\tfloat occlusion = nx * nxb + ny * nyb;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\n\t\t\tao = clamp(ao / float(DIRECTIONS), 0., 1.);\t\t\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));\n\t\t#endif\n\t\t\tao = pow(ao, scale);\n\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nconst GTAODepthShader = {\n\n\tname: 'GTAODepthShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1\n\t},\n\n\tuniforms: {\n\t\ttDepth: { value: null },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform sampler2D tDepth;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst GTAOBlendShader = {\n\n\tname: 'GTAOBlendShader',\n\n\tuniforms: {\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4(mix(vec3(1.), texel.rgb, intensity), texel.a);\n\t\t}`\n\n};\n\n\nfunction generateMagicSquareNoise( size = 5 ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst magicSquare = generateMagicSquare( noiseSize );\n\tconst noiseSquareSize = magicSquare.length;\n\tconst data = new Uint8Array( noiseSquareSize * 4 );\n\n\tfor ( let inx = 0; inx < noiseSquareSize; ++ inx ) {\n\n\t\tconst iAng = magicSquare[ inx ];\n\t\tconst angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;\n\t\tconst randomVec = new Vector3(\n\t\t\tMath.cos( angle ),\n\t\t\tMath.sin( angle ),\n\t\t\t0\n\t\t).normalize();\n\t\tdata[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 2 ] = 127;\n\t\tdata[ inx * 4 + 3 ] = 255;\n\n\t}\n\n\tconst noiseTexture = new DataTexture( data, noiseSize, noiseSize );\n\tnoiseTexture.wrapS = RepeatWrapping;\n\tnoiseTexture.wrapT = RepeatWrapping;\n\tnoiseTexture.needsUpdate = true;\n\n\treturn noiseTexture;\n\n}\n\nfunction generateMagicSquare( size ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst noiseSquareSize = noiseSize * noiseSize;\n\tconst magicSquare = Array( noiseSquareSize ).fill( 0 );\n\tlet i = Math.floor( noiseSize / 2 );\n\tlet j = noiseSize - 1;\n\n\tfor ( let num = 1; num <= noiseSquareSize; ) {\n\n\t\tif ( i === - 1 && j === noiseSize ) {\n\n\t\t\tj = noiseSize - 2;\n\t\t\ti = 0;\n\n\t\t} else {\n\n\t\t\tif ( j === noiseSize ) {\n\n\t\t\t\tj = 0;\n\n\t\t\t}\n\n\t\t\tif ( i < 0 ) {\n\n\t\t\t\ti = noiseSize - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( magicSquare[ i * noiseSize + j ] !== 0 ) {\n\n\t\t\tj -= 2;\n\t\t\ti ++;\n\t\t\tcontinue;\n\n\t\t} else {\n\n\t\t\tmagicSquare[ i * noiseSize + j ] = num ++;\n\n\t\t}\n\n\t\tj ++;\n\t\ti --;\n\n\t}\n\n\treturn magicSquare;\n\n}\n\n\nexport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader };\n", "import {\n\tMatrix4,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * References:\n * https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf\n * https://arxiv.org/pdf/2206.01856.pdf\n */\n\nconst PoissonDenoiseShader = {\n\n\tname: 'PoissonDenoiseShader',\n\n\tdefines: {\n\t\t'SAMPLES': 16,\n\t\t'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),\n\t\t'NORMAL_VECTOR_TYPE': 1,\n\t\t'DEPTH_VALUE_SOURCE': 0,\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrixInverse': { value: new Matrix4() },\n\t\t'lumaPhi': { value: 5. },\n\t\t'depthPhi': { value: 5. },\n\t\t'normalPhi': { value: 5. },\n\t\t'radius': { value: 4. },\n\t\t'index': { value: 0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform float lumaPhi;\n\t\tuniform float depthPhi;\n\t\tuniform float normalPhi;\n\t\tuniform float radius;\n\t\tuniform int index;\n\t\t\n\t\t#include \n\t\t#include \n\n\t\t#ifndef SAMPLE_LUMINANCE\n\t\t#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)\n\t\t#endif\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(denoised, 1.)\n\t\t#endif\n\n\t\tfloat getLuminance(const in vec3 a) {\n\t\t\treturn SAMPLE_LUMINANCE;\n\t\t}\n\n\t\tconst vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\t\t\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\n\t\tvoid denoiseSample(in vec3 center, in vec3 viewNormal, in vec3 viewPos, in vec2 sampleUv, inout vec3 denoised, inout float totalWeight) {\n\t\t\tvec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);\n\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\tvec3 sampleNormal = getViewNormal(sampleUv);\n\t\t\tvec3 neighborColor = sampleTexel.rgb;\n\t\t\tvec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);\n\t\t\t\n\t\t\tfloat normalDiff = dot(viewNormal, sampleNormal);\n\t\t\tfloat normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\t\t\tfloat lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));\n\t\t\tfloat lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\t\t\tfloat depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));\n\t\t\tfloat depthSimilarity = max(1. - depthDiff / depthPhi, 0.);\n\t\t\tfloat w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\t\t\n\t\t\tdenoised += w * neighborColor;\n\t\t\ttotalWeight += w;\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\t\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\t\n\t\t\tif (depth == 1. || dot(viewNormal, viewNormal) == 0.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec4 texel = textureLod(tDiffuse, vUv, 0.0);\n\t\t\tvec3 center = texel.rgb;\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n \t\tvec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));\n \t\tmat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);\n\t\t\n\t\t\tfloat totalWeight = 1.0;\n\t\t\tvec3 denoised = texel.rgb;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\n\t\t\t\tvec3 sampleDir = poissonDisk[i];\n\t\t\t\tvec2 offset = rotationMatrix * (sampleDir.xy * (1. + sampleDir.z * (radius - 1.)) / resolution);\n\t\t\t\tvec2 sampleUv = vUv + offset;\n\t\t\t\tdenoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);\n\t\t\t}\n\t\t\n\t\t\tif (totalWeight > 0.) { \n\t\t\t\tdenoised /= totalWeight;\n\t\t\t}\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nfunction generatePdSamplePointInitializer( samples, rings, radiusExponent ) {\n\n\tconst poissonDisk = generateDenoiseSamples(\n\t\tsamples,\n\t\trings,\n\t\tradiusExponent,\n\t);\n\n\tlet glslCode = 'vec3[SAMPLES](';\n\n\tfor ( let i = 0; i < samples; i ++ ) {\n\n\t\tconst sample = poissonDisk[ i ];\n\t\tglslCode += `vec3(${sample.x}, ${sample.y}, ${sample.z})${( i < samples - 1 ) ? ',' : ')'}`;\n\n\t}\n\n\treturn glslCode;\n\n}\n\nfunction generateDenoiseSamples( numSamples, numRings, radiusExponent ) {\n\n\tconst samples = [];\n\n\tfor ( let i = 0; i < numSamples; i ++ ) {\n\n\t\tconst angle = 2 * Math.PI * numRings * i / numSamples;\n\t\tconst radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );\n\t\tsamples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );\n\n\t}\n\n\treturn samples;\n\n}\n\nexport { generatePdSamplePointInitializer, PoissonDenoiseShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDepthStencilFormat,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRepeatWrapping,\n\tRGBAFormat,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedByteType,\n\tUnsignedInt248Type,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader } from '../shaders/GTAOShader.js';\nimport { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shaders/PoissonDenoiseShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\n\nclass GTAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, parameters, aoParameters, pdParameters ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\t\tthis.clear = true;\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\t\tthis.output = 0;\n\t\tthis._renderGBuffer = true;\n\t\tthis._visibilityCache = new Map();\n\t\tthis.blendIntensity = 1.;\n\n\t\tthis.pdRings = 2.;\n\t\tthis.pdRadiusExponent = 2.;\n\t\tthis.pdSamples = 16;\n\n\t\tthis.gtaoNoiseTexture = generateMagicSquareNoise();\n\t\tthis.pdNoiseTexture = this.generateNoise();\n\n\t\tthis.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\t\tthis.pdRenderTarget = this.gtaoRenderTarget.clone();\n\n\t\tthis.gtaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAOShader.uniforms ),\n\t\t\tvertexShader: GTAOShader.vertexShader,\n\t\t\tfragmentShader: GTAOShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.gtaoMaterial.defines.PERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.pdMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, PoissonDenoiseShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),\n\t\t\tvertexShader: PoissonDenoiseShader.vertexShader,\n\t\t\tfragmentShader: PoissonDenoiseShader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\tthis.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;\n\t\tthis.pdMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.pdMaterial.uniforms.lumaPhi.value = 10;\n\t\tthis.pdMaterial.uniforms.depthPhi.value = 2;\n\t\tthis.pdMaterial.uniforms.normalPhi.value = 3;\n\t\tthis.pdMaterial.uniforms.radius.value = 8;\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAODepthShader.uniforms ),\n\t\t\tvertexShader: GTAODepthShader.vertexShader,\n\t\t\tfragmentShader: GTAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),\n\t\t\tvertexShader: GTAOBlendShader.vertexShader,\n\t\t\tfragmentShader: GTAOBlendShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblending: CustomBlending,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t\tthis.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );\n\n\t\tif ( aoParameters !== undefined ) {\n\n\t\t\tthis.updateGtaoMaterial( aoParameters );\n\n\t\t}\n\n\t\tif ( pdParameters !== undefined ) {\n\n\t\t\tthis.updatePdMaterial( pdParameters );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.gtaoNoiseTexture.dispose();\n\t\tthis.pdNoiseTexture.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.gtaoRenderTarget.dispose();\n\t\tthis.pdRenderTarget.dispose();\n\t\tthis.normalMaterial.dispose();\n\t\tthis.pdMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tget gtaoMap() {\n\n\t\treturn this.pdRenderTarget.texture;\n\n\t}\n\n\tsetGBuffer( depthTexture, normalTexture ) {\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tthis.depthTexture = depthTexture;\n\t\t\tthis.normalTexture = normalTexture;\n\t\t\tthis._renderGBuffer = false;\n\n\t\t} else {\n\n\t\t\tthis.depthTexture = new DepthTexture();\n\t\t\tthis.depthTexture.format = DepthStencilFormat;\n\t\t\tthis.depthTexture.type = UnsignedInt248Type;\n\t\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\ttype: HalfFloatType,\n\t\t\t\tdepthTexture: this.depthTexture\n\t\t\t} );\n\t\t\tthis.normalTexture = this.normalRenderTarget.texture;\n\t\t\tthis._renderGBuffer = true;\n\n\t\t}\n\n\t\tconst normalVectorType = ( this.normalTexture ) ? 1 : 0;\n\t\tconst depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';\n\n\t\tthis.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.pdMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.pdMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;\n\n\t}\n\n\tsetSceneClipBox( box ) {\n\n\t\tif ( box ) {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );\n\n\t\t} else {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;\n\n\t\t}\n\n\t}\n\n\tupdateGtaoMaterial( parameters ) {\n\n\t\tif ( parameters.radius !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.distanceExponent !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;\n\n\t\t}\n\n\t\tif ( parameters.thickness !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.thickness.value = parameters.thickness;\n\n\t\t}\n\n\t\tif ( parameters.distanceFallOff !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.scale !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.scale.value = parameters.scale;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {\n\n\t\t\tthis.gtaoMaterial.defines.SAMPLES = parameters.samples;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {\n\n\t\t\tthis.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tupdatePdMaterial( parameters ) {\n\n\t\tlet updateShader = false;\n\n\t\tif ( parameters.lumaPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;\n\n\t\t}\n\n\t\tif ( parameters.depthPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;\n\n\t\t}\n\n\t\tif ( parameters.normalPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;\n\n\t\t}\n\n\t\tif ( parameters.radius !== undefined && parameters.radius !== this.radius ) {\n\n\t\t\tthis.pdMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {\n\n\t\t\tthis.pdRadiusExponent = parameters.radiusExponent;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {\n\n\t\t\tthis.pdRings = parameters.rings;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {\n\n\t\t\tthis.pdSamples = parameters.samples;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( updateShader ) {\n\n\t\t\tthis.pdMaterial.defines.SAMPLES = this.pdSamples;\n\t\t\tthis.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );\n\t\t\tthis.pdMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to AO)\n\n\t\tif ( this._renderGBuffer ) {\n\n\t\t\tthis.overrideVisibility();\n\t\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\t\tthis.restoreVisibility();\n\n\t\t}\n\n\t\t// render AO\n\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );\n\t\tthis.renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// render poisson denoise\n\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase GTAOPass.OUTPUT.Off:\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Diffuse:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.AO:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Denoise:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tthis.blendMaterial.uniforms.intensity.value = this.blendIntensity;\n\t\t\t\tthis.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.GTAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.gtaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.pdRenderTarget.setSize( width, height );\n\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.pdMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n\tgenerateNoise( size = 64 ) {\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst arraySize = size * size * 4;\n\t\tconst data = new Uint8Array( arraySize );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < size; j ++ ) {\n\n\t\t\t\tconst x = i;\n\t\t\t\tconst y = j;\n\n\t\t\t\tdata[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );\n\t\tnoiseTexture.wrapS = RepeatWrapping;\n\t\tnoiseTexture.wrapT = RepeatWrapping;\n\t\tnoiseTexture.needsUpdate = true;\n\n\t\treturn noiseTexture;\n\n\t}\n\n}\n\nGTAOPass.OUTPUT = {\n\t'Off': - 1,\n\t'Default': 0,\n\t'Diffuse': 1,\n\t'Depth': 2,\n\t'Normal': 3,\n\t'AO': 4,\n\t'Denoise': 5,\n};\n\nexport { GTAOPass };\n", "/**\n * RGB Halftone shader for three.js.\n *\tNOTE:\n * \t\tShape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)\n *\t\tBlending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)\n */\n\nconst HalftoneShader = {\n\n\tname: 'HalftoneShader',\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'shape': { value: 1 },\n\t\t'radius': { value: 4 },\n\t\t'rotateR': { value: Math.PI / 12 * 1 },\n\t\t'rotateG': { value: Math.PI / 12 * 2 },\n\t\t'rotateB': { value: Math.PI / 12 * 3 },\n\t\t'scatter': { value: 0 },\n\t\t'width': { value: 1 },\n\t\t'height': { value: 1 },\n\t\t'blending': { value: 1 },\n\t\t'blendingMode': { value: 1 },\n\t\t'greyscale': { value: false },\n\t\t'disable': { value: false }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUV;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SQRT2_MINUS_ONE 0.41421356\n\t\t#define SQRT2_HALF_MINUS_ONE 0.20710678\n\t\t#define PI2 6.28318531\n\t\t#define SHAPE_DOT 1\n\t\t#define SHAPE_ELLIPSE 2\n\t\t#define SHAPE_LINE 3\n\t\t#define SHAPE_SQUARE 4\n\t\t#define BLENDING_LINEAR 1\n\t\t#define BLENDING_MULTIPLY 2\n\t\t#define BLENDING_ADD 3\n\t\t#define BLENDING_LIGHTER 4\n\t\t#define BLENDING_DARKER 5\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float radius;\n\t\tuniform float rotateR;\n\t\tuniform float rotateG;\n\t\tuniform float rotateB;\n\t\tuniform float scatter;\n\t\tuniform float width;\n\t\tuniform float height;\n\t\tuniform int shape;\n\t\tuniform bool disable;\n\t\tuniform float blending;\n\t\tuniform int blendingMode;\n\t\tvarying vec2 vUV;\n\t\tuniform bool greyscale;\n\t\tconst int samples = 8;\n\n\t\tfloat blend( float a, float b, float t ) {\n\n\t\t// linear blend\n\t\t\treturn a * ( 1.0 - t ) + b * t;\n\n\t\t}\n\n\t\tfloat hypot( float x, float y ) {\n\n\t\t// vector magnitude\n\t\t\treturn sqrt( x * x + y * y );\n\n\t\t}\n\n\t\tfloat rand( vec2 seed ){\n\n\t\t// get pseudo-random number\n\t\t\treturn fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 );\n\n\t\t}\n\n\t\tfloat distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) {\n\n\t\t// apply shape-specific transforms\n\t\t\tfloat dist = hypot( coord.x - p.x, coord.y - p.y );\n\t\t\tfloat rad = channel;\n\n\t\t\tif ( shape == SHAPE_DOT ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t} else if ( shape == SHAPE_ELLIPSE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n\t\t\t\tif ( dist != 0.0 ) {\n\t\t\t\t\tfloat dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y );\n\t\t\t\t\tdist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE;\n\t\t\t\t}\n\n\t\t\t} else if ( shape == SHAPE_LINE ) {\n\n\t\t\t\trad = pow( abs( rad ), 1.5) * rad_max;\n\t\t\t\tfloat dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y;\n\t\t\t\tdist = hypot( normal.x * dot_p, normal.y * dot_p );\n\n\t\t\t} else if ( shape == SHAPE_SQUARE ) {\n\n\t\t\t\tfloat theta = atan( p.y - coord.y, p.x - coord.x ) - angle;\n\t\t\t\tfloat sin_t = abs( sin( theta ) );\n\t\t\t\tfloat cos_t = abs( cos( theta ) );\n\t\t\t\trad = pow( abs( rad ), 1.4 );\n\t\t\t\trad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );\n\n\t\t\t}\n\n\t\t\treturn rad - dist;\n\n\t\t}\n\n\t\tstruct Cell {\n\n\t\t// grid sample positions\n\t\t\tvec2 normal;\n\t\t\tvec2 p1;\n\t\t\tvec2 p2;\n\t\t\tvec2 p3;\n\t\t\tvec2 p4;\n\t\t\tfloat samp2;\n\t\t\tfloat samp1;\n\t\t\tfloat samp3;\n\t\t\tfloat samp4;\n\n\t\t};\n\n\t\tvec4 getSample( vec2 point ) {\n\n\t\t// multi-sampled point\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) );\n\t\t\tfloat base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2;\n\t\t\tfloat step = PI2 / float( samples );\n\t\t\tfloat dist = radius * 0.66;\n\n\t\t\tfor ( int i = 0; i < samples; ++i ) {\n\n\t\t\t\tfloat r = base + step * float( i );\n\t\t\t\tvec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist );\n\t\t\t\ttex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) );\n\n\t\t\t}\n\n\t\t\ttex /= float( samples ) + 1.0;\n\t\t\treturn tex;\n\n\t\t}\n\n\t\tfloat getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) {\n\n\t\t// get colour for given point\n\t\t\tfloat dist_c_1, dist_c_2, dist_c_3, dist_c_4, res;\n\n\t\t\tif ( channel == 0 ) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).r;\n\t\t\t\tc.samp2 = getSample( c.p2 ).r;\n\t\t\t\tc.samp3 = getSample( c.p3 ).r;\n\t\t\t\tc.samp4 = getSample( c.p4 ).r;\n\n\t\t\t} else if (channel == 1) {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).g;\n\t\t\t\tc.samp2 = getSample( c.p2 ).g;\n\t\t\t\tc.samp3 = getSample( c.p3 ).g;\n\t\t\t\tc.samp4 = getSample( c.p4 ).g;\n\n\t\t\t} else {\n\n\t\t\t\tc.samp1 = getSample( c.p1 ).b;\n\t\t\t\tc.samp3 = getSample( c.p3 ).b;\n\t\t\t\tc.samp2 = getSample( c.p2 ).b;\n\t\t\t\tc.samp4 = getSample( c.p4 ).b;\n\n\t\t\t}\n\n\t\t\tdist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius );\n\t\t\tdist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius );\n\t\t\tdist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius );\n\t\t\tdist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius );\n\t\t\tres = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0;\n\t\t\tres = clamp( res, 0.0, 1.0 );\n\n\t\t\treturn res;\n\n\t\t}\n\n\t\tCell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) {\n\n\t\t// get containing cell\n\t\t\tCell c;\n\n\t\t// calc grid\n\t\t\tvec2 n = vec2( cos( grid_angle ), sin( grid_angle ) );\n\t\t\tfloat threshold = step * 0.5;\n\t\t\tfloat dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y );\n\t\t\tfloat dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y );\n\t\t\tvec2 offset = vec2( n.x * dot_normal, n.y * dot_normal );\n\t\t\tfloat offset_normal = mod( hypot( offset.x, offset.y ), step );\n\t\t\tfloat normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir;\n\t\t\tfloat offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step );\n\t\t\tfloat line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0;\n\t\t\tfloat line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir;\n\n\t\t// get closest corner\n\t\t\tc.normal = n;\n\t\t\tc.p1.x = p.x - n.x * normal_scale + n.y * line_scale;\n\t\t\tc.p1.y = p.y - n.y * normal_scale - n.x * line_scale;\n\n\t\t// scatter\n\t\t\tif ( scatter != 0.0 ) {\n\n\t\t\t\tfloat off_mag = scatter * threshold * 0.5;\n\t\t\t\tfloat off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2;\n\t\t\t\tc.p1.x += cos( off_angle ) * off_mag;\n\t\t\t\tc.p1.y += sin( off_angle ) * off_mag;\n\n\t\t\t}\n\n\t\t// find corners\n\t\t\tfloat normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step );\n\t\t\tfloat line_step = line_dir * ( ( offset_line < threshold ) ? step : -step );\n\t\t\tc.p2.x = c.p1.x - n.x * normal_step;\n\t\t\tc.p2.y = c.p1.y - n.y * normal_step;\n\t\t\tc.p3.x = c.p1.x + n.y * line_step;\n\t\t\tc.p3.y = c.p1.y - n.x * line_step;\n\t\t\tc.p4.x = c.p1.x - n.x * normal_step + n.y * line_step;\n\t\t\tc.p4.y = c.p1.y - n.y * normal_step - n.x * line_step;\n\n\t\t\treturn c;\n\n\t\t}\n\n\t\tfloat blendColour( float a, float b, float t ) {\n\n\t\t// blend colours\n\t\t\tif ( blendingMode == BLENDING_LINEAR ) {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t} else if ( blendingMode == BLENDING_ADD ) {\n\t\t\t\treturn blend( a, min( 1.0, a + b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_MULTIPLY ) {\n\t\t\t\treturn blend( a, max( 0.0, a * b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_LIGHTER ) {\n\t\t\t\treturn blend( a, max( a, b ), t );\n\t\t\t} else if ( blendingMode == BLENDING_DARKER ) {\n\t\t\t\treturn blend( a, min( a, b ), t );\n\t\t\t} else {\n\t\t\t\treturn blend( a, b, 1.0 - t );\n\t\t\t}\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tif ( ! disable ) {\n\n\t\t// setup\n\t\t\t\tvec2 p = vec2( vUV.x * width, vUV.y * height );\n\t\t\t\tvec2 origin = vec2( 0, 0 );\n\t\t\t\tfloat aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25;\n\n\t\t// get channel samples\n\t\t\t\tCell cell_r = getReferenceCell( p, origin, rotateR, radius );\n\t\t\t\tCell cell_g = getReferenceCell( p, origin, rotateG, radius );\n\t\t\t\tCell cell_b = getReferenceCell( p, origin, rotateB, radius );\n\t\t\t\tfloat r = getDotColour( cell_r, p, 0, rotateR, aa );\n\t\t\t\tfloat g = getDotColour( cell_g, p, 1, rotateG, aa );\n\t\t\t\tfloat b = getDotColour( cell_b, p, 2, rotateB, aa );\n\n\t\t// blend with original\n\t\t\t\tvec4 colour = texture2D( tDiffuse, vUV );\n\t\t\t\tr = blendColour( r, colour.r, blending );\n\t\t\t\tg = blendColour( g, colour.g, blending );\n\t\t\t\tb = blendColour( b, colour.b, blending );\n\n\t\t\t\tif ( greyscale ) {\n\t\t\t\t\tr = g = b = (r + b + g) / 3.0;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4( r, g, b, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUV );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HalftoneShader };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { HalftoneShader } from '../shaders/HalftoneShader.js';\n\n/**\n * RGB Halftone pass for three.js effects composer. Requires HalftoneShader.\n */\n\nclass HalftonePass extends Pass {\n\n\tconstructor( width, height, params ) {\n\n\t\tsuper();\n\n\t \tthis.uniforms = UniformsUtils.clone( HalftoneShader.uniforms );\n\t \tthis.material = new ShaderMaterial( {\n\t \t\tuniforms: this.uniforms,\n\t \t\tfragmentShader: HalftoneShader.fragmentShader,\n\t \t\tvertexShader: HalftoneShader.vertexShader\n\t \t} );\n\n\t\t// set params\n\t\tthis.uniforms.width.value = width;\n\t\tthis.uniforms.height.value = height;\n\n\t\tfor ( const key in params ) {\n\n\t\t\tif ( params.hasOwnProperty( key ) && this.uniforms.hasOwnProperty( key ) ) {\n\n\t\t\t\tthis.uniforms[ key ].value = params[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n \t\tthis.material.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\n \t\tif ( this.renderToScreen ) {\n\n \t\t\trenderer.setRenderTarget( null );\n \t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n \t\t\trenderer.setRenderTarget( writeBuffer );\n \t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n \t}\n\n \tsetSize( width, height ) {\n\n \t\tthis.uniforms.width.value = width;\n \t\tthis.uniforms.height.value = height;\n\n \t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { HalftonePass };\n", "import { ShaderPass } from './ShaderPass.js';\n\nconst LUTShader = {\n\n\tname: 'LUTShader',\n\n\tuniforms: {\n\n\t\tlut: { value: null },\n\t\tlutSize: { value: 0 },\n\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float lutSize;\n\t\tuniform sampler3D lut;\n\n\t\tvarying vec2 vUv;\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvoid main() {\n\n\t\t\tvec4 val = texture2D( tDiffuse, vUv );\n\t\t\tvec4 lutVal;\n\n\t\t\t// pull the sample in by half a pixel so the sample begins\n\t\t\t// at the center of the edge pixels.\n\t\t\tfloat pixelWidth = 1.0 / lutSize;\n\t\t\tfloat halfPixelWidth = 0.5 / lutSize;\n\t\t\tvec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\n\n\n\t\t\tlutVal = vec4( texture( lut, uvw ).rgb, val.a );\n\n\t\t\tgl_FragColor = vec4( mix( val, lutVal, intensity ) );\n\n\t\t}\n\n\t`,\n\n};\n\nclass LUTPass extends ShaderPass {\n\n\tset lut( v ) {\n\n\t\tconst material = this.material;\n\n\t\tif ( v !== this.lut ) {\n\n\t\t\tmaterial.uniforms.lut.value = null;\n\n\t\t\tif ( v ) {\n\n\t\t\t\tmaterial.uniforms.lutSize.value = v.image.width;\n\t\t\t\tmaterial.uniforms.lut.value = v;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tget lut() {\n\n\t\treturn this.material.uniforms.lut.value;\n\n\t}\n\n\tset intensity( v ) {\n\n\t\tthis.material.uniforms.intensity.value = v;\n\n\t}\n\n\tget intensity() {\n\n\t\treturn this.material.uniforms.intensity.value;\n\n\t}\n\n\tconstructor( options = {} ) {\n\n\t\tsuper( LUTShader );\n\t\tthis.lut = options.lut || null;\n\t\tthis.intensity = 'intensity' in options ? options.intensity : 1;\n\n\t}\n\n}\n\nexport { LUTPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tDoubleSide,\n\tHalfFloatType,\n\tMatrix4,\n\tMeshDepthMaterial,\n\tNoBlending,\n\tRGBADepthPacking,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass OutlinePass extends Pass {\n\n\tconstructor( resolution, scene, camera, selectedObjects ) {\n\n\t\tsuper();\n\n\t\tthis.renderScene = scene;\n\t\tthis.renderCamera = camera;\n\t\tthis.selectedObjects = selectedObjects !== undefined ? selectedObjects : [];\n\t\tthis.visibleEdgeColor = new Color( 1, 1, 1 );\n\t\tthis.hiddenEdgeColor = new Color( 0.1, 0.04, 0.02 );\n\t\tthis.edgeGlow = 0.0;\n\t\tthis.usePatternTexture = false;\n\t\tthis.edgeThickness = 1.0;\n\t\tthis.edgeStrength = 3.0;\n\t\tthis.downSampleRatio = 2;\n\t\tthis.pulsePeriod = 0;\n\n\t\tthis._visibilityCache = new Map();\n\n\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\tconst resx = Math.round( this.resolution.x / this.downSampleRatio );\n\t\tconst resy = Math.round( this.resolution.y / this.downSampleRatio );\n\n\t\tthis.renderTargetMaskBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y );\n\t\tthis.renderTargetMaskBuffer.texture.name = 'OutlinePass.mask';\n\t\tthis.renderTargetMaskBuffer.texture.generateMipmaps = false;\n\n\t\tthis.depthMaterial = new MeshDepthMaterial();\n\t\tthis.depthMaterial.side = DoubleSide;\n\t\tthis.depthMaterial.depthPacking = RGBADepthPacking;\n\t\tthis.depthMaterial.blending = NoBlending;\n\n\t\tthis.prepareMaskMaterial = this.getPrepareMaskMaterial();\n\t\tthis.prepareMaskMaterial.side = DoubleSide;\n\t\tthis.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ( this.prepareMaskMaterial.fragmentShader, this.renderCamera );\n\n\t\tthis.renderTargetDepthBuffer = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.renderTargetDepthBuffer.texture.name = 'OutlinePass.depth';\n\t\tthis.renderTargetDepthBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.name = 'OutlinePass.depthDownSample';\n\t\tthis.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;\n\n\t\tthis.renderTargetBlurBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer1.texture.name = 'OutlinePass.blur1';\n\t\tthis.renderTargetBlurBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetBlurBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetBlurBuffer2.texture.name = 'OutlinePass.blur2';\n\t\tthis.renderTargetBlurBuffer2.texture.generateMipmaps = false;\n\n\t\tthis.edgeDetectionMaterial = this.getEdgeDetectionMaterial();\n\t\tthis.renderTargetEdgeBuffer1 = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer1.texture.name = 'OutlinePass.edge1';\n\t\tthis.renderTargetEdgeBuffer1.texture.generateMipmaps = false;\n\t\tthis.renderTargetEdgeBuffer2 = new WebGLRenderTarget( Math.round( resx / 2 ), Math.round( resy / 2 ), { type: HalfFloatType } );\n\t\tthis.renderTargetEdgeBuffer2.texture.name = 'OutlinePass.edge2';\n\t\tthis.renderTargetEdgeBuffer2.texture.generateMipmaps = false;\n\n\t\tconst MAX_EDGE_THICKNESS = 4;\n\t\tconst MAX_EDGE_GLOW = 4;\n\n\t\tthis.separableBlurMaterial1 = this.getSeperableBlurMaterial( MAX_EDGE_THICKNESS );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = 1;\n\t\tthis.separableBlurMaterial2 = this.getSeperableBlurMaterial( MAX_EDGE_GLOW );\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( Math.round( resx / 2 ), Math.round( resy / 2 ) );\n\t\tthis.separableBlurMaterial2.uniforms[ 'kernelRadius' ].value = MAX_EDGE_GLOW;\n\n\t\t// Overlay material\n\t\tthis.overlayMaterial = this.getOverlayMaterial();\n\n\t\t// copy material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.tempPulseColor1 = new Color();\n\t\tthis.tempPulseColor2 = new Color();\n\t\tthis.textureMatrix = new Matrix4();\n\n\t\tfunction replaceDepthToViewZ( string, camera ) {\n\n\t\t\tconst type = camera.isPerspectiveCamera ? 'perspective' : 'orthographic';\n\n\t\t\treturn string.replace( /DEPTH_TO_VIEW_Z/g, type + 'DepthToViewZ' );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTargetMaskBuffer.dispose();\n\t\tthis.renderTargetDepthBuffer.dispose();\n\t\tthis.renderTargetMaskDownSampleBuffer.dispose();\n\t\tthis.renderTargetBlurBuffer1.dispose();\n\t\tthis.renderTargetBlurBuffer2.dispose();\n\t\tthis.renderTargetEdgeBuffer1.dispose();\n\t\tthis.renderTargetEdgeBuffer2.dispose();\n\n\t\tthis.depthMaterial.dispose();\n\t\tthis.prepareMaskMaterial.dispose();\n\t\tthis.edgeDetectionMaterial.dispose();\n\t\tthis.separableBlurMaterial1.dispose();\n\t\tthis.separableBlurMaterial2.dispose();\n\t\tthis.overlayMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTargetMaskBuffer.setSize( width, height );\n\t\tthis.renderTargetDepthBuffer.setSize( width, height );\n\n\t\tlet resx = Math.round( width / this.downSampleRatio );\n\t\tlet resy = Math.round( height / this.downSampleRatio );\n\t\tthis.renderTargetMaskDownSampleBuffer.setSize( resx, resy );\n\t\tthis.renderTargetBlurBuffer1.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer1.setSize( resx, resy );\n\t\tthis.separableBlurMaterial1.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t\tresx = Math.round( resx / 2 );\n\t\tresy = Math.round( resy / 2 );\n\n\t\tthis.renderTargetBlurBuffer2.setSize( resx, resy );\n\t\tthis.renderTargetEdgeBuffer2.setSize( resx, resy );\n\n\t\tthis.separableBlurMaterial2.uniforms[ 'texSize' ].value.set( resx, resy );\n\n\t}\n\n\tchangeVisibilityOfSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t}\n\n\tchangeVisibilityOfNonSelectedObjects( bVisible ) {\n\n\t\tconst cache = this._visibilityCache;\n\t\tconst selectedMeshes = [];\n\n\t\tfunction gatherSelectedMeshesCallBack( object ) {\n\n\t\t\tif ( object.isMesh ) selectedMeshes.push( object );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( gatherSelectedMeshesCallBack );\n\n\t\t}\n\n\t\tfunction VisibilityChangeCallBack( object ) {\n\n\t\t\tif ( object.isMesh || object.isSprite ) {\n\n\t\t\t\t// only meshes and sprites are supported by OutlinePass\n\n\t\t\t\tlet bFound = false;\n\n\t\t\t\tfor ( let i = 0; i < selectedMeshes.length; i ++ ) {\n\n\t\t\t\t\tconst selectedObjectId = selectedMeshes[ i ].id;\n\n\t\t\t\t\tif ( selectedObjectId === object.id ) {\n\n\t\t\t\t\t\tbFound = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( bFound === false ) {\n\n\t\t\t\t\tconst visibility = object.visible;\n\n\t\t\t\t\tif ( bVisible === false || cache.get( object ) === true ) {\n\n\t\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcache.set( object, visibility );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints || object.isLine ) {\n\n\t\t\t\t// the visibilty of points and lines is always set to false in order to\n\t\t\t\t// not affect the outline computation\n\n\t\t\t\tif ( bVisible === true ) {\n\n\t\t\t\t\tobject.visible = cache.get( object ); // restore\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcache.set( object, object.visible );\n\t\t\t\t\tobject.visible = bVisible;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderScene.traverse( VisibilityChangeCallBack );\n\n\t}\n\n\tupdateTextureMatrix() {\n\n\t\tthis.textureMatrix.set( 0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0 );\n\t\tthis.textureMatrix.multiply( this.renderCamera.projectionMatrix );\n\t\tthis.textureMatrix.multiply( this.renderCamera.matrixWorldInverse );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\tif ( this.selectedObjects.length > 0 ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\t\tconst oldAutoClear = renderer.autoClear;\n\n\t\t\trenderer.autoClear = false;\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t\trenderer.setClearColor( 0xffffff, 1 );\n\n\t\t\t// Make selected objects invisible\n\t\t\tthis.changeVisibilityOfSelectedObjects( false );\n\n\t\t\tconst currentBackground = this.renderScene.background;\n\t\t\tthis.renderScene.background = null;\n\n\t\t\t// 1. Draw Non Selected objects in the depth buffer\n\t\t\tthis.renderScene.overrideMaterial = this.depthMaterial;\n\t\t\trenderer.setRenderTarget( this.renderTargetDepthBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\n\t\t\t// Make selected objects visible\n\t\t\tthis.changeVisibilityOfSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\t// Update Texture Matrix for Depth compare\n\t\t\tthis.updateTextureMatrix();\n\n\t\t\t// Make non selected objects invisible, and draw only the selected objects, by comparing the depth buffer of non selected objects\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( false );\n\t\t\tthis.renderScene.overrideMaterial = this.prepareMaskMaterial;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'cameraNearFar' ].value.set( this.renderCamera.near, this.renderCamera.far );\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'depthTexture' ].value = this.renderTargetDepthBuffer.texture;\n\t\t\tthis.prepareMaskMaterial.uniforms[ 'textureMatrix' ].value = this.textureMatrix;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskBuffer );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.renderScene, this.renderCamera );\n\t\t\tthis.renderScene.overrideMaterial = null;\n\t\t\tthis.changeVisibilityOfNonSelectedObjects( true );\n\t\t\tthis._visibilityCache.clear();\n\n\t\t\tthis.renderScene.background = currentBackground;\n\n\t\t\t// 2. Downsample to Half resolution\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\trenderer.setRenderTarget( this.renderTargetMaskDownSampleBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.tempPulseColor1.copy( this.visibleEdgeColor );\n\t\t\tthis.tempPulseColor2.copy( this.hiddenEdgeColor );\n\n\t\t\tif ( this.pulsePeriod > 0 ) {\n\n\t\t\t\tconst scalar = ( 1 + 0.25 ) / 2 + Math.cos( performance.now() * 0.01 / this.pulsePeriod ) * ( 1.0 - 0.25 ) / 2;\n\t\t\t\tthis.tempPulseColor1.multiplyScalar( scalar );\n\t\t\t\tthis.tempPulseColor2.multiplyScalar( scalar );\n\n\t\t\t}\n\n\t\t\t// 3. Apply Edge Detection Pass\n\t\t\tthis.fsQuad.material = this.edgeDetectionMaterial;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskDownSampleBuffer.texture;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'texSize' ].value.set( this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height );\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'visibleEdgeColor' ].value = this.tempPulseColor1;\n\t\t\tthis.edgeDetectionMaterial.uniforms[ 'hiddenEdgeColor' ].value = this.tempPulseColor2;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// 4. Apply Blur on Half res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial1;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'kernelRadius' ].value = this.edgeThickness;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer1.texture;\n\t\t\tthis.separableBlurMaterial1.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer1 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Apply Blur on quarter res\n\t\t\tthis.fsQuad.material = this.separableBlurMaterial2;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetBlurBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'colorTexture' ].value = this.renderTargetBlurBuffer2.texture;\n\t\t\tthis.separableBlurMaterial2.uniforms[ 'direction' ].value = OutlinePass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetEdgeBuffer2 );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t// Blend it additively over the input texture\n\t\t\tthis.fsQuad.material = this.overlayMaterial;\n\t\t\tthis.overlayMaterial.uniforms[ 'maskTexture' ].value = this.renderTargetMaskBuffer.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture1' ].value = this.renderTargetEdgeBuffer1.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeTexture2' ].value = this.renderTargetEdgeBuffer2.texture;\n\t\t\tthis.overlayMaterial.uniforms[ 'patternTexture' ].value = this.patternTexture;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeStrength' ].value = this.edgeStrength;\n\t\t\tthis.overlayMaterial.uniforms[ 'edgeGlow' ].value = this.edgeGlow;\n\t\t\tthis.overlayMaterial.uniforms[ 'usePatternTexture' ].value = this.usePatternTexture;\n\n\n\t\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\t\trenderer.autoClear = oldAutoClear;\n\n\t\t}\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.materialCopy;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tgetPrepareMaskMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'depthTexture': { value: null },\n\t\t\t\t'cameraNearFar': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'textureMatrix': { value: null }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`#include \n\t\t\t\t#include \n\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t\tvPosition = mvPosition;\n\n\t\t\t\t\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t\t\t\t\t#ifdef USE_INSTANCING\n\n\t\t\t\t\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tworldPosition = modelMatrix * worldPosition;\n\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\n\t\t\t\t}`\n\n\t\t} );\n\n\t}\n\n\tgetEdgeDetectionMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'visibleEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t\t'hiddenEdgeColor': { value: new Vector3( 1.0, 1.0, 1.0 ) },\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetSeperableBlurMaterial( maxRadius ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'MAX_RADIUS': maxRadius,\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'texSize': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'kernelRadius': { value: 1.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat sigma = kernelRadius/2.0;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, sigma);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = kernelRadius * float(i) / float(MAX_RADIUS);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, sigma);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetOverlayMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tuniforms: {\n\t\t\t\t'maskTexture': { value: null },\n\t\t\t\t'edgeTexture1': { value: null },\n\t\t\t\t'edgeTexture2': { value: null },\n\t\t\t\t'patternTexture': { value: null },\n\t\t\t\t'edgeStrength': { value: 1.0 },\n\t\t\t\t'edgeGlow': { value: 1.0 },\n\t\t\t\t'usePatternTexture': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n\t\t\t\t}`,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t}\n\n}\n\nOutlinePass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nOutlinePass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { OutlinePass };\n", "const OutputShader = {\n\n\tname: 'OutputShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'toneMappingExposure': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform mat4 modelViewMatrix;\n\t\tuniform mat4 projectionMatrix;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\t#include \n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// tone mapping\n\n\t\t\t#ifdef LINEAR_TONE_MAPPING\n\n\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = OptimizedCineonToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( AGX_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\n\t\t\t#endif\n\n\t\t\t// color space\n\n\t\t\t#ifdef SRGB_TRANSFER\n\n\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\n\t\t\t#endif\n\n\t\t}`\n\n};\n\nexport { OutputShader };\n", "import {\n\tColorManagement,\n\tRawShaderMaterial,\n\tUniformsUtils,\n\tLinearToneMapping,\n\tReinhardToneMapping,\n\tCineonToneMapping,\n\tAgXToneMapping,\n\tACESFilmicToneMapping,\n\tNeutralToneMapping,\n\tSRGBTransfer\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { OutputShader } from '../shaders/OutputShader.js';\n\nclass OutputPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t//\n\n\t\tconst shader = OutputShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new RawShaderMaterial( {\n\t\t\tname: shader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t\t// internal cache\n\n\t\tthis._outputColorSpace = null;\n\t\tthis._toneMapping = null;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'toneMappingExposure' ].value = renderer.toneMappingExposure;\n\n\t\t// rebuild defines if required\n\n\t\tif ( this._outputColorSpace !== renderer.outputColorSpace || this._toneMapping !== renderer.toneMapping ) {\n\n\t\t\tthis._outputColorSpace = renderer.outputColorSpace;\n\t\t\tthis._toneMapping = renderer.toneMapping;\n\n\t\t\tthis.material.defines = {};\n\n\t\t\tif ( ColorManagement.getTransfer( this._outputColorSpace ) === SRGBTransfer ) this.material.defines.SRGB_TRANSFER = '';\n\n\t\t\tif ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';\n\n\t\t\tthis.material.needsUpdate = true;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.renderToScreen === true ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { OutputPass };\n", "import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass RenderPass extends Pass {\n\n\tconstructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\tthis.clearColor = clearColor;\n\t\tthis.clearAlpha = clearAlpha;\n\n\t\tthis.clear = true;\n\t\tthis.clearDepth = false;\n\t\tthis.needsSwap = false;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\trenderer.setClearColor( this.clearColor, renderer.getClearAlpha() );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.setClearAlpha( this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth == true ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\tif ( this.clear === true ) {\n\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// restore\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\trenderer.setClearAlpha( oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n", "import {\n\tWebGLRenderTarget,\n\tMeshNormalMaterial,\n\tShaderMaterial,\n\tVector2,\n\tVector4,\n\tDepthTexture,\n\tNearestFilter,\n\tHalfFloatType\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass RenderPixelatedPass extends Pass {\n\n\tconstructor( pixelSize, scene, camera, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.resolution = new Vector2();\n\t\tthis.renderResolution = new Vector2();\n\n\t\tthis.pixelatedMaterial = this.createPixelatedMaterial();\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( this.pixelatedMaterial );\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.normalEdgeStrength = options.normalEdgeStrength || 0.3;\n\t\tthis.depthEdgeStrength = options.depthEdgeStrength || 0.4;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget();\n\t\tthis.beautyRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.beautyRenderTarget.texture.type = HalfFloatType;\n\t\tthis.beautyRenderTarget.depthTexture = new DepthTexture();\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget();\n\t\tthis.normalRenderTarget.texture.minFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.magFilter = NearestFilter;\n\t\tthis.normalRenderTarget.texture.type = HalfFloatType;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.pixelatedMaterial.dispose();\n\t\tthis.normalMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.resolution.set( width, height );\n\t\tthis.renderResolution.set( ( width / this.pixelSize ) | 0, ( height / this.pixelSize ) | 0 );\n\t\tconst { x, y } = this.renderResolution;\n\t\tthis.beautyRenderTarget.setSize( x, y );\n\t\tthis.normalRenderTarget.setSize( x, y );\n\t\tthis.fsQuad.material.uniforms.resolution.value.set( x, y, 1 / x, 1 / y );\n\n\t}\n\n\tsetPixelSize( pixelSize ) {\n\n\t\tthis.pixelSize = pixelSize;\n\t\tthis.setSize( this.resolution.x, this.resolution.y );\n\n\t}\n\n\trender( renderer, writeBuffer ) {\n\n\t\tconst uniforms = this.fsQuad.material.uniforms;\n\t\tuniforms.normalEdgeStrength.value = this.normalEdgeStrength;\n\t\tuniforms.depthEdgeStrength.value = this.depthEdgeStrength;\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tconst overrideMaterial_old = this.scene.overrideMaterial;\n\t\trenderer.setRenderTarget( this.normalRenderTarget );\n\t\tthis.scene.overrideMaterial = this.normalMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = overrideMaterial_old;\n\n\t\tuniforms.tDiffuse.value = this.beautyRenderTarget.texture;\n\t\tuniforms.tDepth.value = this.beautyRenderTarget.depthTexture;\n\t\tuniforms.tNormal.value = this.normalRenderTarget.texture;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\n\t\t\tif ( this.clear ) renderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tcreatePixelatedMaterial() {\n\n\t\treturn new ShaderMaterial( {\n\t\t\tuniforms: {\n\t\t\t\ttDiffuse: { value: null },\n\t\t\t\ttDepth: { value: null },\n\t\t\t\ttNormal: { value: null },\n\t\t\t\tresolution: {\n\t\t\t\t\tvalue: new Vector4(\n\t\t\t\t\t\tthis.renderResolution.x,\n\t\t\t\t\t\tthis.renderResolution.y,\n\t\t\t\t\t\t1 / this.renderResolution.x,\n\t\t\t\t\t\t1 / this.renderResolution.y,\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tnormalEdgeStrength: { value: 0 },\n\t\t\t\tdepthEdgeStrength: { value: 0 }\n\t\t\t},\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}\n\t\t\t`,\n\t\t\tfragmentShader: /* glsl */`\n\t\t\t\tuniform sampler2D tDiffuse;\n\t\t\t\tuniform sampler2D tDepth;\n\t\t\t\tuniform sampler2D tNormal;\n\t\t\t\tuniform vec4 resolution;\n\t\t\t\tuniform float normalEdgeStrength;\n\t\t\t\tuniform float depthEdgeStrength;\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tfloat getDepth(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 getNormal(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tfloat depthEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat diff = 0.0;\n\t\t\t\t\tdiff += clamp(getDepth(1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, 1) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, -1) - depth, 0.0, 1.0);\n\t\t\t\t\treturn floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.;\n\n\t\t\t\t}\n\n\t\t\t\tfloat neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) {\n\n\t\t\t\t\tfloat depthDiff = getDepth(x, y) - depth;\n\t\t\t\t\tvec3 neighborNormal = getNormal(x, y);\n\n\t\t\t\t\t// Edge pixels should yield to faces who's normals are closer to the bias normal.\n\t\t\t\t\tvec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter.\n\t\t\t\t\tfloat normalDiff = dot(normal - neighborNormal, normalEdgeBias);\n\t\t\t\t\tfloat normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0);\n\n\t\t\t\t\t// Only the shallower pixel should detect the normal edge.\n\t\t\t\t\tfloat depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0);\n\n\t\t\t\t\treturn (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator;\n\n\t\t\t\t}\n\n\t\t\t\tfloat normalEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat indicator = 0.0;\n\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, -1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, 1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(-1, 0, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(1, 0, depth, normal);\n\n\t\t\t\t\treturn step(0.1, indicator);\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\t\t\tfloat depth = 0.0;\n\t\t\t\t\tvec3 normal = vec3(0.0);\n\n\t\t\t\t\tif (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) {\n\n\t\t\t\t\t\tdepth = getDepth(0, 0);\n\t\t\t\t\t\tnormal = getNormal(0, 0);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat dei = 0.0;\n\t\t\t\t\tif (depthEdgeStrength > 0.0)\n\t\t\t\t\t\tdei = depthEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat nei = 0.0;\n\t\t\t\t\tif (normalEdgeStrength > 0.0)\n\t\t\t\t\t\tnei = normalEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei);\n\n\t\t\t\t\tgl_FragColor = texel * Strength;\n\n\t\t\t\t}\n\t\t\t`\n\t\t} );\n\n\t}\n\n}\n\nexport { RenderPixelatedPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst SAOShader = {\n\n\tname: 'SAOShader',\n\n\tdefines: {\n\t\t'NUM_SAMPLES': 7,\n\t\t'NUM_RINGS': 4,\n\t\t'DIFFUSE_TEXTURE': 0,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\n\t\t'cameraNear': { value: 1 },\n\t\t'cameraFar': { value: 100 },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\n\t\t'scale': { value: 1.0 },\n\t\t'intensity': { value: 0.1 },\n\t\t'bias': { value: 0.5 },\n\n\t\t'minResolution': { value: 0.0 },\n\t\t'kernelRadius': { value: 100.0 },\n\t\t'randomSeed': { value: 0.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\t#if DIFFUSE_TEXTURE == 1\n\t\tuniform sampler2D tDiffuse;\n\t\t#endif\n\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform highp sampler2D tNormal;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float scale;\n\t\tuniform float intensity;\n\t\tuniform float bias;\n\t\tuniform float kernelRadius;\n\t\tuniform float minResolution;\n\t\tuniform vec2 size;\n\t\tuniform float randomSeed;\n\n\t\t// RGBA depth\n\n\t\t#include \n\n\t\tvec4 getDefaultColor( const in vec2 screenPosition ) {\n\t\t\t#if DIFFUSE_TEXTURE == 1\n\t\t\treturn texture2D( tDiffuse, vUv );\n\t\t\t#else\n\t\t\treturn vec4( 1.0 );\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\t\t}\n\n\t\tfloat scaleDividedByCameraFar;\n\t\tfloat minResolutionMultipliedByCameraFar;\n\n\t\tfloat getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {\n\t\t\tvec3 viewDelta = sampleViewPosition - centerViewPosition;\n\t\t\tfloat viewDistance = length( viewDelta );\n\t\t\tfloat scaledScreenDistance = scaleDividedByCameraFar * viewDistance;\n\n\t\t\treturn max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );\n\t\t}\n\n\t\t// moving costly divides into consts\n\t\tconst float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n\t\tconst float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n\t\tfloat getAmbientOcclusion( const in vec3 centerViewPosition ) {\n\t\t\t// precompute some variables require in getOcclusion.\n\t\t\tscaleDividedByCameraFar = scale / cameraFar;\n\t\t\tminResolutionMultipliedByCameraFar = minResolution * cameraFar;\n\t\t\tvec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );\n\n\t\t\t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n\t\t\tfloat angle = rand( vUv + randomSeed ) * PI2;\n\t\t\tvec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;\n\t\t\tvec2 radiusStep = radius;\n\n\t\t\tfloat occlusionSum = 0.0;\n\t\t\tfloat weightSum = 0.0;\n\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\n\t\t\t\tvec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;\n\t\t\t\tradius += radiusStep;\n\t\t\t\tangle += ANGLE_STEP;\n\n\t\t\t\tfloat sampleDepth = getDepth( sampleUv );\n\t\t\t\tif( sampleDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfloat sampleViewZ = getViewZ( sampleDepth );\n\t\t\t\tvec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );\n\t\t\t\tocclusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );\n\t\t\t\tweightSum += 1.0;\n\t\t\t}\n\n\t\t\tif( weightSum == 0.0 ) discard;\n\n\t\t\treturn occlusionSum * ( intensity / weightSum );\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat centerDepth = getDepth( vUv );\n\t\t\tif( centerDepth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = getViewZ( centerDepth );\n\t\t\tvec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );\n\n\t\t\tfloat ambientOcclusion = getAmbientOcclusion( viewPosition );\n\n\t\t\tgl_FragColor = getDefaultColor( vUv );\n\t\t\tgl_FragColor.xyz *= 1.0 - ambientOcclusion;\n\t\t}`\n\n};\n\nexport { SAOShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * TODO\n */\n\nconst DepthLimitedBlurShader = {\n\n\tname: 'DepthLimitedBlurShader',\n\n\tdefines: {\n\t\t'KERNEL_RADIUS': 4,\n\t\t'DEPTH_PACKING': 1,\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'size': { value: new Vector2( 512, 512 ) },\n\t\t'sampleUvOffsets': { value: [ new Vector2( 0, 0 ) ] },\n\t\t'sampleWeights': { value: [ 1.0 ] },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: 10 },\n\t\t'cameraFar': { value: 1000 },\n\t\t'depthCutoff': { value: 10 },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform vec2 size;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tvInvSize = 1.0 / size;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float depthCutoff;\n\n\t\tuniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];\n\t\tuniform float sampleWeights[ KERNEL_RADIUS + 1 ];\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec2 vInvSize;\n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\t\t\t#if DEPTH_PACKING == 1\n\t\t\treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n\t\t\t#else\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tif( depth >= ( 1.0 - EPSILON ) ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\tfloat centerViewZ = -getViewZ( depth );\n\t\t\tbool rBreak = false, lBreak = false;\n\n\t\t\tfloat weightSum = sampleWeights[0];\n\t\t\tvec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;\n\n\t\t\tfor( int i = 1; i <= KERNEL_RADIUS; i ++ ) {\n\n\t\t\t\tfloat sampleWeight = sampleWeights[i];\n\t\t\t\tvec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;\n\n\t\t\t\tvec2 sampleUv = vUv + sampleUvOffset;\n\t\t\t\tfloat viewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;\n\n\t\t\t\tif( ! rBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t\tsampleUv = vUv - sampleUvOffset;\n\t\t\t\tviewZ = -getViewZ( getDepth( sampleUv ) );\n\n\t\t\t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;\n\n\t\t\t\tif( ! lBreak ) {\n\t\t\t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n\t\t\t\t\tweightSum += sampleWeight;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = diffuseSum / weightSum;\n\t\t}`\n\n};\n\nconst BlurShaderUtils = {\n\n\tcreateSampleWeights: function ( kernelRadius, stdDev ) {\n\n\t\tconst weights = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\tweights.push( gaussian( i, stdDev ) );\n\n\t\t}\n\n\t\treturn weights;\n\n\t},\n\n\tcreateSampleOffsets: function ( kernelRadius, uvIncrement ) {\n\n\t\tconst offsets = [];\n\n\t\tfor ( let i = 0; i <= kernelRadius; i ++ ) {\n\n\t\t\toffsets.push( uvIncrement.clone().multiplyScalar( i ) );\n\n\t\t}\n\n\t\treturn offsets;\n\n\t},\n\n\tconfigure: function ( material, kernelRadius, stdDev, uvIncrement ) {\n\n\t\tmaterial.defines[ 'KERNEL_RADIUS' ] = kernelRadius;\n\t\tmaterial.uniforms[ 'sampleUvOffsets' ].value = BlurShaderUtils.createSampleOffsets( kernelRadius, uvIncrement );\n\t\tmaterial.uniforms[ 'sampleWeights' ].value = BlurShaderUtils.createSampleWeights( kernelRadius, stdDev );\n\t\tmaterial.needsUpdate = true;\n\n\t}\n\n};\n\nfunction gaussian( x, stdDev ) {\n\n\treturn Math.exp( - ( x * x ) / ( 2.0 * ( stdDev * stdDev ) ) ) / ( Math.sqrt( 2.0 * Math.PI ) * stdDev );\n\n}\n\nexport { DepthLimitedBlurShader, BlurShaderUtils };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tVector2,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SAOShader } from '../shaders/SAOShader.js';\nimport { DepthLimitedBlurShader } from '../shaders/DepthLimitedBlurShader.js';\nimport { BlurShaderUtils } from '../shaders/DepthLimitedBlurShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n * SAO implementation inspired from bhouston previous SAO work\n */\n\nclass SAOPass extends Pass {\n\n\tconstructor( scene, camera, resolution = new Vector2( 256, 256 ) ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.originalClearColor = new Color();\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.params = {\n\t\t\toutput: 0,\n\t\t\tsaoBias: 0.5,\n\t\t\tsaoIntensity: 0.18,\n\t\t\tsaoScale: 1,\n\t\t\tsaoKernelRadius: 100,\n\t\t\tsaoMinResolution: 0,\n\t\t\tsaoBlur: true,\n\t\t\tsaoBlurRadius: 8,\n\t\t\tsaoBlurStdDev: 4,\n\t\t\tsaoBlurDepthCutoff: 0.01\n\t\t};\n\n\t\tthis.resolution = new Vector2( resolution.x, resolution.y );\n\n\t\tthis.saoRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, { type: HalfFloatType } );\n\t\tthis.blurIntermediateRenderTarget = this.saoRenderTarget.clone();\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.resolution.x, this.resolution.y, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.saoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SAOShader.defines ),\n\t\t\tfragmentShader: SAOShader.fragmentShader,\n\t\t\tvertexShader: SAOShader.vertexShader,\n\t\t\tuniforms: UniformsUtils.clone( SAOShader.uniforms )\n\t\t} );\n\t\tthis.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.saoMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.blending = NoBlending;\n\n\t\tthis.vBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.vBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.vBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.vBlurMaterial.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\tthis.vBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.vBlurMaterial.blending = NoBlending;\n\n\t\tthis.hBlurMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( DepthLimitedBlurShader.uniforms ),\n\t\t\tdefines: Object.assign( {}, DepthLimitedBlurShader.defines ),\n\t\t\tvertexShader: DepthLimitedBlurShader.vertexShader,\n\t\t\tfragmentShader: DepthLimitedBlurShader.fragmentShader\n\t\t} );\n\t\tthis.hBlurMaterial.defines[ 'DEPTH_PACKING' ] = 0;\n\t\tthis.hBlurMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.hBlurMaterial.uniforms[ 'tDiffuse' ].value = this.blurIntermediateRenderTarget.texture;\n\t\tthis.hBlurMaterial.uniforms[ 'tDepth' ].value = depthTexture;\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( this.resolution.x, this.resolution.y );\n\t\tthis.hBlurMaterial.blending = NoBlending;\n\n\t\tthis.materialCopy = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.materialCopy.transparent = true;\n\t\tthis.materialCopy.depthTest = false;\n\t\tthis.materialCopy.depthWrite = false;\n\t\tthis.materialCopy.blending = CustomBlending;\n\t\tthis.materialCopy.blendSrc = DstColorFactor;\n\t\tthis.materialCopy.blendDst = ZeroFactor;\n\t\tthis.materialCopy.blendEquation = AddEquation;\n\t\tthis.materialCopy.blendSrcAlpha = DstAlphaFactor;\n\t\tthis.materialCopy.blendDstAlpha = ZeroFactor;\n\t\tthis.materialCopy.blendEquationAlpha = AddEquation;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// Rendering readBuffer first when rendering to screen\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.materialCopy.blending = NoBlending;\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\t\t\tthis.renderPass( renderer, this.materialCopy, null );\n\n\t\t}\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.saoMaterial.uniforms[ 'bias' ].value = this.params.saoBias;\n\t\tthis.saoMaterial.uniforms[ 'intensity' ].value = this.params.saoIntensity;\n\t\tthis.saoMaterial.uniforms[ 'scale' ].value = this.params.saoScale;\n\t\tthis.saoMaterial.uniforms[ 'kernelRadius' ].value = this.params.saoKernelRadius;\n\t\tthis.saoMaterial.uniforms[ 'minResolution' ].value = this.params.saoMinResolution;\n\t\tthis.saoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.saoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\t// this.saoMaterial.uniforms['randomSeed'].value = Math.random();\n\n\t\tconst depthCutoff = this.params.saoBlurDepthCutoff * ( this.camera.far - this.camera.near );\n\t\tthis.vBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\t\tthis.hBlurMaterial.uniforms[ 'depthCutoff' ].value = depthCutoff;\n\n\t\tthis.vBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.vBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.hBlurMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\tthis.params.saoBlurRadius = Math.floor( this.params.saoBlurRadius );\n\t\tif ( ( this.prevStdDev !== this.params.saoBlurStdDev ) || ( this.prevNumSamples !== this.params.saoBlurRadius ) ) {\n\n\t\t\tBlurShaderUtils.configure( this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 0, 1 ) );\n\t\t\tBlurShaderUtils.configure( this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2( 1, 0 ) );\n\t\t\tthis.prevStdDev = this.params.saoBlurStdDev;\n\t\t\tthis.prevNumSamples = this.params.saoBlurRadius;\n\n\t\t}\n\n\t\t// render normal and depth\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\n\t\t// Rendering SAO texture\n\t\tthis.renderPass( renderer, this.saoMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// Blurring SAO texture\n\t\tif ( this.params.saoBlur ) {\n\n\t\t\tthis.renderPass( renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 0xffffff, 1.0 );\n\t\t\tthis.renderPass( renderer, this.hBlurMaterial, this.saoRenderTarget, 0xffffff, 1.0 );\n\n\t\t}\n\n\t\tconst outputMaterial = this.materialCopy;\n\n\t\t// Setting up SAO rendering\n\t\tif ( this.params.output === SAOPass.OUTPUT.Normal ) {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t} else {\n\n\t\t\tthis.materialCopy.uniforms[ 'tDiffuse' ].value = this.saoRenderTarget.texture;\n\t\t\tthis.materialCopy.needsUpdate = true;\n\n\t\t}\n\n\t\t// Blending depends on output\n\t\tif ( this.params.output === SAOPass.OUTPUT.Default ) {\n\n\t\t\toutputMaterial.blending = CustomBlending;\n\n\t\t} else {\n\n\t\t\toutputMaterial.blending = NoBlending;\n\n\t\t}\n\n\t\t// Rendering SAOPass result on top of previous pass\n\t\tthis.renderPass( renderer, outputMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.saoRenderTarget.setSize( width, height );\n\t\tthis.blurIntermediateRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\n\t\tthis.saoMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.saoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.saoMaterial.uniforms[ 'cameraProjectionMatrix' ].value = this.camera.projectionMatrix;\n\t\tthis.saoMaterial.needsUpdate = true;\n\n\t\tthis.vBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.vBlurMaterial.needsUpdate = true;\n\n\t\tthis.hBlurMaterial.uniforms[ 'size' ].value.set( width, height );\n\t\tthis.hBlurMaterial.needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.saoRenderTarget.dispose();\n\t\tthis.blurIntermediateRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.saoMaterial.dispose();\n\t\tthis.vBlurMaterial.dispose();\n\t\tthis.hBlurMaterial.dispose();\n\t\tthis.materialCopy.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SAO': 1,\n\t'Normal': 2\n};\n\nexport { SAOPass };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * WebGL port of Subpixel Morphological Antialiasing (SMAA) v2.8\n * Preset: SMAA 1x Medium (with color edge detection)\n * https://github.com/iryoku/smaa/releases/tag/v2.8\n */\n\nconst SMAAEdgesShader = {\n\n\tname: 'SMAAEdgesShader',\n\n\tdefines: {\n\n\t\t'SMAA_THRESHOLD': '0.1'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvoid SMAAEdgeDetectionVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0, 2.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAAEdgeDetectionVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\n\t\tvec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) {\n\t\t\tvec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD );\n\n\t\t\t// Calculate color deltas:\n\t\t\tvec4 delta;\n\t\t\tvec3 C = texture2D( colorTex, texcoord ).rgb;\n\n\t\t\tvec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb;\n\t\t\tvec3 t = abs( C - Cleft );\n\t\t\tdelta.x = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb;\n\t\t\tt = abs( C - Ctop );\n\t\t\tdelta.y = max( max( t.r, t.g ), t.b );\n\n\t\t\t// We do the usual threshold:\n\t\t\tvec2 edges = step( threshold, delta.xy );\n\n\t\t\t// Then discard if there is no edge:\n\t\t\tif ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 )\n\t\t\t\tdiscard;\n\n\t\t\t// Calculate right and bottom deltas:\n\t\t\tvec3 Cright = texture2D( colorTex, offset[1].xy ).rgb;\n\t\t\tt = abs( C - Cright );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Cbottom = texture2D( colorTex, offset[1].zw ).rgb;\n\t\t\tt = abs( C - Cbottom );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the maximum delta in the direct neighborhood:\n\t\t\tfloat maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w );\n\n\t\t\t// Calculate left-left and top-top deltas:\n\t\t\tvec3 Cleftleft = texture2D( colorTex, offset[2].xy ).rgb;\n\t\t\tt = abs( C - Cleftleft );\n\t\t\tdelta.z = max( max( t.r, t.g ), t.b );\n\n\t\t\tvec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb;\n\t\t\tt = abs( C - Ctoptop );\n\t\t\tdelta.w = max( max( t.r, t.g ), t.b );\n\n\t\t\t// Calculate the final maximum delta:\n\t\t\tmaxDelta = max( max( maxDelta, delta.z ), delta.w );\n\n\t\t\t// Local contrast adaptation in action:\n\t\t\tedges.xy *= step( 0.5 * maxDelta, delta.xy );\n\n\t\t\treturn vec4( edges, 0.0, 0.0 );\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse );\n\n\t\t}`\n\n};\n\nconst SMAAWeightsShader = {\n\n\tname: 'SMAAWeightsShader',\n\n\tdefines: {\n\n\t\t'SMAA_MAX_SEARCH_STEPS': '8',\n\t\t'SMAA_AREATEX_MAX_DISTANCE': '16',\n\t\t'SMAA_AREATEX_PIXEL_SIZE': '( 1.0 / vec2( 160.0, 560.0 ) )',\n\t\t'SMAA_AREATEX_SUBTEX_SIZE': '( 1.0 / 7.0 )'\n\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tArea': { value: null },\n\t\t'tSearch': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 3 ];\n\t\tvarying vec2 vPixcoord;\n\n\t\tvoid SMAABlendingWeightCalculationVS( vec2 texcoord ) {\n\t\t\tvPixcoord = texcoord / resolution;\n\n\t\t\t// We will use these offsets for the searches later on (see @PSEUDO_GATHER4):\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 ); // WebGL port note: Changed sign in Y and W components\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 ); // WebGL port note: Changed sign in Y and W components\n\n\t\t\t// And these for the searches, they indicate the ends of the loops:\n\t\t\tvOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAABlendingWeightCalculationVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tArea;\n\t\tuniform sampler2D tSearch;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[3];\n\t\tvarying vec2 vPixcoord;\n\n\t\t#if __VERSION__ == 100\n\t\tvec2 round( vec2 x ) {\n\t\t\treturn sign( x ) * floor( abs( x ) + 0.5 );\n\t\t}\n\t\t#endif\n\n\t\tfloat SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) {\n\t\t\t// Not required if searchTex accesses are set to point:\n\t\t\t// float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);\n\t\t\t// e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +\n\t\t\t// e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\n\t\t\te.r = bias + e.r * scale;\n\t\t\treturn 255.0 * texture2D( searchTex, e, 0.0 ).r;\n\t\t}\n\n\t\tfloat SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\t/**\n\t\t\t\t* @PSEUDO_GATHER4\n\t\t\t\t* This texcoord has been offset by (-0.25, -0.125) in the vertex shader to\n\t\t\t\t* sample between edge, thus fetching four edges in a row.\n\t\t\t\t* Sampling with different offsets in each direction allows to disambiguate\n\t\t\t\t* which edges are active from the four fetched ones.\n\t\t\t\t*/\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\t// We correct the previous (-0.25, -0.125) offset we applied:\n\t\t\ttexcoord.x += 0.25 * resolution.x;\n\n\t\t\t// The searches are bias by 1, so adjust the coords accordingly:\n\t\t\ttexcoord.x += resolution.x;\n\n\t\t\t// Disambiguate the length added by the last step:\n\t\t\ttexcoord.x += 2.0 * resolution.x; // Undo last step\n\t\t\ttexcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5);\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 0.0, 1.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 2.0, 0.0 ) * resolution;\n\t\t\t\tif ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.x -= 0.25 * resolution.x;\n\t\t\ttexcoord.x -= resolution.x;\n\t\t\ttexcoord.x -= 2.0 * resolution.x;\n\t\t\ttexcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );\n\n\t\t\treturn texcoord.x;\n\t\t}\n\n\t\tfloat SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord += vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y -= 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tfloat SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n\t\t\tvec2 e = vec2( 1.0, 0.0 );\n\n\t\t\tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n\t\t\t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n\t\t\t\ttexcoord -= vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n\t\t\t\tif ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n\t\t\t}\n\n\t\t\ttexcoord.y += 0.25 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y += 2.0 * resolution.y; // WebGL port note: Changed sign\n\t\t\ttexcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 ); // WebGL port note: Changed sign\n\n\t\t\treturn texcoord.y;\n\t\t}\n\n\t\tvec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) {\n\t\t\t// Rounding prevents precision errors of bilinear filtering:\n\t\t\tvec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist;\n\n\t\t\t// We do a scale and bias for mapping to texel space:\n\t\t\ttexcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE );\n\n\t\t\t// Move to proper place, according to the subpixel offset:\n\t\t\ttexcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\n\n\t\t\treturn texture2D( areaTex, texcoord, 0.0 ).rg;\n\t\t}\n\n\t\tvec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) {\n\t\t\tvec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n\t\t\tvec2 e = texture2D( edgesTex, texcoord ).rg;\n\n\t\t\tif ( e.g > 0.0 ) { // Edge at north\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the left:\n\t\t\t\tvec2 coords;\n\t\t\t\tcoords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x );\n\t\t\t\tcoords.y = offset[ 1 ].y; // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET)\n\t\t\t\td.x = coords.x;\n\n\t\t\t\t// Now fetch the left crossing edges, two at a time using bilinear\n\t\t\t\t// filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to\n\t\t\t\t// discern what value each edge has:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).r;\n\n\t\t\t\t// Find the distance to the right:\n\t\t\t\tcoords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y );\n\t\t\t\td.y = coords.x;\n\n\t\t\t\t// We want the distances to be in pixel units (doing this here allow to\n\t\t\t\t// better interleave arithmetic and memory accesses):\n\t\t\t\td = d / resolution.x - pixcoord.x;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the right crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r;\n\n\t\t\t\t// Ok, we know how this pattern looks like, now it is time for getting\n\t\t\t\t// the actual area:\n\t\t\t\tweights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) );\n\t\t\t}\n\n\t\t\tif ( e.r > 0.0 ) { // Edge at west\n\t\t\t\tvec2 d;\n\n\t\t\t\t// Find the distance to the top:\n\t\t\t\tvec2 coords;\n\n\t\t\t\tcoords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z );\n\t\t\t\tcoords.x = offset[ 0 ].x; // offset[1].x = texcoord.x - 0.25 * resolution.x;\n\t\t\t\td.x = coords.y;\n\n\t\t\t\t// Fetch the top crossing edges:\n\t\t\t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).g;\n\n\t\t\t\t// Find the distance to the bottom:\n\t\t\t\tcoords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w );\n\t\t\t\td.y = coords.y;\n\n\t\t\t\t// We want the distances to be in pixel units:\n\t\t\t\td = d / resolution.y - pixcoord.y;\n\n\t\t\t\t// SMAAArea below needs a sqrt, as the areas texture is compressed\n\t\t\t\t// quadratically:\n\t\t\t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n\t\t\t\t// Fetch the bottom crossing edges:\n\t\t\t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n\t\t\t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g;\n\n\t\t\t\t// Get the area for this direction:\n\t\t\t\tweights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) );\n\t\t\t}\n\n\t\t\treturn weights;\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) );\n\n\t\t}`\n\n};\n\nconst SMAABlendShader = {\n\n\tname: 'SMAABlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tColor': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvoid SMAANeighborhoodBlendingVS( vec2 texcoord ) {\n\t\t\tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n\t\t\tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tSMAANeighborhoodBlendingVS( vUv );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tColor;\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vOffset[ 2 ];\n\n\t\tvec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) {\n\t\t\t// Fetch the blending weights for current pixel:\n\t\t\tvec4 a;\n\t\t\ta.xz = texture2D( blendTex, texcoord ).xz;\n\t\t\ta.y = texture2D( blendTex, offset[ 1 ].zw ).g;\n\t\t\ta.w = texture2D( blendTex, offset[ 1 ].xy ).a;\n\n\t\t\t// Is there any blending weight with a value greater than 0.0?\n\t\t\tif ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) {\n\t\t\t\treturn texture2D( colorTex, texcoord, 0.0 );\n\t\t\t} else {\n\t\t\t\t// Up to 4 lines can be crossing a pixel (one through each edge). We\n\t\t\t\t// favor blending by choosing the line with the maximum weight for each\n\t\t\t\t// direction:\n\t\t\t\tvec2 offset;\n\t\t\t\toffset.x = a.a > a.b ? a.a : -a.b; // left vs. right\n\t\t\t\toffset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs\n\n\t\t\t\t// Then we go in the direction that has the maximum weight:\n\t\t\t\tif ( abs( offset.x ) > abs( offset.y )) { // horizontal vs. vertical\n\t\t\t\t\toffset.y = 0.0;\n\t\t\t\t} else {\n\t\t\t\t\toffset.x = 0.0;\n\t\t\t\t}\n\n\t\t\t\t// Fetch the opposite color and lerp by hand:\n\t\t\t\tvec4 C = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\ttexcoord += sign( offset ) * resolution;\n\t\t\t\tvec4 Cop = texture2D( colorTex, texcoord, 0.0 );\n\t\t\t\tfloat s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y );\n\n\t\t\t\t// WebGL port note: Added gamma correction\n\t\t\t\tC.xyz = pow(C.xyz, vec3(2.2));\n\t\t\t\tCop.xyz = pow(Cop.xyz, vec3(2.2));\n\t\t\t\tvec4 mixed = mix(C, Cop, s);\n\t\t\t\tmixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));\n\n\t\t\t\treturn mixed;\n\t\t\t}\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse );\n\n\t\t}`\n\n};\n\nexport { SMAAEdgesShader, SMAAWeightsShader, SMAABlendShader };\n", "import {\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SMAAEdgesShader } from '../shaders/SMAAShader.js';\nimport { SMAAWeightsShader } from '../shaders/SMAAShader.js';\nimport { SMAABlendShader } from '../shaders/SMAAShader.js';\n\nclass SMAAPass extends Pass {\n\n\tconstructor( width, height ) {\n\n\t\tsuper();\n\n\t\t// render targets\n\n\t\tthis.edgesRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.edgesRT.texture.name = 'SMAAPass.edges';\n\n\t\tthis.weightsRT = new WebGLRenderTarget( width, height, {\n\t\t\tdepthBuffer: false,\n\t\t\ttype: HalfFloatType\n\t\t} );\n\t\tthis.weightsRT.texture.name = 'SMAAPass.weights';\n\n\t\t// textures\n\t\tconst scope = this;\n\n\t\tconst areaTextureImage = new Image();\n\t\tareaTextureImage.src = this.getAreaTexture();\n\t\tareaTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.areaTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.areaTexture = new Texture();\n\t\tthis.areaTexture.name = 'SMAAPass.area';\n\t\tthis.areaTexture.image = areaTextureImage;\n\t\tthis.areaTexture.minFilter = LinearFilter;\n\t\tthis.areaTexture.generateMipmaps = false;\n\t\tthis.areaTexture.flipY = false;\n\n\t\tconst searchTextureImage = new Image();\n\t\tsearchTextureImage.src = this.getSearchTexture();\n\t\tsearchTextureImage.onload = function () {\n\n\t\t\t// assigning data to HTMLImageElement.src is asynchronous (see #15162)\n\t\t\tscope.searchTexture.needsUpdate = true;\n\n\t\t};\n\n\t\tthis.searchTexture = new Texture();\n\t\tthis.searchTexture.name = 'SMAAPass.search';\n\t\tthis.searchTexture.image = searchTextureImage;\n\t\tthis.searchTexture.magFilter = NearestFilter;\n\t\tthis.searchTexture.minFilter = NearestFilter;\n\t\tthis.searchTexture.generateMipmaps = false;\n\t\tthis.searchTexture.flipY = false;\n\n\t\t// materials - pass 1\n\n\t\tthis.uniformsEdges = UniformsUtils.clone( SMAAEdgesShader.uniforms );\n\n\t\tthis.uniformsEdges[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t\tthis.materialEdges = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAEdgesShader.defines ),\n\t\t\tuniforms: this.uniformsEdges,\n\t\t\tvertexShader: SMAAEdgesShader.vertexShader,\n\t\t\tfragmentShader: SMAAEdgesShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 2\n\n\t\tthis.uniformsWeights = UniformsUtils.clone( SMAAWeightsShader.uniforms );\n\n\t\tthis.uniformsWeights[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsWeights[ 'tDiffuse' ].value = this.edgesRT.texture;\n\t\tthis.uniformsWeights[ 'tArea' ].value = this.areaTexture;\n\t\tthis.uniformsWeights[ 'tSearch' ].value = this.searchTexture;\n\n\t\tthis.materialWeights = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SMAAWeightsShader.defines ),\n\t\t\tuniforms: this.uniformsWeights,\n\t\t\tvertexShader: SMAAWeightsShader.vertexShader,\n\t\t\tfragmentShader: SMAAWeightsShader.fragmentShader\n\t\t} );\n\n\t\t// materials - pass 3\n\n\t\tthis.uniformsBlend = UniformsUtils.clone( SMAABlendShader.uniforms );\n\n\t\tthis.uniformsBlend[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.uniformsBlend[ 'tDiffuse' ].value = this.weightsRT.texture;\n\n\t\tthis.materialBlend = new ShaderMaterial( {\n\t\t\tuniforms: this.uniformsBlend,\n\t\t\tvertexShader: SMAABlendShader.vertexShader,\n\t\t\tfragmentShader: SMAABlendShader.fragmentShader\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {\n\n\t\t// pass 1\n\n\t\tthis.uniformsEdges[ 'tDiffuse' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialEdges;\n\n\t\trenderer.setRenderTarget( this.edgesRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 2\n\n\t\tthis.fsQuad.material = this.materialWeights;\n\n\t\trenderer.setRenderTarget( this.weightsRT );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// pass 3\n\n\t\tthis.uniformsBlend[ 'tColor' ].value = readBuffer.texture;\n\n\t\tthis.fsQuad.material = this.materialBlend;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.edgesRT.setSize( width, height );\n\t\tthis.weightsRT.setSize( width, height );\n\n\t\tthis.materialEdges.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialWeights.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\t\tthis.materialBlend.uniforms[ 'resolution' ].value.set( 1 / width, 1 / height );\n\n\t}\n\n\tgetAreaTexture() {\n\n\t\treturn 'data:image/png;base64,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';\n\n\t}\n\n\tgetSearchTexture() {\n\n\t\treturn 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.edgesRT.dispose();\n\t\tthis.weightsRT.dispose();\n\n\t\tthis.areaTexture.dispose();\n\t\tthis.searchTexture.dispose();\n\n\t\tthis.materialEdges.dispose();\n\t\tthis.materialWeights.dispose();\n\t\tthis.materialBlend.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SMAAPass };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\n/**\n*\n* Supersample Anti-Aliasing Render Pass\n*\n* This manual approach to SSAA re-renders the scene ones for each sample with camera jitter and accumulates the results.\n*\n* References: https://en.wikipedia.org/wiki/Supersampling\n*\n*/\n\nclass SSAARenderPass extends Pass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.sampleLevel = 4; // specified as n, where the number of samples is 2^n, so sampleLevel = 4, is 2^4 samples, 16.\n\t\tthis.unbiased = true;\n\n\t\t// as we need to clear the buffer in this pass, clearColor must be set to something, defaults to black.\n\t\tthis.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\t\tthis._oldClearColor = new Color();\n\n\t\tconst copyShader = CopyShader;\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.copyMaterial = new ShaderMaterial(\t{\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true,\n\t\t\tblending: AdditiveBlending\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( this.copyMaterial );\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget.dispose();\n\t\t\tthis.sampleRenderTarget = null;\n\n\t\t}\n\n\t\tthis.copyMaterial.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tif ( this.sampleRenderTarget )\tthis.sampleRenderTarget.setSize( width, height );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer ) {\n\n\t\tif ( ! this.sampleRenderTarget ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'SSAARenderPass.sample';\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ Math.max( 0, Math.min( this.sampleLevel, 5 ) ) ];\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst baseSampleWeight = 1.0 / jitterOffsets.length;\n\t\tconst roundingRange = 1 / 32;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\n\t\tconst viewOffset = {\n\n\t\t\tfullWidth: readBuffer.width,\n\t\t\tfullHeight: readBuffer.height,\n\t\t\toffsetX: 0,\n\t\t\toffsetY: 0,\n\t\t\twidth: readBuffer.width,\n\t\t\theight: readBuffer.height\n\n\t\t};\n\n\t\tconst originalViewOffset = Object.assign( {}, this.camera.view );\n\n\t\tif ( originalViewOffset.enabled ) Object.assign( viewOffset, originalViewOffset );\n\n\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\tfor ( let i = 0; i < jitterOffsets.length; i ++ ) {\n\n\t\t\tconst jitterOffset = jitterOffsets[ i ];\n\n\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\t\tviewOffset.fullWidth, viewOffset.fullHeight,\n\n\t\t\t\t\tviewOffset.offsetX + jitterOffset[ 0 ] * 0.0625, viewOffset.offsetY + jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\n\t\t\t\t\tviewOffset.width, viewOffset.height\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tlet sampleWeight = baseSampleWeight;\n\n\t\t\tif ( this.unbiased ) {\n\n\t\t\t\t// the theory is that equal weights for each sample lead to an accumulation of rounding errors.\n\t\t\t\t// The following equation varies the sampleWeight per sample so that it is uniformly distributed\n\t\t\t\t// across a range of values whose rounding errors cancel each other out.\n\n\t\t\t\tconst uniformCenteredDistribution = ( - 0.5 + ( i + 0.5 ) / jitterOffsets.length );\n\t\t\t\tsampleWeight += roundingRange * uniformCenteredDistribution;\n\n\t\t\t}\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\trenderer.setRenderTarget( this.renderToScreen ? null : writeBuffer );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\trenderer.clear();\n\n\t\t\t}\n\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( this.camera.setViewOffset && originalViewOffset.enabled ) {\n\n\t\t\tthis.camera.setViewOffset(\n\n\t\t\t\toriginalViewOffset.fullWidth, originalViewOffset.fullHeight,\n\n\t\t\t\toriginalViewOffset.offsetX, originalViewOffset.offsetY,\n\n\t\t\t\toriginalViewOffset.width, originalViewOffset.height\n\n\t\t\t);\n\n\t\t} else if ( this.camera.clearViewOffset ) {\n\n\t\t\tthis.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n}\n\n\n// These jitter vectors are specified in integers because it is easier.\n// I am assuming a [-8,8) integer grid, but it needs to be mapped onto [-0.5,0.5)\n// before being used, thus these integers need to be scaled by 1/16.\n//\n// Sample patterns reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476218%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { SSAARenderPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n\n/**\n * References:\n * http://john-chapman-graphics.blogspot.com/2013/01/ssao-tutorial.html\n * https://learnopengl.com/Advanced-Lighting/SSAO\n * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl\n */\n\nconst SSAOShader = {\n\n\tname: 'SSAOShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1,\n\t\t'KERNEL_SIZE': 32\n\t},\n\n\tuniforms: {\n\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'kernel': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'kernelRadius': { value: 8 },\n\t\t'minDistance': { value: 0.005 },\n\t\t'maxDistance': { value: 0.05 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\n\t\tuniform vec3 kernel[ KERNEL_SIZE ];\n\n\t\tuniform vec2 resolution;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\n\t\tuniform float kernelRadius;\n\t\tuniform float minDistance; // avoid artifacts caused by neighbour fragments with minimal depth difference\n\t\tuniform float maxDistance; // avoid the influence of fragments which are too far away\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getDepth( const in vec2 screenPosition ) {\n\n\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t}\n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tfloat getViewZ( const in float depth ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\n\t\t\tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\n\t\t\tclipPosition *= clipW; // unprojection.\n\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\n\t\t}\n\n\t\tvec3 getViewNormal( const in vec2 screenPosition ) {\n\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getDepth( vUv );\n\n\t\t\tif ( depth == 1.0 ) {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 ); // don't influence background\n\t\t\t\t\n\t\t\t} else {\n\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\n\t\t\t\tvec3 viewPosition = getViewPosition( vUv, depth, viewZ );\n\t\t\t\tvec3 viewNormal = getViewNormal( vUv );\n\n\t\t\t\tvec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 );\n\t\t\t\tvec3 random = vec3( texture2D( tNoise, vUv * noiseScale ).r );\n\n\t\t\t\t// compute matrix used to reorient a kernel vector\n\n\t\t\t\tvec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );\n\t\t\t\tvec3 bitangent = cross( viewNormal, tangent );\n\t\t\t\tmat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );\n\n\t\t\t\tfloat occlusion = 0.0;\n\n\t\t\t\tfor ( int i = 0; i < KERNEL_SIZE; i ++ ) {\n\n\t\t\t\t\tvec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space\n\t\t\t\t\tvec3 samplePoint = viewPosition + ( sampleVector * kernelRadius ); // calculate sample point\n\n\t\t\t\t\tvec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC\n\t\t\t\t\tsamplePointNDC /= samplePointNDC.w;\n\n\t\t\t\t\tvec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates\n\n\t\t\t\t\tfloat realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture\n\t\t\t\t\tfloat sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar ); // compute linear depth of the sample view Z value\n\t\t\t\t\tfloat delta = sampleDepth - realDepth;\n\n\t\t\t\t\tif ( delta > minDistance && delta < maxDistance ) { // if fragment is before sample point, increase occlusion\n\n\t\t\t\t\t\tocclusion += 1.0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tocclusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );\n\n\t\t\t\tgl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 );\n\n\t\t\t}\n\n\t\t}`\n\n};\n\nconst SSAODepthShader = {\n\n\tname: 'SSAODepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\nconst SSAOBlurShader = {\n\n\tname: 'SSAOBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader:\n\n\t\t`varying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader:\n\n\t\t`uniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\t\t\tfloat result = 0.0;\n\n\t\t\tfor ( int i = - 2; i <= 2; i ++ ) {\n\n\t\t\t\tfor ( int j = - 2; j <= 2; j ++ ) {\n\n\t\t\t\t\tvec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;\n\t\t\t\t\tresult += texture2D( tDiffuse, vUv + offset ).r;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { SSAOShader, SSAODepthShader, SSAOBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tFloatType,\n\tHalfFloatType,\n\tMathUtils,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRedFormat,\n\tDepthStencilFormat,\n\tUnsignedInt248Type,\n\tRepeatWrapping,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector3,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\nimport { SSAOShader } from '../shaders/SSAOShader.js';\nimport { SSAOBlurShader } from '../shaders/SSAOShader.js';\nimport { SSAODepthShader } from '../shaders/SSAOShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSAOPass extends Pass {\n\n\tconstructor( scene, camera, width, height, kernelSize = 32 ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.camera = camera;\n\t\tthis.scene = scene;\n\n\t\tthis.kernelRadius = 8;\n\t\tthis.kernel = [];\n\t\tthis.noiseTexture = null;\n\t\tthis.output = 0;\n\n\t\tthis.minDistance = 0.005;\n\t\tthis.maxDistance = 0.1;\n\n\t\tthis._visibilityCache = new Map();\n\n\t\t//\n\n\t\tthis.generateSampleKernel( kernelSize );\n\t\tthis.generateRandomKernelRotations();\n\n\t\t// depth texture\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.format = DepthStencilFormat;\n\t\tdepthTexture.type = UnsignedInt248Type;\n\n\t\t// normal render target with depth buffer\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture\n\t\t} );\n\n\t\t// ssao render target\n\n\t\tthis.ssaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\n\t\tthis.blurRenderTarget = this.ssaoRenderTarget.clone();\n\n\t\t// ssao material\n\n\t\tthis.ssaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOShader.uniforms ),\n\t\t\tvertexShader: SSAOShader.vertexShader,\n\t\t\tfragmentShader: SSAOShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssaoMaterial.defines[ 'KERNEL_SIZE' ] = kernelSize;\n\n\t\tthis.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;\n\t\tthis.ssaoMaterial.uniforms[ 'kernel' ].value = this.kernel;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssaoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAOBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAOBlurShader.uniforms ),\n\t\t\tvertexShader: SSAOBlurShader.vertexShader,\n\t\t\tfragmentShader: SSAOBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSAODepthShader.uniforms ),\n\t\t\tvertexShader: SSAODepthShader.vertexShader,\n\t\t\tfragmentShader: SSAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.ssaoRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)\n\n\t\tthis.overrideVisibility();\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\tthis.restoreVisibility();\n\n\t\t// render SSAO\n\n\t\tthis.ssaoMaterial.uniforms[ 'kernelRadius' ].value = this.kernelRadius;\n\t\tthis.ssaoMaterial.uniforms[ 'minDistance' ].value = this.minDistance;\n\t\tthis.ssaoMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget );\n\n\t\t// render blur\n\n\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSAOPass.OUTPUT.SSAO:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Blur:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = CustomBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : readBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this.originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\n\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n\tgenerateSampleKernel( kernelSize ) {\n\n\t\tconst kernel = this.kernel;\n\n\t\tfor ( let i = 0; i < kernelSize; i ++ ) {\n\n\t\t\tconst sample = new Vector3();\n\t\t\tsample.x = ( Math.random() * 2 ) - 1;\n\t\t\tsample.y = ( Math.random() * 2 ) - 1;\n\t\t\tsample.z = Math.random();\n\n\t\t\tsample.normalize();\n\n\t\t\tlet scale = i / kernelSize;\n\t\t\tscale = MathUtils.lerp( 0.1, 1, scale * scale );\n\t\t\tsample.multiplyScalar( scale );\n\n\t\t\tkernel.push( sample );\n\n\t\t}\n\n\t}\n\n\tgenerateRandomKernelRotations() {\n\n\t\tconst width = 4, height = 4;\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst size = width * height;\n\t\tconst data = new Float32Array( size );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tconst x = ( Math.random() * 2 ) - 1;\n\t\t\tconst y = ( Math.random() * 2 ) - 1;\n\t\t\tconst z = 0;\n\n\t\t\tdata[ i ] = simplex.noise3d( x, y, z );\n\n\t\t}\n\n\t\tthis.noiseTexture = new DataTexture( data, width, height, RedFormat, FloatType );\n\t\tthis.noiseTexture.wrapS = RepeatWrapping;\n\t\tthis.noiseTexture.wrapT = RepeatWrapping;\n\t\tthis.noiseTexture.needsUpdate = true;\n\n\t}\n\n\toverrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tcache.set( object, object.visible );\n\n\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t} );\n\n\t}\n\n\trestoreVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst visible = cache.get( object );\n\t\t\tobject.visible = visible;\n\n\t\t} );\n\n\t\tcache.clear();\n\n\t}\n\n}\n\nSSAOPass.OUTPUT = {\n\t'Default': 0,\n\t'SSAO': 1,\n\t'Blur': 2,\n\t'Depth': 3,\n\t'Normal': 4\n};\n\nexport { SSAOPass };\n", "import {\n\tMatrix4,\n\tVector2\n} from 'three';\n/**\n * References:\n * https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html\n */\n\nconst SSRShader = {\n\n\tname: 'SSRShader',\n\n\tdefines: {\n\t\tMAX_STEP: 0,\n\t\tPERSPECTIVE_CAMERA: true,\n\t\tDISTANCE_ATTENUATION: true,\n\t\tFRESNEL: true,\n\t\tINFINITE_THICK: false,\n\t\tSELECTIVE: false,\n\t},\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tMetalness': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrix': { value: new Matrix4() },\n\t\t'cameraInverseProjectionMatrix': { value: new Matrix4() },\n\t\t'opacity': { value: .5 },\n\t\t'maxDistance': { value: 180 },\n\t\t'cameraRange': { value: 0 },\n\t\t'thickness': { value: .018 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\t\t// precision highp float;\n\t\tprecision highp sampler2D;\n\t\tvarying vec2 vUv;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tMetalness;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float cameraRange;\n\t\tuniform vec2 resolution;\n\t\tuniform float opacity;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float maxDistance;\n\t\tuniform float thickness;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\t\t#include \n\t\tfloat pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) {\n\t\t\t//x0: point, x1: linePointA, x2: linePointB\n\t\t\t//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html\n\t\t\treturn length(cross(x0-x1,x0-x2))/length(x2-x1);\n\t\t}\n\t\tfloat pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){\n\t\t\t// https://mathworld.wolfram.com/Point-PlaneDistance.html\n\t\t\t//// https://en.wikipedia.org/wiki/Plane_(geometry)\n\t\t\t//// http://paulbourke.net/geometry/pointlineplane/\n\t\t\tfloat a=planeNormal.x,b=planeNormal.y,c=planeNormal.z;\n\t\t\tfloat x0=point.x,y0=point.y,z0=point.z;\n\t\t\tfloat x=planePoint.x,y=planePoint.y,z=planePoint.z;\n\t\t\tfloat d=-(a*x+b*y+c*z);\n\t\t\tfloat distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);\n\t\t\treturn distance;\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view\n\t\t}\n\t\tvec3 getViewNormal( const in vec2 uv ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, uv ).xyz );\n\t\t}\n\t\tvec2 viewPositionToXY(vec3 viewPosition){\n\t\t\tvec2 xy;\n\t\t\tvec4 clip=cameraProjectionMatrix*vec4(viewPosition,1);\n\t\t\txy=clip.xy;//clip\n\t\t\tfloat clipW=clip.w;\n\t\t\txy/=clipW;//NDC\n\t\t\txy=(xy+1.)/2.;//uv\n\t\t\txy*=resolution;//screen\n\t\t\treturn xy;\n\t\t}\n\t\tvoid main(){\n\t\t\t#ifdef SELECTIVE\n\t\t\t\tfloat metalness=texture2D(tMetalness,vUv).r;\n\t\t\t\tif(metalness==0.) return;\n\t\t\t#endif\n\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\tif(-viewZ>=cameraFar) return;\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3];\n\t\t\tvec3 viewPosition=getViewPosition( vUv, depth, clipW );\n\n\t\t\tvec2 d0=gl_FragCoord.xy;\n\t\t\tvec2 d1;\n\n\t\t\tvec3 viewNormal=getViewNormal( vUv );\n\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tvec3 viewIncidentDir=normalize(viewPosition);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#else\n\t\t\t\tvec3 viewIncidentDir=vec3(0,0,-1);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidentDir,viewNormal);\n\t\t\t#endif\n\n\t\t\tfloat maxReflectRayLen=maxDistance/dot(-viewIncidentDir,viewNormal);\n\t\t\t// dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html\n\t\t\t// if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen=cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen==dot(a,b)\n\t\t\t// maxReflectRayLen==maxDistance/dot(a,b)\n\n\t\t\tvec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen;\n\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\tif(d1viewPosition.z>-cameraNear){\n\t\t\t\t\t//https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx\n\t\t\t\t\tfloat t=(-cameraNear-viewPosition.z)/viewReflectDir.z;\n\t\t\t\t\td1viewPosition=viewPosition+viewReflectDir*t;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\td1=viewPositionToXY(d1viewPosition);\n\n\t\t\tfloat totalLen=length(d1-d0);\n\t\t\tfloat xLen=d1.x-d0.x;\n\t\t\tfloat yLen=d1.y-d0.y;\n\t\t\tfloat totalStep=max(abs(xLen),abs(yLen));\n\t\t\tfloat xSpan=xLen/totalStep;\n\t\t\tfloat ySpan=yLen/totalStep;\n\t\t\tfor(float i=0.;i=totalStep) break;\n\t\t\t\tvec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);\n\t\t\t\tif(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;\n\t\t\t\tfloat s=length(xy-d0)/totalLen;\n\t\t\t\tvec2 uv=xy/resolution;\n\n\t\t\t\tfloat d = getDepth(uv);\n\t\t\t\tfloat vZ = getViewZ( d );\n\t\t\t\tif(-vZ>=cameraFar) continue;\n\t\t\t\tfloat cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3];\n\t\t\t\tvec3 vP=getViewPosition( uv, d, cW );\n\n\t\t\t\t#ifdef PERSPECTIVE_CAMERA\n\t\t\t\t\t// https://comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf\n\t\t\t\t\tfloat recipVPZ=1./viewPosition.z;\n\t\t\t\t\tfloat viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ));\n\t\t\t\t#else\n\t\t\t\t\tfloat viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z);\n\t\t\t\t#endif\n\n\t\t\t\t// if(viewReflectRayZ>vZ) continue; // will cause \"npm run make-screenshot webgl_postprocessing_ssr\" high probability hang.\n\t\t\t\t// https://github.com/mrdoob/three.js/pull/21539#issuecomment-821061164\n\t\t\t\tif(viewReflectRayZ<=vZ){\n\n\t\t\t\t\tbool hit;\n\t\t\t\t\t#ifdef INFINITE_THICK\n\t\t\t\t\t\thit=true;\n\t\t\t\t\t#else\n\t\t\t\t\t\tfloat away=pointToLineDistance(vP,viewPosition,d1viewPosition);\n\n\t\t\t\t\t\tfloat minThickness;\n\t\t\t\t\t\tvec2 xyNeighbor=xy;\n\t\t\t\t\t\txyNeighbor.x+=1.;\n\t\t\t\t\t\tvec2 uvNeighbor=xyNeighbor/resolution;\n\t\t\t\t\t\tvec3 vPNeighbor=getViewPosition(uvNeighbor,d,cW);\n\t\t\t\t\t\tminThickness=vPNeighbor.x-vP.x;\n\t\t\t\t\t\tminThickness*=3.;\n\t\t\t\t\t\tfloat tk=max(minThickness,thickness);\n\n\t\t\t\t\t\thit=away<=tk;\n\t\t\t\t\t#endif\n\n\t\t\t\t\tif(hit){\n\t\t\t\t\t\tvec3 vN=getViewNormal( uv );\n\t\t\t\t\t\tif(dot(viewReflectDir,vN)>=0.) continue;\n\t\t\t\t\t\tfloat distance=pointPlaneDistance(vP,viewPosition,viewNormal);\n\t\t\t\t\t\tif(distance>maxDistance) break;\n\t\t\t\t\t\tfloat op=opacity;\n\t\t\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\t\t\tfloat ratio=1.-(distance/maxDistance);\n\t\t\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\t\t\tfloat fresnelCoe=(dot(viewIncidentDir,viewReflectDir)+1.)/2.;\n\t\t\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\tvec4 reflectColor=texture2D(tDiffuse,uv);\n\t\t\t\t\t\tgl_FragColor.xyz=reflectColor.xyz;\n\t\t\t\t\t\tgl_FragColor.a=op;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`\n\n};\n\nconst SSRDepthShader = {\n\n\tname: 'SSRDepthShader',\n\n\tdefines: {\n\t\t'PERSPECTIVE_CAMERA': 1\n\t},\n\n\tuniforms: {\n\n\t\t'tDepth': { value: null },\n\t\t'cameraNear': { value: null },\n\t\t'cameraFar': { value: null },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDepth;\n\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tfloat getLinearDepth( const in vec2 uv ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, uv ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, uv ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tfloat d = 1.0 - depth;\n\t\t\t// d=(d-.999)*1000.;\n\t\t\tgl_FragColor = vec4( vec3( d ), 1.0 );\n\n\t\t}\n\n\t`\n\n};\n\nconst SSRBlurShader = {\n\n\tname: 'SSRBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'opacity': { value: .5 },\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\t\tvoid main() {\n\t\t\t//reverse engineering from PhotoShop blur filter, then change coefficient\n\n\t\t\tvec2 texelSize = ( 1.0 / resolution );\n\n\t\t\tvec4 c=texture2D(tDiffuse,vUv);\n\n\t\t\tvec2 offset;\n\n\t\t\toffset=(vec2(-1,0))*texelSize;\n\t\t\tvec4 cl=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(1,0))*texelSize;\n\t\t\tvec4 cr=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,-1))*texelSize;\n\t\t\tvec4 cb=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,1))*texelSize;\n\t\t\tvec4 ct=texture2D(tDiffuse,vUv+offset);\n\n\t\t\t// float coeCenter=.5;\n\t\t\t// float coeSide=.125;\n\t\t\tfloat coeCenter=.2;\n\t\t\tfloat coeSide=.2;\n\t\t\tfloat a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide;\n\t\t\tvec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a;\n\t\t\tgl_FragColor=vec4(rgb,a);\n\n\t\t}\n\t`\n\n\n};\n\nexport { SSRShader, SSRDepthShader, SSRBlurShader };\n", "import {\n\tAddEquation,\n\tColor,\n\tNormalBlending,\n\tDepthTexture,\n\tSrcAlphaFactor,\n\tOneMinusSrcAlphaFactor,\n\tMeshNormalMaterial,\n\tMeshBasicMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedShortType,\n\tWebGLRenderTarget,\n\tHalfFloatType,\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { SSRShader } from '../shaders/SSRShader.js';\nimport { SSRBlurShader } from '../shaders/SSRShader.js';\nimport { SSRDepthShader } from '../shaders/SSRShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SSRPass extends Pass {\n\n\tconstructor( { renderer, scene, camera, width, height, selects, bouncing = false, groundReflector } ) {\n\n\t\tsuper();\n\n\t\tthis.width = ( width !== undefined ) ? width : 512;\n\t\tthis.height = ( height !== undefined ) ? height : 512;\n\n\t\tthis.clear = true;\n\n\t\tthis.renderer = renderer;\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\t\tthis.groundReflector = groundReflector;\n\n\t\tthis.opacity = SSRShader.uniforms.opacity.value;\n\t\tthis.output = 0;\n\n\t\tthis.maxDistance = SSRShader.uniforms.maxDistance.value;\n\t\tthis.thickness = SSRShader.uniforms.thickness.value;\n\n\t\tthis.tempColor = new Color();\n\n\t\tthis._selects = selects;\n\t\tthis.selective = Array.isArray( this._selects );\n\t\tObject.defineProperty( this, 'selects', {\n\t\t\tget() {\n\n\t\t\t\treturn this._selects;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._selects === val ) return;\n\t\t\t\tthis._selects = val;\n\t\t\t\tif ( Array.isArray( val ) ) {\n\n\t\t\t\t\tthis.selective = true;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = true;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.selective = false;\n\t\t\t\t\tthis.ssrMaterial.defines.SELECTIVE = false;\n\t\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._bouncing = bouncing;\n\t\tObject.defineProperty( this, 'bouncing', {\n\t\t\tget() {\n\n\t\t\t\treturn this._bouncing;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._bouncing === val ) return;\n\t\t\t\tthis._bouncing = val;\n\t\t\t\tif ( val ) {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.blur = true;\n\n\t\tthis._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;\n\t\tObject.defineProperty( this, 'distanceAttenuation', {\n\t\t\tget() {\n\n\t\t\t\treturn this._distanceAttenuation;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._distanceAttenuation === val ) return;\n\t\t\t\tthis._distanceAttenuation = val;\n\t\t\t\tthis.ssrMaterial.defines.DISTANCE_ATTENUATION = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\n\t\tthis._fresnel = SSRShader.defines.FRESNEL;\n\t\tObject.defineProperty( this, 'fresnel', {\n\t\t\tget() {\n\n\t\t\t\treturn this._fresnel;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._fresnel === val ) return;\n\t\t\t\tthis._fresnel = val;\n\t\t\t\tthis.ssrMaterial.defines.FRESNEL = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis._infiniteThick = SSRShader.defines.INFINITE_THICK;\n\t\tObject.defineProperty( this, 'infiniteThick', {\n\t\t\tget() {\n\n\t\t\t\treturn this._infiniteThick;\n\n\t\t\t},\n\t\t\tset( val ) {\n\n\t\t\t\tif ( this._infiniteThick === val ) return;\n\t\t\t\tthis._infiniteThick = val;\n\t\t\t\tthis.ssrMaterial.defines.INFINITE_THICK = val;\n\t\t\t\tthis.ssrMaterial.needsUpdate = true;\n\n\t\t\t}\n\t\t} );\n\n\t\t// beauty render target with depth buffer\n\n\t\tconst depthTexture = new DepthTexture();\n\t\tdepthTexture.type = UnsignedShortType;\n\t\tdepthTexture.minFilter = NearestFilter;\n\t\tdepthTexture.magFilter = NearestFilter;\n\n\t\tthis.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t\tdepthTexture: depthTexture,\n\t\t\tdepthBuffer: true\n\t\t} );\n\n\t\t//for bouncing\n\t\tthis.prevRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\t// normal render target\n\n\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\t\t// metalness render target\n\n\t\tthis.metalnessRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter,\n\t\t\ttype: HalfFloatType,\n\t\t} );\n\n\n\n\t\t// ssr render target\n\n\t\tthis.ssrRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\tminFilter: NearestFilter,\n\t\t\tmagFilter: NearestFilter\n\t\t} );\n\n\t\tthis.blurRenderTarget = this.ssrRenderTarget.clone();\n\t\tthis.blurRenderTarget2 = this.ssrRenderTarget.clone();\n\t\t// this.blurRenderTarget3 = this.ssrRenderTarget.clone();\n\n\t\t// ssr material\n\n\t\tthis.ssrMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRShader.defines, {\n\t\t\t\tMAX_STEP: Math.sqrt( this.width * this.width + this.height * this.height )\n\t\t\t} ),\n\t\t\tuniforms: UniformsUtils.clone( SSRShader.uniforms ),\n\t\t\tvertexShader: SSRShader.vertexShader,\n\t\t\tfragmentShader: SSRShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\n\t\tthis.ssrMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\tthis.ssrMaterial.defines.SELECTIVE = this.selective;\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.ssrMaterial.uniforms[ 'tMetalness' ].value = this.metalnessRenderTarget.texture;\n\t\tthis.ssrMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.ssrMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.ssrMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\t// normal material\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\t// metalnessOn material\n\n\t\tthis.metalnessOnMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'white'\n\t\t} );\n\n\t\t// metalnessOff material\n\n\t\tthis.metalnessOffMaterial = new MeshBasicMaterial( {\n\t\t\tcolor: 'black'\n\t\t} );\n\n\t\t// blur material\n\n\t\tthis.blurMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// blur material 2\n\n\t\tthis.blurMaterial2 = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRBlurShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRBlurShader.uniforms ),\n\t\t\tvertexShader: SSRBlurShader.vertexShader,\n\t\t\tfragmentShader: SSRBlurShader.fragmentShader\n\t\t} );\n\t\tthis.blurMaterial2.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\n\t\t// // blur material 3\n\n\t\t// this.blurMaterial3 = new ShaderMaterial({\n\t\t// defines: Object.assign({}, SSRBlurShader.defines),\n\t\t// uniforms: UniformsUtils.clone(SSRBlurShader.uniforms),\n\t\t// vertexShader: SSRBlurShader.vertexShader,\n\t\t// fragmentShader: SSRBlurShader.fragmentShader\n\t\t// });\n\t\t// this.blurMaterial3.uniforms['tDiffuse'].value = this.blurRenderTarget2.texture;\n\t\t// this.blurMaterial3.uniforms['resolution'].value.set(this.width, this.height);\n\n\t\t// material for rendering the depth\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, SSRDepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( SSRDepthShader.uniforms ),\n\t\t\tvertexShader: SSRDepthShader.vertexShader,\n\t\t\tfragmentShader: SSRDepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.beautyRenderTarget.depthTexture;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\n\t\t// material for rendering the content of a render target\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: SrcAlphaFactor,\n\t\t\tblendDst: OneMinusSrcAlphaFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: SrcAlphaFactor,\n\t\t\tblendDstAlpha: OneMinusSrcAlphaFactor,\n\t\t\tblendEquationAlpha: AddEquation,\n\t\t\t// premultipliedAlpha:true,\n\t\t} );\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t\tthis.originalClearColor = new Color();\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose render targets\n\n\t\tthis.beautyRenderTarget.dispose();\n\t\tthis.prevRenderTarget.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.metalnessRenderTarget.dispose();\n\t\tthis.ssrRenderTarget.dispose();\n\t\tthis.blurRenderTarget.dispose();\n\t\tthis.blurRenderTarget2.dispose();\n\t\t// this.blurRenderTarget3.dispose();\n\n\t\t// dispose materials\n\n\t\tthis.normalMaterial.dispose();\n\t\tthis.metalnessOnMaterial.dispose();\n\t\tthis.metalnessOffMaterial.dispose();\n\t\tthis.blurMaterial.dispose();\n\t\tthis.blurMaterial2.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\n\t\t// dipsose full screen quad\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\trender( renderer, writeBuffer /*, readBuffer, deltaTime, maskActive */ ) {\n\n\t\t// render beauty and depth\n\n\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\trenderer.clear();\n\t\tif ( this.groundReflector ) {\n\n\t\t\tthis.groundReflector.visible = false;\n\t\t\tthis.groundReflector.doRender( this.renderer, this.scene, this.camera );\n\t\t\tthis.groundReflector.visible = true;\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\t\tif ( this.groundReflector ) this.groundReflector.visible = false;\n\n\t\t// render normals\n\n\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0, 0 );\n\n\t\t// render metalnesses\n\n\t\tif ( this.selective ) {\n\n\t\t\tthis.renderMetalness( renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0 );\n\n\t\t}\n\n\t\t// render SSR\n\n\t\tthis.ssrMaterial.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.ssrMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\tthis.ssrMaterial.uniforms[ 'thickness' ].value = this.thickness;\n\t\tthis.renderPass( renderer, this.ssrMaterial, this.ssrRenderTarget );\n\n\n\t\t// render blur\n\n\t\tif ( this.blur ) {\n\n\t\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget );\n\t\t\tthis.renderPass( renderer, this.blurMaterial2, this.blurRenderTarget2 );\n\t\t\t// this.renderPass(renderer, this.blurMaterial3, this.blurRenderTarget3);\n\n\t\t}\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase SSRPass.OUTPUT.Default:\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.prevRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase SSRPass.OUTPUT.SSR:\n\n\t\t\t\tif ( this.blur )\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\telse\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tif ( this.bouncing ) {\n\n\t\t\t\t\tif ( this.blur )\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget2.texture;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssrRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = NormalBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.prevRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Beauty:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Depth:\n\n\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase SSRPass.OUTPUT.Metalness:\n\n\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.metalnessRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.SSRPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.fsQuad.material = passMaterial;\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\trenderMetalness( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\tthis.originalClearColor.copy( renderer.getClearColor( this.tempColor ) );\n\t\tconst originalClearAlpha = renderer.getClearAlpha( this.tempColor );\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild._SSRPassBackupMaterial = child.material;\n\t\t\tif ( this._selects.includes( child ) ) {\n\n\t\t\t\tchild.material = this.metalnessOnMaterial;\n\n\t\t\t} else {\n\n\t\t\t\tchild.material = this.metalnessOffMaterial;\n\n\t\t\t}\n\n\t\t} );\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.traverseVisible( child => {\n\n\t\t\tchild.material = child._SSRPassBackupMaterial;\n\n\t\t} );\n\n\t\t// restore original state\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this.originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );\n\t\tthis.ssrMaterial.needsUpdate = true;\n\t\tthis.beautyRenderTarget.setSize( width, height );\n\t\tthis.prevRenderTarget.setSize( width, height );\n\t\tthis.ssrRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.metalnessRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget.setSize( width, height );\n\t\tthis.blurRenderTarget2.setSize( width, height );\n\t\t// this.blurRenderTarget3.setSize(width, height);\n\n\t\tthis.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\tthis.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\tthis.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );\n\n\t}\n\n}\n\nSSRPass.OUTPUT = {\n\t'Default': 0,\n\t'SSR': 1,\n\t'Beauty': 3,\n\t'Depth': 4,\n\t'Normal': 5,\n\t'Metalness': 7,\n};\n\nexport { SSRPass };\n", "import {\n\tHalfFloatType,\n\tNoBlending,\n\tShaderMaterial,\n\tUniformsUtils,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass SavePass extends Pass {\n\n\tconstructor( renderTarget ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.textureID = 'tDiffuse';\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tif ( this.renderTarget === undefined ) {\n\n\t\t\tthis.renderTarget = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later\n\t\t\tthis.renderTarget.texture.name = 'SavePass.rt';\n\n\t\t}\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderTarget );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis.renderTarget.setSize( width, height );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.renderTarget.dispose();\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { SavePass };\n", "import {\n\tHalfFloatType,\n\tWebGLRenderTarget\n} from 'three';\nimport { SSAARenderPass } from './SSAARenderPass.js';\n\n/**\n *\n * Temporal Anti-Aliasing Render Pass\n *\n * When there is no motion in the scene, the TAA render pass accumulates jittered camera samples across frames to create a high quality anti-aliased result.\n *\n * References:\n *\n * TODO: Add support for motion vector pas so that accumulation of samples across frames can occur on dynamics scenes.\n *\n */\n\nclass TAARenderPass extends SSAARenderPass {\n\n\tconstructor( scene, camera, clearColor, clearAlpha ) {\n\n\t\tsuper( scene, camera, clearColor, clearAlpha );\n\n\t\tthis.sampleLevel = 0;\n\t\tthis.accumulate = false;\n\t\tthis.accumulateIndex = - 1;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime ) {\n\n\t\tif ( this.accumulate === false ) {\n\n\t\t\tsuper.render( renderer, writeBuffer, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = - 1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst jitterOffsets = _JitterVectors[ 5 ];\n\n\t\tif ( this.sampleRenderTarget === undefined ) {\n\n\t\t\tthis.sampleRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.sampleRenderTarget.texture.name = 'TAARenderPass.sample';\n\n\t\t}\n\n\t\tif ( this.holdRenderTarget === undefined ) {\n\n\t\t\tthis.holdRenderTarget = new WebGLRenderTarget( readBuffer.width, readBuffer.height, { type: HalfFloatType } );\n\t\t\tthis.holdRenderTarget.texture.name = 'TAARenderPass.hold';\n\n\t\t}\n\n\t\tif ( this.accumulateIndex === - 1 ) {\n\n\t\t\tsuper.render( renderer, this.holdRenderTarget, readBuffer, deltaTime );\n\n\t\t\tthis.accumulateIndex = 0;\n\n\t\t}\n\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tconst oldClearAlpha = renderer.getClearAlpha();\n\n\t\tconst sampleWeight = 1.0 / ( jitterOffsets.length );\n\n\t\tif ( this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = sampleWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = writeBuffer.texture;\n\n\t\t\t// render the scene multiple times, each slightly jitter offset from the last and accumulate the results.\n\t\t\tconst numSamplesPerFrame = Math.pow( 2, this.sampleLevel );\n\t\t\tfor ( let i = 0; i < numSamplesPerFrame; i ++ ) {\n\n\t\t\t\tconst j = this.accumulateIndex;\n\t\t\t\tconst jitterOffset = jitterOffsets[ j ];\n\n\t\t\t\tif ( this.camera.setViewOffset ) {\n\n\t\t\t\t\tthis.camera.setViewOffset( readBuffer.width, readBuffer.height,\n\t\t\t\t\t\tjitterOffset[ 0 ] * 0.0625, jitterOffset[ 1 ] * 0.0625, // 0.0625 = 1 / 16\n\t\t\t\t\t\treadBuffer.width, readBuffer.height );\n\n\t\t\t\t}\n\n\t\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\t\t\trenderer.clear();\n\t\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t\t\trenderer.setRenderTarget( this.sampleRenderTarget );\n\t\t\t\tif ( this.accumulateIndex === 0 ) {\n\n\t\t\t\t\trenderer.setClearColor( 0x000000, 0.0 );\n\t\t\t\t\trenderer.clear();\n\n\t\t\t\t}\n\n\t\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\t\tthis.accumulateIndex ++;\n\n\t\t\t\tif ( this.accumulateIndex >= jitterOffsets.length ) break;\n\n\t\t\t}\n\n\t\t\tif ( this.camera.clearViewOffset ) this.camera.clearViewOffset();\n\n\t\t}\n\n\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\t\tconst accumulationWeight = this.accumulateIndex * sampleWeight;\n\n\t\tif ( accumulationWeight > 0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.sampleRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\tif ( accumulationWeight < 1.0 ) {\n\n\t\t\tthis.copyUniforms[ 'opacity' ].value = 1.0 - accumulationWeight;\n\t\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.holdRenderTarget.texture;\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t}\n\n\tdispose() {\n\n\t\tsuper.dispose();\n\n\t\tif ( this.holdRenderTarget ) this.holdRenderTarget.dispose();\n\n\t}\n\n}\n\nconst _JitterVectors = [\n\t[\n\t\t[ 0, 0 ]\n\t],\n\t[\n\t\t[ 4, 4 ], [ - 4, - 4 ]\n\t],\n\t[\n\t\t[ - 2, - 6 ], [ 6, - 2 ], [ - 6, 2 ], [ 2, 6 ]\n\t],\n\t[\n\t\t[ 1, - 3 ], [ - 1, 3 ], [ 5, 1 ], [ - 3, - 5 ],\n\t\t[ - 5, 5 ], [ - 7, - 1 ], [ 3, 7 ], [ 7, - 7 ]\n\t],\n\t[\n\t\t[ 1, 1 ], [ - 1, - 3 ], [ - 3, 2 ], [ 4, - 1 ],\n\t\t[ - 5, - 2 ], [ 2, 5 ], [ 5, 3 ], [ 3, - 5 ],\n\t\t[ - 2, 6 ], [ 0, - 7 ], [ - 4, - 6 ], [ - 6, 4 ],\n\t\t[ - 8, 0 ], [ 7, - 4 ], [ 6, 7 ], [ - 7, - 8 ]\n\t],\n\t[\n\t\t[ - 4, - 7 ], [ - 7, - 5 ], [ - 3, - 5 ], [ - 5, - 4 ],\n\t\t[ - 1, - 4 ], [ - 2, - 2 ], [ - 6, - 1 ], [ - 4, 0 ],\n\t\t[ - 7, 1 ], [ - 1, 2 ], [ - 6, 3 ], [ - 3, 3 ],\n\t\t[ - 7, 6 ], [ - 3, 6 ], [ - 5, 7 ], [ - 1, 7 ],\n\t\t[ 5, - 7 ], [ 1, - 6 ], [ 6, - 5 ], [ 4, - 4 ],\n\t\t[ 2, - 3 ], [ 7, - 2 ], [ 1, - 1 ], [ 4, - 1 ],\n\t\t[ 2, 1 ], [ 6, 2 ], [ 0, 4 ], [ 4, 4 ],\n\t\t[ 2, 5 ], [ 7, 5 ], [ 5, 6 ], [ 3, 7 ]\n\t]\n];\n\nexport { TAARenderPass };\n", "import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\n\nclass TexturePass extends Pass {\n\n\tconstructor( map, opacity ) {\n\n\t\tsuper();\n\n\t\tconst shader = CopyShader;\n\n\t\tthis.map = map;\n\t\tthis.opacity = ( opacity !== undefined ) ? opacity : 1.0;\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tpremultipliedAlpha: true\n\n\t\t} );\n\n\t\tthis.needsSwap = false;\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tthis.uniforms[ 'opacity' ].value = this.opacity;\n\t\tthis.uniforms[ 'tDiffuse' ].value = this.map;\n\t\tthis.material.transparent = ( this.opacity < 1.0 );\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n}\n\nexport { TexturePass };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityHighPassShader = {\n\n\tname: 'LuminosityHighPassShader',\n\n\tshaderID: 'luminosityHighPass',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'luminosityThreshold': { value: 1.0 },\n\t\t'smoothWidth': { value: 1.0 },\n\t\t'defaultColor': { value: new Color( 0x000000 ) },\n\t\t'defaultOpacity': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 defaultColor;\n\t\tuniform float defaultOpacity;\n\t\tuniform float luminosityThreshold;\n\t\tuniform float smoothWidth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\n\n\t\t\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n\n\t\t\tgl_FragColor = mix( outputColor, texel, alpha );\n\n\t\t}`\n\n};\n\nexport { LuminosityHighPassShader };\n", "import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';\n\n/**\n * UnrealBloomPass is inspired by the bloom pass of Unreal Engine. It creates a\n * mip map chain of bloom textures and blurs them with different radii. Because\n * of the weighted combination of mips, and because larger blurs are done on\n * higher mips, this effect provides good quality and performance.\n *\n * Reference:\n * - https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/\n */\nclass UnrealBloomPass extends Pass {\n\n\tconstructor( resolution, strength, radius, threshold ) {\n\n\t\tsuper();\n\n\t\tthis.strength = ( strength !== undefined ) ? strength : 1;\n\t\tthis.radius = radius;\n\t\tthis.threshold = threshold;\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\t// create color only once here, reuse it later inside the render function\n\t\tthis.clearColor = new Color( 0, 0, 0 );\n\n\t\t// render targets\n\t\tthis.renderTargetsHorizontal = [];\n\t\tthis.renderTargetsVertical = [];\n\t\tthis.nMips = 5;\n\t\tlet resx = Math.round( this.resolution.x / 2 );\n\t\tlet resy = Math.round( this.resolution.y / 2 );\n\n\t\tthis.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBright.texture.name = 'UnrealBloomPass.bright';\n\t\tthis.renderTargetBright.texture.generateMipmaps = false;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tconst renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;\n\t\t\trenderTargetHorizontal.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsHorizontal.push( renderTargetHorizontal );\n\n\t\t\tconst renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;\n\t\t\trenderTargetVertical.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsVertical.push( renderTargetVertical );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// luminosity high pass material\n\n\t\tconst highPassShader = LuminosityHighPassShader;\n\t\tthis.highPassUniforms = UniformsUtils.clone( highPassShader.uniforms );\n\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = threshold;\n\t\tthis.highPassUniforms[ 'smoothWidth' ].value = 0.01;\n\n\t\tthis.materialHighPassFilter = new ShaderMaterial( {\n\t\t\tuniforms: this.highPassUniforms,\n\t\t\tvertexShader: highPassShader.vertexShader,\n\t\t\tfragmentShader: highPassShader.fragmentShader\n\t\t} );\n\n\t\t// gaussian blur materials\n\n\t\tthis.separableBlurMaterials = [];\n\t\tconst kernelSizeArray = [ 3, 5, 7, 9, 11 ];\n\t\tresx = Math.round( this.resolution.x / 2 );\n\t\tresy = Math.round( this.resolution.y / 2 );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// composite material\n\n\t\tthis.compositeMaterial = this.getCompositeMaterial( this.nMips );\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture4' ].value = this.renderTargetsVertical[ 3 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;\n\n\t\tconst bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;\n\t\tthis.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\t// blend material\n\n\t\tconst copyShader = CopyShader;\n\n\t\tthis.copyUniforms = UniformsUtils.clone( copyShader.uniforms );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: copyShader.vertexShader,\n\t\t\tfragmentShader: copyShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis.enabled = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis.oldClearAlpha = 1;\n\n\t\tthis.basic = new MeshBasicMaterial();\n\n\t\tthis.fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.renderTargetsVertical.length; i ++ ) {\n\n\t\t\tthis.renderTargetsVertical[ i ].dispose();\n\n\t\t}\n\n\t\tthis.renderTargetBright.dispose();\n\n\t\t//\n\n\t\tfor ( let i = 0; i < this.separableBlurMaterials.length; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials[ i ].dispose();\n\n\t\t}\n\n\t\tthis.compositeMaterial.dispose();\n\t\tthis.blendMaterial.dispose();\n\t\tthis.basic.dispose();\n\n\t\t//\n\n\t\tthis.fsQuad.dispose();\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tlet resx = Math.round( width / 2 );\n\t\tlet resy = Math.round( height / 2 );\n\n\t\tthis.renderTargetBright.setSize( resx, resy );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].setSize( resx, resy );\n\t\t\tthis.renderTargetsVertical[ i ].setSize( resx, resy );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( this.clearColor, 0 );\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render input to screen\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis.fsQuad.material = this.basic;\n\t\t\tthis.basic.map = readBuffer.texture;\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// 1. Extract Bright Areas\n\n\t\tthis.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;\n\t\tthis.fsQuad.material = this.materialHighPassFilter;\n\n\t\trenderer.setRenderTarget( this.renderTargetBright );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// 2. Blur All the mips progressively\n\n\t\tlet inputRenderTarget = this.renderTargetBright;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.fsQuad.material = this.separableBlurMaterials[ i ];\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetsVertical[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t\tinputRenderTarget = this.renderTargetsVertical[ i ];\n\n\t\t}\n\n\t\t// Composite All the mips\n\n\t\tthis.fsQuad.material = this.compositeMaterial;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );\n\t\trenderer.clear();\n\t\tthis.fsQuad.render( renderer );\n\n\t\t// Blend it additively over the input texture\n\n\t\tthis.fsQuad.material = this.blendMaterial;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Restore renderer settings\n\n\t\trenderer.setClearColor( this._oldClearColor, this.oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\tgetSeperableBlurMaterial( kernelRadius ) {\n\n\t\tconst coefficients = [];\n\n\t\tfor ( let i = 0; i < kernelRadius; i ++ ) {\n\n\t\t\tcoefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );\n\n\t\t}\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_RADIUS': kernelRadius\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 invSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float gaussianCoefficients[KERNEL_RADIUS];\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat weightSum = gaussianCoefficients[0];\n\t\t\t\t\tvec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;\n\t\t\t\t\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = float(i);\n\t\t\t\t\t\tfloat w = gaussianCoefficients[i];\n\t\t\t\t\t\tvec2 uvOffset = direction * invSize * x;\n\t\t\t\t\t\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;\n\t\t\t\t\t\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;\n\t\t\t\t\t\tdiffuseSum += (sample1 + sample2) * w;\n\t\t\t\t\t\tweightSum += 2.0 * w;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\tgetCompositeMaterial( nMips ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'NUM_MIPS': nMips\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'blurTexture1': { value: null },\n\t\t\t\t'blurTexture2': { value: null },\n\t\t\t\t'blurTexture3': { value: null },\n\t\t\t\t'blurTexture4': { value: null },\n\t\t\t\t'blurTexture5': { value: null },\n\t\t\t\t'bloomStrength': { value: 1.0 },\n\t\t\t\t'bloomFactors': { value: null },\n\t\t\t\t'bloomTintColors': { value: null },\n\t\t\t\t'bloomRadius': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tuniform sampler2D blurTexture1;\n\t\t\t\tuniform sampler2D blurTexture2;\n\t\t\t\tuniform sampler2D blurTexture3;\n\t\t\t\tuniform sampler2D blurTexture4;\n\t\t\t\tuniform sampler2D blurTexture5;\n\t\t\t\tuniform float bloomStrength;\n\t\t\t\tuniform float bloomRadius;\n\t\t\t\tuniform float bloomFactors[NUM_MIPS];\n\t\t\t\tuniform vec3 bloomTintColors[NUM_MIPS];\n\n\t\t\t\tfloat lerpBloomFactor(const in float factor) {\n\t\t\t\t\tfloat mirrorFactor = 1.2 - factor;\n\t\t\t\t\treturn mix(factor, mirrorFactor, bloomRadius);\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n}\n\nUnrealBloomPass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nUnrealBloomPass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { UnrealBloomPass };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass CSS2DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS2DObject = true;\n\n\t\tthis.element = element;\n\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.center = new Vector2( 0.5, 0.5 ); // ( 0, 0 ) is the lower left; ( 1, 1 ) is the top right\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\tthis.center = source.center;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a = new Vector3();\nconst _b = new Vector3();\n\nclass CSS2DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tzOrder( scene );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS2DObject ) object.element.style.display = 'none';\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\thideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t\t\n\t\t\tif ( object.isCSS2DObject ) {\n\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst visible = ( _vector.z >= - 1 && _vector.z <= 1 ) && ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\telement.style.transform = 'translate(' + ( - 100 * object.center.x ) + '%,' + ( - 100 * object.center.y ) + '%)' + 'translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t\tif ( element.parentNode !== domElement ) {\n\n\t\t\t\t\t\tdomElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\n\t\t\t_a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn _a.distanceToSquared( _b );\n\n\t\t}\n\n\t\tfunction filterAndFlatten( scene ) {\n\n\t\t\tconst result = [];\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\n\t\t\t} );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction zOrder( scene ) {\n\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\t\treturn b.renderOrder - a.renderOrder;\n\n\t\t\t\t}\n\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\t\treturn distanceA - distanceB;\n\n\t\t\t} );\n\n\t\t\tconst zMax = sorted.length;\n\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS2DObject, CSS2DRenderer };\n", "import {\n\tMatrix4,\n\tObject3D,\n\tQuaternion,\n\tVector3\n} from 'three';\n\n/**\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\n */\n\nconst _position = new Vector3();\nconst _quaternion = new Quaternion();\nconst _scale = new Vector3();\n\nclass CSS3DObject extends Object3D {\n\n\tconstructor( element = document.createElement( 'div' ) ) {\n\n\t\tsuper();\n\n\t\tthis.isCSS3DObject = true;\n\n\t\tthis.element = element;\n\t\tthis.element.style.position = 'absolute';\n\t\tthis.element.style.pointerEvents = 'auto';\n\t\tthis.element.style.userSelect = 'none';\n\n\t\tthis.element.setAttribute( 'draggable', false );\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CSS3DSprite extends CSS3DObject {\n\n\tconstructor( element ) {\n\n\t\tsuper( element );\n\n\t\tthis.isCSS3DSprite = true;\n\n\t\tthis.rotation2D = 0;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.rotation2D = source.rotation2D;\n\n\t\treturn this;\n\n\t}\n\n}\n\n//\n\nconst _matrix = new Matrix4();\nconst _matrix2 = new Matrix4();\n\nclass CSS3DRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tcamera: { style: '' },\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = parameters.element !== undefined ? parameters.element : document.createElement( 'div' );\n\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tconst viewElement = document.createElement( 'div' );\n\t\tviewElement.style.transformOrigin = '0 0';\n\t\tviewElement.style.pointerEvents = 'none';\n\t\tdomElement.appendChild( viewElement );\n\n\t\tconst cameraElement = document.createElement( 'div' );\n\n\t\tcameraElement.style.transformStyle = 'preserve-3d';\n\n\t\tviewElement.appendChild( cameraElement );\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tconst fov = camera.projectionMatrix.elements[ 5 ] * _heightHalf;\n\n\t\t\tif ( camera.view && camera.view.enabled ) {\n\n\t\t\t\t// view offset\n\t\t\t\tviewElement.style.transform = `translate( ${ - camera.view.offsetX * ( _width / camera.view.width ) }px, ${ - camera.view.offsetY * ( _height / camera.view.height ) }px )`;\n\n\t\t\t\t// view fullWidth and fullHeight, view width and height\n\t\t\t\tviewElement.style.transform += `scale( ${ camera.view.fullWidth / camera.view.width }, ${ camera.view.fullHeight / camera.view.height } )`;\n\n\t\t\t} else {\n\n\t\t\t\tviewElement.style.transform = '';\n\n\t\t\t}\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tlet tx, ty;\n\n\t\t\tif ( camera.isOrthographicCamera ) {\n\n\t\t\t\ttx = - ( camera.right + camera.left ) / 2;\n\t\t\t\tty = ( camera.top + camera.bottom ) / 2;\n\n\t\t\t}\n\n\t\t\tconst scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;\n\t\t\tconst cameraCSSMatrix = camera.isOrthographicCamera ?\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'scale(' + fov + ')' + 'translate(' + epsilon( tx ) + 'px,' + epsilon( ty ) + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse ) :\n\t\t\t\t`scale( ${ scaleByViewOffset } )` + 'translateZ(' + fov + 'px)' + getCameraCSSMatrix( camera.matrixWorldInverse );\n\t\t\tconst perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';\n\n\t\t\tconst style = perspective + cameraCSSMatrix +\n\t\t\t\t'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n\t\t\tif ( cache.camera.style !== style ) {\n\n\t\t\t\tcameraElement.style.transform = style;\n\n\t\t\t\tcache.camera.style = style;\n\n\t\t\t}\n\n\t\t\trenderObject( scene, scene, camera, cameraCSSMatrix );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t\tviewElement.style.width = width + 'px';\n\t\t\tviewElement.style.height = height + 'px';\n\n\t\t\tcameraElement.style.width = width + 'px';\n\t\t\tcameraElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction epsilon( value ) {\n\n\t\t\treturn Math.abs( value ) < 1e-10 ? 0 : value;\n\n\t\t}\n\n\t\tfunction getCameraCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\n\t\t\treturn 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t}\n\n\t\tfunction getObjectCSSMatrix( matrix ) {\n\n\t\t\tconst elements = matrix.elements;\n\t\t\tconst matrix3d = 'matrix3d(' +\n\t\t\t\tepsilon( elements[ 0 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 1 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 2 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 3 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 4 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 5 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 6 ] ) + ',' +\n\t\t\t\tepsilon( - elements[ 7 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 8 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 9 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 10 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 11 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 12 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 13 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 14 ] ) + ',' +\n\t\t\t\tepsilon( elements[ 15 ] ) +\n\t\t\t')';\n\n\t\t\treturn 'translate(-50%,-50%)' + matrix3d;\n\n\t\t}\n\n\t\tfunction hideObject( object ) {\n\n\t\t\tif ( object.isCSS3DObject ) object.element.style.display = 'none';\n\t \n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t hideObject( object.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, cameraCSSMatrix ) {\n\n\t\t\tif ( object.visible === false ) {\n\n\t\t\t\thideObject( object );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( object.isCSS3DObject ) {\n\n\t\t\t\tconst visible = ( object.layers.test( camera.layers ) === true );\n\n\t\t\t\tconst element = object.element;\n\t\t\t\telement.style.display = visible === true ? '' : 'none';\n\n\t\t\t\tif ( visible === true ) {\n\n\t\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t\tlet style;\n\n\t\t\t\t\tif ( object.isCSS3DSprite ) {\n\n\t\t\t\t\t\t// http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\n\n\t\t\t\t\t\t_matrix.copy( camera.matrixWorldInverse );\n\t\t\t\t\t\t_matrix.transpose();\n\n\t\t\t\t\t\tif ( object.rotation2D !== 0 ) _matrix.multiply( _matrix2.makeRotationZ( object.rotation2D ) );\n\n\t\t\t\t\t\tobject.matrixWorld.decompose( _position, _quaternion, _scale );\n\t\t\t\t\t\t_matrix.setPosition( _position );\n\t\t\t\t\t\t_matrix.scale( _scale );\n\n\t\t\t\t\t\t_matrix.elements[ 3 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 7 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 11 ] = 0;\n\t\t\t\t\t\t_matrix.elements[ 15 ] = 1;\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( _matrix );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstyle = getObjectCSSMatrix( object.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cachedObject = cache.objects.get( object );\n\n\t\t\t\t\tif ( cachedObject === undefined || cachedObject.style !== style ) {\n\n\t\t\t\t\t\telement.style.transform = style;\n\n\t\t\t\t\t\tconst objectData = { style: style };\n\t\t\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( element.parentNode !== cameraElement ) {\n\n\t\t\t\t\t\tcameraElement.appendChild( element );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera, cameraCSSMatrix );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { CSS3DObject, CSS3DSprite, CSS3DRenderer };\n", "import {\n\tBox3,\n\tColor,\n\tDoubleSide,\n\tFrustum,\n\tMatrix3,\n\tMatrix4,\n\tVector2,\n\tVector3,\n\tVector4\n} from 'three';\n\nclass RenderableObject {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableFace {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\t\tthis.v3 = new RenderableVertex();\n\n\t\tthis.normalModel = new Vector3();\n\n\t\tthis.vertexNormalsModel = [ new Vector3(), new Vector3(), new Vector3() ];\n\t\tthis.vertexNormalsLength = 0;\n\n\t\tthis.color = new Color();\n\t\tthis.material = null;\n\t\tthis.uvs = [ new Vector2(), new Vector2(), new Vector2() ];\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableVertex {\n\n\tconstructor() {\n\n\t\tthis.position = new Vector3();\n\t\tthis.positionWorld = new Vector3();\n\t\tthis.positionScreen = new Vector4();\n\n\t\tthis.visible = true;\n\n\t}\n\n\tcopy( vertex ) {\n\n\t\tthis.positionWorld.copy( vertex.positionWorld );\n\t\tthis.positionScreen.copy( vertex.positionScreen );\n\n\t}\n\n}\n\n//\n\nclass RenderableLine {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.v1 = new RenderableVertex();\n\t\tthis.v2 = new RenderableVertex();\n\n\t\tthis.vertexColors = [ new Color(), new Color() ];\n\t\tthis.material = null;\n\n\t\tthis.z = 0;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass RenderableSprite {\n\n\tconstructor() {\n\n\t\tthis.id = 0;\n\n\t\tthis.object = null;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\n\t\tthis.rotation = 0;\n\t\tthis.scale = new Vector2();\n\n\t\tthis.material = null;\n\t\tthis.renderOrder = 0;\n\n\t}\n\n}\n\n//\n\nclass Projector {\n\n\tconstructor() {\n\n\t\tlet _object, _objectCount, _objectPoolLength = 0,\n\t\t\t_vertex, _vertexCount, _vertexPoolLength = 0,\n\t\t\t_face, _faceCount, _facePoolLength = 0,\n\t\t\t_line, _lineCount, _linePoolLength = 0,\n\t\t\t_sprite, _spriteCount, _spritePoolLength = 0,\n\t\t\t_modelMatrix;\n\n\t\tconst\n\n\t\t\t_renderData = { objects: [], lights: [], elements: [] },\n\n\t\t\t_vector3 = new Vector3(),\n\t\t\t_vector4 = new Vector4(),\n\n\t\t\t_clipBox = new Box3( new Vector3( - 1, - 1, - 1 ), new Vector3( 1, 1, 1 ) ),\n\t\t\t_boundingBox = new Box3(),\n\t\t\t_points3 = new Array( 3 ),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_modelViewProjectionMatrix = new Matrix4(),\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t_objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];\n\n\t\t//\n\n\t\tfunction RenderList() {\n\n\t\t\tconst normals = [];\n\t\t\tconst colors = [];\n\t\t\tconst uvs = [];\n\n\t\t\tlet object = null;\n\n\t\t\tconst normalMatrix = new Matrix3();\n\n\t\t\tfunction setObject( value ) {\n\n\t\t\t\tobject = value;\n\n\t\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\n\n\t\t\t\tnormals.length = 0;\n\t\t\t\tcolors.length = 0;\n\t\t\t\tuvs.length = 0;\n\n\t\t\t}\n\n\t\t\tfunction projectVertex( vertex ) {\n\n\t\t\t\tconst position = vertex.position;\n\t\t\t\tconst positionWorld = vertex.positionWorld;\n\t\t\t\tconst positionScreen = vertex.positionScreen;\n\n\t\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\n\t\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst invW = 1 / positionScreen.w;\n\n\t\t\t\tpositionScreen.x *= invW;\n\t\t\t\tpositionScreen.y *= invW;\n\t\t\t\tpositionScreen.z *= invW;\n\n\t\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\n\t\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\n\t\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\n\n\t\t\t}\n\n\t\t\tfunction pushVertex( x, y, z ) {\n\n\t\t\t\t_vertex = getNextVertexInPool();\n\t\t\t\t_vertex.position.set( x, y, z );\n\n\t\t\t\tprojectVertex( _vertex );\n\n\t\t\t}\n\n\t\t\tfunction pushNormal( x, y, z ) {\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t\tfunction pushColor( r, g, b ) {\n\n\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t}\n\n\t\t\tfunction pushUv( x, y ) {\n\n\t\t\t\tuvs.push( x, y );\n\n\t\t\t}\n\n\t\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\n\n\t\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\n\n\t\t\t\t_points3[ 0 ] = v1.positionScreen;\n\t\t\t\t_points3[ 1 ] = v2.positionScreen;\n\t\t\t\t_points3[ 2 ] = v3.positionScreen;\n\n\t\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\n\n\t\t\t}\n\n\t\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\n\n\t\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\n\t\t\t\t\t ( v2.positionScreen.y - v1.positionScreen.y ) -\n\t\t\t\t\t ( v3.positionScreen.y - v1.positionScreen.y ) *\n\t\t\t\t\t ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\n\n\t\t\t}\n\n\t\t\tfunction pushLine( a, b ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\n\t\t\t\t// Clip\n\n\t\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\n\t\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\n\n\t\t\t\t\t// Perform the perspective divide\n\t\t\t\t\tv1.positionScreen.multiplyScalar( 1 / v1.positionScreen.w );\n\t\t\t\t\tv2.positionScreen.multiplyScalar( 1 / v2.positionScreen.w );\n\n\t\t\t\t\t_line = getNextLineInPool();\n\t\t\t\t\t_line.id = object.id;\n\t\t\t\t\t_line.v1.copy( v1 );\n\t\t\t\t\t_line.v2.copy( v2 );\n\t\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\n\t\t\t\t\t_line.renderOrder = object.renderOrder;\n\n\t\t\t\t\t_line.material = object.material;\n\n\t\t\t\t\tif ( object.material.vertexColors ) {\n\n\t\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\n\t\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _line );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction pushTriangle( a, b, c, material ) {\n\n\t\t\t\tconst v1 = _vertexPool[ a ];\n\t\t\t\tconst v2 = _vertexPool[ b ];\n\t\t\t\tconst v3 = _vertexPool[ c ];\n\n\t\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\n\n\t\t\t\tif ( material.side === DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\n\n\t\t\t\t\t_face = getNextFaceInPool();\n\n\t\t\t\t\t_face.id = object.id;\n\t\t\t\t\t_face.v1.copy( v1 );\n\t\t\t\t\t_face.v2.copy( v2 );\n\t\t\t\t\t_face.v3.copy( v3 );\n\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) / 3;\n\t\t\t\t\t_face.renderOrder = object.renderOrder;\n\n\t\t\t\t\t// face normal\n\t\t\t\t\t_vector3.subVectors( v3.position, v2.position );\n\t\t\t\t\t_vector4.subVectors( v1.position, v2.position );\n\t\t\t\t\t_vector3.cross( _vector4 );\n\t\t\t\t\t_face.normalModel.copy( _vector3 );\n\t\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\tconst normal = _face.vertexNormalsModel[ i ];\n\t\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t\tconst uv = _face.uvs[ i ];\n\t\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_face.vertexNormalsLength = 3;\n\n\t\t\t\t\t_face.material = material;\n\n\t\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t\t_face.color.fromArray( colors, a * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_renderData.elements.push( _face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsetObject: setObject,\n\t\t\t\tprojectVertex: projectVertex,\n\t\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\n\t\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\n\t\t\t\tpushVertex: pushVertex,\n\t\t\t\tpushNormal: pushNormal,\n\t\t\t\tpushColor: pushColor,\n\t\t\t\tpushUv: pushUv,\n\t\t\t\tpushLine: pushLine,\n\t\t\t\tpushTriangle: pushTriangle\n\t\t\t};\n\n\t\t}\n\n\t\tconst renderList = new RenderList();\n\n\t\tfunction projectObject( object ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\t_renderData.lights.push( object );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( object.material.visible === false ) return;\n\t\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\n\n\t\t\t\taddObject( object );\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( object ) {\n\n\t\t\t_object = getNextObjectInPool();\n\t\t\t_object.id = object.id;\n\t\t\t_object.object = object;\n\n\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\t\t\t_object.z = _vector3.z;\n\t\t\t_object.renderOrder = object.renderOrder;\n\n\t\t\t_renderData.objects.push( _object );\n\n\t\t}\n\n\t\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\n\n\t\t\t_faceCount = 0;\n\t\t\t_lineCount = 0;\n\t\t\t_spriteCount = 0;\n\n\t\t\t_renderData.elements.length = 0;\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_frustum.setFromProjectionMatrix( _viewProjectionMatrix );\n\n\t\t\t//\n\n\t\t\t_objectCount = 0;\n\n\t\t\t_renderData.objects.length = 0;\n\t\t\t_renderData.lights.length = 0;\n\n\t\t\tprojectObject( scene );\n\n\t\t\tif ( sortObjects === true ) {\n\n\t\t\t\t_renderData.objects.sort( painterSort );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst objects = _renderData.objects;\n\n\t\t\tfor ( let o = 0, ol = objects.length; o < ol; o ++ ) {\n\n\t\t\t\tconst object = objects[ o ].object;\n\t\t\t\tconst geometry = object.geometry;\n\n\t\t\t\trenderList.setObject( object );\n\n\t\t\t\t_modelMatrix = object.matrixWorld;\n\n\t\t\t\t_vertexCount = 0;\n\n\t\t\t\tif ( object.isMesh ) {\n\n\t\t\t\t\tlet material = object.material;\n\n\t\t\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tif ( attributes.position === undefined ) continue;\n\n\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\tlet x = positions[ i ];\n\t\t\t\t\t\tlet y = positions[ i + 1 ];\n\t\t\t\t\t\tlet z = positions[ i + 2 ];\n\n\t\t\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\n\t\t\t\t\t\tif ( morphTargets !== undefined ) {\n\n\t\t\t\t\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\t\t\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\t\t\t\t\t\tfor ( let t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tconst influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tconst target = morphTargets[ t ];\n\n\t\t\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t\t\tx += target.getX( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\ty += target.getY( i / 3 ) * influence;\n\t\t\t\t\t\t\t\t\tz += target.getZ( i / 3 ) * influence;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tx += ( target.getX( i / 3 ) - positions[ i ] ) * influence;\n\t\t\t\t\t\t\t\t\ty += ( target.getY( i / 3 ) - positions[ i + 1 ] ) * influence;\n\t\t\t\t\t\t\t\t\tz += ( target.getZ( i / 3 ) - positions[ i + 2 ] ) * influence;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trenderList.pushVertex( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.normal !== undefined ) {\n\n\t\t\t\t\t\tconst normals = attributes.normal.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = normals.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.uv !== undefined ) {\n\n\t\t\t\t\t\tconst uvs = attributes.uv.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = uvs.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\trenderList.pushUv( uvs[ i ], uvs[ i + 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ], material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( let g = 0; g < groups.length; g ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ g ];\n\n\t\t\t\t\t\t\t\tmaterial = isMultiMaterial === true\n\t\t\t\t\t\t\t\t\t ? object.material[ group.materialIndex ]\n\t\t\t\t\t\t\t\t\t : object.material;\n\n\t\t\t\t\t\t\t\tif ( material === undefined ) continue;\n\n\t\t\t\t\t\t\t\tfor ( let i = group.start, l = group.start + group.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = positions.length / 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2, material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tconst colors = attributes.color.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t\t\tconst indices = geometry.index.array;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst step = object.isLineSegments ? 2 : 1;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\n\n\t\t\t\t\tconst attributes = geometry.attributes;\n\n\t\t\t\t\tif ( attributes.position !== undefined ) {\n\n\t\t\t\t\t\tconst positions = attributes.position.array;\n\n\t\t\t\t\t\tfor ( let i = 0, l = positions.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\n\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\n\t\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tpushPoint( _vector4, object, camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( sortElements === true ) {\n\n\t\t\t\t_renderData.elements.sort( painterSort );\n\n\t\t\t}\n\n\t\t\treturn _renderData;\n\n\t\t};\n\n\t\tfunction pushPoint( _vector4, object, camera ) {\n\n\t\t\tconst invW = 1 / _vector4.w;\n\n\t\t\t_vector4.z *= invW;\n\n\t\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\n\n\t\t\t\t_sprite = getNextSpriteInPool();\n\t\t\t\t_sprite.id = object.id;\n\t\t\t\t_sprite.x = _vector4.x * invW;\n\t\t\t\t_sprite.y = _vector4.y * invW;\n\t\t\t\t_sprite.z = _vector4.z;\n\t\t\t\t_sprite.renderOrder = object.renderOrder;\n\t\t\t\t_sprite.object = object;\n\n\t\t\t\t_sprite.rotation = object.rotation;\n\n\t\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\n\t\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) / ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\n\n\t\t\t\t_sprite.material = object.material;\n\n\t\t\t\t_renderData.elements.push( _sprite );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Pools\n\n\t\tfunction getNextObjectInPool() {\n\n\t\t\tif ( _objectCount === _objectPoolLength ) {\n\n\t\t\t\tconst object = new RenderableObject();\n\t\t\t\t_objectPool.push( object );\n\t\t\t\t_objectPoolLength ++;\n\t\t\t\t_objectCount ++;\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\treturn _objectPool[ _objectCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextVertexInPool() {\n\n\t\t\tif ( _vertexCount === _vertexPoolLength ) {\n\n\t\t\t\tconst vertex = new RenderableVertex();\n\t\t\t\t_vertexPool.push( vertex );\n\t\t\t\t_vertexPoolLength ++;\n\t\t\t\t_vertexCount ++;\n\t\t\t\treturn vertex;\n\n\t\t\t}\n\n\t\t\treturn _vertexPool[ _vertexCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextFaceInPool() {\n\n\t\t\tif ( _faceCount === _facePoolLength ) {\n\n\t\t\t\tconst face = new RenderableFace();\n\t\t\t\t_facePool.push( face );\n\t\t\t\t_facePoolLength ++;\n\t\t\t\t_faceCount ++;\n\t\t\t\treturn face;\n\n\t\t\t}\n\n\t\t\treturn _facePool[ _faceCount ++ ];\n\n\n\t\t}\n\n\t\tfunction getNextLineInPool() {\n\n\t\t\tif ( _lineCount === _linePoolLength ) {\n\n\t\t\t\tconst line = new RenderableLine();\n\t\t\t\t_linePool.push( line );\n\t\t\t\t_linePoolLength ++;\n\t\t\t\t_lineCount ++;\n\t\t\t\treturn line;\n\n\t\t\t}\n\n\t\t\treturn _linePool[ _lineCount ++ ];\n\n\t\t}\n\n\t\tfunction getNextSpriteInPool() {\n\n\t\t\tif ( _spriteCount === _spritePoolLength ) {\n\n\t\t\t\tconst sprite = new RenderableSprite();\n\t\t\t\t_spritePool.push( sprite );\n\t\t\t\t_spritePoolLength ++;\n\t\t\t\t_spriteCount ++;\n\t\t\t\treturn sprite;\n\n\t\t\t}\n\n\t\t\treturn _spritePool[ _spriteCount ++ ];\n\n\t\t}\n\n\t\t//\n\n\t\tfunction painterSort( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else if ( a.id !== b.id ) {\n\n\t\t\t\treturn a.id - b.id;\n\n\t\t\t} else {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction clipLine( s1, s2 ) {\n\n\t\t\tlet alpha1 = 0, alpha2 = 1;\n\n\t\t\t// Calculate the boundary coordinate of each vertex for the near and far clip planes,\n\t\t\t// Z = -1 and Z = +1, respectively.\n\n\t\t\tconst bc1near = s1.z + s1.w,\n\t\t\t\tbc2near = s2.z + s2.w,\n\t\t\t\tbc1far = - s1.z + s1.w,\n\t\t\t\tbc2far = - s2.z + s2.w;\n\n\t\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\n\n\t\t\t\t// Both vertices lie entirely within all clip planes.\n\t\t\t\treturn true;\n\n\t\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\n\n\t\t\t\t// Both vertices lie entirely outside one of the clip planes.\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\n\t\t\t\t// The line segment spans at least one clip plane.\n\n\t\t\t\tif ( bc1near < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the near plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t} else if ( bc2near < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the near plane, v1 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1near / ( bc1near - bc2near ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( bc1far < 0 ) {\n\n\t\t\t\t\t// v1 lies outside the far plane, v2 inside\n\t\t\t\t\talpha1 = Math.max( alpha1, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t} else if ( bc2far < 0 ) {\n\n\t\t\t\t\t// v2 lies outside the far plane, v2 inside\n\t\t\t\t\talpha2 = Math.min( alpha2, bc1far / ( bc1far - bc2far ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( alpha2 < alpha1 ) {\n\n\t\t\t\t\t// The line segment spans two boundaries, but is outside both of them.\n\t\t\t\t\t// (This can't happen when we're only clipping against just near/far but good\n\t\t\t\t\t// to leave the check here for future usage if other clip planes are added.)\n\t\t\t\t\treturn false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Update the s1 and s2 vertices to match the clipped line segment.\n\t\t\t\t\ts1.lerp( s2, alpha1 );\n\t\t\t\t\ts2.lerp( s1, 1 - alpha2 );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { RenderableObject, RenderableFace, RenderableVertex, RenderableLine, RenderableSprite, Projector };\n", "import {\n\tBox2,\n\tCamera,\n\tColor,\n\tMatrix3,\n\tMatrix4,\n\tObject3D,\n\tSRGBColorSpace,\n\tVector3\n} from 'three';\nimport { Projector } from '../renderers/Projector.js';\nimport { RenderableFace } from '../renderers/Projector.js';\nimport { RenderableLine } from '../renderers/Projector.js';\nimport { RenderableSprite } from '../renderers/Projector.js';\n\nclass SVGObject extends Object3D {\n\n\tconstructor( node ) {\n\n\t\tsuper();\n\n\t\tthis.isSVGObject = true;\n\n\t\tthis.node = node;\n\n\t}\n\n}\n\nclass SVGRenderer {\n\n\tconstructor() {\n\n\t\tlet _renderData, _elements, _lights,\n\t\t\t_svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf,\n\n\t\t\t_v1, _v2, _v3,\n\n\t\t\t_svgNode,\n\t\t\t_pathCount = 0,\n\n\t\t\t_precision = null,\n\t\t\t_quality = 1,\n\n\t\t\t_currentPath, _currentStyle;\n\n\t\tconst _this = this,\n\t\t\t_clipBox = new Box2(),\n\t\t\t_elemBox = new Box2(),\n\n\t\t\t_color = new Color(),\n\t\t\t_diffuseColor = new Color(),\n\t\t\t_ambientLight = new Color(),\n\t\t\t_directionalLights = new Color(),\n\t\t\t_pointLights = new Color(),\n\t\t\t_clearColor = new Color(),\n\n\t\t\t_vector3 = new Vector3(), // Needed for PointLight\n\t\t\t_centroid = new Vector3(),\n\t\t\t_normal = new Vector3(),\n\t\t\t_normalViewMatrix = new Matrix3(),\n\n\t\t\t_viewMatrix = new Matrix4(),\n\t\t\t_viewProjectionMatrix = new Matrix4(),\n\n\t\t\t_svgPathPool = [],\n\n\t\t\t_projector = new Projector(),\n\t\t\t_svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\n\t\tthis.domElement = _svg;\n\n\t\tthis.autoClear = true;\n\t\tthis.sortObjects = true;\n\t\tthis.sortElements = true;\n\n\t\tthis.overdraw = 0.5;\n\n\t\tthis.outputColorSpace = SRGBColorSpace;\n\n\t\tthis.info = {\n\n\t\t\trender: {\n\n\t\t\t\tvertices: 0,\n\t\t\t\tfaces: 0\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setQuality = function ( quality ) {\n\n\t\t\tswitch ( quality ) {\n\n\t\t\t\tcase 'high': _quality = 1; break;\n\t\t\t\tcase 'low': _quality = 0; break;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setClearColor = function ( color ) {\n\n\t\t\t_clearColor.set( color );\n\n\t\t};\n\n\t\tthis.setPixelRatio = function () {};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_svgWidth = width; _svgHeight = height;\n\t\t\t_svgWidthHalf = _svgWidth / 2; _svgHeightHalf = _svgHeight / 2;\n\n\t\t\t_svg.setAttribute( 'viewBox', ( - _svgWidthHalf ) + ' ' + ( - _svgHeightHalf ) + ' ' + _svgWidth + ' ' + _svgHeight );\n\t\t\t_svg.setAttribute( 'width', _svgWidth );\n\t\t\t_svg.setAttribute( 'height', _svgHeight );\n\n\t\t\t_clipBox.min.set( - _svgWidthHalf, - _svgHeightHalf );\n\t\t\t_clipBox.max.set( _svgWidthHalf, _svgHeightHalf );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _svgWidth,\n\t\t\t\theight: _svgHeight\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setPrecision = function ( precision ) {\n\n\t\t\t_precision = precision;\n\n\t\t};\n\n\t\tfunction removeChildNodes() {\n\n\t\t\t_pathCount = 0;\n\n\t\t\twhile ( _svg.childNodes.length > 0 ) {\n\n\t\t\t\t_svg.removeChild( _svg.childNodes[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convert( c ) {\n\n\t\t\treturn _precision !== null ? c.toFixed( _precision ) : c;\n\n\t\t}\n\n\t\tthis.clear = function () {\n\n\t\t\tremoveChildNodes();\n\t\t\t_svg.style.backgroundColor = _clearColor.getStyle( _this.outputColorSpace );\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera instanceof Camera === false ) {\n\n\t\t\t\tconsole.error( 'THREE.SVGRenderer.render: camera is not an instance of Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst background = scene.background;\n\n\t\t\tif ( background && background.isColor ) {\n\n\t\t\t\tremoveChildNodes();\n\t\t\t\t_svg.style.backgroundColor = background.getStyle( _this.outputColorSpace );\n\n\t\t\t} else if ( this.autoClear === true ) {\n\n\t\t\t\tthis.clear();\n\n\t\t\t}\n\n\t\t\t_this.info.render.vertices = 0;\n\t\t\t_this.info.render.faces = 0;\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\n\t\t\t_elements = _renderData.elements;\n\t\t\t_lights = _renderData.lights;\n\n\t\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\n\n\t\t\tcalculateLights( _lights );\n\n\t\t\t // reset accumulated path\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t\tfor ( let e = 0, el = _elements.length; e < el; e ++ ) {\n\n\t\t\t\tconst element = _elements[ e ];\n\t\t\t\tconst material = element.material;\n\n\t\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\n\n\t\t\t\t_elemBox.makeEmpty();\n\n\t\t\t\tif ( element instanceof RenderableSprite ) {\n\n\t\t\t\t\t_v1 = element;\n\t\t\t\t\t_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;\n\n\t\t\t\t\trenderSprite( _v1, element, material );\n\n\t\t\t\t} else if ( element instanceof RenderableLine ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\t_elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderLine( _v1, _v2, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( element instanceof RenderableFace ) {\n\n\t\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\n\n\t\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\n\t\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\n\n\t\t\t\t\t_v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;\n\t\t\t\t\t_v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;\n\n\t\t\t\t\tif ( this.overdraw > 0 ) {\n\n\t\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, this.overdraw );\n\t\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, this.overdraw );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_elemBox.setFromPoints( [\n\t\t\t\t\t\t_v1.positionScreen,\n\t\t\t\t\t\t_v2.positionScreen,\n\t\t\t\t\t\t_v3.positionScreen\n\t\t\t\t\t] );\n\n\t\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\n\n\t\t\t\t\t\trenderFace3( _v1, _v2, _v3, element, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tflushPath(); // just to flush last svg:path\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t if ( object.isSVGObject ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\t\tif ( _vector3.z < - 1 || _vector3.z > 1 ) return;\n\n\t\t\t\t\tconst x = _vector3.x * _svgWidthHalf;\n\t\t\t\t\tconst y = - _vector3.y * _svgHeightHalf;\n\n\t\t\t\t\tconst node = object.node;\n\t\t\t\t\tnode.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );\n\n\t\t\t\t\t_svg.appendChild( node );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\tfunction calculateLights( lights ) {\n\n\t\t\t_ambientLight.setRGB( 0, 0, 0 );\n\t\t\t_directionalLights.setRGB( 0, 0, 0 );\n\t\t\t_pointLights.setRGB( 0, 0, 0 );\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\t_ambientLight.r += lightColor.r;\n\t\t\t\t\t_ambientLight.g += lightColor.g;\n\t\t\t\t\t_ambientLight.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\t_directionalLights.r += lightColor.r;\n\t\t\t\t\t_directionalLights.g += lightColor.g;\n\t\t\t\t\t_directionalLights.b += lightColor.b;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\t_pointLights.r += lightColor.r;\n\t\t\t\t\t_pointLights.g += lightColor.g;\n\t\t\t\t\t_pointLights.b += lightColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction calculateLight( lights, position, normal, color ) {\n\n\t\t\tfor ( let l = 0, ll = lights.length; l < ll; l ++ ) {\n\n\t\t\t\tconst light = lights[ l ];\n\t\t\t\tconst lightColor = light.color;\n\n\t\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();\n\n\t\t\t\t\tlet amount = normal.dot( lightPosition );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\t\tlet amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\n\n\t\t\t\t\tif ( amount <= 0 ) continue;\n\n\t\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance, 1 );\n\n\t\t\t\t\tif ( amount == 0 ) continue;\n\n\t\t\t\t\tamount *= light.intensity;\n\n\t\t\t\t\tcolor.r += lightColor.r * amount;\n\t\t\t\t\tcolor.g += lightColor.g * amount;\n\t\t\t\t\tcolor.b += lightColor.b * amount;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderSprite( v1, element, material ) {\n\n\t\t\tlet scaleX = element.scale.x * _svgWidthHalf;\n\t\t\tlet scaleY = element.scale.y * _svgHeightHalf;\n\n\t\t\tif ( material.isPointsMaterial ) {\n\n\t\t\t\tscaleX *= material.size;\n\t\t\t\tscaleY *= material.size;\n\n\t\t\t}\n\n\t\t\tconst path = 'M' + convert( v1.x - scaleX * 0.5 ) + ',' + convert( v1.y - scaleY * 0.5 ) + 'h' + convert( scaleX ) + 'v' + convert( scaleY ) + 'h' + convert( - scaleX ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isSpriteMaterial || material.isPointsMaterial ) {\n\n\t\t\t\tstyle = 'fill:' + material.color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\tfunction renderLine( v1, v2, material ) {\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y );\n\n\t\t\tif ( material.isLineBasicMaterial ) {\n\n\t\t\t\tlet style = 'fill:none;stroke:' + material.color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.linewidth + ';stroke-linecap:' + material.linecap;\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\tstyle = style + ';stroke-dasharray:' + material.dashSize + ',' + material.gapSize;\n\n\t\t\t\t}\n\n\t\t\t\taddPath( style, path );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderFace3( v1, v2, v3, element, material ) {\n\n\t\t\t_this.info.render.vertices += 3;\n\t\t\t_this.info.render.faces ++;\n\n\t\t\tconst path = 'M' + convert( v1.positionScreen.x ) + ',' + convert( v1.positionScreen.y ) + 'L' + convert( v2.positionScreen.x ) + ',' + convert( v2.positionScreen.y ) + 'L' + convert( v3.positionScreen.x ) + ',' + convert( v3.positionScreen.y ) + 'z';\n\t\t\tlet style = '';\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t_color.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_color.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\n\n\t\t\t\t_diffuseColor.copy( material.color );\n\n\t\t\t\tif ( material.vertexColors ) {\n\n\t\t\t\t\t_diffuseColor.multiply( element.color );\n\n\t\t\t\t}\n\n\t\t\t\t_color.copy( _ambientLight );\n\n\t\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\n\n\t\t\t\tcalculateLight( _lights, _centroid, element.normalModel, _color );\n\n\t\t\t\t_color.multiply( _diffuseColor ).add( material.emissive );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix ).normalize();\n\n\t\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\n\n\t\t\t}\n\n\t\t\tif ( material.wireframe ) {\n\n\t\t\t\tstyle = 'fill:none;stroke:' + _color.getStyle( _this.outputColorSpace ) + ';stroke-opacity:' + material.opacity + ';stroke-width:' + material.wireframeLinewidth + ';stroke-linecap:' + material.wireframeLinecap + ';stroke-linejoin:' + material.wireframeLinejoin;\n\n\t\t\t} else {\n\n\t\t\t\tstyle = 'fill:' + _color.getStyle( _this.outputColorSpace ) + ';fill-opacity:' + material.opacity;\n\n\t\t\t}\n\n\t\t\taddPath( style, path );\n\n\t\t}\n\n\t\t// Hide anti-alias gaps\n\n\t\tfunction expand( v1, v2, pixels ) {\n\n\t\t\tlet x = v2.x - v1.x, y = v2.y - v1.y;\n\t\t\tconst det = x * x + y * y;\n\n\t\t\tif ( det === 0 ) return;\n\n\t\t\tconst idet = pixels / Math.sqrt( det );\n\n\t\t\tx *= idet; y *= idet;\n\n\t\t\tv2.x += x; v2.y += y;\n\t\t\tv1.x -= x; v1.y -= y;\n\n\t\t}\n\n\t\tfunction addPath( style, path ) {\n\n\t\t\tif ( _currentStyle === style ) {\n\n\t\t\t\t_currentPath += path;\n\n\t\t\t} else {\n\n\t\t\t\tflushPath();\n\n\t\t\t\t_currentStyle = style;\n\t\t\t\t_currentPath = path;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction flushPath() {\n\n\t\t\tif ( _currentPath ) {\n\n\t\t\t\t_svgNode = getPathNode( _pathCount ++ );\n\t\t\t\t_svgNode.setAttribute( 'd', _currentPath );\n\t\t\t\t_svgNode.setAttribute( 'style', _currentStyle );\n\t\t\t\t_svg.appendChild( _svgNode );\n\n\t\t\t}\n\n\t\t\t_currentPath = '';\n\t\t\t_currentStyle = '';\n\n\t\t}\n\n\t\tfunction getPathNode( id ) {\n\n\t\t\tif ( _svgPathPool[ id ] == null ) {\n\n\t\t\t\t_svgPathPool[ id ] = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\n\t\t\t\tif ( _quality == 0 ) {\n\n\t\t\t\t\t_svgPathPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed\n\n\t\t\t\t}\n\n\t\t\t\treturn _svgPathPool[ id ];\n\n\t\t\t}\n\n\t\t\treturn _svgPathPool[ id ];\n\n\t\t}\n\n\t}\n\n}\n\nexport { SVGObject, SVGRenderer };\n", "/**\n * ACES Filmic Tone Mapping Shader by Stephen Hill\n * source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\n *\n * this implementation of ACES is modified to accommodate a brighter viewing environment.\n * the scale factor of 1/0.6 is subjective. see discussion in #19621.\n */\n\nconst ACESFilmicToneMappingShader = {\n\n\tname: 'ACESFilmicToneMappingShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define saturate(a) clamp( a, 0.0, 1.0 )\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform float exposure;\n\n\t\tvarying vec2 vUv;\n\n\t\tvec3 RRTAndODTFit( vec3 v ) {\n\n\t\t\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\t\t\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\t\t\treturn a / b;\n\n\t\t}\n\n\t\tvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\t\t\tconst mat3 ACESInputMat = mat3(\n\t\t\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\t\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\t\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t\t\t);\n\n\t\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\t\t\tconst mat3 ACESOutputMat = mat3(\n\t\t\t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\t\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\t\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t\t\t);\n\n\t\t\tcolor = ACESInputMat * color;\n\n\t\t// Apply RRT and ODT\n\t\t\tcolor = RRTAndODTFit( color );\n\n\t\t\tcolor = ACESOutputMat * color;\n\n\t\t// Clamp to [0, 1]\n\t\t\treturn saturate( color );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\ttex.rgb *= exposure / 0.6; // pre-exposed, outside of the tone mapping function\n\n\t\t\tgl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a );\n\n\t\t}`\n\n};\n\nexport { ACESFilmicToneMappingShader };\n", "/**\n * Simple test shader\n */\n\nconst BasicShader = {\n\n\tname: 'BasicShader',\n\n\tuniforms: {},\n\n\tvertexShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );\n\n\t\t}`\n\n};\n\nexport { BasicShader };\n", "/**\n * Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass]\n * - based on Nvidia example\n * http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass\n */\n\nconst BleachBypassShader = {\n\n\tname: 'BleachBypassShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2D( tDiffuse, vUv );\n\n\t\t\tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\n\t\t\tfloat lum = dot( lumCoeff, base.rgb );\n\t\t\tvec3 blend = vec3( lum );\n\n\t\t\tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\n\n\t\t\tvec3 result1 = 2.0 * base.rgb * blend;\n\t\t\tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\n\n\t\t\tvec3 newColor = mix( result1, result2, L );\n\n\t\t\tfloat A2 = opacity * base.a;\n\t\t\tvec3 mixRGB = A2 * newColor.rgb;\n\t\t\tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\n\n\t\t\tgl_FragColor = vec4( mixRGB, base.a );\n\n\t\t}`\n\n};\n\nexport { BleachBypassShader };\n", "/**\n * Blend two textures\n */\n\nconst BlendShader = {\n\n\tname: 'BlendShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse1': { value: null },\n\t\t'tDiffuse2': { value: null },\n\t\t'mixRatio': { value: 0.5 },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\t\tuniform float mixRatio;\n\n\t\tuniform sampler2D tDiffuse1;\n\t\tuniform sampler2D tDiffuse2;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel1 = texture2D( tDiffuse1, vUv );\n\t\t\tvec4 texel2 = texture2D( tDiffuse2, vUv );\n\t\t\tgl_FragColor = opacity * mix( texel1, texel2, mixRatio );\n\n\t\t}`\n\n};\n\nexport { BlendShader };\n", "/**\n * Brightness and contrast adjustment\n * https://github.com/evanw/glfx.js\n * brightness: -1 to 1 (-1 is solid black, 0 is no change, and 1 is solid white)\n * contrast: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst BrightnessContrastShader = {\n\n\tname: 'BrightnessContrastShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'brightness': { value: 0 },\n\t\t'contrast': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float brightness;\n\t\tuniform float contrast;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor.rgb += brightness;\n\n\t\t\tif (contrast > 0.0) {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { BrightnessContrastShader };\n", "import {\n\tVector3\n} from 'three';\n\n/**\n * Color correction\n */\n\nconst ColorCorrectionShader = {\n\n\tname: 'ColorCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'powRGB': { value: new Vector3( 2, 2, 2 ) },\n\t\t'mulRGB': { value: new Vector3( 1, 1, 1 ) },\n\t\t'addRGB': { value: new Vector3( 0, 0, 0 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 powRGB;\n\t\tuniform vec3 mulRGB;\n\t\tuniform vec3 addRGB;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\n\n\t\t}`\n\n};\n\nexport { ColorCorrectionShader };\n", "import {\n\tColor\n} from 'three';\n\n/**\n * Colorify shader\n */\n\nconst ColorifyShader = {\n\n\tname: 'ColorifyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'color': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tgl_FragColor = vec4( v * color, texel.w );\n\n\t\t}`\n\n};\n\nexport { ColorifyShader };\n", "/**\n * Depth-of-field shader using mipmaps\n * - from Matt Handley @applmak\n * - requires power-of-2 sized render target with enabled mipmaps\n */\n\nconst DOFMipMapShader = {\n\n\tname: 'DOFMipMapShader',\n\n\tuniforms: {\n\n\t\t'tColor': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'focus': { value: 1.0 },\n\t\t'maxblur': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float focus;\n\t\tuniform float maxblur;\n\n\t\tuniform sampler2D tColor;\n\t\tuniform sampler2D tDepth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 depth = texture2D( tDepth, vUv );\n\n\t\t\tfloat factor = depth.x - focus;\n\n\t\t\tvec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );\n\n\t\t\tgl_FragColor = col;\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\nexport { DOFMipMapShader };\n", "/**\n * Exposure shader\n */\n\nconst ExposureShader = {\n\n\tname: 'ExposureShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'exposure': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float exposure;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.rgb *= exposure;\n\n\t\t}`\n\n};\n\nexport { ExposureShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * NVIDIA FXAA by Timothy Lottes\n * https://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n * Further improved by Daniel Sturk\n */\n\nconst FXAAShader = {\n\n\tname: 'FXAAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tuniform vec2 resolution;\n\n\t\tvarying vec2 vUv;\n\n\t\t// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n\n\t\t//----------------------------------------------------------------------------------\n\t\t// File: es3-kepler\\FXAA\\assets\\shaders/FXAA_DefaultES.frag\n\t\t// SDK Version: v3.00\n\t\t// Email: gameworks@nvidia.com\n\t\t// Site: http://developer.nvidia.com/\n\t\t//\n\t\t// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n\t\t//\n\t\t// Redistribution and use in source and binary forms, with or without\n\t\t// modification, are permitted provided that the following conditions\n\t\t// are met:\n\t\t// * Redistributions of source code must retain the above copyright\n\t\t// notice, this list of conditions and the following disclaimer.\n\t\t// * Redistributions in binary form must reproduce the above copyright\n\t\t// notice, this list of conditions and the following disclaimer in the\n\t\t// documentation and/or other materials provided with the distribution.\n\t\t// * Neither the name of NVIDIA CORPORATION nor the names of its\n\t\t// contributors may be used to endorse or promote products derived\n\t\t// from this software without specific prior written permission.\n\t\t//\n\t\t// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\n\t\t// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t\t// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\t\t// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n\t\t// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\t\t// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\t\t// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\t\t// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\t\t// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t\t// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t\t// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\t//\n\t\t//----------------------------------------------------------------------------------\n\n\t\t#ifndef FXAA_DISCARD\n\t\t\t//\n\t\t\t// Only valid for PC OpenGL currently.\n\t\t\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n\t\t\t//\n\t\t\t// 1 = Use discard on pixels which don't need AA.\n\t\t\t// For APIs which enable concurrent TEX+ROP from same surface.\n\t\t\t// 0 = Return unchanged color on pixels which don't need AA.\n\t\t\t//\n\t\t\t#define FXAA_DISCARD 0\n\t\t#endif\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\t#define FxaaTexTop(t, p) texture2D(t, p, -100.0)\n\t\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), -100.0)\n\t\t/*--------------------------------------------------------------------------*/\n\n\t\t#define NUM_SAMPLES 5\n\n\t\t// assumes colors have premultipliedAlpha, so that the calculated color contrast is scaled by alpha\n\t\tfloat contrast( vec4 a, vec4 b ) {\n\t\t\tvec4 diff = abs( a - b );\n\t\t\treturn max( max( max( diff.r, diff.g ), diff.b ), diff.a );\n\t\t}\n\n\t\t/*============================================================================\n\n\t\t\t\t\t\t\t\t\tFXAA3 QUALITY - PC\n\n\t\t============================================================================*/\n\n\t\t/*--------------------------------------------------------------------------*/\n\t\tvec4 FxaaPixelShader(\n\t\t\tvec2 posM,\n\t\t\tsampler2D tex,\n\t\t\tvec2 fxaaQualityRcpFrame,\n\t\t\tfloat fxaaQualityEdgeThreshold,\n\t\t\tfloat fxaaQualityinvEdgeThreshold\n\t\t) {\n\t\t\tvec4 rgbaM = FxaaTexTop(tex, posM);\n\t\t\tvec4 rgbaS = FxaaTexOff(tex, posM, vec2( 0.0, 1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaE = FxaaTexOff(tex, posM, vec2( 1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaN = FxaaTexOff(tex, posM, vec2( 0.0,-1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaW = FxaaTexOff(tex, posM, vec2(-1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\t// . S .\n\t\t\t// W M E\n\t\t\t// . N .\n\n\t\t\tbool earlyExit = max( max( max(\n\t\t\t\t\tcontrast( rgbaM, rgbaN ),\n\t\t\t\t\tcontrast( rgbaM, rgbaS ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaE ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaW ) )\n\t\t\t\t\t< fxaaQualityEdgeThreshold;\n\t\t\t// . 0 .\n\t\t\t// 0 0 0\n\t\t\t// . 0 .\n\n\t\t\t#if (FXAA_DISCARD == 1)\n\t\t\t\tif(earlyExit) FxaaDiscard;\n\t\t\t#else\n\t\t\t\tif(earlyExit) return rgbaM;\n\t\t\t#endif\n\n\t\t\tfloat contrastN = contrast( rgbaM, rgbaN );\n\t\t\tfloat contrastS = contrast( rgbaM, rgbaS );\n\t\t\tfloat contrastE = contrast( rgbaM, rgbaE );\n\t\t\tfloat contrastW = contrast( rgbaM, rgbaW );\n\n\t\t\tfloat relativeVContrast = ( contrastN + contrastS ) - ( contrastE + contrastW );\n\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\tbool horzSpan = relativeVContrast > 0.;\n\t\t\t// . 1 .\n\t\t\t// 0 0 0\n\t\t\t// . 1 .\n\n\t\t\t// 45 deg edge detection and corners of objects, aka V/H contrast is too similar\n\t\t\tif( abs( relativeVContrast ) < .3 ) {\n\t\t\t\t// locate the edge\n\t\t\t\tvec2 dirToEdge;\n\t\t\t\tdirToEdge.x = contrastE > contrastW ? 1. : -1.;\n\t\t\t\tdirToEdge.y = contrastS > contrastN ? 1. : -1.;\n\t\t\t\t// . 2 . . 1 .\n\t\t\t\t// 1 0 2 ~= 0 0 1\n\t\t\t\t// . 1 . . 0 .\n\n\t\t\t\t// tap 2 pixels and see which ones are \"outside\" the edge, to\n\t\t\t\t// determine if the edge is vertical or horizontal\n\n\t\t\t\tvec4 rgbaAlongH = FxaaTexOff(tex, posM, vec2( dirToEdge.x, -dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongH = contrast( rgbaM, rgbaAlongH );\n\t\t\t\t// . 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 H\n\n\t\t\t\tvec4 rgbaAlongV = FxaaTexOff(tex, posM, vec2( -dirToEdge.x, dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\tfloat matchAlongV = contrast( rgbaM, rgbaAlongV );\n\t\t\t\t// V 1 .\n\t\t\t\t// 0 0 1\n\t\t\t\t// . 0 .\n\n\t\t\t\trelativeVContrast = matchAlongV - matchAlongH;\n\t\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\t\tif( abs( relativeVContrast ) < .3 ) { // 45 deg edge\n\t\t\t\t\t// 1 1 .\n\t\t\t\t\t// 0 0 1\n\t\t\t\t\t// . 0 1\n\n\t\t\t\t\t// do a simple blur\n\t\t\t\t\treturn mix(\n\t\t\t\t\t\trgbaM,\n\t\t\t\t\t\t(rgbaN + rgbaS + rgbaE + rgbaW) * .25,\n\t\t\t\t\t\t.4\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\thorzSpan = relativeVContrast > 0.;\n\t\t\t}\n\n\t\t\tif(!horzSpan) rgbaN = rgbaW;\n\t\t\tif(!horzSpan) rgbaS = rgbaE;\n\t\t\t// . 0 . 1\n\t\t\t// 1 0 1 -> 0\n\t\t\t// . 0 . 1\n\n\t\t\tbool pairN = contrast( rgbaM, rgbaN ) > contrast( rgbaM, rgbaS );\n\t\t\tif(!pairN) rgbaN = rgbaS;\n\n\t\t\tvec2 offNP;\n\t\t\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n\t\t\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n\n\t\t\tbool doneN = false;\n\t\t\tbool doneP = false;\n\n\t\t\tfloat nDist = 0.;\n\t\t\tfloat pDist = 0.;\n\n\t\t\tvec2 posN = posM;\n\t\t\tvec2 posP = posM;\n\n\t\t\tint iterationsUsedN = 0;\n\t\t\tint iterationsUsedP = 0;\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i++ ) {\n\n\t\t\t\tfloat increment = float(i + 1);\n\n\t\t\t\tif(!doneN) {\n\t\t\t\t\tnDist += increment;\n\t\t\t\t\tposN = posM + offNP * nDist;\n\t\t\t\t\tvec4 rgbaEndN = FxaaTexTop(tex, posN.xy);\n\t\t\t\t\tdoneN = contrast( rgbaEndN, rgbaM ) > contrast( rgbaEndN, rgbaN );\n\t\t\t\t\titerationsUsedN = i;\n\t\t\t\t}\n\n\t\t\t\tif(!doneP) {\n\t\t\t\t\tpDist += increment;\n\t\t\t\t\tposP = posM - offNP * pDist;\n\t\t\t\t\tvec4 rgbaEndP = FxaaTexTop(tex, posP.xy);\n\t\t\t\t\tdoneP = contrast( rgbaEndP, rgbaM ) > contrast( rgbaEndP, rgbaN );\n\t\t\t\t\titerationsUsedP = i;\n\t\t\t\t}\n\n\t\t\t\tif(doneN || doneP) break;\n\t\t\t}\n\n\n\t\t\tif ( !doneP && !doneN ) return rgbaM; // failed to find end of edge\n\n\t\t\tfloat dist = min(\n\t\t\t\tdoneN ? float( iterationsUsedN ) / float( NUM_SAMPLES - 1 ) : 1.,\n\t\t\t\tdoneP ? float( iterationsUsedP ) / float( NUM_SAMPLES - 1 ) : 1.\n\t\t\t);\n\n\t\t\t// hacky way of reduces blurriness of mostly diagonal edges\n\t\t\t// but reduces AA quality\n\t\t\tdist = pow(dist, .5);\n\n\t\t\tdist = 1. - dist;\n\n\t\t\treturn mix(\n\t\t\t\trgbaM,\n\t\t\t\trgbaN,\n\t\t\t\tdist * .5\n\t\t\t);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tconst float edgeDetectionQuality = .2;\n\t\t\tconst float invEdgeDetectionQuality = 1. / edgeDetectionQuality;\n\n\t\t\tgl_FragColor = FxaaPixelShader(\n\t\t\t\tvUv,\n\t\t\t\ttDiffuse,\n\t\t\t\tresolution,\n\t\t\t\tedgeDetectionQuality, // [0,1] contrast needed, otherwise early discard\n\t\t\t\tinvEdgeDetectionQuality\n\t\t\t);\n\n\t\t}\n\t`\n\n};\n\nexport { FXAAShader };\n", "/**\n * Focus shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst FocusShader = {\n\n\tname: 'FocusShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'screenWidth': { value: 1024 },\n\t\t'screenHeight': { value: 1024 },\n\t\t'sampleDistance': { value: 0.94 },\n\t\t'waveFactor': { value: 0.00125 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float screenWidth;\n\t\tuniform float screenHeight;\n\t\tuniform float sampleDistance;\n\t\tuniform float waveFactor;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color, org, tmp, add;\n\t\t\tfloat sample_dist, f;\n\t\t\tvec2 vin;\n\t\t\tvec2 uv = vUv;\n\n\t\t\tadd = color = org = texture2D( tDiffuse, uv );\n\n\t\t\tvin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 );\n\t\t\tsample_dist = dot( vin, vin ) * 2.0;\n\n\t\t\tf = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0;\n\n\t\t\tvec2 sampleSize = vec2( 1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f );\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize );\n\t\t\tif( tmp.b < color.b ) color = tmp;\n\n\t\t\tcolor = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) );\n\t\t\tcolor = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) );\n\n\t\t\tgl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 );\n\n\t\t}`\n\n};\n\nexport { FocusShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Edge Detection Shader using Frei-Chen filter\n * Based on http://rastergrid.com/blog/2011/01/frei-chen-edge-detector\n *\n * aspect: vec2 of (1/width, 1/height)\n */\n\nconst FreiChenShader = {\n\n\tname: 'FreiChenShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'aspect': { value: new Vector2( 512, 512 ) }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec2 aspect;\n\n\t\tvec2 texel = vec2( 1.0 / aspect.x, 1.0 / aspect.y );\n\n\n\t\tmat3 G[9];\n\n\t\t// hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45\n\n\t\tconst mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 );\n\t\tconst mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 );\n\t\tconst mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 );\n\t\tconst mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 );\n\t\tconst mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 );\n\t\tconst mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 );\n\t\tconst mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 );\n\t\tconst mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 );\n\t\tconst mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 );\n\n\t\tvoid main(void)\n\t\t{\n\n\t\t\tG[0] = g0,\n\t\t\tG[1] = g1,\n\t\t\tG[2] = g2,\n\t\t\tG[3] = g3,\n\t\t\tG[4] = g4,\n\t\t\tG[5] = g5,\n\t\t\tG[6] = g6,\n\t\t\tG[7] = g7,\n\t\t\tG[8] = g8;\n\n\t\t\tmat3 I;\n\t\t\tfloat cnv[9];\n\t\t\tvec3 sample;\n\n\t\t/* fetch the 3x3 neighbourhood and use the RGB vector's length as intensity value */\n\t\t\tfor (float i=0.0; i<3.0; i++) {\n\t\t\t\tfor (float j=0.0; j<3.0; j++) {\n\t\t\t\t\tsample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb;\n\t\t\t\t\tI[int(i)][int(j)] = length(sample);\n\t\t\t\t}\n\t\t\t}\n\n\t\t/* calculate the convolution values for all the masks */\n\t\t\tfor (int i=0; i<9; i++) {\n\t\t\t\tfloat dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]);\n\t\t\t\tcnv[i] = dp3 * dp3;\n\t\t\t}\n\n\t\t\tfloat M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]);\n\t\t\tfloat S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);\n\n\t\t\tgl_FragColor = vec4(vec3(sqrt(M/S)), 1.0);\n\t\t}`\n\n};\n\nexport { FreiChenShader };\n", "/**\n * Gamma Correction Shader\n * http://en.wikipedia.org/wiki/gamma_correction\n */\n\nconst GammaCorrectionShader = {\n\n\tname: 'GammaCorrectionShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vUv );\n\n\t\t\tgl_FragColor = sRGBTransferOETF( tex );\n\n\t\t}`\n\n};\n\nexport { GammaCorrectionShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * God-rays (crepuscular rays)\n *\n * Similar implementation to the one used by Crytek for CryEngine 2 [Sousa2008].\n * Blurs a mask generated from the depth map along radial lines emanating from the light\n * source. The blur repeatedly applies a blur filter of increasing support but constant\n * sample count to produce a blur filter with large support.\n *\n * My implementation performs 3 passes, similar to the implementation from Sousa. I found\n * just 6 samples per pass produced acceptible results. The blur is applied three times,\n * with decreasing filter support. The result is equivalent to a single pass with\n * 6*6*6 = 216 samples.\n *\n * References:\n *\n * Sousa2008 - Crysis Next Gen Effects, GDC2008, http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt\n */\n\nconst GodRaysDepthMaskShader = {\n\n\tname: 'GodRaysDepthMaskShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv );\n\n\t\t}`\n\n};\n\n\n/**\n * The god-ray generation shader.\n *\n * First pass:\n *\n * The depth map is blurred along radial lines towards the \"sun\". The\n * output is written to a temporary render target (I used a 1/4 sized\n * target).\n *\n * Pass two & three:\n *\n * The results of the previous pass are re-blurred, each time with a\n * decreased distance between samples.\n */\n\nconst GodRaysGenerateShader = {\n\n\tname: 'GodRaysGenerateShader',\n\n\tuniforms: {\n\n\t\ttInput: {\n\t\t\tvalue: null\n\t\t},\n\t\tfStepSize: {\n\t\t\tvalue: 1.0\n\t\t},\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t }`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#define TAPS_PER_PASS 6.0\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tInput;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fStepSize; // filter step size\n\n\t\tvoid main() {\n\n\t\t// delta from current pixel to \"sun\" position\n\n\t\t\tvec2 delta = vSunPositionScreenSpace.xy - vUv;\n\t\t\tfloat dist = length( delta );\n\n\t\t// Step vector (uv space)\n\n\t\t\tvec2 stepv = fStepSize * delta / dist;\n\n\t\t// Number of iterations between pixel and sun\n\n\t\t\tfloat iters = dist/fStepSize;\n\n\t\t\tvec2 uv = vUv.xy;\n\t\t\tfloat col = 0.0;\n\n\t\t// This breaks ANGLE in Chrome 22\n\t\t//\t- see http://code.google.com/p/chromium/issues/detail?id=153105\n\n\t\t/*\n\t\t// Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),\n\t\t// so i've just left the loop\n\n\t\t\"for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {\",\n\n\t\t// Accumulate samples, making sure we dont walk past the light source.\n\n\t\t// The check for uv.y < 1 would not be necessary with \"border\" UV wrap\n\t\t// mode, with a black border color. I don't think this is currently\n\t\t// exposed by three.js. As a result there might be artifacts when the\n\t\t// sun is to the left, right or bottom of screen as these cases are\n\t\t// not specifically handled.\n\n\t\t\"\tcol += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 );\",\n\t\t\"\tuv += stepv;\",\n\n\t\t\"}\",\n\t\t*/\n\n\t\t// Unrolling loop manually makes it work in ANGLE\n\n\t\t\tfloat f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) ); // used to fade out godrays\n\n\t\t\tif ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t\tif ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n\t\t\tuv += stepv;\n\n\t\t// Should technically be dividing by 'iters but 'TAPS_PER_PASS' smooths out\n\t\t// objectionable artifacts, in particular near the sun position. The side\n\t\t// effect is that the result is darker than it should be around the sun, as\n\t\t// TAPS_PER_PASS is greater than the number of samples actually accumulated.\n\t\t// When the result is inverted (in the shader 'godrays_combine this produces\n\t\t// a slight bright spot at the position of the sun, even when it is occluded.\n\n\t\t\tgl_FragColor = vec4( col/TAPS_PER_PASS );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n/**\n * Additively applies god rays from texture tGodRays to a background (tColors).\n * fGodRayIntensity attenuates the god rays.\n */\n\nconst GodRaysCombineShader = {\n\n\tname: 'GodRaysCombineShader',\n\n\tuniforms: {\n\n\t\ttColors: {\n\t\t\tvalue: null\n\t\t},\n\n\t\ttGodRays: {\n\t\t\tvalue: null\n\t\t},\n\n\t\tfGodRayIntensity: {\n\t\t\tvalue: 0.69\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tColors;\n\t\tuniform sampler2D tGodRays;\n\n\t\tuniform float fGodRayIntensity;\n\n\t\tvoid main() {\n\n\t\t// Since THREE.MeshDepthMaterial renders foreground objects white and background\n\t\t// objects black, the god-rays will be white streaks. Therefore value is inverted\n\t\t// before being combined with tColors\n\n\t\t\tgl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r );\n\t\t\tgl_FragColor.a = 1.0;\n\n\t\t}`\n\n};\n\n\n/**\n * A dodgy sun/sky shader. Makes a bright spot at the sun location. Would be\n * cheaper/faster/simpler to implement this as a simple sun sprite.\n */\n\nconst GodRaysFakeSunShader = {\n\n\tname: 'GodRaysFakeSunShader',\n\n\tuniforms: {\n\n\t\tvSunPositionScreenSpace: {\n\t\t\tvalue: new Vector3()\n\t\t},\n\n\t\tfAspect: {\n\t\t\tvalue: 1.0\n\t\t},\n\n\t\tsunColor: {\n\t\t\tvalue: new Color( 0xffee00 )\n\t\t},\n\n\t\tbgColor: {\n\t\t\tvalue: new Color( 0x000000 )\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform vec3 vSunPositionScreenSpace;\n\t\tuniform float fAspect;\n\n\t\tuniform vec3 sunColor;\n\t\tuniform vec3 bgColor;\n\n\t\tvoid main() {\n\n\t\t\tvec2 diff = vUv - vSunPositionScreenSpace.xy;\n\n\t\t// Correct for aspect ratio\n\n\t\t\tdiff.x *= fAspect;\n\n\t\t\tfloat prop = clamp( length( diff ) / 0.5, 0.0, 1.0 );\n\t\t\tprop = 0.35 * pow( 1.0 - prop, 3.0 );\n\n\t\t\tgl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor;\n\t\t\tgl_FragColor.w = 1.0;\n\n\t\t}`\n\n};\n\nexport { GodRaysDepthMaskShader, GodRaysGenerateShader, GodRaysCombineShader, GodRaysFakeSunShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst HorizontalBlurShader = {\n\n\tname: 'HorizontalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst HorizontalTiltShiftShader = {\n\n\tname: 'HorizontalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'h': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float h;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat hh = h * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { HorizontalTiltShiftShader };\n", "/**\n * Hue and saturation adjustment\n * https://github.com/evanw/glfx.js\n * hue: -1 to 1 (-1 is 180 degrees in the negative direction, 0 is no change, etc.\n * saturation: -1 to 1 (-1 is solid gray, 0 is no change, and 1 is maximum contrast)\n */\n\nconst HueSaturationShader = {\n\n\tname: 'HueSaturationShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'hue': { value: 0 },\n\t\t'saturation': { value: 0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float hue;\n\t\tuniform float saturation;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// hue\n\t\t\tfloat angle = hue * 3.14159265;\n\t\t\tfloat s = sin(angle), c = cos(angle);\n\t\t\tvec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n\t\t\tfloat len = length(gl_FragColor.rgb);\n\t\t\tgl_FragColor.rgb = vec3(\n\t\t\t\tdot(gl_FragColor.rgb, weights.xyz),\n\t\t\t\tdot(gl_FragColor.rgb, weights.zxy),\n\t\t\t\tdot(gl_FragColor.rgb, weights.yzx)\n\t\t\t);\n\n\t\t\t// saturation\n\t\t\tfloat average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0;\n\t\t\tif (saturation > 0.0) {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation));\n\t\t\t} else {\n\t\t\t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation);\n\t\t\t}\n\n\t\t}`\n\n};\n\nexport { HueSaturationShader };\n", "/**\n * Kaleidoscope Shader\n * Radial reflection around center point\n * Ported from: http://pixelshaders.com/editor/\n * by Toby Schachman / http://tobyschachman.com/\n *\n * sides: number of reflections\n * angle: initial angle in radians\n */\n\nconst KaleidoShader = {\n\n\tname: 'KaleidoShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'sides': { value: 6.0 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float sides;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv - 0.5;\n\t\t\tfloat r = length(p);\n\t\t\tfloat a = atan(p.y, p.x) + angle;\n\t\t\tfloat tau = 2. * 3.1416 ;\n\t\t\ta = mod(a, tau/sides);\n\t\t\ta = abs(a - tau/sides/2.) ;\n\t\t\tp = r * vec2(cos(a), sin(a));\n\t\t\tvec4 color = texture2D(tDiffuse, p + 0.5);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { KaleidoShader };\n", "/**\n * Luminosity\n * http://en.wikipedia.org/wiki/Luminosity\n */\n\nconst LuminosityShader = {\n\n\tname: 'LuminosityShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat l = luminance( texel.rgb );\n\n\t\t\tgl_FragColor = vec4( l, l, l, texel.w );\n\n\t\t}`\n\n};\n\nexport { LuminosityShader };\n", "/**\n * Mirror Shader\n * Copies half the input to the other half\n *\n * side: side of input to mirror (0 = left, 1 = right, 2 = top, 3 = bottom)\n */\n\nconst MirrorShader = {\n\n\tname: 'MirrorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'side': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform int side;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 p = vUv;\n\t\t\tif (side == 0){\n\t\t\t\tif (p.x > 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 1){\n\t\t\t\tif (p.x < 0.5) p.x = 1.0 - p.x;\n\t\t\t}else if (side == 2){\n\t\t\t\tif (p.y < 0.5) p.y = 1.0 - p.y;\n\t\t\t}else if (side == 3){\n\t\t\t\tif (p.y > 0.5) p.y = 1.0 - p.y;\n\t\t\t}\n\t\t\tvec4 color = texture2D(tDiffuse, p);\n\t\t\tgl_FragColor = color;\n\n\t\t}`\n\n};\n\nexport { MirrorShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Normal map shader\n * - compute normals from heightmap\n */\n\nconst NormalMapShader = {\n\n\tname: 'NormalMapShader',\n\n\tuniforms: {\n\n\t\t'heightMap': { value: null },\n\t\t'resolution': { value: new Vector2( 512, 512 ) },\n\t\t'scale': { value: new Vector2( 1, 1 ) },\n\t\t'height': { value: 0.05 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float height;\n\t\tuniform vec2 resolution;\n\t\tuniform sampler2D heightMap;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tfloat val = texture2D( heightMap, vUv ).x;\n\n\t\t\tfloat valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;\n\t\t\tfloat valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;\n\n\t\t\tgl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 );\n\n\t\t}`\n\n};\n\nexport { NormalMapShader };\n", "/**\n * RGB Shift Shader\n * Shifts red and blue channels from center in opposite directions\n * Ported from https://web.archive.org/web/20090820185047/http://kriss.cx/tom/2009/05/rgb-shift/\n * by Tom Butterworth / https://web.archive.org/web/20090810054752/http://kriss.cx/tom/\n *\n * amount: shift distance (1 is width of input)\n * angle: shift angle in radians\n */\n\nconst RGBShiftShader = {\n\n\tname: 'RGBShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 0.005 },\n\t\t'angle': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float amount;\n\t\tuniform float angle;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\tvec4 cr = texture2D(tDiffuse, vUv + offset);\n\t\t\tvec4 cga = texture2D(tDiffuse, vUv);\n\t\t\tvec4 cb = texture2D(tDiffuse, vUv - offset);\n\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\n\t\t}`\n\n};\n\nexport { RGBShiftShader };\n", "/**\n * Sepia tone shader\n * based on glfx.js sepia shader\n * https://github.com/evanw/glfx.js\n */\n\nconst SepiaShader = {\n\n\tname: 'SepiaShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'amount': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float amount;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = texture2D( tDiffuse, vUv );\n\t\t\tvec3 c = color.rgb;\n\n\t\t\tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\n\t\t\tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\n\t\t\tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\n\n\t\t\tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\n\n\t\t}`\n\n};\n\nexport { SepiaShader };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Sobel Edge Detection (see https://youtu.be/uihBwtPIBxM)\n *\n * As mentioned in the video the Sobel operator expects a grayscale image as input.\n *\n */\n\nconst SobelOperatorShader = {\n\n\tname: 'SobelOperatorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2() }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y );\n\n\t\t// kernel definition (in glsl matrices are filled in column-major order)\n\n\t\t\tconst mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 ); // x direction kernel\n\t\t\tconst mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 ); // y direction kernel\n\n\t\t// fetch the 3x3 neighbourhood of a fragment\n\n\t\t// first column\n\n\t\t\tfloat tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r;\n\t\t\tfloat tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1, 0 ) ).r;\n\t\t\tfloat tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1, 1 ) ).r;\n\n\t\t// second column\n\n\t\t\tfloat tx1y0 = texture2D( tDiffuse, vUv + texel * vec2( 0, -1 ) ).r;\n\t\t\tfloat tx1y1 = texture2D( tDiffuse, vUv + texel * vec2( 0, 0 ) ).r;\n\t\t\tfloat tx1y2 = texture2D( tDiffuse, vUv + texel * vec2( 0, 1 ) ).r;\n\n\t\t// third column\n\n\t\t\tfloat tx2y0 = texture2D( tDiffuse, vUv + texel * vec2( 1, -1 ) ).r;\n\t\t\tfloat tx2y1 = texture2D( tDiffuse, vUv + texel * vec2( 1, 0 ) ).r;\n\t\t\tfloat tx2y2 = texture2D( tDiffuse, vUv + texel * vec2( 1, 1 ) ).r;\n\n\t\t// gradient value in x direction\n\n\t\t\tfloat valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 +\n\t\t\t\tGx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 +\n\t\t\t\tGx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2;\n\n\t\t// gradient value in y direction\n\n\t\t\tfloat valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 +\n\t\t\t\tGy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 +\n\t\t\t\tGy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2;\n\n\t\t// magnitute of the total gradient\n\n\t\t\tfloat G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );\n\n\t\t\tgl_FragColor = vec4( vec3( G ), 1 );\n\n\t\t}`\n\n};\n\nexport { SobelOperatorShader };\n", "import {\n\tColor,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils\n} from 'three';\n\n/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\n\nfunction replaceAll( string, find, replace ) {\n\n\treturn string.split( find ).join( replace );\n\n}\n\nconst meshphong_frag_head = ShaderChunk[ 'meshphong_frag' ].slice( 0, ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\nconst meshphong_frag_body = ShaderChunk[ 'meshphong_frag' ].slice( ShaderChunk[ 'meshphong_frag' ].indexOf( 'void main() {' ) );\n\nconst SubsurfaceScatteringShader = {\n\n\tname: 'SubsurfaceScatteringShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib[ 'phong' ].uniforms,\n\t\t{\n\t\t\t'thicknessMap': { value: null },\n\t\t\t'thicknessColor': { value: new Color( 0xffffff ) },\n\t\t\t'thicknessDistortion': { value: 0.1 },\n\t\t\t'thicknessAmbient': { value: 0.0 },\n\t\t\t'thicknessAttenuation': { value: 0.1 },\n\t\t\t'thicknessPower': { value: 2.0 },\n\t\t\t'thicknessScale': { value: 10.0 }\n\t\t}\n\n\t] ),\n\n\tvertexShader: [\n\t\t'#define USE_UV',\n\t\tShaderChunk[ 'meshphong_vert' ],\n\t].join( '\\n' ),\n\n\tfragmentShader: [\n\t\t'#define USE_UV',\n\t\t'#define SUBSURFACE',\n\n\t\tmeshphong_frag_head,\n\n\t\t'uniform sampler2D thicknessMap;',\n\t\t'uniform float thicknessPower;',\n\t\t'uniform float thicknessScale;',\n\t\t'uniform float thicknessDistortion;',\n\t\t'uniform float thicknessAmbient;',\n\t\t'uniform float thicknessAttenuation;',\n\t\t'uniform vec3 thicknessColor;',\n\n\t\t'void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, inout ReflectedLight reflectedLight) {',\n\t\t'\tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;',\n\t\t'\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * thicknessDistortion));',\n\t\t'\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -scatteringHalf)), thicknessPower) * thicknessScale;',\n\t\t'\tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;',\n\t\t'\treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;',\n\t\t'}',\n\n\t\tmeshphong_frag_body.replace( '#include ',\n\n\t\t\treplaceAll(\n\t\t\t\tShaderChunk[ 'lights_fragment_begin' ],\n\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\t\t\t\t[\n\t\t\t\t\t'RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );',\n\n\t\t\t\t\t'#if defined( SUBSURFACE ) && defined( USE_UV )',\n\t\t\t\t\t' RE_Direct_Scattering(directLight, vUv, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, reflectedLight);',\n\t\t\t\t\t'#endif',\n\t\t\t\t].join( '\\n' )\n\t\t\t),\n\n\t\t),\n\n\t].join( '\\n' ),\n\n};\n\nexport { SubsurfaceScatteringShader };\n", "/**\n * Technicolor Shader\n * Simulates the look of the two-strip technicolor process popular in early 20th century films.\n * More historical info here: http://www.widescreenmuseum.com/oldcolor/technicolor1.htm\n * Demo here: http://charliehoey.com/technicolor_shader/shader_test.html\n */\n\nconst TechnicolorShader = {\n\n\tname: 'TechnicolorShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );\n\t\t\tvec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0);\n\n\t\t\tgl_FragColor = newTex;\n\n\t\t}`\n\n};\n\nexport { TechnicolorShader };\n", "import {\n\tColor,\n\tVector3\n} from 'three';\n\n/**\n * Currently contains:\n *\n *\ttoon1\n *\ttoon2\n *\thatching\n *\tdotted\n */\n\nconst ToonShader1 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t\tvec3 I = worldPosition.xyz - cameraPosition;\n\t\t\tvRefract = refract( normalize( I ), worldNormal, 1.02 );\n\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvarying vec3 vRefract;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tfloat intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) );\n\t\t\tintensity += length(lightWeighting) * 0.2;\n\n\t\t\tfloat cameraWeighting = dot( normalize( vNormal ), vRefract );\n\t\t\tintensity += pow( 1.0 - length( cameraWeighting ), 6.0 );\n\t\t\tintensity = intensity * 0.2 + 0.3;\n\n\t\t\tif ( intensity < 0.50 ) {\n\n\t\t\t\tgl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tgl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShader2 = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos': { value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xeeeeee ) },\n\t\t'uLineColor1': { value: new Color( 0x808080 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4);\n\t\t\tfloat light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor1, 1.0 );\n\n\t\t\t}\n\n\t\t\tif ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) {\n\n\t\t\t\tgl_FragColor *= vec4( uLineColor2, 1.0 );\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderHatching = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) },\n\t\t'uLineColor2': { value: new Color( 0x000000 ) },\n\t\t'uLineColor3': { value: new Color( 0x000000 ) },\n\t\t'uLineColor4': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.75 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor2, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor3, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.3465 ) {\n\n\t\t\t\tif (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor4, 1.0 );\n\n\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nconst ToonShaderDotted = {\n\n\tuniforms: {\n\n\t\t'uDirLightPos':\t{ value: new Vector3() },\n\t\t'uDirLightColor': { value: new Color( 0xeeeeee ) },\n\n\t\t'uAmbientLightColor': { value: new Color( 0x050505 ) },\n\n\t\t'uBaseColor': { value: new Color( 0xffffff ) },\n\t\t'uLineColor1': { value: new Color( 0x000000 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\tvNormal = normalize( normalMatrix * normal );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 uBaseColor;\n\t\tuniform vec3 uLineColor1;\n\t\tuniform vec3 uLineColor2;\n\t\tuniform vec3 uLineColor3;\n\t\tuniform vec3 uLineColor4;\n\n\t\tuniform vec3 uDirLightPos;\n\t\tuniform vec3 uDirLightColor;\n\n\t\tuniform vec3 uAmbientLightColor;\n\n\t\tvarying vec3 vNormal;\n\n\t\tvoid main() {\n\n\t\t\tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n\t\t\tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n\t\t\tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n\t\t\tif ( length(lightWeighting) < 1.00 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( length(lightWeighting) < 0.50 ) {\n\n\t\t\t\tif ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {\n\n\t\t\t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { ToonShader1, ToonShader2, ToonShaderHatching, ToonShaderDotted };\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * Triangle blur shader\n * based on glfx.js triangle blur shader\n * https://github.com/evanw/glfx.js\n *\n * A basic blur filter, which convolves the image with a\n * pyramid filter. The pyramid filter is separable and is applied as two\n * perpendicular triangle filters.\n */\n\nconst TriangleBlurShader = {\n\n\tname: 'TriangleBlurShader',\n\n\tuniforms: {\n\n\t\t'texture': { value: null },\n\t\t'delta': { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t#include \n\n\t\t#define ITERATIONS 10.0\n\n\t\tuniform sampler2D texture;\n\t\tuniform vec2 delta;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 color = vec4( 0.0 );\n\n\t\t\tfloat total = 0.0;\n\n\t\t// randomize the lookup values to hide the fixed number of samples\n\n\t\t\tfloat offset = rand( vUv );\n\n\t\t\tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\n\n\t\t\t\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\n\t\t\t\tfloat weight = 1.0 - abs( percent );\n\n\t\t\t\tcolor += texture2D( texture, vUv + delta * percent ) * weight;\n\t\t\t\ttotal += weight;\n\n\t\t\t}\n\n\t\t\tgl_FragColor = color / total;\n\n\t\t}`\n\n};\n\nexport { TriangleBlurShader };\n", "/**\n * Unpack RGBA depth shader\n * - show RGBA encoded depth as monochrome color\n */\n\nconst UnpackDepthRGBAShader = {\n\n\tname: 'UnpackDepthRGBAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\t#include \n\n\t\tvoid main() {\n\n\t\t\tfloat depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );\n\t\t\tgl_FragColor = vec4( vec3( depth ), opacity );\n\n\t\t}`\n\n};\n\nexport { UnpackDepthRGBAShader };\n", "import {\n\tUniformsLib,\n\tUniformsUtils,\n\tMatrix4\n} from 'three';\n\n/**\n * Mesh Velocity Shader @bhouston\n */\n\nconst VelocityShader = {\n\n\tname: 'VelocityShader',\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.displacementmap,\n\t\t{\n\t\t\tmodelMatrixPrev: { value: new Matrix4() },\n\t\t\tcurrentProjectionViewMatrix: { value: new Matrix4() },\n\t\t\tpreviousProjectionViewMatrix: { value: new Matrix4() }\n\t\t}\n\t] ),\n\n\tvertexShader: /* glsl */`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nuniform mat4 previousProjectionViewMatrix;\nuniform mat4 currentProjectionViewMatrix;\n\nuniform mat4 modelMatrixPrev;\n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * skinned;\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * skinned;\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\tclipPositionCurrent = currentProjectionViewMatrix * modelMatrix * vec4( transformed, 1.0 );\n\tclipPositionPrevious = previousProjectionViewMatrix * modelMatrixPrev * vec4( transformed, 1.0 );\n\n#endif\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n}\n`,\n\tfragmentShader: /* glsl */`\n#define NORMAL\n\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec4 clipPositionCurrent;\nvarying vec4 clipPositionPrevious;\n\nvoid main() {\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\tdiffuseColor.a = opacity;\n\n\t#include \n\t#include \n\t#include \n\n\tvec2 ndcPositionCurrent = clipPositionCurrent.xy/clipPositionCurrent.w;\n\tvec2 ndcPositionPrevious = clipPositionPrevious.xy/clipPositionPrevious.w;\n\tvec2 vel = ( ndcPositionCurrent - ndcPositionPrevious ) * 0.5;\n\tvel = vel * 0.5 + 0.5;\n\tvec2 v1 = packDepthToRG(vel.x);\n\tvec2 v2 = packDepthToRG(vel.y);\n\tgl_FragColor = vec4(v1.x, v1.y, v2.x, v2.y);\n\n\t#include \n\n}\n\n`\n};\n\nexport { VelocityShader };\n", "/**\n * Two pass Gaussian blur filter (horizontal and vertical blur shaders)\n * - see http://www.cake23.de/traveling-wavefronts-lit-up.html\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n */\n\nconst VerticalBlurShader = {\n\n\tname: 'VerticalBlurShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalBlurShader };\n", "/**\n * Simple fake tilt-shift effect, modulating two pass Gaussian blur (see above) by vertical position\n *\n * - 9 samples per pass\n * - standard deviation 2.7\n * - \"h\" and \"v\" parameters should be set to \"1 / width\" and \"1 / height\"\n * - \"r\" parameter control where \"focused\" horizontal line lies\n */\n\nconst VerticalTiltShiftShader = {\n\n\tname: 'VerticalTiltShiftShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'v': { value: 1.0 / 512.0 },\n\t\t'r': { value: 0.35 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float v;\n\t\tuniform float r;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 sum = vec4( 0.0 );\n\n\t\t\tfloat vv = v * abs( r - vUv.y );\n\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;\n\t\t\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;\n\n\t\t\tgl_FragColor = sum;\n\n\t\t}`\n\n};\n\nexport { VerticalTiltShiftShader };\n", "/**\n * Vignette shader\n * based on PaintEffect postprocess from ro.me\n * http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js\n */\n\nconst VignetteShader = {\n\n\tname: 'VignetteShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'offset': { value: 1.0 },\n\t\t'darkness': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float offset;\n\t\tuniform float darkness;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t// Eskil's vignette\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\n\t\t\tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\n\n\t\t}`\n\n};\n\nexport { VignetteShader };\n", "import {\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Shaders to render 3D volumes using raycasting.\n * The applied techniques are based on similar implementations in the Visvis and Vispy projects.\n * This is not the only approach, therefore it's marked 1.\n */\n\nconst VolumeRenderShader1 = {\n\n\tuniforms: {\n\t\t'u_size': { value: new Vector3( 1, 1, 1 ) },\n\t\t'u_renderstyle': { value: 0 },\n\t\t'u_renderthreshold': { value: 0.5 },\n\t\t'u_clim': { value: new Vector2( 1, 1 ) },\n\t\t'u_data': { value: null },\n\t\t'u_cmdata': { value: null }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec4 v_nearpos;\n\t\tvarying vec4 v_farpos;\n\t\tvarying vec3 v_position;\n\n\t\tvoid main() {\n\t\t\t\t// Prepare transforms to map to \"camera view\". See also:\n\t\t\t\t// https://threejs.org/docs/#api/renderers/webgl/WebGLProgram\n\t\t\t\tmat4 viewtransformf = modelViewMatrix;\n\t\t\t\tmat4 viewtransformi = inverse(modelViewMatrix);\n\n\t\t\t\t// Project local vertex coordinate to camera position. Then do a step\n\t\t\t\t// backward (in cam coords) to the near clipping plane, and project back. Do\n\t\t\t\t// the same for the far clipping plane. This gives us all the information we\n\t\t\t\t// need to calculate the ray and truncate it to the viewing cone.\n\t\t\t\tvec4 position4 = vec4(position, 1.0);\n\t\t\t\tvec4 pos_in_cam = viewtransformf * position4;\n\n\t\t\t\t// Intersection of ray and near clipping plane (z = -1 in clip coords)\n\t\t\t\tpos_in_cam.z = -pos_in_cam.w;\n\t\t\t\tv_nearpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Intersection of ray and far clipping plane (z = +1 in clip coords)\n\t\t\t\tpos_in_cam.z = pos_in_cam.w;\n\t\t\t\tv_farpos = viewtransformi * pos_in_cam;\n\n\t\t\t\t// Set varyings and output pos\n\t\t\t\tv_position = position;\n\t\t\t\tgl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\t\t\tprecision highp float;\n\t\t\t\tprecision mediump sampler3D;\n\n\t\t\t\tuniform vec3 u_size;\n\t\t\t\tuniform int u_renderstyle;\n\t\t\t\tuniform float u_renderthreshold;\n\t\t\t\tuniform vec2 u_clim;\n\n\t\t\t\tuniform sampler3D u_data;\n\t\t\t\tuniform sampler2D u_cmdata;\n\n\t\t\t\tvarying vec3 v_position;\n\t\t\t\tvarying vec4 v_nearpos;\n\t\t\t\tvarying vec4 v_farpos;\n\n\t\t\t\t// The maximum distance through our rendering volume is sqrt(3).\n\t\t\t\tconst int MAX_STEPS = 887;\t// 887 for 512^3, 1774 for 1024^3\n\t\t\t\tconst int REFINEMENT_STEPS = 4;\n\t\t\t\tconst float relative_step_size = 1.0;\n\t\t\t\tconst vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0);\n\t\t\t\tconst vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0);\n\t\t\t\tconst vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0);\n\t\t\t\tconst float shininess = 40.0;\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\t\t\t\tvoid cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\n\t\t\t\tfloat sample1(vec3 texcoords);\n\t\t\t\tvec4 apply_colormap(float val);\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray);\n\n\n\t\t\t\tvoid main() {\n\t\t\t\t\t\t// Normalize clipping plane info\n\t\t\t\t\t\tvec3 farpos = v_farpos.xyz / v_farpos.w;\n\t\t\t\t\t\tvec3 nearpos = v_nearpos.xyz / v_nearpos.w;\n\n\t\t\t\t\t\t// Calculate unit vector pointing in the view direction through this fragment.\n\t\t\t\t\t\tvec3 view_ray = normalize(nearpos.xyz - farpos.xyz);\n\n\t\t\t\t\t\t// Compute the (negative) distance to the front surface or near clipping plane.\n\t\t\t\t\t\t// v_position is the back face of the cuboid, so the initial distance calculated in the dot\n\t\t\t\t\t\t// product below is the distance from near clip plane to the back of the cuboid\n\t\t\t\t\t\tfloat distance = dot(nearpos - v_position, view_ray);\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.x) / view_ray.x,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.x - 0.5 - v_position.x) / view_ray.x));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.y) / view_ray.y,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.y - 0.5 - v_position.y) / view_ray.y));\n\t\t\t\t\t\tdistance = max(distance, min((-0.5 - v_position.z) / view_ray.z,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(u_size.z - 0.5 - v_position.z) / view_ray.z));\n\n\t\t\t\t\t\t// Now we have the starting position on the front surface\n\t\t\t\t\t\tvec3 front = v_position + view_ray * distance;\n\n\t\t\t\t\t\t// Decide how many steps to take\n\t\t\t\t\t\tint nsteps = int(-distance / relative_step_size + 0.5);\n\t\t\t\t\t\tif ( nsteps < 1 )\n\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t// Get starting location and step vector in texture coordinates\n\t\t\t\t\t\tvec3 step = ((v_position - front) / u_size) / float(nsteps);\n\t\t\t\t\t\tvec3 start_loc = front / u_size;\n\n\t\t\t\t\t\t// For testing: show the number of steps. This helps to establish\n\t\t\t\t\t\t// whether the rays are correctly oriented\n\t\t\t\t\t\t//'gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0);\n\t\t\t\t\t\t//'return;\n\n\t\t\t\t\t\tif (u_renderstyle == 0)\n\t\t\t\t\t\t\t\tcast_mip(start_loc, step, nsteps, view_ray);\n\t\t\t\t\t\telse if (u_renderstyle == 1)\n\t\t\t\t\t\t\t\tcast_iso(start_loc, step, nsteps, view_ray);\n\n\t\t\t\t\t\tif (gl_FragColor.a < 0.05)\n\t\t\t\t\t\t\t\tdiscard;\n\t\t\t\t}\n\n\n\t\t\t\tfloat sample1(vec3 texcoords) {\n\t\t\t\t\t\t/* Sample float value from a 3D texture. Assumes intensity data. */\n\t\t\t\t\t\treturn texture(u_data, texcoords.xyz).r;\n\t\t\t\t}\n\n\n\t\t\t\tvec4 apply_colormap(float val) {\n\t\t\t\t\t\tval = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);\n\t\t\t\t\t\treturn texture2D(u_cmdata, vec2(val, 0.5));\n\t\t\t\t}\n\n\n\t\t\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {\n\n\t\t\t\t\t\tfloat max_val = -1e6;\n\t\t\t\t\t\tint max_i = 100;\n\t\t\t\t\t\tvec3 loc = start_loc;\n\n\t\t\t\t\t\t// Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with\n\t\t\t\t\t\t// non-constant expression. So we use a hard-coded max, and an additional condition\n\t\t\t\t\t\t// inside the loop.\n\t\t\t\t\t\tfor (int iter=0; iter= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\t\t\t\t\t\t\t\t// Apply MIP operation\n\t\t\t\t\t\t\t\tif (val > max_val) {\n\t\t\t\t\t\t\t\t\t\tmax_val = val;\n\t\t\t\t\t\t\t\t\t\tmax_i = iter;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Refine location, gives crispier images\n\t\t\t\t\t\tvec3 iloc = start_loc + step * (float(max_i) - 0.5);\n\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\tfor (int i=0; i= nsteps)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// Sample from the 3D texture\n\t\t\t\t\t\t\t\tfloat val = sample1(loc);\n\n\t\t\t\t\t\t\t\tif (val > low_threshold) {\n\t\t\t\t\t\t\t\t\t\t// Take the last interval in smaller steps\n\t\t\t\t\t\t\t\t\t\tvec3 iloc = loc - 0.5 * step;\n\t\t\t\t\t\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\t\t\t\t\t\tfor (int i=0; i u_renderthreshold) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgl_FragColor = add_lighting(val, iloc, dstep, view_ray);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tiloc += istep;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Advance location deeper into the volume\n\t\t\t\t\t\t\t\tloc += step;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray)\n\t\t\t\t{\n\t\t\t\t\t// Calculate color by incorporating lighting\n\n\t\t\t\t\t\t// View direction\n\t\t\t\t\t\tvec3 V = normalize(view_ray);\n\n\t\t\t\t\t\t// calculate normal vector from gradient\n\t\t\t\t\t\tvec3 N;\n\t\t\t\t\t\tfloat val1, val2;\n\t\t\t\t\t\tval1 = sample1(loc + vec3(-step[0], 0.0, 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(+step[0], 0.0, 0.0));\n\t\t\t\t\t\tN[0] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, -step[1], 0.0));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, +step[1], 0.0));\n\t\t\t\t\t\tN[1] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\t\t\t\t\t\tval1 = sample1(loc + vec3(0.0, 0.0, -step[2]));\n\t\t\t\t\t\tval2 = sample1(loc + vec3(0.0, 0.0, +step[2]));\n\t\t\t\t\t\tN[2] = val1 - val2;\n\t\t\t\t\t\tval = max(max(val1, val2), val);\n\n\t\t\t\t\t\tfloat gm = length(N); // gradient magnitude\n\t\t\t\t\t\tN = normalize(N);\n\n\t\t\t\t\t\t// Flip normal so it points towards viewer\n\t\t\t\t\t\tfloat Nselect = float(dot(N, V) > 0.0);\n\t\t\t\t\t\tN = (2.0 * Nselect - 1.0) * N;\t// ==\tNselect * N - (1.0-Nselect)*N;\n\n\t\t\t\t\t\t// Init colors\n\t\t\t\t\t\tvec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\t\t\t\tvec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0);\n\n\t\t\t\t\t\t// note: could allow multiple lights\n\t\t\t\t\t\tfor (int i=0; i<1; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t // Get light direction (make sure to prevent zero devision)\n\t\t\t\t\t\t\t\tvec3 L = normalize(view_ray);\t//lightDirs[i];\n\t\t\t\t\t\t\t\tfloat lightEnabled = float( length(L) > 0.0 );\n\t\t\t\t\t\t\t\tL = normalize(L + (1.0 - lightEnabled));\n\n\t\t\t\t\t\t\t\t// Calculate lighting properties\n\t\t\t\t\t\t\t\tfloat lambertTerm = clamp(dot(N, L), 0.0, 1.0);\n\t\t\t\t\t\t\t\tvec3 H = normalize(L+V); // Halfway vector\n\t\t\t\t\t\t\t\tfloat specularTerm = pow(max(dot(H, N), 0.0), shininess);\n\n\t\t\t\t\t\t\t\t// Calculate mask\n\t\t\t\t\t\t\t\tfloat mask1 = lightEnabled;\n\n\t\t\t\t\t\t\t\t// Calculate colors\n\t\t\t\t\t\t\t\tambient_color +=\tmask1 * ambient_color;\t// * gl_LightSource[i].ambient;\n\t\t\t\t\t\t\t\tdiffuse_color +=\tmask1 * lambertTerm;\n\t\t\t\t\t\t\t\tspecular_color += mask1 * specularTerm * specular_color;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate final color by componing different components\n\t\t\t\t\t\tvec4 final_color;\n\t\t\t\t\t\tvec4 color = apply_colormap(val);\n\t\t\t\t\t\tfinal_color = color * (ambient_color + diffuse_color) + specular_color;\n\t\t\t\t\t\tfinal_color.a = color.a;\n\t\t\t\t\t\treturn final_color;\n\t\t\t\t}`\n\n};\n\nexport { VolumeRenderShader1 };\n", "const WaterRefractionShader = {\n\n\tname: 'WaterRefractionShader',\n\n\tuniforms: {\n\n\t\t'color': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'time': {\n\t\t\tvalue: 0\n\t\t},\n\n\t\t'tDiffuse': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'tDudv': {\n\t\t\tvalue: null\n\t\t},\n\n\t\t'textureMatrix': {\n\t\t\tvalue: null\n\t\t}\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tvUvRefraction = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform vec3 color;\n\t\tuniform float time;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDudv;\n\n\t\tvarying vec2 vUv;\n\t\tvarying vec4 vUvRefraction;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t float waveStrength = 0.5;\n\t\t float waveSpeed = 0.03;\n\n\t\t\t// simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s)\n\n\t\t\tvec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength;\n\t\t\tdistortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed );\n\t\t\tvec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength;\n\n\t\t\t// new uv coords\n\n\t\t\tvec4 uv = vec4( vUvRefraction );\n\t\t\tuv.xy += distortion;\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, uv );\n\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nexport { WaterRefractionShader };\n", "class FlakesTexture {\n\n\tconstructor( width = 512, height = 512 ) {\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'rgb(127,127,255)';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tfor ( let i = 0; i < 4000; i ++ ) {\n\n\t\t\tconst x = Math.random() * width;\n\t\t\tconst y = Math.random() * height;\n\t\t\tconst r = Math.random() * 3 + 3;\n\n\t\t\tlet nx = Math.random() * 2 - 1;\n\t\t\tlet ny = Math.random() * 2 - 1;\n\t\t\tlet nz = 1.5;\n\n\t\t\tconst l = Math.sqrt( nx * nx + ny * ny + nz * nz );\n\n\t\t\tnx /= l; ny /= l; nz /= l;\n\n\t\t\tcontext.fillStyle = 'rgb(' + ( nx * 127 + 127 ) + ',' + ( ny * 127 + 127 ) + ',' + ( nz * 255 ) + ')';\n\t\t\tcontext.beginPath();\n\t\t\tcontext.arc( x, y, r, 0, Math.PI * 2 );\n\t\t\tcontext.fill();\n\n\t\t}\n\n\t\treturn canvas;\n\n\t}\n\n}\n\nexport { FlakesTexture };\n", "import {\n\tMathUtils,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _va = /*@__PURE__*/ new Vector3(), // from pe to pa\n\t_vb = /*@__PURE__*/ new Vector3(), // from pe to pb\n\t_vc = /*@__PURE__*/ new Vector3(), // from pe to pc\n\t_vr = /*@__PURE__*/ new Vector3(), // right axis of screen\n\t_vu = /*@__PURE__*/ new Vector3(), // up axis of screen\n\t_vn = /*@__PURE__*/ new Vector3(), // normal vector of screen\n\t_vec = /*@__PURE__*/ new Vector3(), // temporary vector\n\t_quat = /*@__PURE__*/ new Quaternion(); // temporary quaternion\n\n\n/** Set a PerspectiveCamera's projectionMatrix and quaternion\n * to exactly frame the corners of an arbitrary rectangle.\n * NOTE: This function ignores the standard parameters;\n * do not call updateProjectionMatrix() after this!\n * @param {Vector3} bottomLeftCorner\n * @param {Vector3} bottomRightCorner\n * @param {Vector3} topLeftCorner\n * @param {boolean} estimateViewFrustum */\nfunction frameCorners( camera, bottomLeftCorner, bottomRightCorner, topLeftCorner, estimateViewFrustum = false ) {\n\n\tconst pa = bottomLeftCorner, pb = bottomRightCorner, pc = topLeftCorner;\n\tconst pe = camera.position; // eye position\n\tconst n = camera.near; // distance of near clipping plane\n\tconst f = camera.far; //distance of far clipping plane\n\n\t_vr.copy( pb ).sub( pa ).normalize();\n\t_vu.copy( pc ).sub( pa ).normalize();\n\t_vn.crossVectors( _vr, _vu ).normalize();\n\n\t_va.copy( pa ).sub( pe ); // from pe to pa\n\t_vb.copy( pb ).sub( pe ); // from pe to pb\n\t_vc.copy( pc ).sub( pe ); // from pe to pc\n\n\tconst d = - _va.dot( _vn );\t// distance from eye to screen\n\tconst l = _vr.dot( _va ) * n / d; // distance to left screen edge\n\tconst r = _vr.dot( _vb ) * n / d; // distance to right screen edge\n\tconst b = _vu.dot( _va ) * n / d; // distance to bottom screen edge\n\tconst t = _vu.dot( _vc ) * n / d; // distance to top screen edge\n\n\t// Set the camera rotation to match the focal plane to the corners' plane\n\t_quat.setFromUnitVectors( _vec.set( 0, 1, 0 ), _vu );\n\tcamera.quaternion.setFromUnitVectors( _vec.set( 0, 0, 1 ).applyQuaternion( _quat ), _vn ).multiply( _quat );\n\n\t// Set the off-axis projection matrix to match the corners\n\tcamera.projectionMatrix.set( 2.0 * n / ( r - l ), 0.0,\n\t\t( r + l ) / ( r - l ), 0.0, 0.0,\n\t\t2.0 * n / ( t - b ),\n\t\t( t + b ) / ( t - b ), 0.0, 0.0, 0.0,\n\t\t( f + n ) / ( n - f ),\n\t\t2.0 * f * n / ( n - f ), 0.0, 0.0, - 1.0, 0.0 );\n\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t// FoV estimation to fix frustum culling\n\tif ( estimateViewFrustum ) {\n\n\t\t// Set fieldOfView to a conservative estimate\n\t\t// to make frustum tall/wide enough to encompass it\n\t\tcamera.fov =\n\t\t\tMathUtils.RAD2DEG / Math.min( 1.0, camera.aspect ) *\n\t\t\tMath.atan( ( _vec.copy( pb ).sub( pa ).length() +\n\t\t\t\t\t\t\t( _vec.copy( pc ).sub( pa ).length() ) ) / _va.length() );\n\n\t}\n\n}\n\nexport { frameCorners };\n", "var Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n", "import Stats from '../libs/stats.module.js';\n\n// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/\nexport class GPUStatsPanel extends Stats.Panel {\n\n\tconstructor( context, name = 'GPU MS' ) {\n\n\t\tsuper( name, '#f90', '#210' );\n\n\t\tconst extension = context.getExtension( 'EXT_disjoint_timer_query_webgl2' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.warn( 'GPUStatsPanel: disjoint_time_query extension not available.' );\n\n\t\t}\n\n\t\tthis.context = context;\n\t\tthis.extension = extension;\n\t\tthis.maxTime = 30;\n\t\tthis.activeQueries = 0;\n\n\t\tthis.startQuery = function () {\n\n\t\t\tconst gl = this.context;\n\t\t\tconst ext = this.extension;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// create the query object\n\t\t\tconst query = gl.createQuery();\n\t\t\tgl.beginQuery( ext.TIME_ELAPSED_EXT, query );\n\n\t\t\tthis.activeQueries ++;\n\n\t\t\tconst checkQuery = () => {\n\n\t\t\t\t// check if the query is available and valid\n\n\t\t\t\tconst available = gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE );\n\t\t\t\tconst disjoint = gl.getParameter( ext.GPU_DISJOINT_EXT );\n\t\t\t\tconst ns = gl.getQueryParameter( query, gl.QUERY_RESULT );\n\n\t\t\t\tconst ms = ns * 1e-6;\n\n\t\t\t\tif ( available ) {\n\n\t\t\t\t\t// update the display if it is valid\n\t\t\t\t\tif ( ! disjoint ) {\n\n\t\t\t\t\t\tthis.update( ms, this.maxTime );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.deleteQuery( query );\n\n\t\t\t\t\tthis.activeQueries --;\n\n\n\t\t\t\t} else if ( gl.isContextLost() === false ) {\n\n\t\t\t\t\t// otherwise try again the next frame\n\t\t\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\trequestAnimationFrame( checkQuery );\n\n\t\t};\n\n\t\tthis.endQuery = function () {\n\n\t\t\t// finish the query measurement\n\t\t\tconst ext = this.extension;\n\t\t\tconst gl = this.context;\n\n\t\t\tif ( ext === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tgl.endQuery( ext.TIME_ELAPSED_EXT );\n\n\t\t};\n\n\t}\n\n}\n", "/**\n * Octahedron and Quantization encodings based on work by:\n *\n * @link https://github.com/tsherif/mesh-quantization-example\n *\n */\n\nimport {\n\tBufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tVector3\n} from 'three';\nimport { PackedPhongMaterial } from './PackedPhongMaterial.js';\n\n\n\n/**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\nfunction compressNormals( mesh, encodeMethod ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst normal = mesh.geometry.attributes.normal;\n\n\tif ( ! normal ) {\n\n\t\tconsole.error( 'Geometry must contain normal attribute. ' );\n\n\t}\n\n\tif ( normal.isPacked ) return;\n\n\tif ( normal.itemSize != 3 ) {\n\n\t\tconsole.error( 'normal.itemSize is not 3, which cannot be encoded. ' );\n\n\t}\n\n\tconst array = normal.array;\n\tconst count = normal.count;\n\n\tlet result;\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\t// TODO: Add 1 byte to the result, making the encoded length to be 4 bytes.\n\t\tresult = new Uint8Array( count * 3 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx + 1 ] = encoded[ 1 ];\n\t\t\tresult[ idx + 2 ] = encoded[ 2 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 3, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT1Byte' ) {\n\n\t\t/**\n\t\t* It is not recommended to use 1-byte octahedron normals encoding unless you want to extremely reduce the memory usage\n\t\t* As it makes vertex data not aligned to a 4 byte boundary which may harm some WebGL implementations and sometimes the normal distortion is visible\n\t\t* Please refer to @zeux 's comments in https://github.com/mrdoob/three.js/pull/18208\n\t\t*/\n\n\t\tresult = new Int8Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 1 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 1;\n\n\t} else if ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tresult = new Int16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = octEncodeBest( array[ idx ], array[ idx + 1 ], array[ idx + 2 ], 2 );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else if ( encodeMethod == 'ANGLES' ) {\n\n\t\tresult = new Uint16Array( count * 2 );\n\n\t\tfor ( let idx = 0; idx < array.length; idx += 3 ) {\n\n\t\t\tconst encoded = anglesEncode( array[ idx ], array[ idx + 1 ], array[ idx + 2 ] );\n\n\t\t\tresult[ idx / 3 * 2 + 0 ] = encoded[ 0 ];\n\t\t\tresult[ idx / 3 * 2 + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'normal', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.normal.bytes = result.length * 2;\n\n\t} else {\n\n\t\tconsole.error( 'Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ' );\n\n\t}\n\n\tmesh.geometry.attributes.normal.needsUpdate = true;\n\tmesh.geometry.attributes.normal.isPacked = true;\n\tmesh.geometry.attributes.normal.packingMethod = encodeMethod;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tif ( encodeMethod == 'ANGLES' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 0;\n\n\t}\n\n\tif ( encodeMethod == 'OCT1Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'OCT2Byte' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 1;\n\n\t}\n\n\tif ( encodeMethod == 'DEFAULT' ) {\n\n\t\tmesh.material.defines.USE_PACKED_NORMAL = 2;\n\n\t}\n\n}\n\n\n/**\n\t * Make the input mesh.geometry's position attribute encoded and compressed.\n\t * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n\t *\n\t * @param {THREE.Mesh} mesh\n\t *\n\t */\nfunction compressPositions( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry. ' );\n\n\t}\n\n\tconst position = mesh.geometry.attributes.position;\n\n\tif ( ! position ) {\n\n\t\tconsole.error( 'Geometry must contain position attribute. ' );\n\n\t}\n\n\tif ( position.isPacked ) return;\n\n\tif ( position.itemSize != 3 ) {\n\n\t\tconsole.error( 'position.itemSize is not 3, which cannot be packed. ' );\n\n\t}\n\n\tconst array = position.array;\n\tconst encodingBytes = 2;\n\n\tconst result = quantizedEncode( array, encodingBytes );\n\n\tconst quantized = result.quantized;\n\tconst decodeMat = result.decodeMat;\n\n\t// IMPORTANT: calculate original geometry bounding info first, before updating packed positions\n\tif ( mesh.geometry.boundingBox == null ) mesh.geometry.computeBoundingBox();\n\tif ( mesh.geometry.boundingSphere == null ) mesh.geometry.computeBoundingSphere();\n\n\tmesh.geometry.setAttribute( 'position', new BufferAttribute( quantized, 3 ) );\n\tmesh.geometry.attributes.position.isPacked = true;\n\tmesh.geometry.attributes.position.needsUpdate = true;\n\tmesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;\n\n\t// modify material\n\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t}\n\n\tmesh.material.defines.USE_PACKED_POSITION = 0;\n\n\tmesh.material.uniforms.quantizeMatPos.value = decodeMat;\n\tmesh.material.uniforms.quantizeMatPos.needsUpdate = true;\n\n}\n\n/**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\nfunction compressUvs( mesh ) {\n\n\tif ( ! mesh.geometry ) {\n\n\t\tconsole.error( 'Mesh must contain geometry property. ' );\n\n\t}\n\n\tconst uvs = mesh.geometry.attributes.uv;\n\n\tif ( ! uvs ) {\n\n\t\tconsole.error( 'Geometry must contain uv attribute. ' );\n\n\t}\n\n\tif ( uvs.isPacked ) return;\n\n\tconst range = { min: Infinity, max: - Infinity };\n\n\tconst array = uvs.array;\n\n\tfor ( let i = 0; i < array.length; i ++ ) {\n\n\t\trange.min = Math.min( range.min, array[ i ] );\n\t\trange.max = Math.max( range.max, array[ i ] );\n\n\t}\n\n\tlet result;\n\n\tif ( range.min >= - 1.0 && range.max <= 1.0 ) {\n\n\t\t// use default encoding method\n\t\tresult = new Uint16Array( array.length );\n\n\t\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\t\tconst encoded = defaultEncode( array[ i ], array[ i + 1 ], 0, 2 );\n\n\t\t\tresult[ i ] = encoded[ 0 ];\n\t\t\tresult[ i + 1 ] = encoded[ 1 ];\n\n\t\t}\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result, 2, true ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 0;\n\n\t} else {\n\n\t\t// use quantized encoding method\n\t\tresult = quantizedEncodeUV( array, 2 );\n\n\t\tmesh.geometry.setAttribute( 'uv', new BufferAttribute( result.quantized, 2 ) );\n\t\tmesh.geometry.attributes.uv.isPacked = true;\n\t\tmesh.geometry.attributes.uv.needsUpdate = true;\n\t\tmesh.geometry.attributes.uv.bytes = result.quantized.length * 2;\n\n\t\tif ( ! ( mesh.material instanceof PackedPhongMaterial ) ) {\n\n\t\t\tmesh.material = new PackedPhongMaterial().copy( mesh.material );\n\n\t\t}\n\n\t\tmesh.material.defines.USE_PACKED_UV = 1;\n\n\t\tmesh.material.uniforms.quantizeMatUV.value = result.decodeMat;\n\t\tmesh.material.uniforms.quantizeMatUV.needsUpdate = true;\n\n\t}\n\n}\n\n\n// Encoding functions\n\nfunction defaultEncode( x, y, z, bytes ) {\n\n\tif ( bytes == 1 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 255 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 255 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 255 );\n\t\treturn new Uint8Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else if ( bytes == 2 ) {\n\n\t\tconst tmpx = Math.round( ( x + 1 ) * 0.5 * 65535 );\n\t\tconst tmpy = Math.round( ( y + 1 ) * 0.5 * 65535 );\n\t\tconst tmpz = Math.round( ( z + 1 ) * 0.5 * 65535 );\n\t\treturn new Uint16Array( [ tmpx, tmpy, tmpz ] );\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes must be 1 or 2' );\n\n\t}\n\n}\n\n// for `Angles` encoding\nfunction anglesEncode( x, y, z ) {\n\n\tconst normal0 = parseInt( 0.5 * ( 1.0 + Math.atan2( y, x ) / Math.PI ) * 65535 );\n\tconst normal1 = parseInt( 0.5 * ( 1.0 + z ) * 65535 );\n\treturn new Uint16Array( [ normal0, normal1 ] );\n\n}\n\n// for `Octahedron` encoding\nfunction octEncodeBest( x, y, z, bytes ) {\n\n\tlet oct, dec, best, currentCos, bestCos;\n\n\t// Test various combinations of ceil and floor\n\t// to minimize rounding errors\n\tbest = oct = octEncodeVec3( x, y, z, 'floor', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tbestCos = dot( x, y, z, dec );\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'floor' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'floor', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\t\tbestCos = currentCos;\n\n\t}\n\n\toct = octEncodeVec3( x, y, z, 'ceil', 'ceil' );\n\tdec = octDecodeVec2( oct );\n\tcurrentCos = dot( x, y, z, dec );\n\n\tif ( currentCos > bestCos ) {\n\n\t\tbest = oct;\n\n\t}\n\n\treturn best;\n\n\tfunction octEncodeVec3( x0, y0, z0, xfunc, yfunc ) {\n\n\t\tlet x = x0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\t\tlet y = y0 / ( Math.abs( x0 ) + Math.abs( y0 ) + Math.abs( z0 ) );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tempx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\tconst tempy = ( 1 - Math.abs( x ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t\tx = tempx;\n\t\t\ty = tempy;\n\n\t\t\tlet diff = 1 - Math.abs( x ) - Math.abs( y );\n\t\t\tif ( diff > 0 ) {\n\n\t\t\t\tdiff += 0.001;\n\t\t\t\tx += x > 0 ? diff / 2 : - diff / 2;\n\t\t\t\ty += y > 0 ? diff / 2 : - diff / 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\treturn new Int8Array( [\n\t\t\t\tMath[ xfunc ]( x * 127.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 127.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\t\tif ( bytes == 2 ) {\n\n\t\t\treturn new Int16Array( [\n\t\t\t\tMath[ xfunc ]( x * 32767.5 + ( x < 0 ? 1 : 0 ) ),\n\t\t\t\tMath[ yfunc ]( y * 32767.5 + ( y < 0 ? 1 : 0 ) )\n\t\t\t] );\n\n\t\t}\n\n\n\t}\n\n\tfunction octDecodeVec2( oct ) {\n\n\t\tlet x = oct[ 0 ];\n\t\tlet y = oct[ 1 ];\n\n\t\tif ( bytes == 1 ) {\n\n\t\t\tx /= x < 0 ? 127 : 128;\n\t\t\ty /= y < 0 ? 127 : 128;\n\n\t\t} else if ( bytes == 2 ) {\n\n\t\t\tx /= x < 0 ? 32767 : 32768;\n\t\t\ty /= y < 0 ? 32767 : 32768;\n\n\t\t}\n\n\n\t\tconst z = 1 - Math.abs( x ) - Math.abs( y );\n\n\t\tif ( z < 0 ) {\n\n\t\t\tconst tmpx = x;\n\t\t\tx = ( 1 - Math.abs( y ) ) * ( x >= 0 ? 1 : - 1 );\n\t\t\ty = ( 1 - Math.abs( tmpx ) ) * ( y >= 0 ? 1 : - 1 );\n\n\t\t}\n\n\t\tconst length = Math.sqrt( x * x + y * y + z * z );\n\n\t\treturn [\n\t\t\tx / length,\n\t\t\ty / length,\n\t\t\tz / length\n\t\t];\n\n\t}\n\n\tfunction dot( x, y, z, vec3 ) {\n\n\t\treturn x * vec3[ 0 ] + y * vec3[ 1 ] + z * vec3[ 2 ];\n\n\t}\n\n}\n\nfunction quantizedEncode( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix4();\n\n\tconst min = new Float32Array( 3 );\n\tconst max = new Float32Array( 3 );\n\n\tmin[ 0 ] = min[ 1 ] = min[ 2 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = max[ 2 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmin[ 2 ] = Math.min( min[ 2 ], array[ i + 2 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\t\tmax[ 2 ] = Math.max( max[ 2 ], array[ i + 2 ] );\n\n\t}\n\n\tdecodeMat.scale( new Vector3(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments,\n\t\t( max[ 2 ] - min[ 2 ] ) / segments\n\t) );\n\n\tdecodeMat.elements[ 12 ] = min[ 0 ];\n\tdecodeMat.elements[ 13 ] = min[ 1 ];\n\tdecodeMat.elements[ 14 ] = min[ 2 ];\n\n\tdecodeMat.transpose();\n\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0,\n\t\tmax[ 2 ] !== min[ 2 ] ? segments / ( max[ 2 ] - min[ 2 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 3 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\t\tquantized[ i + 2 ] = Math.floor( ( array[ i + 2 ] - min[ 2 ] ) * multiplier[ 2 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\nfunction quantizedEncodeUV( array, bytes ) {\n\n\tlet quantized, segments;\n\n\tif ( bytes == 1 ) {\n\n\t\tquantized = new Uint8Array( array.length );\n\t\tsegments = 255;\n\n\t} else if ( bytes == 2 ) {\n\n\t\tquantized = new Uint16Array( array.length );\n\t\tsegments = 65535;\n\n\t} else {\n\n\t\tconsole.error( 'number of bytes error! ' );\n\n\t}\n\n\tconst decodeMat = new Matrix3();\n\n\tconst min = new Float32Array( 2 );\n\tconst max = new Float32Array( 2 );\n\n\tmin[ 0 ] = min[ 1 ] = Number.MAX_VALUE;\n\tmax[ 0 ] = max[ 1 ] = - Number.MAX_VALUE;\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tmin[ 0 ] = Math.min( min[ 0 ], array[ i + 0 ] );\n\t\tmin[ 1 ] = Math.min( min[ 1 ], array[ i + 1 ] );\n\t\tmax[ 0 ] = Math.max( max[ 0 ], array[ i + 0 ] );\n\t\tmax[ 1 ] = Math.max( max[ 1 ], array[ i + 1 ] );\n\n\t}\n\n\tdecodeMat.scale(\n\t\t( max[ 0 ] - min[ 0 ] ) / segments,\n\t\t( max[ 1 ] - min[ 1 ] ) / segments\n\t);\n\n\tdecodeMat.elements[ 6 ] = min[ 0 ];\n\tdecodeMat.elements[ 7 ] = min[ 1 ];\n\n\tdecodeMat.transpose();\n\n\tconst multiplier = new Float32Array( [\n\t\tmax[ 0 ] !== min[ 0 ] ? segments / ( max[ 0 ] - min[ 0 ] ) : 0,\n\t\tmax[ 1 ] !== min[ 1 ] ? segments / ( max[ 1 ] - min[ 1 ] ) : 0\n\t] );\n\n\tfor ( let i = 0; i < array.length; i += 2 ) {\n\n\t\tquantized[ i + 0 ] = Math.floor( ( array[ i + 0 ] - min[ 0 ] ) * multiplier[ 0 ] );\n\t\tquantized[ i + 1 ] = Math.floor( ( array[ i + 1 ] - min[ 1 ] ) * multiplier[ 1 ] );\n\n\t}\n\n\treturn {\n\t\tquantized: quantized,\n\t\tdecodeMat: decodeMat\n\t};\n\n}\n\n\n\nexport {\n\tcompressNormals,\n\tcompressPositions,\n\tcompressUvs,\n};\n", "\n/**\n * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial\n *\n * @param {Object} parameters\n */\nimport {\n\tMeshPhongMaterial,\n\tShaderChunk,\n\tShaderLib,\n\tUniformsUtils,\n} from 'three';\n\nclass PackedPhongMaterial extends MeshPhongMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {};\n\t\tthis.type = 'PackedPhongMaterial';\n\t\tthis.uniforms = UniformsUtils.merge( [\n\n\t\t\tShaderLib.phong.uniforms,\n\n\t\t\t{\n\t\t\t\tquantizeMatPos: { value: null },\n\t\t\t\tquantizeMatUV: { value: null }\n\t\t\t}\n\n\t\t] );\n\n\t\tthis.vertexShader = [\n\t\t\t'#define PHONG',\n\n\t\t\t'varying vec3 vViewPosition;',\n\n\t\t\tShaderChunk.common,\n\t\t\tShaderChunk.uv_pars_vertex,\n\t\t\tShaderChunk.displacementmap_pars_vertex,\n\t\t\tShaderChunk.envmap_pars_vertex,\n\t\t\tShaderChunk.color_pars_vertex,\n\t\t\tShaderChunk.fog_pars_vertex,\n\t\t\tShaderChunk.normal_pars_vertex,\n\t\t\tShaderChunk.morphtarget_pars_vertex,\n\t\t\tShaderChunk.skinning_pars_vertex,\n\t\t\tShaderChunk.shadowmap_pars_vertex,\n\t\t\tShaderChunk.logdepthbuf_pars_vertex,\n\t\t\tShaderChunk.clipping_planes_pars_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t`#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\t'void main() {',\n\n\t\t\tShaderChunk.uv_vertex,\n\n\t\t\t`#ifdef USE_MAP\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvMapUv = decodeUV(vMapUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.color_vertex,\n\t\t\tShaderChunk.morphcolor_vertex,\n\n\t\t\tShaderChunk.beginnormal_vertex,\n\n\t\t\t`#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n\n\t\t\tShaderChunk.morphnormal_vertex,\n\t\t\tShaderChunk.skinbase_vertex,\n\t\t\tShaderChunk.skinnormal_vertex,\n\t\t\tShaderChunk.defaultnormal_vertex,\n\t\t\tShaderChunk.normal_vertex,\n\n\t\t\tShaderChunk.begin_vertex,\n\n\t\t\t`#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n\n\t\t\tShaderChunk.morphtarget_vertex,\n\t\t\tShaderChunk.skinning_vertex,\n\t\t\tShaderChunk.displacementmap_vertex,\n\t\t\tShaderChunk.project_vertex,\n\t\t\tShaderChunk.logdepthbuf_vertex,\n\t\t\tShaderChunk.clipping_planes_vertex,\n\n\t\t\t'vViewPosition = - mvPosition.xyz;',\n\n\t\t\tShaderChunk.worldpos_vertex,\n\t\t\tShaderChunk.envmap_vertex,\n\t\t\tShaderChunk.shadowmap_vertex,\n\t\t\tShaderChunk.fog_vertex,\n\n\t\t\t'}',\n\t\t].join( '\\n' );\n\n\t\t// Use the original MeshPhongMaterial's fragmentShader.\n\t\tthis.fragmentShader = ShaderLib.phong.fragmentShader;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nexport { PackedPhongMaterial };\n", "import { Vector3 } from 'three';\n\n\n/**\n * Generates 2D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link http://www.openprocessing.org/sketch/15493\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, -Z.\n * @param v1 Corner index -X, +Z.\n * @param v2 Corner index +X, +Z.\n * @param v3 Corner index +X, -Z.\n */\nfunction hilbert2D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3 ) {\n\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ]\n\t];\n\n\t// Recurse iterations\n\tif ( 0 <= -- iterations ) {\n\n\t\treturn [\n\t\t\t...hilbert2D( vec[ 0 ], half, iterations, v0, v3, v2, v1 ),\n\t\t\t...hilbert2D( vec[ 1 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 2 ], half, iterations, v0, v1, v2, v3 ),\n\t\t\t...hilbert2D( vec[ 3 ], half, iterations, v2, v1, v0, v3 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates 3D-Coordinates in a very fast way.\n *\n * Based on work by:\n * @link https://openprocessing.org/user/5654\n *\n * @param center Center of Hilbert curve.\n * @param size Total width of Hilbert curve.\n * @param iterations Number of subdivisions.\n * @param v0 Corner index -X, +Y, -Z.\n * @param v1 Corner index -X, +Y, +Z.\n * @param v2 Corner index -X, -Y, +Z.\n * @param v3 Corner index -X, -Y, -Z.\n * @param v4 Corner index +X, -Y, -Z.\n * @param v5 Corner index +X, -Y, +Z.\n * @param v6 Corner index +X, +Y, +Z.\n * @param v7 Corner index +X, +Y, -Z.\n */\nfunction hilbert3D( center = new Vector3( 0, 0, 0 ), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7 ) {\n\n\t// Default Vars\n\tconst half = size / 2;\n\n\tconst vec_s = [\n\t\tnew Vector3( center.x - half, center.y + half, center.z - half ),\n\t\tnew Vector3( center.x - half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x - half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z - half ),\n\t\tnew Vector3( center.x + half, center.y - half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z + half ),\n\t\tnew Vector3( center.x + half, center.y + half, center.z - half )\n\t];\n\n\tconst vec = [\n\t\tvec_s[ v0 ],\n\t\tvec_s[ v1 ],\n\t\tvec_s[ v2 ],\n\t\tvec_s[ v3 ],\n\t\tvec_s[ v4 ],\n\t\tvec_s[ v5 ],\n\t\tvec_s[ v6 ],\n\t\tvec_s[ v7 ]\n\t];\n\n\t// Recurse iterations\n\tif ( -- iterations >= 0 ) {\n\n\t\treturn [\n\t\t\t...hilbert3D( vec[ 0 ], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1 ),\n\t\t\t...hilbert3D( vec[ 1 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 2 ], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3 ),\n\t\t\t...hilbert3D( vec[ 3 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 4 ], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5 ),\n\t\t\t...hilbert3D( vec[ 5 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 6 ], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7 ),\n\t\t\t...hilbert3D( vec[ 7 ], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7 )\n\t\t];\n\n\t}\n\n\t// Return complete Hilbert Curve.\n\treturn vec;\n\n}\n\n/**\n * Generates a Gosper curve (lying in the XY plane)\n *\n * https://gist.github.com/nitaku/6521802\n *\n * @param size The size of a single gosper island.\n */\nfunction gosper( size = 1 ) {\n\n\tfunction fractalize( config ) {\n\n\t\tlet output;\n\t\tlet input = config.axiom;\n\n\t\tfor ( let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i ++ : i -- ) {\n\n\t\t\toutput = '';\n\n\t\t\tfor ( let j = 0, jl = input.length; j < jl; j ++ ) {\n\n\t\t\t\tconst char = input[ j ];\n\n\t\t\t\tif ( char in config.rules ) {\n\n\t\t\t\t\toutput += config.rules[ char ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\toutput += char;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tinput = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tfunction toPoints( config ) {\n\n\t\tlet currX = 0, currY = 0;\n\t\tlet angle = 0;\n\t\tconst path = [ 0, 0, 0 ];\n\t\tconst fractal = config.fractal;\n\n\t\tfor ( let i = 0, l = fractal.length; i < l; i ++ ) {\n\n\t\t\tconst char = fractal[ i ];\n\n\t\t\tif ( char === '+' ) {\n\n\t\t\t\tangle += config.angle;\n\n\t\t\t} else if ( char === '-' ) {\n\n\t\t\t\tangle -= config.angle;\n\n\t\t\t} else if ( char === 'F' ) {\n\n\t\t\t\tcurrX += config.size * Math.cos( angle );\n\t\t\t\tcurrY += - config.size * Math.sin( angle );\n\t\t\t\tpath.push( currX, currY, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn path;\n\n\t}\n\n\t//\n\n\tconst gosper = fractalize( {\n\t\taxiom: 'A',\n\t\tsteps: 4,\n\t\trules: {\n\t\t\tA: 'A+BF++BF-FA--FAFA-BF+',\n\t\t\tB: '-FA+BFBF++BF+FA--FA-B'\n\t\t}\n\t} );\n\n\tconst points = toPoints( {\n\t\tfractal: gosper,\n\t\tsize: size,\n\t\tangle: Math.PI / 3 // 60 degrees\n\t} );\n\n\treturn points;\n\n}\n\n\n\nexport {\n\thilbert2D,\n\thilbert3D,\n\tgosper,\n};\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tGroup,\n\tLineSegments,\n\tMatrix3,\n\tMesh\n} from 'three';\n\nimport { mergeGeometries } from './BufferGeometryUtils.js';\n\nclass LDrawUtils {\n\n\tstatic mergeObject( object ) {\n\n\t\t// Merges geometries in object by materials and returns new object. Use on not indexed geometries.\n\t\t// The object buffers reference the old object ones.\n\t\t// Special treatment is done to the conditional lines generated by LDrawLoader.\n\n\t\tfunction extractGroup( geometry, group, elementSize, isConditionalLine ) {\n\n\t\t\t// Extracts a group from a geometry as a new geometry (with attribute buffers referencing original buffers)\n\n\t\t\tconst newGeometry = new BufferGeometry();\n\n\t\t\tconst originalPositions = geometry.getAttribute( 'position' ).array;\n\t\t\tconst originalNormals = elementSize === 3 ? geometry.getAttribute( 'normal' ).array : null;\n\n\t\t\tconst numVertsGroup = Math.min( group.count, Math.floor( originalPositions.length / 3 ) - group.start );\n\t\t\tconst vertStart = group.start * 3;\n\t\t\tconst vertEnd = ( group.start + numVertsGroup ) * 3;\n\n\t\t\tconst positions = originalPositions.subarray( vertStart, vertEnd );\n\t\t\tconst normals = originalNormals !== null ? originalNormals.subarray( vertStart, vertEnd ) : null;\n\n\t\t\tnewGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\t\t\tif ( normals !== null ) newGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( isConditionalLine ) {\n\n\t\t\t\tconst controlArray0 = geometry.getAttribute( 'control0' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst controlArray1 = geometry.getAttribute( 'control1' ).array.subarray( vertStart, vertEnd );\n\t\t\t\tconst directionArray = geometry.getAttribute( 'direction' ).array.subarray( vertStart, vertEnd );\n\n\t\t\t\tnewGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\t\t\tnewGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t\t\t}\n\n\t\t\treturn newGeometry;\n\n\t\t}\n\n\t\tfunction addGeometry( mat, geometry, geometries ) {\n\n\t\t\tconst geoms = geometries[ mat.uuid ];\n\t\t\tif ( ! geoms ) {\n\n\t\t\t\tgeometries[ mat.uuid ] = {\n\t\t\t\t\tmat: mat,\n\t\t\t\t\tarr: [ geometry ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tgeoms.arr.push( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction permuteAttribute( attribute, elemSize ) {\n\n\t\t\t// Permutes first two vertices of each attribute element\n\n\t\t\tif ( ! attribute ) return;\n\n\t\t\tconst verts = attribute.array;\n\t\t\tconst numVerts = Math.floor( verts.length / 3 );\n\t\t\tlet offset = 0;\n\t\t\tfor ( let i = 0; i < numVerts; i ++ ) {\n\n\t\t\t\tconst x = verts[ offset ];\n\t\t\t\tconst y = verts[ offset + 1 ];\n\t\t\t\tconst z = verts[ offset + 2 ];\n\n\t\t\t\tverts[ offset ] = verts[ offset + 3 ];\n\t\t\t\tverts[ offset + 1 ] = verts[ offset + 4 ];\n\t\t\t\tverts[ offset + 2 ] = verts[ offset + 5 ];\n\n\t\t\t\tverts[ offset + 3 ] = x;\n\t\t\t\tverts[ offset + 4 ] = y;\n\t\t\t\tverts[ offset + 5 ] = z;\n\n\t\t\t\toffset += elemSize * 3;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Traverse the object hierarchy collecting geometries and transforming them to world space\n\n\t\tconst meshGeometries = {};\n\t\tconst linesGeometries = {};\n\t\tconst condLinesGeometries = {};\n\n\t\tobject.updateMatrixWorld( true );\n\t\tconst normalMatrix = new Matrix3();\n\n\t\tobject.traverse( c => {\n\n\t\t\tif ( c.isMesh | c.isLineSegments ) {\n\n\t\t\t\tconst elemSize = c.isMesh ? 3 : 2;\n\n\t\t\t\tconst geometry = c.geometry.clone();\n\t\t\t\tconst matrixIsInverted = c.matrixWorld.determinant() < 0;\n\t\t\t\tif ( matrixIsInverted ) {\n\n\t\t\t\t\tpermuteAttribute( geometry.attributes.position, elemSize );\n\t\t\t\t\tpermuteAttribute( geometry.attributes.normal, elemSize );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.applyMatrix4( c.matrixWorld );\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tgeometry.attributes.control0.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.control1.applyMatrix4( c.matrixWorld );\n\t\t\t\t\tnormalMatrix.getNormalMatrix( c.matrixWorld );\n\t\t\t\t\tgeometry.attributes.direction.applyNormalMatrix( normalMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tconst geometries = c.isMesh ? meshGeometries : ( c.isConditionalLine ? condLinesGeometries : linesGeometries );\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( const groupIndex in geometry.groups ) {\n\n\t\t\t\t\t\tconst group = geometry.groups[ groupIndex ];\n\t\t\t\t\t\tconst mat = c.material[ group.materialIndex ];\n\t\t\t\t\t\tconst newGeometry = extractGroup( geometry, group, elemSize, c.isConditionalLine );\n\t\t\t\t\t\taddGeometry( mat, newGeometry, geometries );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddGeometry( c.material, geometry, geometries );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Create object with merged geometries\n\n\t\tconst mergedObject = new Group();\n\n\t\tconst meshMaterialsIds = Object.keys( meshGeometries );\n\t\tfor ( const meshMaterialsId of meshMaterialsIds ) {\n\n\t\t\tconst meshGeometry = meshGeometries[ meshMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( meshGeometry.arr );\n\t\t\tmergedObject.add( new Mesh( mergedGeometry, meshGeometry.mat ) );\n\n\t\t}\n\n\t\tconst linesMaterialsIds = Object.keys( linesGeometries );\n\t\tfor ( const linesMaterialsId of linesMaterialsIds ) {\n\n\t\t\tconst lineGeometry = linesGeometries[ linesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( lineGeometry.arr );\n\t\t\tmergedObject.add( new LineSegments( mergedGeometry, lineGeometry.mat ) );\n\n\t\t}\n\n\t\tconst condLinesMaterialsIds = Object.keys( condLinesGeometries );\n\t\tfor ( const condLinesMaterialsId of condLinesMaterialsIds ) {\n\n\t\t\tconst condLineGeometry = condLinesGeometries[ condLinesMaterialsId ];\n\t\t\tconst mergedGeometry = mergeGeometries( condLineGeometry.arr );\n\t\t\tconst condLines = new LineSegments( mergedGeometry, condLineGeometry.mat );\n\t\t\tcondLines.isConditionalLine = true;\n\t\t\tmergedObject.add( condLines );\n\n\t\t}\n\n\t\tmergedObject.userData.constructionStep = 0;\n\t\tmergedObject.userData.numConstructionSteps = 1;\n\n\t\treturn mergedObject;\n\n\t}\n\n}\n\nexport { LDrawUtils };\n", "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tGroup,\n\tMatrix4,\n\tMesh,\n\tVector3\n} from 'three';\n\nimport { mergeGroups, deepCloneAttribute } from './BufferGeometryUtils.js';\n\nconst _color = /*@__PURE__*/new Color();\nconst _matrix = /*@__PURE__*/new Matrix4();\n\nfunction createMeshesFromInstancedMesh( instancedMesh ) {\n\n\tconst group = new Group();\n\n\tconst count = instancedMesh.count;\n\tconst geometry = instancedMesh.geometry;\n\tconst material = instancedMesh.material;\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tinstancedMesh.getMatrixAt( i, mesh.matrix );\n\t\tmesh.matrix.decompose( mesh.position, mesh.quaternion, mesh.scale );\n\n\t\tgroup.add( mesh );\n\n\t}\n\n\tgroup.copy( instancedMesh );\n\tgroup.updateMatrixWorld(); // ensure correct world matrices of meshes\n\n\treturn group;\n\n}\n\nfunction createMeshesFromMultiMaterialMesh( mesh ) {\n\n\tif ( Array.isArray( mesh.material ) === false ) {\n\n\t\tconsole.warn( 'THREE.SceneUtils.createMeshesFromMultiMaterialMesh(): The given mesh has no multiple materials.' );\n\t\treturn mesh;\n\n\t}\n\n\tconst object = new Group();\n\tobject.copy( mesh );\n\n\t// merge groups (which automatically sorts them)\n\n\tconst geometry = mergeGroups( mesh.geometry );\n\n\tconst index = geometry.index;\n\tconst groups = geometry.groups;\n\tconst attributeNames = Object.keys( geometry.attributes );\n\n\t// create a mesh for each group by extracting the buffer data into a new geometry\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst start = group.start;\n\t\tconst end = start + group.count;\n\n\t\tconst newGeometry = new BufferGeometry();\n\t\tconst newMaterial = mesh.material[ group.materialIndex ];\n\n\t\t// process all buffer attributes\n\n\t\tfor ( let j = 0; j < attributeNames.length; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.attributes[ name ];\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tconst newLength = group.count * itemSize;\n\t\t\tconst type = attribute.array.constructor;\n\n\t\t\tconst newArray = new type( newLength );\n\t\t\tconst newAttribute = new BufferAttribute( newArray, itemSize );\n\n\t\t\tfor ( let k = start, n = 0; k < end; k ++, n ++ ) {\n\n\t\t\t\tconst ind = index.getX( k );\n\n\t\t\t\tif ( itemSize >= 1 ) newAttribute.setX( n, attribute.getX( ind ) );\n\t\t\t\tif ( itemSize >= 2 ) newAttribute.setY( n, attribute.getY( ind ) );\n\t\t\t\tif ( itemSize >= 3 ) newAttribute.setZ( n, attribute.getZ( ind ) );\n\t\t\t\tif ( itemSize >= 4 ) newAttribute.setW( n, attribute.getW( ind ) );\n\n\t\t\t}\n\n\n\t\t\tnewGeometry.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\tconst newMesh = new Mesh( newGeometry, newMaterial );\n\t\tobject.add( newMesh );\n\n\t}\n\n\treturn object;\n\n}\n\nfunction createMultiMaterialObject( geometry, materials ) {\n\n\tconst group = new Group();\n\n\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\tgroup.add( new Mesh( geometry, materials[ i ] ) );\n\n\t}\n\n\treturn group;\n\n}\n\nfunction reduceVertices( object, func, initialValue ) {\n\n\tlet value = initialValue;\n\tconst vertex = new Vector3();\n\n\tobject.updateWorldMatrix( true, true );\n\n\tobject.traverseVisible( ( child ) => {\n\n\t\tconst { geometry } = child;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst { position } = geometry.attributes;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\t\tchild.getVertexPosition( i, vertex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! child.isSkinnedMesh ) {\n\n\t\t\t\t\t\tvertex.applyMatrix4( child.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = func( value, vertex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn value;\n\n}\n\n/**\n * @param {InstancedMesh}\n * @param {function(int, int):int}\n */\nfunction sortInstancedMesh( mesh, compareFn ) {\n\n\t// store copy of instanced attributes for lookups\n\n\tconst instanceMatrixRef = deepCloneAttribute( mesh.instanceMatrix );\n\tconst instanceColorRef = mesh.instanceColor ? deepCloneAttribute( mesh.instanceColor ) : null;\n\n\tconst attributeRefs = new Map();\n\n\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\tattributeRefs.set( attribute, deepCloneAttribute( attribute ) );\n\n\t\t}\n\n\t}\n\n\n\t// compute sort order\n\n\tconst tokens = [];\n\n\tfor ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );\n\n\ttokens.sort( compareFn );\n\n\n\t// apply sort order\n\n\tfor ( let i = 0; i < tokens.length; i ++ ) {\n\n\t\tconst refIndex = tokens[ i ];\n\n\t\t_matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );\n\t\t_matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );\n\n\t\tif ( mesh.instanceColor ) {\n\n\t\t\t_color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );\n\t\t\t_color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );\n\n\t\t}\n\n\t\tfor ( const name in mesh.geometry.attributes ) {\n\n\t\t\tconst attribute = mesh.geometry.attributes[ name ];\n\n\t\t\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\t\t\tconst attributeRef = attributeRefs.get( attribute );\n\n\t\t\t\tattribute.setX( i, attributeRef.getX( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );\n\t\t\t\tif ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseGenerator( object ) {\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseVisibleGenerator( object ) {\n\n\tif ( object.visible === false ) return;\n\n\tyield object;\n\n\tconst children = object.children;\n\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tyield* traverseVisibleGenerator( children[ i ] );\n\n\t}\n\n}\n\n/**\n * @param {Object3D} object Object to traverse.\n * @yields {Object3D} Objects that passed the filter condition.\n */\nfunction* traverseAncestorsGenerator( object ) {\n\n\tconst parent = object.parent;\n\n\tif ( parent !== null ) {\n\n\t\tyield parent;\n\n\t\tyield* traverseAncestorsGenerator( parent );\n\n\t}\n\n}\n\nexport {\n\tcreateMeshesFromInstancedMesh,\n\tcreateMeshesFromMultiMaterialMesh,\n\tcreateMultiMaterialObject,\n\treduceVertices,\n\tsortInstancedMesh,\n\ttraverseGenerator,\n\ttraverseVisibleGenerator,\n\ttraverseAncestorsGenerator\n};\n", "import {\n\tDoubleSide,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tOrthographicCamera,\n\tPlaneGeometry,\n\tScene,\n\tShaderMaterial,\n\tTexture,\n\tUniformsUtils\n} from 'three';\nimport { UnpackDepthRGBAShader } from '../shaders/UnpackDepthRGBAShader.js';\n\n/**\n * This is a helper for visualising a given light's shadow map.\n * It works for shadow casting lights: DirectionalLight and SpotLight.\n * It renders out the shadow map and displays it on a HUD.\n *\n * Example usage:\n *\t1) Import ShadowMapViewer into your app.\n *\n *\t2) Create a shadow casting light and name it optionally:\n *\t\tlet light = new DirectionalLight( 0xffffff, 1 );\n *\t\tlight.castShadow = true;\n *\t\tlight.name = 'Sun';\n *\n *\t3) Create a shadow map viewer for that light and set its size and position optionally:\n *\t\tlet shadowMapViewer = new ShadowMapViewer( light );\n *\t\tshadowMapViewer.size.set( 128, 128 );\t//width, height default: 256, 256\n *\t\tshadowMapViewer.position.set( 10, 10 );\t//x, y in pixel\t default: 0, 0 (top left corner)\n *\n *\t4) Render the shadow map viewer in your render loop:\n *\t\tshadowMapViewer.render( renderer );\n *\n *\t5) Optionally: Update the shadow map viewer on window resize:\n *\t\tshadowMapViewer.updateForWindowResize();\n *\n *\t6) If you set the position or size members directly, you need to call shadowMapViewer.update();\n */\n\nclass ShadowMapViewer {\n\n\tconstructor( light ) {\n\n\t\t//- Internals\n\t\tconst scope = this;\n\t\tconst doRenderLabel = ( light.name !== undefined && light.name !== '' );\n\t\tlet userAutoClearSetting;\n\n\t\t//Holds the initial position and dimension of the HUD\n\t\tconst frame = {\n\t\t\tx: 10,\n\t\t\ty: 10,\n\t\t\twidth: 256,\n\t\t\theight: 256\n\t\t};\n\n\t\tconst camera = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10 );\n\t\tcamera.position.set( 0, 0, 2 );\n\t\tconst scene = new Scene();\n\n\t\t//HUD for shadow map\n\t\tconst shader = UnpackDepthRGBAShader;\n\n\t\tconst uniforms = UniformsUtils.clone( shader.uniforms );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\t\t} );\n\t\tconst plane = new PlaneGeometry( frame.width, frame.height );\n\t\tconst mesh = new Mesh( plane, material );\n\n\t\tscene.add( mesh );\n\n\n\t\t//Label for light's name\n\t\tlet labelCanvas, labelMesh;\n\n\t\tif ( doRenderLabel ) {\n\n\t\t\tlabelCanvas = document.createElement( 'canvas' );\n\n\t\t\tconst context = labelCanvas.getContext( '2d' );\n\t\t\tcontext.font = 'Bold 20px Arial';\n\n\t\t\tconst labelWidth = context.measureText( light.name ).width;\n\t\t\tlabelCanvas.width = labelWidth;\n\t\t\tlabelCanvas.height = 25;\t//25 to account for g, p, etc.\n\n\t\t\tcontext.font = 'Bold 20px Arial';\n\t\t\tcontext.fillStyle = 'rgba( 255, 0, 0, 1 )';\n\t\t\tcontext.fillText( light.name, 0, 20 );\n\n\t\t\tconst labelTexture = new Texture( labelCanvas );\n\t\t\tlabelTexture.magFilter = LinearFilter;\n\t\t\tlabelTexture.minFilter = LinearFilter;\n\t\t\tlabelTexture.needsUpdate = true;\n\n\t\t\tconst labelMaterial = new MeshBasicMaterial( { map: labelTexture, side: DoubleSide } );\n\t\t\tlabelMaterial.transparent = true;\n\n\t\t\tconst labelPlane = new PlaneGeometry( labelCanvas.width, labelCanvas.height );\n\t\t\tlabelMesh = new Mesh( labelPlane, labelMaterial );\n\n\t\t\tscene.add( labelMesh );\n\n\t\t}\n\n\n\t\tfunction resetPosition() {\n\n\t\t\tscope.position.set( scope.position.x, scope.position.y );\n\n\t\t}\n\n\t\t//- API\n\t\t// Set to false to disable displaying this shadow map\n\t\tthis.enabled = true;\n\n\t\t// Set the size of the displayed shadow map on the HUD\n\t\tthis.size = {\n\t\t\twidth: frame.width,\n\t\t\theight: frame.height,\n\t\t\tset: function ( width, height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tmesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );\n\n\t\t\t\t//Reset the position as it is off when we scale stuff\n\t\t\t\tresetPosition();\n\n\t\t\t}\n\t\t};\n\n\t\t// Set the position of the displayed shadow map on the HUD\n\t\tthis.position = {\n\t\t\tx: frame.x,\n\t\t\ty: frame.y,\n\t\t\tset: function ( x, y ) {\n\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\n\t\t\t\tconst width = scope.size.width;\n\t\t\t\tconst height = scope.size.height;\n\n\t\t\t\tmesh.position.set( - window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0 );\n\n\t\t\t\tif ( doRenderLabel ) labelMesh.position.set( mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0 );\n\n\t\t\t}\n\t\t};\n\n\t\tthis.render = function ( renderer ) {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t//Because a light's .shadowMap is only initialised after the first render pass\n\t\t\t\t//we have to make sure the correct map is sent into the shader, otherwise we\n\t\t\t\t//always end up with the scene's first added shadow casting light's shadowMap\n\t\t\t\t//in the shader\n\t\t\t\t//See: https://github.com/mrdoob/three.js/issues/5932\n\t\t\t\tuniforms.tDiffuse.value = light.shadow.map.texture;\n\n\t\t\t\tuserAutoClearSetting = renderer.autoClear;\n\t\t\t\trenderer.autoClear = false; // To allow render overlay\n\t\t\t\trenderer.clearDepth();\n\t\t\t\trenderer.render( scene, camera );\n\t\t\t\trenderer.autoClear = userAutoClearSetting;\t//Restore user's setting\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateForWindowResize = function () {\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\t camera.left = window.innerWidth / - 2;\n\t\t\t\t camera.right = window.innerWidth / 2;\n\t\t\t\t camera.top = window.innerHeight / 2;\n\t\t\t\t camera.bottom = window.innerHeight / - 2;\n\t\t\t\t camera.updateProjectionMatrix();\n\n\t\t\t\t this.update();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\tthis.position.set( this.position.x, this.position.y );\n\t\t\tthis.size.set( this.size.width, this.size.height );\n\n\t\t};\n\n\t\t//Force an update to set position/size\n\t\tthis.update();\n\n\t}\n\n}\n\n\nexport { ShadowMapViewer };\n", "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tMatrix4,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeletonHelper,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n\nfunction retarget( target, source, options = {} ) {\n\n\tconst pos = new Vector3(),\n\t\tquat = new Quaternion(),\n\t\tscale = new Vector3(),\n\t\tbindBoneMatrix = new Matrix4(),\n\t\trelativeMatrix = new Matrix4(),\n\t\tglobalMatrix = new Matrix4();\n\n\toptions.preserveMatrix = options.preserveMatrix !== undefined ? options.preserveMatrix : true;\n\toptions.preservePosition = options.preservePosition !== undefined ? options.preservePosition : true;\n\toptions.preserveHipPosition = options.preserveHipPosition !== undefined ? options.preserveHipPosition : false;\n\toptions.useTargetMatrix = options.useTargetMatrix !== undefined ? options.useTargetMatrix : false;\n\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\toptions.names = options.names || {};\n\n\tconst sourceBones = source.isObject3D ? source.skeleton.bones : getBones( source ),\n\t\tbones = target.isObject3D ? target.skeleton.bones : getBones( target );\n\n\tlet bindBones,\n\t\tbone, name, boneTo,\n\t\tbonesPosition;\n\n\t// reset bones\n\n\tif ( target.isObject3D ) {\n\n\t\ttarget.skeleton.pose();\n\n\t} else {\n\n\t\toptions.useTargetMatrix = true;\n\t\toptions.preserveMatrix = false;\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tbonesPosition = [];\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tbonesPosition.push( bones[ i ].position.clone() );\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// reset matrix\n\n\t\ttarget.updateMatrixWorld();\n\n\t\ttarget.matrixWorld.identity();\n\n\t\t// reset children matrix\n\n\t\tfor ( let i = 0; i < target.children.length; ++ i ) {\n\n\t\t\ttarget.children[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t}\n\n\tif ( options.offsets ) {\n\n\t\tbindBones = [];\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( options.offsets[ name ] ) {\n\n\t\t\t\tbone.matrix.multiply( options.offsets[ name ] );\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\tbone.updateMatrixWorld();\n\n\t\t\t}\n\n\t\t\tbindBones.push( bone.matrixWorld.clone() );\n\n\t\t}\n\n\t}\n\n\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\tbone = bones[ i ];\n\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\tboneTo = getBoneByName( name, sourceBones );\n\n\t\tglobalMatrix.copy( bone.matrixWorld );\n\n\t\tif ( boneTo ) {\n\n\t\t\tboneTo.updateMatrixWorld();\n\n\t\t\tif ( options.useTargetMatrix ) {\n\n\t\t\t\trelativeMatrix.copy( boneTo.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\trelativeMatrix.copy( target.matrixWorld ).invert();\n\t\t\t\trelativeMatrix.multiply( boneTo.matrixWorld );\n\n\t\t\t}\n\n\t\t\t// ignore scale to extract rotation\n\n\t\t\tscale.setFromMatrixScale( relativeMatrix );\n\t\t\trelativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );\n\n\t\t\t// apply to global matrix\n\n\t\t\tglobalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );\n\n\t\t\tif ( target.isObject3D ) {\n\n\t\t\t\tconst boneIndex = bones.indexOf( bone ),\n\t\t\t\t\twBindMatrix = bindBones ? bindBones[ boneIndex ] : bindBoneMatrix.copy( target.skeleton.boneInverses[ boneIndex ] ).invert();\n\n\t\t\t\tglobalMatrix.multiply( wBindMatrix );\n\n\t\t\t}\n\n\t\t\tglobalMatrix.copyPosition( relativeMatrix );\n\n\t\t}\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\tbone.matrix.multiply( globalMatrix );\n\n\t\t} else {\n\n\t\t\tbone.matrix.copy( globalMatrix );\n\n\t\t}\n\n\t\tif ( options.preserveHipPosition && name === options.hip ) {\n\n\t\t\tbone.matrix.setPosition( pos.set( 0, bone.position.y, 0 ) );\n\n\t\t}\n\n\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\tbone.updateMatrixWorld();\n\n\t}\n\n\tif ( options.preservePosition ) {\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tif ( name !== options.hip ) {\n\n\t\t\t\tbone.position.copy( bonesPosition[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( options.preserveMatrix ) {\n\n\t\t// restore matrix\n\n\t\ttarget.updateMatrixWorld( true );\n\n\t}\n\n}\n\nfunction retargetClip( target, source, clip, options = {} ) {\n\n\toptions.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;\n\t// Calculate the fps from the source clip based on the track with the most frames, unless fps is already provided.\n\toptions.fps = options.fps !== undefined ? options.fps : ( Math.max( ...clip.tracks.map( track => track.times.length ) ) / clip.duration );\n\toptions.names = options.names || [];\n\n\tif ( ! source.isObject3D ) {\n\n\t\tsource = getHelperFromSkeleton( source );\n\n\t}\n\n\tconst numFrames = Math.round( clip.duration * ( options.fps / 1000 ) * 1000 ),\n\t\tdelta = clip.duration / ( numFrames - 1 ),\n\t\tconvertedTracks = [],\n\t\tmixer = new AnimationMixer( source ),\n\t\tbones = getBones( target.skeleton ),\n\t\tboneDatas = [];\n\tlet positionOffset,\n\t\tbone, boneTo, boneData,\n\t\tname;\n\n\tmixer.clipAction( clip ).play();\n\tmixer.update( 0 );\n\n\tsource.updateMatrixWorld();\n\n\tfor ( let i = 0; i < numFrames; ++ i ) {\n\n\t\tconst time = i * delta;\n\n\t\tretarget( target, source, options );\n\n\t\tfor ( let j = 0; j < bones.length; ++ j ) {\n\n\t\t\tname = options.names[ bones[ j ].name ] || bones[ j ].name;\n\n\t\t\tboneTo = getBoneByName( name, source.skeleton );\n\n\t\t\tif ( boneTo ) {\n\n\t\t\t\tbone = bones[ j ];\n\t\t\t\tboneData = boneDatas[ j ] = boneDatas[ j ] || { bone: bone };\n\n\t\t\t\tif ( options.hip === name ) {\n\n\t\t\t\t\tif ( ! boneData.pos ) {\n\n\t\t\t\t\t\tboneData.pos = {\n\t\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\t\tvalues: new Float32Array( numFrames * 3 )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( options.useFirstFramePosition ) {\n\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\tpositionOffset = bone.position.clone();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbone.position.sub( positionOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.pos.times[ i ] = time;\n\n\t\t\t\t\tbone.position.toArray( boneData.pos.values, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! boneData.quat ) {\n\n\t\t\t\t\tboneData.quat = {\n\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\tvalues: new Float32Array( numFrames * 4 )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tboneData.quat.times[ i ] = time;\n\n\t\t\t\tbone.quaternion.toArray( boneData.quat.values, i * 4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( i === numFrames - 2 ) {\n\n\t\t\t// last mixer update before final loop iteration\n\t\t\t// make sure we do not go over or equal to clip duration\n\t\t\tmixer.update( delta - 0.0000001 );\n\n\t\t} else {\n\n\t\t\tmixer.update( delta );\n\n\t\t}\n\n\t\tsource.updateMatrixWorld();\n\n\t}\n\n\tfor ( let i = 0; i < boneDatas.length; ++ i ) {\n\n\t\tboneData = boneDatas[ i ];\n\n\t\tif ( boneData ) {\n\n\t\t\tif ( boneData.pos ) {\n\n\t\t\t\tconvertedTracks.push( new VectorKeyframeTrack(\n\t\t\t\t\t'.bones[' + boneData.bone.name + '].position',\n\t\t\t\t\tboneData.pos.times,\n\t\t\t\t\tboneData.pos.values\n\t\t\t\t) );\n\n\t\t\t}\n\n\t\t\tconvertedTracks.push( new QuaternionKeyframeTrack(\n\t\t\t\t'.bones[' + boneData.bone.name + '].quaternion',\n\t\t\t\tboneData.quat.times,\n\t\t\t\tboneData.quat.values\n\t\t\t) );\n\n\t\t}\n\n\t}\n\n\tmixer.uncacheAction( clip );\n\n\treturn new AnimationClip( clip.name, - 1, convertedTracks );\n\n}\n\nfunction clone( source ) {\n\n\tconst sourceLookup = new Map();\n\tconst cloneLookup = new Map();\n\n\tconst clone = source.clone();\n\n\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\tsourceLookup.set( clonedNode, sourceNode );\n\t\tcloneLookup.set( sourceNode, clonedNode );\n\n\t} );\n\n\tclone.traverse( function ( node ) {\n\n\t\tif ( ! node.isSkinnedMesh ) return;\n\n\t\tconst clonedMesh = node;\n\t\tconst sourceMesh = sourceLookup.get( node );\n\t\tconst sourceBones = sourceMesh.skeleton.bones;\n\n\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone();\n\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );\n\n\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\treturn cloneLookup.get( bone );\n\n\t\t} );\n\n\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );\n\n\t} );\n\n\treturn clone;\n\n}\n\n// internal helper\n\nfunction getBoneByName( name, skeleton ) {\n\n\tfor ( let i = 0, bones = getBones( skeleton ); i < bones.length; i ++ ) {\n\n\t\tif ( name === bones[ i ].name )\n\n\t\t\treturn bones[ i ];\n\n\t}\n\n}\n\nfunction getBones( skeleton ) {\n\n\treturn Array.isArray( skeleton ) ? skeleton : skeleton.bones;\n\n}\n\n\nfunction getHelperFromSkeleton( skeleton ) {\n\n\tconst source = new SkeletonHelper( skeleton.bones[ 0 ] );\n\tsource.skeleton = skeleton;\n\n\treturn source;\n\n}\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\nexport {\n\tretarget,\n\tretargetClip,\n\tclone,\n};\n", "// Hybrid radix sort from\n// - https://gist.github.com/sciecode/93ed864dd77c5c8803c6a86698d68dab\n// - https://github.com/mrdoob/three.js/pull/27202#issuecomment-1817640271\n//\n// expects unsigned 32b integer values\n\nconst POWER = 3;\nconst BIT_MAX = 32;\nconst BIN_BITS = 1 << POWER;\nconst BIN_SIZE = 1 << BIN_BITS;\nconst BIN_MAX = BIN_SIZE - 1;\nconst ITERATIONS = BIT_MAX / BIN_BITS;\n\nconst bins = new Array( ITERATIONS );\nconst bins_buffer = new ArrayBuffer( ( ITERATIONS + 1 ) * BIN_SIZE * 4 );\n\nlet c = 0;\nfor ( let i = 0; i < ( ITERATIONS + 1 ); i ++ ) {\n\n\tbins[ i ] = new Uint32Array( bins_buffer, c, BIN_SIZE );\n\tc += BIN_SIZE * 4;\n\n}\n\nconst defaultGet = ( el ) => el;\n\nexport const radixSort = ( arr, opt ) => {\n\n\tconst len = arr.length;\n\n\tconst options = opt || {};\n\tconst aux = options.aux || new arr.constructor( len );\n\tconst get = options.get || defaultGet;\n\n\tconst data = [ arr, aux ];\n\n\tlet compare, accumulate, recurse;\n\n\tif ( options.reversed ) {\n\n\t\tcompare = ( a, b ) => a < b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = BIN_SIZE - 2; j >= 0; j -- )\n\t\t\t\tbin[ j ] += bin[ j + 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = BIN_MAX; j >= 0; j -- ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t} else {\n\n\t\tcompare = ( a, b ) => a > b;\n\t\taccumulate = ( bin ) => {\n\n\t\t\tfor ( let j = 1; j < BIN_SIZE; j ++ )\n\t\t\t\tbin[ j ] += bin[ j - 1 ];\n\n\t\t};\n\n\t\trecurse = ( cache, depth, start ) => {\n\n\t\t\tlet prev = 0;\n\t\t\tfor ( let j = 0; j < BIN_SIZE; j ++ ) {\n\n\t\t\t\tconst cur = cache[ j ], diff = cur - prev;\n\t\t\t\tif ( diff != 0 ) {\n\n\t\t\t\t\tif ( diff > 32 )\n\t\t\t\t\t\tradixSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\telse\n\t\t\t\t\t\tinsertionSortBlock( depth + 1, start + prev, diff );\n\t\t\t\t\tprev = cur;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tconst insertionSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tfor ( let j = start + 1; j < start + len; j ++ ) {\n\n\t\t\tconst p = a[ j ], t = get( p ) >>> 0;\n\t\t\tlet i = j;\n\t\t\twhile ( i > start ) {\n\n\t\t\t\tif ( compare( get( a[ i - 1 ] ) >>> 0, t ) )\n\t\t\t\t\ta[ i ] = a[ -- i ];\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta[ i ] = p;\n\n\t\t}\n\n\t\tif ( ( depth & 1 ) == 1 ) {\n\n\t\t\tfor ( let i = start; i < start + len; i ++ )\n\t\t\t\tb[ i ] = a[ i ];\n\n\t\t}\n\n\t};\n\n\tconst radixSortBlock = ( depth, start, len ) => {\n\n\t\tconst a = data[ depth & 1 ];\n\t\tconst b = data[ ( depth + 1 ) & 1 ];\n\n\t\tconst shift = ( 3 - depth ) << POWER;\n\t\tconst end = start + len;\n\n\t\tconst cache = bins[ depth ];\n\t\tconst bin = bins[ depth + 1 ];\n\n\t\tbin.fill( 0 );\n\n\t\tfor ( let j = start; j < end; j ++ )\n\t\t\tbin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ++;\n\n\t\taccumulate( bin );\n\n\t\tcache.set( bin );\n\n\t\tfor ( let j = end - 1; j >= start; j -- )\n\t\t\tb[ start + -- bin[ ( get( a[ j ] ) >>> shift ) & BIN_MAX ] ] = a[ j ];\n\n\t\tif ( depth == ITERATIONS - 1 ) return;\n\n\t\trecurse( cache, depth, start );\n\n\t};\n\n\tradixSortBlock( 0, 0, len );\n\n};\n", "import {\n\tVector2\n} from 'three';\n\n/**\n * tool for \"unwrapping\" and debugging three.js geometries UV mapping\n *\n * Sample usage:\n *\tdocument.body.appendChild( UVsDebug( new THREE.SphereGeometry( 10, 10, 10, 10 ) );\n *\n */\n\nfunction UVsDebug( geometry, size = 1024 ) {\n\n\t// handles wrapping of uv.x > 1 only\n\n\tconst abc = 'abc';\n\tconst a = new Vector2();\n\tconst b = new Vector2();\n\n\tconst uvs = [\n\t\tnew Vector2(),\n\t\tnew Vector2(),\n\t\tnew Vector2()\n\t];\n\n\tconst face = [];\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst width = size; // power of 2 required for wrapping\n\tconst height = size;\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tconst ctx = canvas.getContext( '2d' );\n\tctx.lineWidth = 1;\n\tctx.strokeStyle = 'rgb( 63, 63, 63 )';\n\tctx.textAlign = 'center';\n\n\t// paint background white\n\n\tctx.fillStyle = 'rgb( 255, 255, 255 )';\n\tctx.fillRect( 0, 0, width, height );\n\n\tconst index = geometry.index;\n\tconst uvAttribute = geometry.attributes.uv;\n\n\tif ( index ) {\n\n\t\t// indexed geometry\n\n\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = index.getX( i );\n\t\t\tface[ 1 ] = index.getX( i + 1 );\n\t\t\tface[ 2 ] = index.getX( i + 2 );\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed geometry\n\n\t\tfor ( let i = 0, il = uvAttribute.count; i < il; i += 3 ) {\n\n\t\t\tface[ 0 ] = i;\n\t\t\tface[ 1 ] = i + 1;\n\t\t\tface[ 2 ] = i + 2;\n\n\t\t\tuvs[ 0 ].fromBufferAttribute( uvAttribute, face[ 0 ] );\n\t\t\tuvs[ 1 ].fromBufferAttribute( uvAttribute, face[ 1 ] );\n\t\t\tuvs[ 2 ].fromBufferAttribute( uvAttribute, face[ 2 ] );\n\n\t\t\tprocessFace( face, uvs, i / 3 );\n\n\t\t}\n\n\t}\n\n\treturn canvas;\n\n\tfunction processFace( face, uvs, index ) {\n\n\t\t// draw contour of face\n\n\t\tctx.beginPath();\n\n\t\ta.set( 0, 0 );\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\n\t\t\ta.x += uv.x;\n\t\t\ta.y += uv.y;\n\n\t\t\tif ( j === 0 ) {\n\n\t\t\t\tctx.moveTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t} else {\n\n\t\t\t\tctx.lineTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tctx.closePath();\n\t\tctx.stroke();\n\n\t\t// calculate center of face\n\n\t\ta.divideScalar( uvs.length );\n\n\t\t// label the face number\n\n\t\tctx.font = '18px Arial';\n\t\tctx.fillStyle = 'rgb( 63, 63, 63 )';\n\t\tctx.fillText( index, a.x * width, ( 1 - a.y ) * height );\n\n\t\tif ( a.x > 0.95 ) {\n\n\t\t\t// wrap x // 0.95 is arbitrary\n\n\t\t\tctx.fillText( index, ( a.x % 1 ) * width, ( 1 - a.y ) * height );\n\n\t\t}\n\n\t\t//\n\n\t\tctx.font = '12px Arial';\n\t\tctx.fillStyle = 'rgb( 191, 191, 191 )';\n\n\t\t// label uv edge orders\n\n\t\tfor ( let j = 0, jl = uvs.length; j < jl; j ++ ) {\n\n\t\t\tconst uv = uvs[ j ];\n\t\t\tb.addVectors( a, uv ).divideScalar( 2 );\n\n\t\t\tconst vnum = face[ j ];\n\t\t\tctx.fillText( abc[ j ] + vnum, b.x * width, ( 1 - b.y ) * height );\n\n\t\t\tif ( b.x > 0.95 ) {\n\n\t\t\t\t// wrap x\n\n\t\t\t\tctx.fillText( abc[ j ] + vnum, ( b.x % 1 ) * width, ( 1 - b.y ) * height );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { UVsDebug };\n", "class ARButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartAR( /*device*/ ) {\n\n\t\t\tif ( sessionInit.domOverlay === undefined ) {\n\n\t\t\t\tconst overlay = document.createElement( 'div' );\n\t\t\t\toverlay.style.display = 'none';\n\t\t\t\tdocument.body.appendChild( overlay );\n\n\t\t\t\tconst svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\t\t\t\tsvg.setAttribute( 'width', 38 );\n\t\t\t\tsvg.setAttribute( 'height', 38 );\n\t\t\t\tsvg.style.position = 'absolute';\n\t\t\t\tsvg.style.right = '20px';\n\t\t\t\tsvg.style.top = '20px';\n\t\t\t\tsvg.addEventListener( 'click', function () {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t} );\n\t\t\t\toverlay.appendChild( svg );\n\n\t\t\t\tconst path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\t\t\t\tpath.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n\t\t\t\tpath.setAttribute( 'stroke', '#fff' );\n\t\t\t\tpath.setAttribute( 'stroke-width', 2 );\n\t\t\t\tsvg.appendChild( path );\n\n\t\t\t\tif ( sessionInit.optionalFeatures === undefined ) {\n\n\t\t\t\t\tsessionInit.optionalFeatures = [];\n\n\t\t\t\t}\n\n\t\t\t\tsessionInit.optionalFeatures.push( 'dom-overlay' );\n\t\t\t\tsessionInit.domOverlay = { root: overlay };\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\trenderer.xr.setReferenceSpaceType( 'local' );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = '';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = 'none';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-ar', sessionInit )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showARNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'AR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'ARButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\n\t\t\t} ).catch( showARNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ARButton };\n", "import { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nconst DEFAULT_HAND_PROFILE_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/';\n\nclass XRHandMeshModel {\n\n\tconstructor( handModel, controller, path, handedness, loader = null, onLoad = null ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\n\t\tthis.bones = [];\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new GLTFLoader();\n\t\t\tloader.setPath( path || DEFAULT_HAND_PROFILE_PATH );\n\n\t\t}\n\n\t\tloader.load( `${handedness}.glb`, gltf => {\n\n\t\t\tconst object = gltf.scene.children[ 0 ];\n\t\t\tthis.handModel.add( object );\n\n\t\t\tconst mesh = object.getObjectByProperty( 'type', 'SkinnedMesh' );\n\t\t\tmesh.frustumCulled = false;\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\tconst joints = [\n\t\t\t\t'wrist',\n\t\t\t\t'thumb-metacarpal',\n\t\t\t\t'thumb-phalanx-proximal',\n\t\t\t\t'thumb-phalanx-distal',\n\t\t\t\t'thumb-tip',\n\t\t\t\t'index-finger-metacarpal',\n\t\t\t\t'index-finger-phalanx-proximal',\n\t\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t\t'index-finger-phalanx-distal',\n\t\t\t\t'index-finger-tip',\n\t\t\t\t'middle-finger-metacarpal',\n\t\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t\t'middle-finger-phalanx-distal',\n\t\t\t\t'middle-finger-tip',\n\t\t\t\t'ring-finger-metacarpal',\n\t\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t\t'ring-finger-phalanx-distal',\n\t\t\t\t'ring-finger-tip',\n\t\t\t\t'pinky-finger-metacarpal',\n\t\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t\t'pinky-finger-tip',\n\t\t\t];\n\n\t\t\tjoints.forEach( jointName => {\n\n\t\t\t\tconst bone = object.getObjectByName( jointName );\n\n\t\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\t\tbone.jointName = jointName;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( `Couldn't find ${jointName} in ${handedness} hand mesh` );\n\n\t\t\t\t}\n\n\t\t\t\tthis.bones.push( bone );\n\n\t\t\t} );\n\n\t\t\tif ( onLoad ) onLoad( object );\n\n\t\t} );\n\n\t}\n\n\tupdateMesh() {\n\n\t\t// XR Joints\n\t\tconst XRJoints = this.controller.joints;\n\n\t\tfor ( let i = 0; i < this.bones.length; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tconst XRJoint = XRJoints[ bone.jointName ];\n\n\t\t\t\tif ( XRJoint.visible ) {\n\n\t\t\t\t\tconst position = XRJoint.position;\n\n\t\t\t\t\tbone.position.copy( position );\n\t\t\t\t\tbone.quaternion.copy( XRJoint.quaternion );\n\t\t\t\t\t// bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRHandMeshModel };\n", "import { Object3D, Sphere, Box3 } from 'three';\nimport { XRHandMeshModel } from './XRHandMeshModel.js';\n\nconst TOUCH_RADIUS = 0.01;\nconst POINTING_JOINT = 'index-finger-tip';\n\nclass OculusHandModel extends Object3D {\n\n\tconstructor( controller, loader = null, onLoad = null ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.loader = loader;\n\t\tthis.onLoad = onLoad;\n\n\t\tthis.mesh = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! this.motionController ) {\n\n\t\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\t\tthis.motionController = new XRHandMeshModel( this, controller, this.path, xrInputSource.handedness, this.loader, this.onLoad );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tthis.clear();\n\t\t\tthis.motionController = null;\n\n\t\t} );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n\tgetPointerPosition() {\n\n\t\tconst indexFingerTip = this.controller.joints[ POINTING_JOINT ];\n\t\tif ( indexFingerTip ) {\n\n\t\t\treturn indexFingerTip.position;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\tintersectBoxObject( boxObject ) {\n\n\t\tconst pointerPosition = this.getPointerPosition();\n\t\tif ( pointerPosition ) {\n\n\t\t\tconst indexSphere = new Sphere( pointerPosition, TOUCH_RADIUS );\n\t\t\tconst box = new Box3().setFromObject( boxObject );\n\t\t\treturn indexSphere.intersectsBox( box );\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tcheckButton( button ) {\n\n\t\tif ( this.intersectBoxObject( button ) ) {\n\n\t\t\tbutton.onPress();\n\n\t\t} else {\n\n\t\t\tbutton.onClear();\n\n\t\t}\n\n\t\tif ( button.isPressed() ) {\n\n\t\t\tbutton.whilePressed();\n\n\t\t}\n\n\t}\n\n}\n\nexport { OculusHandModel };\n", "import * as THREE from 'three';\n\nconst PINCH_MAX = 0.05;\nconst PINCH_THRESHOLD = 0.02;\nconst PINCH_MIN = 0.01;\nconst POINTER_ADVANCE_MAX = 0.02;\nconst POINTER_OPACITY_MAX = 1;\nconst POINTER_OPACITY_MIN = 0.4;\nconst POINTER_FRONT_RADIUS = 0.002;\nconst POINTER_REAR_RADIUS = 0.01;\nconst POINTER_REAR_RADIUS_MIN = 0.003;\nconst POINTER_LENGTH = 0.035;\nconst POINTER_SEGMENTS = 16;\nconst POINTER_RINGS = 12;\nconst POINTER_HEMISPHERE_ANGLE = 110;\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 1, 0 );\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3( 0, 0, 1 );\n\nconst CURSOR_RADIUS = 0.02;\nconst CURSOR_MAX_DISTANCE = 1.5;\n\nclass OculusHandPointerModel extends THREE.Object3D {\n\n\tconstructor( hand, controller ) {\n\n\t\tsuper();\n\n\t\tthis.hand = hand;\n\t\tthis.controller = controller;\n\n\t\t// Unused\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\t\tthis.mesh = null;\n\n\t\tthis.pointerGeometry = null;\n\t\tthis.pointerMesh = null;\n\t\tthis.pointerObject = null;\n\n\t\tthis.pinched = false;\n\t\tthis.attached = false;\n\n\t\tthis.cursorObject = null;\n\n\t\tthis.raycaster = null;\n\n\t\tthis._onConnected = this._onConnected.bind( this );\n\t\tthis._onDisconnected = this._onDisconnected.bind( this );\n\t\tthis.hand.addEventListener( 'connected', this._onConnected );\n\t\tthis.hand.addEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n\t_onConnected( event ) {\n\n\t\tconst xrInputSource = event.data;\n\t\tif ( xrInputSource.hand ) {\n\n\t\t\tthis.visible = true;\n\t\t\tthis.xrInputSource = xrInputSource;\n\n\t\t\tthis.createPointer();\n\n\t\t}\n\n\t}\n\n\t_onDisconnected() {\n\n\t\tthis.visible = false;\n\t\tthis.xrInputSource = null;\n\n\t\tif ( this.pointerGeometry ) this.pointerGeometry.dispose();\n\t\tif ( this.pointerMesh && this.pointerMesh.material ) this.pointerMesh.material.dispose();\n\n\t\tthis.clear();\n\n\t}\n\n\t_drawVerticesRing( vertices, baseVector, ringIndex ) {\n\n\t\tconst segmentVector = baseVector.clone();\n\t\tfor ( let i = 0; i < POINTER_SEGMENTS; i ++ ) {\n\n\t\t\tsegmentVector.applyAxisAngle( ZAXIS, ( Math.PI * 2 ) / POINTER_SEGMENTS );\n\t\t\tconst vid = ringIndex * POINTER_SEGMENTS + i;\n\t\t\tvertices[ 3 * vid ] = segmentVector.x;\n\t\t\tvertices[ 3 * vid + 1 ] = segmentVector.y;\n\t\t\tvertices[ 3 * vid + 2 ] = segmentVector.z;\n\n\t\t}\n\n\t}\n\n\t_updatePointerVertices( rearRadius ) {\n\n\t\tconst vertices = this.pointerGeometry.attributes.position.array;\n\t\t// first ring for front face\n\t\tconst frontFaceBase = new THREE.Vector3(\n\t\t\tPOINTER_FRONT_RADIUS,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tthis._drawVerticesRing( vertices, frontFaceBase, 0 );\n\n\t\t// rings for rear hemisphere\n\t\tconst rearBase = new THREE.Vector3(\n\t\t\tMath.sin( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\tMath.cos( ( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 ) * rearRadius,\n\t\t\t0\n\t\t);\n\t\tfor ( let i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tthis._drawVerticesRing( vertices, rearBase, i + 1 );\n\t\t\trearBase.applyAxisAngle(\n\t\t\t\tYAXIS,\n\t\t\t\t( Math.PI * POINTER_HEMISPHERE_ANGLE ) / 180 / ( POINTER_RINGS * - 2 )\n\t\t\t);\n\n\t\t}\n\n\t\t// front and rear face center vertices\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\t\tconst frontCenter = new THREE.Vector3(\n\t\t\t0,\n\t\t\t0,\n\t\t\t- 1 * ( POINTER_LENGTH - rearRadius )\n\t\t);\n\t\tvertices[ frontCenterIndex * 3 ] = frontCenter.x;\n\t\tvertices[ frontCenterIndex * 3 + 1 ] = frontCenter.y;\n\t\tvertices[ frontCenterIndex * 3 + 2 ] = frontCenter.z;\n\t\tconst rearCenter = new THREE.Vector3( 0, 0, rearRadius );\n\t\tvertices[ rearCenterIndex * 3 ] = rearCenter.x;\n\t\tvertices[ rearCenterIndex * 3 + 1 ] = rearCenter.y;\n\t\tvertices[ rearCenterIndex * 3 + 2 ] = rearCenter.z;\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\t\t// verticesNeedUpdate = true;\n\n\t}\n\n\tcreatePointer() {\n\n\t\tlet i, j;\n\t\tconst vertices = new Array(\n\t\t\t( ( POINTER_RINGS + 1 ) * POINTER_SEGMENTS + 2 ) * 3\n\t\t).fill( 0 );\n\t\t// const vertices = [];\n\t\tconst indices = [];\n\t\tthis.pointerGeometry = new THREE.BufferGeometry();\n\n\t\tthis.pointerGeometry.setAttribute(\n\t\t\t'position',\n\t\t\tnew THREE.Float32BufferAttribute( vertices, 3 )\n\t\t);\n\n\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\n\t\t// construct faces to connect rings\n\t\tfor ( i = 0; i < POINTER_RINGS; i ++ ) {\n\n\t\t\tfor ( j = 0; j < POINTER_SEGMENTS - 1; j ++ ) {\n\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j,\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\t\t\t\tindices.push(\n\t\t\t\t\ti * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j + 1,\n\t\t\t\t\t( i + 1 ) * POINTER_SEGMENTS + j\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tindices.push(\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS - 1,\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\t\t\tindices.push(\n\t\t\t\ti * POINTER_SEGMENTS,\n\t\t\t\t( i + 1 ) * POINTER_SEGMENTS,\n\t\t\t\t( i + 2 ) * POINTER_SEGMENTS - 1\n\t\t\t);\n\n\t\t}\n\n\t\t// construct front and rear face\n\t\tconst frontCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS );\n\t\tconst rearCenterIndex = POINTER_SEGMENTS * ( 1 + POINTER_RINGS ) + 1;\n\n\t\tfor ( i = 0; i < POINTER_SEGMENTS - 1; i ++ ) {\n\n\t\t\tindices.push( frontCenterIndex, i + 1, i );\n\t\t\tindices.push(\n\t\t\t\trearCenterIndex,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS,\n\t\t\t\ti + POINTER_SEGMENTS * POINTER_RINGS + 1\n\t\t\t);\n\n\t\t}\n\n\t\tindices.push( frontCenterIndex, 0, POINTER_SEGMENTS - 1 );\n\t\tindices.push(\n\t\t\trearCenterIndex,\n\t\t\tPOINTER_SEGMENTS * ( POINTER_RINGS + 1 ) - 1,\n\t\t\tPOINTER_SEGMENTS * POINTER_RINGS\n\t\t);\n\n\t\tconst material = new THREE.MeshBasicMaterial();\n\t\tmaterial.transparent = true;\n\t\tmaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.pointerGeometry.setIndex( indices );\n\n\t\tthis.pointerMesh = new THREE.Mesh( this.pointerGeometry, material );\n\n\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\tthis.pointerObject = new THREE.Object3D();\n\t\tthis.pointerObject.add( this.pointerMesh );\n\n\t\tthis.raycaster = new THREE.Raycaster();\n\n\t\t// create cursor\n\t\tconst cursorGeometry = new THREE.SphereGeometry( CURSOR_RADIUS, 10, 10 );\n\t\tconst cursorMaterial = new THREE.MeshBasicMaterial();\n\t\tcursorMaterial.transparent = true;\n\t\tcursorMaterial.opacity = POINTER_OPACITY_MIN;\n\n\t\tthis.cursorObject = new THREE.Mesh( cursorGeometry, cursorMaterial );\n\t\tthis.pointerObject.add( this.cursorObject );\n\n\t\tthis.add( this.pointerObject );\n\n\t}\n\n\t_updateRaycaster() {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\tconst pointerMatrix = this.pointerObject.matrixWorld;\n\t\t\tconst tempMatrix = new THREE.Matrix4();\n\t\t\ttempMatrix.identity().extractRotation( pointerMatrix );\n\t\t\tthis.raycaster.ray.origin.setFromMatrixPosition( pointerMatrix );\n\t\t\tthis.raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );\n\n\t\t}\n\n\t}\n\n\t_updatePointer() {\n\n\t\tthis.pointerObject.visible = this.controller.visible;\n\t\tconst indexTip = this.hand.joints[ 'index-finger-tip' ];\n\t\tconst thumbTip = this.hand.joints[ 'thumb-tip' ];\n\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\t\tconst position = indexTip.position\n\t\t\t.clone()\n\t\t\t.add( thumbTip.position )\n\t\t\t.multiplyScalar( 0.5 );\n\t\tthis.pointerObject.position.copy( position );\n\t\tthis.pointerObject.quaternion.copy( this.controller.quaternion );\n\n\t\tthis.pinched = distance <= PINCH_THRESHOLD;\n\n\t\tconst pinchScale = ( distance - PINCH_MIN ) / ( PINCH_MAX - PINCH_MIN );\n\t\tconst focusScale = ( distance - PINCH_MIN ) / ( PINCH_THRESHOLD - PINCH_MIN );\n\t\tif ( pinchScale > 1 ) {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * POINTER_REAR_RADIUS );\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t} else if ( pinchScale > 0 ) {\n\n\t\t\tconst rearRadius =\n ( POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN ) * pinchScale +\n POINTER_REAR_RADIUS_MIN;\n\t\t\tthis._updatePointerVertices( rearRadius );\n\t\t\tif ( focusScale < 1 ) {\n\n\t\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t- 1 * rearRadius - ( 1 - focusScale ) * POINTER_ADVANCE_MAX\n\t\t\t\t);\n\t\t\t\tthis.pointerMesh.material.opacity =\n POINTER_OPACITY_MIN +\n ( 1 - focusScale ) * ( POINTER_OPACITY_MAX - POINTER_OPACITY_MIN );\n\n\t\t\t} else {\n\n\t\t\t\tthis.pointerMesh.position.set( 0, 0, - 1 * rearRadius );\n\t\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis._updatePointerVertices( POINTER_REAR_RADIUS_MIN );\n\t\t\tthis.pointerMesh.position.set(\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t- 1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX\n\t\t\t);\n\t\t\tthis.pointerMesh.material.opacity = POINTER_OPACITY_MAX;\n\n\t\t}\n\n\t\tthis.cursorObject.material.opacity = this.pointerMesh.material.opacity;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\t\tif ( this.pointerGeometry ) {\n\n\t\t\tthis._updatePointer();\n\t\t\tthis._updateRaycaster();\n\n\t\t}\n\n\t}\n\n\tisPinched() {\n\n\t\treturn this.pinched;\n\n\t}\n\n\tsetAttached( attached ) {\n\n\t\tthis.attached = attached;\n\n\t}\n\n\tisAttached() {\n\n\t\treturn this.attached;\n\n\t}\n\n\tintersectObject( object, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObject( object, recursive );\n\n\t\t}\n\n\t}\n\n\tintersectObjects( objects, recursive = true ) {\n\n\t\tif ( this.raycaster ) {\n\n\t\t\treturn this.raycaster.intersectObjects( objects, recursive );\n\n\t\t}\n\n\t}\n\n\tcheckIntersections( objects, recursive = false ) {\n\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tconst intersections = this.raycaster.intersectObjects( objects, recursive );\n\t\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\t\tif ( intersections.length > 0 ) {\n\n\t\t\t\tconst intersection = intersections[ 0 ];\n\t\t\t\tconst distance = intersection.distance;\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( CURSOR_MAX_DISTANCE ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCursor( distance ) {\n\n\t\tconst direction = new THREE.Vector3( 0, 0, - 1 );\n\t\tif ( this.raycaster && ! this.attached ) {\n\n\t\t\tthis.cursorObject.position.copy( direction.multiplyScalar( distance ) );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis._onDisconnected();\n\t\tthis.hand.removeEventListener( 'connected', this._onConnected );\n\t\tthis.hand.removeEventListener( 'disconnected', this._onDisconnected );\n\n\t}\n\n}\n\nexport { OculusHandPointerModel };\n", "import * as THREE from 'three';\n\nfunction createText( message, height ) {\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\tlet metrics = null;\n\tconst textHeight = 100;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tmetrics = context.measureText( message );\n\tconst textWidth = metrics.width;\n\tcanvas.width = textWidth;\n\tcanvas.height = textHeight;\n\tcontext.font = 'normal ' + textHeight + 'px Arial';\n\tcontext.textAlign = 'center';\n\tcontext.textBaseline = 'middle';\n\tcontext.fillStyle = '#ffffff';\n\tcontext.fillText( message, textWidth / 2, textHeight / 2 );\n\n\tconst texture = new THREE.Texture( canvas );\n\ttexture.needsUpdate = true;\n\n\tconst material = new THREE.MeshBasicMaterial( {\n\t\tcolor: 0xffffff,\n\t\tside: THREE.DoubleSide,\n\t\tmap: texture,\n\t\ttransparent: true,\n\t} );\n\tconst geometry = new THREE.PlaneGeometry(\n\t\t( height * textWidth ) / textHeight,\n\t\theight\n\t);\n\tconst plane = new THREE.Mesh( geometry, material );\n\treturn plane;\n\n}\n\nexport { createText };\n", "class VRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\t\t\t\tbutton.textContent = 'EXIT VR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t// be requested separately.)\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionOptions ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( 'immersive-vr', sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showWebXRNotFound() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'VR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showVRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'VR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'VRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showEnterVR() : showWebXRNotFound();\n\n\t\t\t\tif ( supported && VRButton.xrSessionIsGranted ) {\n\n\t\t\t\t\tbutton.click();\n\n\t\t\t\t}\n\n\t\t\t} ).catch( showVRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n\tstatic registerSessionGrantedListener() {\n\n\t\tif ( typeof navigator !== 'undefined' && 'xr' in navigator ) {\n\n\t\t\t// WebXRViewer (based on Firefox) has a bug where addEventListener\n\t\t\t// throws a silent exception and aborts execution entirely.\n\t\t\tif ( /WebXRViewer\\//i.test( navigator.userAgent ) ) return;\n\n\t\t\tnavigator.xr.addEventListener( 'sessiongranted', () => {\n\n\t\t\t\tVRButton.xrSessionIsGranted = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\n\nexport { VRButton };\n", "class XRButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartXR( mode ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tawait renderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP XR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START XR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START XR';\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\n\t\t\t\t\t'local-floor',\n\t\t\t\t\t'bounded-floor',\n\t\t\t\t\t'layers',\n\t\t\t\t\t...( sessionInit.optionalFeatures || [] )\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( mode, sessionOptions )\n\t\t\t\t\t\t.then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tif ( navigator.xr.offerSession !== undefined ) {\n\n\t\t\t\tnavigator.xr.offerSession( mode, sessionOptions )\n\t\t\t\t\t.then( onSessionStarted )\n\t\t\t\t\t.catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showXRNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'XR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction showXRNotAllowed( exception ) {\n\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n\t\t\tbutton.textContent = 'XR NOT ALLOWED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'XRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' )\n\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\tshowStartXR( 'immersive-ar' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' )\n\t\t\t\t\t\t\t.then( function ( supported ) {\n\n\t\t\t\t\t\t\t\tif ( supported ) {\n\n\t\t\t\t\t\t\t\t\tshowStartXR( 'immersive-vr' );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tshowXRNotSupported();\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\t\t\t}\n\n\t\t\t\t} ).catch( showXRNotAllowed );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRButton };\n", "/**\n * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles\n */\n\nconst Constants = {\n Handedness: Object.freeze({\n NONE: 'none',\n LEFT: 'left',\n RIGHT: 'right'\n }),\n\n ComponentState: Object.freeze({\n DEFAULT: 'default',\n TOUCHED: 'touched',\n PRESSED: 'pressed'\n }),\n\n ComponentProperty: Object.freeze({\n BUTTON: 'button',\n X_AXIS: 'xAxis',\n Y_AXIS: 'yAxis',\n STATE: 'state'\n }),\n\n ComponentType: Object.freeze({\n TRIGGER: 'trigger',\n SQUEEZE: 'squeeze',\n TOUCHPAD: 'touchpad',\n THUMBSTICK: 'thumbstick',\n BUTTON: 'button'\n }),\n\n ButtonTouchThreshold: 0.05,\n\n AxisTouchThreshold: 0.1,\n\n VisualResponseProperty: Object.freeze({\n TRANSFORM: 'transform',\n VISIBILITY: 'visibility'\n })\n};\n\n/**\n * @description Static helper function to fetch a JSON file and turn it into a JS object\n * @param {string} path - Path to JSON file to be fetched\n */\nasync function fetchJsonFile(path) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(response.statusText);\n } else {\n return response.json();\n }\n}\n\nasync function fetchProfilesList(basePath) {\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n const profileListFileName = 'profilesList.json';\n const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n return profilesList;\n}\n\nasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!basePath) {\n throw new Error('No basePath supplied');\n }\n\n // Get the list of profiles\n const supportedProfilesList = await fetchProfilesList(basePath);\n\n // Find the relative path to the first requested profile that is recognized\n let match;\n xrInputSource.profiles.some((profileId) => {\n const supportedProfile = supportedProfilesList[profileId];\n if (supportedProfile) {\n match = {\n profileId,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n return !!match;\n });\n\n if (!match) {\n if (!defaultProfile) {\n throw new Error('No matching profile name found');\n }\n\n const supportedProfile = supportedProfilesList[defaultProfile];\n if (!supportedProfile) {\n throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n }\n\n match = {\n profileId: defaultProfile,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n\n const profile = await fetchJsonFile(match.profilePath);\n\n let assetPath;\n if (getAssetPath) {\n let layout;\n if (xrInputSource.handedness === 'any') {\n layout = profile.layouts[Object.keys(profile.layouts)[0]];\n } else {\n layout = profile.layouts[xrInputSource.handedness];\n }\n if (!layout) {\n throw new Error(\n `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`\n );\n }\n\n if (layout.assetPath) {\n assetPath = match.profilePath.replace('profile.json', layout.assetPath);\n }\n }\n\n return { profile, assetPath };\n}\n\n/** @constant {Object} */\nconst defaultComponentValues = {\n xAxis: 0,\n yAxis: 0,\n button: 0,\n state: Constants.ComponentState.DEFAULT\n};\n\n/**\n * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad\n * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within\n * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical\n * range of motion and touchpads do not report touch locations off their physical bounds.\n * @param {number} x The original x coordinate in the range -1 to 1\n * @param {number} y The original y coordinate in the range -1 to 1\n */\nfunction normalizeAxes(x = 0, y = 0) {\n let xAxis = x;\n let yAxis = y;\n\n // Determine if the point is outside the bounds of the circle\n // and, if so, place it on the edge of the circle\n const hypotenuse = Math.sqrt((x * x) + (y * y));\n if (hypotenuse > 1) {\n const theta = Math.atan2(y, x);\n xAxis = Math.cos(theta);\n yAxis = Math.sin(theta);\n }\n\n // Scale and move the circle so values are in the interpolation range. The circle's origin moves\n // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5.\n const result = {\n normalizedXAxis: (xAxis * 0.5) + 0.5,\n normalizedYAxis: (yAxis * 0.5) + 0.5\n };\n return result;\n}\n\n/**\n * Contains the description of how the 3D model should visually respond to a specific user input.\n * This is accomplished by initializing the object with the name of a node in the 3D model and\n * property that need to be modified in response to user input, the name of the nodes representing\n * the allowable range of motion, and the name of the input which triggers the change. In response\n * to the named input changing, this object computes the appropriate weighting to use for\n * interpolating between the range of motion nodes.\n */\nclass VisualResponse {\n constructor(visualResponseDescription) {\n this.componentProperty = visualResponseDescription.componentProperty;\n this.states = visualResponseDescription.states;\n this.valueNodeName = visualResponseDescription.valueNodeName;\n this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n\n if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) {\n this.minNodeName = visualResponseDescription.minNodeName;\n this.maxNodeName = visualResponseDescription.maxNodeName;\n }\n\n // Initializes the response's current value based on default data\n this.value = 0;\n this.updateFromComponent(defaultComponentValues);\n }\n\n /**\n * Computes the visual response's interpolation weight based on component state\n * @param {Object} componentValues - The component from which to update\n * @param {number} xAxis - The reported X axis value of the component\n * @param {number} yAxis - The reported Y axis value of the component\n * @param {number} button - The reported value of the component's button\n * @param {string} state - The component's active state\n */\n updateFromComponent({\n xAxis, yAxis, button, state\n }) {\n const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n switch (this.componentProperty) {\n case Constants.ComponentProperty.X_AXIS:\n this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5;\n break;\n case Constants.ComponentProperty.Y_AXIS:\n this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5;\n break;\n case Constants.ComponentProperty.BUTTON:\n this.value = (this.states.includes(state)) ? button : 0;\n break;\n case Constants.ComponentProperty.STATE:\n if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) {\n this.value = (this.states.includes(state));\n } else {\n this.value = this.states.includes(state) ? 1.0 : 0.0;\n }\n break;\n default:\n throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n }\n }\n}\n\nclass Component {\n /**\n * @param {Object} componentId - Id of the component\n * @param {Object} componentDescription - Description of the component to be created\n */\n constructor(componentId, componentDescription) {\n if (!componentId\n || !componentDescription\n || !componentDescription.visualResponses\n || !componentDescription.gamepadIndices\n || Object.keys(componentDescription.gamepadIndices).length === 0) {\n throw new Error('Invalid arguments supplied');\n }\n\n this.id = componentId;\n this.type = componentDescription.type;\n this.rootNodeName = componentDescription.rootNodeName;\n this.touchPointNodeName = componentDescription.touchPointNodeName;\n\n // Build all the visual responses for this component\n this.visualResponses = {};\n Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n this.visualResponses[responseName] = visualResponse;\n });\n\n // Set default values\n this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n\n this.values = {\n state: Constants.ComponentState.DEFAULT,\n button: (this.gamepadIndices.button !== undefined) ? 0 : undefined,\n xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined,\n yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined\n };\n }\n\n get data() {\n const data = { id: this.id, ...this.values };\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n * @param {Object} gamepad - The gamepad object from which the component data should be polled\n */\n updateFromGamepad(gamepad) {\n // Set the state to default before processing other data sources\n this.values.state = Constants.ComponentState.DEFAULT;\n\n // Get and normalize button\n if (this.gamepadIndices.button !== undefined\n && gamepad.buttons.length > this.gamepadIndices.button) {\n const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n this.values.button = gamepadButton.value;\n this.values.button = (this.values.button < 0) ? 0 : this.values.button;\n this.values.button = (this.values.button > 1) ? 1 : this.values.button;\n\n // Set the state based on the button\n if (gamepadButton.pressed || this.values.button === 1) {\n this.values.state = Constants.ComponentState.PRESSED;\n } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize x axis value\n if (this.gamepadIndices.xAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.xAxis) {\n this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis;\n this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis;\n\n // If the state is still default, check if the xAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Get and normalize Y axis value\n if (this.gamepadIndices.yAxis !== undefined\n && gamepad.axes.length > this.gamepadIndices.yAxis) {\n this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis;\n this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis;\n\n // If the state is still default, check if the yAxis makes it touched\n if (this.values.state === Constants.ComponentState.DEFAULT\n && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) {\n this.values.state = Constants.ComponentState.TOUCHED;\n }\n }\n\n // Update the visual response weights based on the current component data\n Object.values(this.visualResponses).forEach((visualResponse) => {\n visualResponse.updateFromComponent(this.values);\n });\n }\n}\n\n/**\n * @description Builds a motion controller with components and visual responses based on the\n * supplied profile description. Data is polled from the xrInputSource's gamepad.\n * @author Nell Waliczek / https://github.com/NellWaliczek\n*/\nclass MotionController {\n /**\n * @param {Object} xrInputSource - The XRInputSource to build the MotionController around\n * @param {Object} profile - The best matched profile description for the supplied xrInputSource\n * @param {Object} assetUrl\n */\n constructor(xrInputSource, profile, assetUrl) {\n if (!xrInputSource) {\n throw new Error('No xrInputSource supplied');\n }\n\n if (!profile) {\n throw new Error('No profile supplied');\n }\n\n this.xrInputSource = xrInputSource;\n this.assetUrl = assetUrl;\n this.id = profile.profileId;\n\n // Build child components as described in the profile description\n this.layoutDescription = profile.layouts[xrInputSource.handedness];\n this.components = {};\n Object.keys(this.layoutDescription.components).forEach((componentId) => {\n const componentDescription = this.layoutDescription.components[componentId];\n this.components[componentId] = new Component(componentId, componentDescription);\n });\n\n // Initialize components based on current gamepad state\n this.updateFromGamepad();\n }\n\n get gripSpace() {\n return this.xrInputSource.gripSpace;\n }\n\n get targetRaySpace() {\n return this.xrInputSource.targetRaySpace;\n }\n\n /**\n * @description Returns a subset of component data for simplified debugging\n */\n get data() {\n const data = [];\n Object.values(this.components).forEach((component) => {\n data.push(component.data);\n });\n return data;\n }\n\n /**\n * @description Poll for updated data based on current gamepad state\n */\n updateFromGamepad() {\n Object.values(this.components).forEach((component) => {\n component.updateFromGamepad(this.xrInputSource.gamepad);\n });\n }\n}\n\nexport { Constants, MotionController, fetchProfile, fetchProfilesList };\n", "import {\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tSphereGeometry,\n} from 'three';\n\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nimport {\n\tConstants as MotionControllerConstants,\n\tfetchProfile,\n\tMotionController\n} from '../libs/motion-controllers.module.js';\n\nconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\nconst DEFAULT_PROFILE = 'generic-trigger';\n\nclass XRControllerModel extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t}\n\n\tsetEnvironmentMap( envMap ) {\n\n\t\tif ( this.envMap == envMap ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.envMap = envMap;\n\t\tthis.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Polls data from the XRInputSource and updates the model's components to match\n\t * the real world data\n\t */\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( ! this.motionController ) return;\n\n\t\t// Cause the MotionController to poll the Gamepad for data\n\t\tthis.motionController.updateFromGamepad();\n\n\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t// Update node data based on the visual responses' current states\n\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t// because it will have been reported at load time.\n\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t} else if ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tvalueNode.quaternion.slerpQuaternions(\n\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Walks the model's tree to find the nodes needed to animate the components and\n * saves them to the motionContoller components for use in the frame loop. When\n * touchpads are found, attaches a touch dot to them.\n */\nfunction findNodes( motionController, scene ) {\n\n\t// Loop through the components and find the nodes needed for each components' visual responses\n\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\tif ( type === MotionControllerConstants.ComponentType.TOUCHPAD ) {\n\n\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\tconst sphereGeometry = new SphereGeometry( 0.001 );\n\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Loop through all the visual responses to be applied to this component\n\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If the target node cannot be found, skip this animation\n\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t}\n\n\t\t} );\n\n\t} );\n\n}\n\nfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t// Find the nodes needed for animation and cache them on the motionController.\n\tfindNodes( controllerModel.motionController, scene );\n\n\t// Apply any environment map that the mesh already has set.\n\tif ( controllerModel.envMap ) {\n\n\t\tscene.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Add the glTF scene to the controllerModel.\n\tcontrollerModel.add( scene );\n\n}\n\nclass XRControllerModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\tthis._assetCache = {};\n\t\tthis.onLoad = onLoad;\n\n\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\tif ( ! this.gltfLoader ) {\n\n\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t}\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateControllerModel( controller ) {\n\n\t\tconst controllerModel = new XRControllerModel();\n\t\tlet scene = null;\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\txrInputSource,\n\t\t\t\t\tprofile,\n\t\t\t\t\tassetPath\n\t\t\t\t);\n\n\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\tif ( this.onLoad ) this.onLoad( scene );\n\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t() => {\n\n\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\tconsole.warn( err );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontrollerModel.motionController = null;\n\t\t\tcontrollerModel.remove( scene );\n\t\t\tscene = null;\n\n\t\t} );\n\n\t\treturn controllerModel;\n\n\t}\n\n}\n\nexport { XRControllerModelFactory };\n", "import {\n\tDirectionalLight,\n\tGroup,\n\tLightProbe,\n\tWebGLCubeRenderTarget\n} from 'three';\n\nclass SessionLightProbe {\n\n\tconstructor( xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback ) {\n\n\t\tthis.xrLight = xrLight;\n\t\tthis.renderer = renderer;\n\t\tthis.lightProbe = lightProbe;\n\t\tthis.xrWebGLBinding = null;\n\t\tthis.estimationStartCallback = estimationStartCallback;\n\t\tthis.frameCallback = this.onXRFrame.bind( this );\n\n\t\tconst session = renderer.xr.getSession();\n\n\t\t// If the XRWebGLBinding class is available then we can also query an\n\t\t// estimated reflection cube map.\n\t\tif ( environmentEstimation && 'XRWebGLBinding' in window ) {\n\n\t\t\t// This is the simplest way I know of to initialize a WebGL cubemap in Three.\n\t\t\tconst cubeRenderTarget = new WebGLCubeRenderTarget( 16 );\n\t\t\txrLight.environment = cubeRenderTarget.texture;\n\n\t\t\tconst gl = renderer.getContext();\n\n\t\t\t// Ensure that we have any extensions needed to use the preferred cube map format.\n\t\t\tswitch ( session.preferredReflectionFormat ) {\n\n\t\t\t\tcase 'srgba8':\n\t\t\t\t\tgl.getExtension( 'EXT_sRGB' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rgba16f':\n\t\t\t\t\tgl.getExtension( 'OES_texture_half_float' );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.xrWebGLBinding = new XRWebGLBinding( session, gl );\n\n\t\t\tthis.lightProbe.addEventListener( 'reflectionchange', () => {\n\n\t\t\t\tthis.updateReflection();\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Start monitoring the XR animation frame loop to look for lighting\n\t\t// estimation changes.\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t}\n\n\tupdateReflection() {\n\n\t\tconst textureProperties = this.renderer.properties.get( this.xrLight.environment );\n\n\t\tif ( textureProperties ) {\n\n\t\t\tconst cubeMap = this.xrWebGLBinding.getReflectionCubeMap( this.lightProbe );\n\n\t\t\tif ( cubeMap ) {\n\n\t\t\t\ttextureProperties.__webglTexture = cubeMap;\n\n\t\t\t\tthis.xrLight.environment.needsPMREMUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tonXRFrame( time, xrFrame ) {\n\n\t\t// If either this obejct or the XREstimatedLight has been destroyed, stop\n\t\t// running the frame loop.\n\t\tif ( ! this.xrLight ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst session = xrFrame.session;\n\t\tsession.requestAnimationFrame( this.frameCallback );\n\n\t\tconst lightEstimate = xrFrame.getLightEstimate( this.lightProbe );\n\t\tif ( lightEstimate ) {\n\n\t\t\t// We can copy the estimate's spherical harmonics array directly into the light probe.\n\t\t\tthis.xrLight.lightProbe.sh.fromArray( lightEstimate.sphericalHarmonicsCoefficients );\n\t\t\tthis.xrLight.lightProbe.intensity = 1.0;\n\n\t\t\t// For the directional light we have to normalize the color and set the scalar as the\n\t\t\t// intensity, since WebXR can return color values that exceed 1.0.\n\t\t\tconst intensityScalar = Math.max( 1.0,\n\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.x,\n\t\t\t\t\tMath.max( lightEstimate.primaryLightIntensity.y,\n\t\t\t\t\t\tlightEstimate.primaryLightIntensity.z ) ) );\n\n\t\t\tthis.xrLight.directionalLight.color.setRGB(\n\t\t\t\tlightEstimate.primaryLightIntensity.x / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.y / intensityScalar,\n\t\t\t\tlightEstimate.primaryLightIntensity.z / intensityScalar );\n\t\t\tthis.xrLight.directionalLight.intensity = intensityScalar;\n\t\t\tthis.xrLight.directionalLight.position.copy( lightEstimate.primaryLightDirection );\n\n\t\t\tif ( this.estimationStartCallback ) {\n\n\t\t\t\tthis.estimationStartCallback();\n\t\t\t\tthis.estimationStartCallback = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tthis.xrLight = null;\n\t\tthis.renderer = null;\n\t\tthis.lightProbe = null;\n\t\tthis.xrWebGLBinding = null;\n\n\t}\n\n}\n\nexport class XREstimatedLight extends Group {\n\n\tconstructor( renderer, environmentEstimation = true ) {\n\n\t\tsuper();\n\n\t\tthis.lightProbe = new LightProbe();\n\t\tthis.lightProbe.intensity = 0;\n\t\tthis.add( this.lightProbe );\n\n\t\tthis.directionalLight = new DirectionalLight();\n\t\tthis.directionalLight.intensity = 0;\n\t\tthis.add( this.directionalLight );\n\n\t\t// Will be set to a cube map in the SessionLightProbe if environment estimation is\n\t\t// available and requested.\n\t\tthis.environment = null;\n\n\t\tlet sessionLightProbe = null;\n\t\tlet estimationStarted = false;\n\t\trenderer.xr.addEventListener( 'sessionstart', () => {\n\n\t\t\tconst session = renderer.xr.getSession();\n\n\t\t\tif ( 'requestLightProbe' in session ) {\n\n\t\t\t\tsession.requestLightProbe( {\n\n\t\t\t\t\treflectionFormat: session.preferredReflectionFormat\n\n\t\t\t\t} ).then( ( probe ) => {\n\n\t\t\t\t\tsessionLightProbe = new SessionLightProbe( this, renderer, probe, environmentEstimation, () => {\n\n\t\t\t\t\t\testimationStarted = true;\n\n\t\t\t\t\t\t// Fired to indicate that the estimated lighting values are now being updated.\n\t\t\t\t\t\tthis.dispatchEvent( { type: 'estimationstart' } );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderer.xr.addEventListener( 'sessionend', () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tif ( estimationStarted ) {\n\n\t\t\t\t// Fired to indicate that the estimated lighting values are no longer being updated.\n\t\t\t\tthis.dispatchEvent( { type: 'estimationend' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Done inline to provide access to sessionLightProbe.\n\t\tthis.dispose = () => {\n\n\t\t\tif ( sessionLightProbe ) {\n\n\t\t\t\tsessionLightProbe.dispose();\n\t\t\t\tsessionLightProbe = null;\n\n\t\t\t}\n\n\t\t\tthis.remove( this.lightProbe );\n\t\t\tthis.lightProbe = null;\n\n\t\t\tthis.remove( this.directionalLight );\n\t\t\tthis.directionalLight = null;\n\n\t\t\tthis.environment = null;\n\n\t\t};\n\n\t}\n\n}\n", "import {\n\tDynamicDrawUsage,\n\tSphereGeometry,\n\tBoxGeometry,\n\tMeshStandardMaterial,\n\tInstancedMesh,\n\tMatrix4,\n\tVector3\n} from 'three';\n\nconst _matrix = new Matrix4();\nconst _vector = new Vector3();\n\nclass XRHandPrimitiveModel {\n\n\tconstructor( handModel, controller, path, handedness, options ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\t\tthis.envMap = null;\n\n\t\tlet geometry;\n\n\t\tif ( ! options || ! options.primitive || options.primitive === 'sphere' ) {\n\n\t\t\tgeometry = new SphereGeometry( 1, 10, 10 );\n\n\t\t} else if ( options.primitive === 'box' ) {\n\n\t\t\tgeometry = new BoxGeometry( 1, 1, 1 );\n\n\t\t}\n\n\t\tconst material = new MeshStandardMaterial();\n\n\t\tthis.handMesh = new InstancedMesh( geometry, material, 30 );\n\t\tthis.handMesh.frustumCulled = false;\n\t\tthis.handMesh.instanceMatrix.setUsage( DynamicDrawUsage ); // will be updated every frame\n\t\tthis.handMesh.castShadow = true;\n\t\tthis.handMesh.receiveShadow = true;\n\t\tthis.handModel.add( this.handMesh );\n\n\t\tthis.joints = [\n\t\t\t'wrist',\n\t\t\t'thumb-metacarpal',\n\t\t\t'thumb-phalanx-proximal',\n\t\t\t'thumb-phalanx-distal',\n\t\t\t'thumb-tip',\n\t\t\t'index-finger-metacarpal',\n\t\t\t'index-finger-phalanx-proximal',\n\t\t\t'index-finger-phalanx-intermediate',\n\t\t\t'index-finger-phalanx-distal',\n\t\t\t'index-finger-tip',\n\t\t\t'middle-finger-metacarpal',\n\t\t\t'middle-finger-phalanx-proximal',\n\t\t\t'middle-finger-phalanx-intermediate',\n\t\t\t'middle-finger-phalanx-distal',\n\t\t\t'middle-finger-tip',\n\t\t\t'ring-finger-metacarpal',\n\t\t\t'ring-finger-phalanx-proximal',\n\t\t\t'ring-finger-phalanx-intermediate',\n\t\t\t'ring-finger-phalanx-distal',\n\t\t\t'ring-finger-tip',\n\t\t\t'pinky-finger-metacarpal',\n\t\t\t'pinky-finger-phalanx-proximal',\n\t\t\t'pinky-finger-phalanx-intermediate',\n\t\t\t'pinky-finger-phalanx-distal',\n\t\t\t'pinky-finger-tip'\n\t\t];\n\n\t}\n\n\tupdateMesh() {\n\n\t\tconst defaultRadius = 0.008;\n\t\tconst joints = this.controller.joints;\n\n\t\tlet count = 0;\n\n\t\tfor ( let i = 0; i < this.joints.length; i ++ ) {\n\n\t\t\tconst joint = joints[ this.joints[ i ] ];\n\n\t\t\tif ( joint.visible ) {\n\n\t\t\t\t_vector.setScalar( joint.jointRadius || defaultRadius );\n\t\t\t\t_matrix.compose( joint.position, joint.quaternion, _vector );\n\t\t\t\tthis.handMesh.setMatrixAt( i, _matrix );\n\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.handMesh.count = count;\n\t\tthis.handMesh.instanceMatrix.needsUpdate = true;\n\n\t}\n\n}\n\nexport { XRHandPrimitiveModel };\n", "import {\n\tObject3D\n} from 'three';\n\nimport {\n\tXRHandPrimitiveModel\n} from './XRHandPrimitiveModel.js';\n\nimport {\n\tXRHandMeshModel\n} from './XRHandMeshModel.js';\n\nclass XRHandModel extends Object3D {\n\n\tconstructor( controller ) {\n\n\t\tsuper();\n\n\t\tthis.controller = controller;\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t\tthis.mesh = null;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t}\n\n}\n\nclass XRHandModelFactory {\n\n\tconstructor( gltfLoader = null, onLoad = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = null;\n\t\tthis.onLoad = onLoad;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\n\t\treturn this;\n\n\t}\n\n\tcreateHandModel( controller, profile ) {\n\n\t\tconst handModel = new XRHandModel( controller );\n\n\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\tconst xrInputSource = event.data;\n\n\t\t\tif ( xrInputSource.hand && ! handModel.motionController ) {\n\n\t\t\t\thandModel.xrInputSource = xrInputSource;\n\n\t\t\t\t// @todo Detect profile if not provided\n\t\t\t\tif ( profile === undefined || profile === 'spheres' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } );\n\n\t\t\t\t} else if ( profile === 'boxes' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );\n\n\t\t\t\t} else if ( profile === 'mesh' ) {\n\n\t\t\t\t\thandModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness, this.gltfLoader, this.onLoad );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcontroller.visible = true;\n\n\t\t} );\n\n\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\tcontroller.visible = false;\n\t\t\t// handModel.motionController = null;\n\t\t\t// handModel.remove( scene );\n\t\t\t// scene = null;\n\n\t\t} );\n\n\t\treturn handModel;\n\n\t}\n\n}\n\nexport { XRHandModelFactory };\n", "import {\n\tBoxGeometry,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D\n} from 'three';\n\nclass XRPlanes extends Object3D {\n\n\tconstructor( renderer ) {\n\n\t\tsuper();\n\n\t\tconst matrix = new Matrix4();\n\n\t\tconst currentPlanes = new Map();\n\n\t\tconst xr = renderer.xr;\n\n\t\txr.addEventListener( 'planesdetected', event => {\n\n\t\t\tconst frame = event.data;\n\t\t\tconst planes = frame.detectedPlanes;\n\n\t\t\tconst referenceSpace = xr.getReferenceSpace();\n\n\t\t\tlet planeschanged = false;\n\n\t\t\tfor ( const [ plane, mesh ] of currentPlanes ) {\n\n\t\t\t\tif ( planes.has( plane ) === false ) {\n\n\t\t\t\t\tmesh.geometry.dispose();\n\t\t\t\t\tmesh.material.dispose();\n\t\t\t\t\tthis.remove( mesh );\n\n\t\t\t\t\tcurrentPlanes.delete( plane );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( const plane of planes ) {\n\n\t\t\t\tif ( currentPlanes.has( plane ) === false ) {\n\n\t\t\t\t\tconst pose = frame.getPose( plane.planeSpace, referenceSpace );\n\t\t\t\t\tmatrix.fromArray( pose.transform.matrix );\n\n\t\t\t\t\tconst polygon = plane.polygon;\n\n\t\t\t\t\tlet minX = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxX = Number.MIN_SAFE_INTEGER;\n\t\t\t\t\tlet minZ = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tlet maxZ = Number.MIN_SAFE_INTEGER;\n\n\t\t\t\t\tfor ( const point of polygon ) {\n\n\t\t\t\t\t\tminX = Math.min( minX, point.x );\n\t\t\t\t\t\tmaxX = Math.max( maxX, point.x );\n\t\t\t\t\t\tminZ = Math.min( minZ, point.z );\n\t\t\t\t\t\tmaxZ = Math.max( maxZ, point.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst width = maxX - minX;\n\t\t\t\t\tconst height = maxZ - minZ;\n\n\t\t\t\t\tconst geometry = new BoxGeometry( width, 0.01, height );\n\t\t\t\t\tconst material = new MeshBasicMaterial( { color: 0xffffff * Math.random() } );\n\n\t\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\t\tmesh.position.setFromMatrixPosition( matrix );\n\t\t\t\t\tmesh.quaternion.setFromRotationMatrix( matrix );\n\t\t\t\t\tthis.add( mesh );\n\n\t\t\t\t\tcurrentPlanes.set( plane, mesh );\n\n\t\t\t\t\tplaneschanged = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( planeschanged ) {\n\n\t\t\t\tthis.dispatchEvent( { type: 'planeschanged' } );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nexport { XRPlanes };\n"], + "mappings": "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H,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,IAAG;AAAA,EACH,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,KAAI;AAAA,EACJ,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,KAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EACN,OAAM;AAAA,EAC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AA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC1D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAG;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA;AAAA,MAEzD;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAC5D;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAChE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MACtE;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAErE;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAC1E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA;AAAA,MAE3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAI;AAAA,MAAK;AAAA,MAAK;AAAA,MAC1E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAAK;AAAA,MAC3E;AAAA,MAAK;AAAA,MA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c,UAAU,WAAa,WAAW,YAAc,UAAU,UAAY,WAAW,YAAc,UAAU,WAAY,WAAW,YAAc,UAAU,WAAY,WAAW,YAAc,UAAU,WAAY,WAAW,WAAY,SAAS,UAAW,WAAW,YAAa,UAAU,WAAY,WAAW,YAAa,UAAU,WAAY,WAAW,YAAa,UAAU,WAAY,WAAW,YAAa,UAAU,WAAY,UAAU,YAAa,UAAU,WAAY,WAAW,YAAa,UAAU,UAAW,WAAW,YAAa,UAAU,WAAW,WAAW,WAAY,SAAS,UAAU,UAAU,YAAa,UAAU,WAAW,WAAW,YAAa,UAAU,WAAW,WAAW,YAAa,UAAU,WAAW,WAAW,YAAa,SAAS,WAAW,WAAW,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,SAAS,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAa,WAAY,SAAS,WAAW,aAA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YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,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YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,SAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,YAAa,GAAG,UAAY,SAAS,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,QAAQ,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,QAAQ,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,QAAU,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,QAAQ,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,SAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,SAAW,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,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WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,OAAO,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,SAAS,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,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WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAa,UAAU,UAAW,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,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WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,QAAQ,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAW,QAAQ,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,SAAU,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,QAAS,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,UAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,UAAY,UAAU,UAAU,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,OAAO,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,MAAM,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,OAAO,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,UAAW,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,QAAQ,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,SAAS,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,QAAQ,SAAS,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,QAAQ,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,SAAS,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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqNV;AAAA;AAAA,IACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AAErC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,eAAe,IAAK,EAAG,CAAE;AACrC,UAAK,EAAG,IAAIA,e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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAE;AACzyE,MAAI,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GA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,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,CAAE,GAAG,GAAG,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,GAAG,KAAK,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,GAAG,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,KAAK,EAAG,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,IAAI,EAAG,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,CAAE,GAAG,IAAI,CAAE,KAAK,IAAI,EAAG,GAAG,IAAI,CAAE,IAAI,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,GAAG,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,CAAE,GAAG,IAAI,CAAE,KAAK,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,GAAG,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,GAAG,KAAK,GAAI,GAAG,IAAI,CAAE,IAAI,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,IAAI,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,GAAI,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,IAAI,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG,GAAG,KAAK,CAAE,KAAK,GAAG,EAAG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AE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,OAAM,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,QAAO,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,IAAG,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,SAAQ,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GAAE,KAAI,IAAG,UAAS,GA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E,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAA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AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACT;AAcA,IAAI,sBAAsB;AAAA,EACtB,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,GAAG;AAAA;AAAA,EACH,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,IAAI;AAAA;AAAA,EACJ,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AACT;AAkBA,IAAI,mBAAmB;AAAA,EACnB,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAA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C,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,KAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,MAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ,KAAK,MAAM;AAAA;AAAA,EAC3B,EAAC,OAAO,OAAQ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AAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,MAAM,KAAK,QAAW,CAAC;AAAA;AAAA,EACvB,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EACvC,UAAU,KAAK,QAAW,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAA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AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MAAY;AAAA,MACpF;AAAA,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AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACpH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpH;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtH;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnH;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,E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G,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAC7H,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE,GAAG,GAAG,GAAG,CAAE;AAAA,MAAG,CAAE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A,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAChD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACjD;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA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G;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAA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A,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EACjD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAClD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;A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AAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,E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;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC1D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACvD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAChD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAChD;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACzD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtD;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC3D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC9C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EA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;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrE;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClE;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AA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", + "names": ["values", "c", "c2", "index", "line", "position", "scale", "parent", "world", "q", "t", "t2", "a", "v1", "x", "y", "p", "rotation", "param", "key", "a", "b", "max", "p", "_q", "q", "x", "renderer", "size", "x", "y", "self", "t", "key", "width", "height", "value", "rotation", "time", "l", "q", "a", "b", "c", "rayLength", "EPS", "scale", "_raycaster", "_offset", "_camera", "onPointerMove", "onPointerDown", "onPointerCancel", "x", "y", "position", "_changeEvent", "EPS", "_changeEvent", "_startEvent", "_endEvent", "_plane", "domElement", "STATE", "position", "max", "scale", "EPS", "onContextMenu", "onPointerDown", "onPointerUp", "onPointerMove", "document", "panLeft", "panUp", "pan", "x", "y", "onMouseMove", "_vector", "_changeEvent", "_changeEvent", "_startEvent", "_endEvent", "STATE", "EPS", "getMouseOnScreen", "getMouseOnCircle", "onPointerDown", "onPointerMove", "onPointerUp", "onMouseMove", "onPointerCancel", "x", "y", "position", "contextmenu", "_raycaster", "_changeEvent", "_plane", "value", "onPointerDown", "onPointerMove", "onPointerUp", "size", "name", "position", "rotation", "scale", "a", "data", "_center", "_up", "data", "far", "shaders", "l", "farVerts", "t", "x", "y", "scale", "a", "R", "b", "t2", "p", "q", "p", "n", "C", "r", "a", "k", "j", "q", "l", "w", "t", "t2", "k", "t2", "renderer", "width", "height", "_camera", "renderer", "width", "height", "oAscii", "y", "x", "renderer", "data", "keys", "key", "value", "width", "height", "x", "y", "renderer", "_camera", "width", "height", "renderer", "_position", "_quaternion", "_scale", "width", "height", "renderer", "size", "width", "height", "renderer", "faces", "length", "_color", "c", "err", "b", "x", "l", "a", "p", "nt", "l", "t", "c", "n", "dt", "add", "b", "p", "t2", "a", "_a", "_b", "post", "head", "i", "k", "post", "a", "b", "k", "td", "dt", "t", "t", "err", "b", "c", "l", "fl", "Deflate", "AsyncDeflate", "data", "Inflate", "c", "n", "dt", "AsyncInflate", "data", "Gzip", "c", "Gunzip", "p", "AsyncGunzip", "data", "Zlib", "c", "data", "a", "Unzlib", "AsyncUnzlib", "data", "Decompress", "n", "AsyncDecompress", "err", "size", "p", "t", "k", "val", "n", "c", "DecodeUTF8", "_a", "EncodeUTF8", "l", "n", "c", "_a", "l", "b", "_a", "k", "c", "ce", "fl", "dt", "y", "ZipPassThrough", "ZipDeflate", "AsyncZipDeflate", "err", "Zip", "err", "l", "_a", "_b", "data", "_a", "p", "l", "c", "UnzipPassThrough", "UnzipInflate", "data", "AsyncUnzipInflate", "err", "data", "Unzip", "l", "add", "_a", "err", "dat", "final", "data", "c", "_a", "b", "renderer", "y", "x", "g", "b", "a", "line", "sum", "size", "data", "t2", "p", "t", "value", "renderer", "_camera", "width", "height", "reject", "index", "text", "matrix", "a", "value", "uids", "map", "c", "width", "height", "data", "key", "l", "rotation", "position", "scale", "nodeIndex", "time", "values", "et", "t", "n", "e", "a", "l", "c", "p", "g", "y", "i", "s", "x", "b", "B", "A", "k", "I", "r", "o", "et", "renderer", "t", "p", "key", "value", "size", "a", "q", "v1", "i", "text", "n", "line", "a", "index", "p", "array", "position", "matrix", "table", "keys", "key", "value", "l", "line", "k", "l", "line", "index", "a", "b", "c", "vA", "vB", "vC", "scale", "name", "transform", "matrix", "index", "length", "x", "y", "rotation", "width", "height", "x", "y", "_v1", "_plane", "l", "t", "max", "index", "v1", "a", "b", "c", "head", "position", "size", "index", "plane", "v1", "p", "EPS", "a", "b", "c", "x", "y", "width", "height", "t", "a", "b", "frames", "position", "p", "q", "SphereGeometry", "size", "u", "v", "PlaneGeometry", "width", "height", "position", "size", "g", "p", "c", "t", "v1", "text", "size", "max", "c", "max", "width", "height", "position", "_v1", "_v2", "size", "position", "_v1", "_v2", "size", "position", "xAxis", "yAxis", "zAxis", "renderer", "x", "radius", "text", "context", "x", "y", "width", "height", "element", "max", "value", "property", "position", "rect", "_pointer", "_raycaster", "renderer", "controller", "_center", "_matrix", "_quaternion", "_scale", "x", "renderer", "width", "height", "data", "renderer", "g", "b", "x", "index", "_vector", "index", "matrix", "value", "_closestPoint", "_box", "_ray", "l", "t", "renderer", "length", "line", "_start", "_end", "_viewport", "l", "renderer", "k", "n", "c", "lc", "uInt8Array", "l", "p", "value", "buffer", "p2", "index", "data", "t", "t2", "size", "width", "height", "comp", "offset", "y", "x", "decodeFloat16", "a", "b", "g", "length", "name", "log2", "EXRDecoder", "line", "EXRHeader", "reject", "data", "map", "p", "matrix", "_color", "width", "height", "jsContent", "binaryContent", "worker", "a", "b", "rhino", "content", "t", "_geometry", "position", "property", "value", "data", "relsView", "relsFileText", "i", "name", "x", "y", "v1", "transform", "t", "matrix", "objects", "l", "keys", "build", "data3mf", "text", "data", "xmlData", "scale", "i", "v1", "x", "y", "text", "lines", "data", "line", "bones", "header", "use_rle", "use_pal", "offset", "data", "c", "imageData", "x", "y", "width", "height", "content", "text", "xml", "name", "l", "isEmpty", "library", "data", "transform", "time", "value", "index", "a", "b", "position", "scale", "matrix", "property", "key", "animations", "buildMaterial", "effect", "technique", "k", "getMaterial", "buildCamera", "count", "p", "g", "length", "c", "max", "vector", "j", "root", "object", "keys", "material", "parserError", "value", "buffer", "dataOffset", "width", "height", "y", "x", "b", "g", "a", "_taskCache", "reject", "name", "_color", "worker", "a", "b", "module", "index", "content", "values", "name", "child", "parent", "transform", "width", "height", "material", "g", "b", "skeleton", "index", "data", "length", "c", "l", "key", "val", "a", "time", "Q2", "Q", "E", "t", "text", "line", "property", "elem", "value", "keys", "size", "text", "data", "size", "p", "scale", "createPath", "ShapePath", "x", "y", "l", "text", "data", "line", "addSegment", "v1", "key", "value", "buffer", "p", "line", "w", "h", "l", "scale", "data", "value", "onLoad", "onProgress", "onError", "value", "width", "height", "size", "data", "startTheta", "endTheta", "t2", "v1", "text", "line", "values", "value", "text", "data", "resolve", "msg", "A", "Q", "g", "C", "E", "_taskCache", "renderer", "jsContent", "binaryContent", "width", "height", "a", "b", "value", "zstd", "Q", "data", "width", "height", "value", "l", "v1", "_ray", "x", "y", "info", "index", "i", "key", "line", "text", "meta", "matrix", "fileName", "clone", "subobject", "group", "a", "b", "elem", "n", "c", "getMaterial", "name", "token", "text", "size", "l", "index", "g", "b", "bits", "data", "scale", "text", "size", "length", "data", "scale", "IFFParser", "length", "index", "IFFParser", "length", "index", "length", "name", "map", "data", "value", "size", "a", "GeometryParser", "name", "connections", "index", "k", "value", "data", "y", "x", "t", "c", "X", "Y", "Z", "g", "b", "p", "a", "l", "n", "value", "g", "b", "p", "q", "t", "max", "key", "k", "lengths", "length", "partial", "name", "data", "elem", "globalData", "comp", "x", "mask", "effect", "position", "renderer", "width", "flatten", "n", "prng", "seed", "i", "j", "s", "a", "BMMath", "loopOut", "loopIn", "smooth", "time", "matrix", "scale", "rotation", "text", "val", "animationData", "err", "loadAnimation", "ob", "keys", "line", "expressionsPlugin", "index", "first", "searchAnimations", "standalone", "div", "c", "A", "B", "C", "values", "y", "clone", "v1", "l", "transform", "b2", "_p", "equals", "_a", "_b", "frameRate", "size", "sum", "Font", "property", "toWorld", "fromWorld", "fromComp", "len", "content", "wiggle", "velocity", "value", "text", "data", "data", "l", "scale", "frames", "x", "y", "n", "positions", "normals", "data", "values", "data", "text", "value", "index", "key", "materials", "name", "t", "width", "height", "map", "x", "y", "a", "b", "time", "position", "rotation", "values", "q", "c", "ft", "text", "value", "line", "key", "index", "map", "n", "index", "slice", "value", "data", "value", "slice", "k", "index", "y", "x", "length", "max", "data", "_bytes", "u8", "i", "k", "l", "value", "max", "name", "index", "mi", "value", "a", "b", "c", "ia", "l", "text", "line", "data", "v1", "data", "PCDheader", "x", "l", "position", "c", "line", "g", "b", "text", "length", "c", "l", "x", "y", "g", "b", "index", "_color", "text", "data", "property", "line", "n", "l", "name", "geometry", "little_endian", "c", "height", "width", "value", "data", "width", "height", "reject", "x", "y", "value", "reject", "data", "size", "g", "b", "a", "p", "y", "x", "fd", "text", "R", "Q", "X", "C", "n", "A", "l", "I", "Z", "q", "c", "$", "Y", "val", "pa", "oa", "text", "data", "g", "b", "index", "name", "text", "transform", "node", "ShapePath", "l", "data", "i", "q", "x", "y", "a", "b", "index", "clamp", "current", "partial", "length", "n", "scale", "currentTransform", "v1", "te", "A", "B", "C", "t", "t2", "p", "index2", "scanlineMinX", "scanlineMaxX", "width", "position", "joinIsOnLeftSide", "innerSideModified", "points", "data", "scale", "name", "value", "values", "matrix", "inverse", "index", "g", "b", "position", "c", "UTIF", "W", "p", "t", "ak", "Q", "n", "E", "a", "F", "C", "q", "X", "x", "k", "g", "R", "c", "Y", "I", "l", "Z", "e", "N", "A", "$", "b", "y", "B", "V", "data", "bits", "arr_a", "arr_b", "i", "a6", "height", "sum", "b2", "val", "max", "dt", "EOI", "SOS", "sosMarker", "line", "keys", "key", "de", "map", "mi", "a3", "position", "size", "index", "first", "bits", "sum", "dt", "t", "lengths", "val", "length", "clen", "offs", "v1", "x", "y", "b", "a", "c", "t2", "Path", "i", "value", "data", "table", "l", "keys", "k", "subtableMakers", "Parser", "values", "cmap", "p", "g", "post", "name", "scale", "parseGlyph", "buildPath", "parseCFFCharstring", "b2", "b4", "key", "meta", "width", "parse", "code", "charString", "head", "hhea", "maxp", "ltag", "stringOffset", "property", "text", "os2", "glyphCount", "substCount", "tableData", "gsub", "sfnt", "n", "langSysTable", "sub", "transform", "loca", "pi", "div", "check", "Font", "fvar", "gdef", "parseLookup1", "parseLookup2", "parseLookup3", "parseLookup4", "parseLookup5", "parseLookup6", "parseLookup7", "parseLookup8", "gpos", "reject", "err", "scale", "c", "p", "result", "data", "k", "position", "size", "l", "name", "text", "data", "line", "values", "meta", "zip", "buffer", "value", "index", "name", "indices", "a", "b", "c", "index2", "l", "map", "buildMaterial", "group", "data", "id", "x", "y", "size", "_color", "add", "g", "b", "index", "c", "R", "t", "n", "a", "A", "c", "g", "p", "l", "y", "pe", "ln", "F", "Ae", "b", "se", "Q", "te", "Z", "In", "Sn", "Ft", "xe", "ct", "X", "dt", "Ei", "I", "Ti", "yt", "C", "Oi", "Ii", "x", "B", "Pi", "Si", "Ci", "Mi", "Fi", "et", "gt", "$", "de", "Vi", "zi", "Y", "$t", "q", "_a", "Ot", "E", "nt", "text", "data", "l", "tree", "scene", "value", "width", "height", "k", "size", "index", "x", "y", "g", "b", "t", "a", "c", "scale", "flattenData", "index2", "Face", "position", "$", "text", "data", "line", "x", "y", "k", "g", "b", "index", "buffer", "c", "size", "first", "i", "l", "content", "a", "meta", "text", "line", "g", "b", "value", "t", "a", "b", "x", "y", "X", "Y", "Z", "A", "B", "value", "max", "name", "data", "k", "_color", "name", "x", "index", "R", "t", "rotation", "obb", "x", "y", "ra", "matrix", "_v1", "_v2", "_plane", "_sphere", "a", "b", "c", "t2", "x", "y", "position", "v1", "g", "x", "y", "t", "t2", "k", "k2", "t3", "l", "c", "l2", "x2", "y2", "_v1", "n", "velocity", "b2", "va", "p", "x", "y", "renderer", "value", "renderer", "data", "l", "index", "name", "name", "key", "time", "index", "name", "k", "a", "b", "width", "height", "last", "renderer", "ob", "l", "position", "offset", "fromPoint", "toPoint", "x", "y", "size", "_color", "height", "random", "size", "matrix1", "matrix2", "count", "position", "value", "dataArray", "index", "x", "y", "data", "matrix", "index", "indexes", "name", "_cb", "_ab", "name", "t", "index", "a", "b", "c", "Triangle", "position", "k", "n", "v1", "va", "a", "b", "c", "v1", "c2", "map", "height", "scale", "renderer", "size", "l", "uniforms", "invAspect", "resolution", "lerp", "a", "b", "t", "q", "x", "y", "q2", "bits", "c", "err", "val", "size", "value", "index", "size2", "x2", "y2", "index2", "val2", "rotationMatrix", "q", "renderer", "yAxis", "val", "rotationMatrix", "renderer", "rotationMatrix", "visible", "position", "scale", "updateRefractorPlane", "q", "updateVirtualCamera", "renderer", "time", "rotationMatrix", "q", "renderer", "Water", "scale", "renderer", "frameRate", "world", "getShape", "position", "transform", "index", "time", "l", "x", "y", "x2", "y2", "_scale", "world", "_vector", "_quaternion", "_matrix", "position", "index", "velocity", "l", "renderer", "width", "height", "values", "sum", "x", "renderer", "width", "height", "BokehShader", "BokehShader", "renderer", "width", "height", "renderer", "renderer", "scale", "renderer", "renderer", "renderer", "renderer", "size", "index", "width", "height", "renderer", "renderer", "length", "val", "size", "data", "width", "height", "renderer", "size", "data", "x", "y", "width", "height", "key", "renderer", "camera", "width", "height", "renderer", "renderer", "renderer", "width", "height", "x", "y", "renderer", "x", "renderer", "width", "height", "width", "height", "renderer", "width", "height", "renderer", "width", "height", "renderer", "scale", "size", "data", "x", "y", "renderer", "width", "height", "val", "renderer", "width", "height", "renderer", "_JitterVectors", "map", "renderer", "width", "height", "renderer", "_vector", "_a", "_b", "width", "height", "l", "a", "b", "_position", "_quaternion", "_scale", "_matrix", "_matrix2", "width", "height", "value", "matrix", "l", "_face", "_line", "_vector3", "_vector4", "_viewMatrix", "_viewProjectionMatrix", "_frustum", "value", "position", "x", "y", "g", "b", "v1", "a", "c", "l", "t", "line", "SVGRenderer", "_v1", "_v2", "_v3", "_color", "_vector3", "_viewMatrix", "_viewProjectionMatrix", "width", "height", "c", "x", "y", "l", "position", "v1", "find", "width", "height", "x", "y", "l", "pa", "pe", "n", "l", "b", "t", "frames", "time", "name", "max", "value", "name", "position", "x", "y", "oct", "z", "length", "max", "size", "v1", "l", "gosper", "x", "y", "c", "_color", "_matrix", "index", "name", "k", "n", "l", "value", "position", "parent", "width", "height", "x", "y", "renderer", "scale", "name", "time", "clone", "a", "b", "data", "a", "b", "len", "p", "t", "size", "a", "b", "width", "height", "index", "face", "uvs", "renderer", "err", "position", "position", "height", "renderer", "err", "renderer", "err", "supported", "x", "y", "xAxis", "yAxis", "data", "value", "err", "renderer", "time", "_matrix", "_vector", "renderer", "matrix", "width", "height"] +} diff --git a/site/interface/site/node_modules/.vite/deps_temp_94b4cdeb/package.json b/site/interface/site/node_modules/.vite/deps_temp_94b4cdeb/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/site/interface/site/node_modules/.vite/deps_temp_94b4cdeb/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/site/interface/site/node_modules/.vite/deps_temp_9dff8dc6/package.json b/site/interface/site/node_modules/.vite/deps_temp_9dff8dc6/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/site/interface/site/node_modules/.vite/deps_temp_9dff8dc6/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/site/interface/site/node_modules/.vite/deps_temp_c0cfbc28/package.json b/site/interface/site/node_modules/.vite/deps_temp_c0cfbc28/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/site/interface/site/node_modules/.vite/deps_temp_c0cfbc28/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/site/interface/site/node_modules/.vite/deps_temp_ca209d11/package.json b/site/interface/site/node_modules/.vite/deps_temp_ca209d11/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/site/interface/site/node_modules/.vite/deps_temp_ca209d11/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/site/interface/site/node_modules/@esbuild/darwin-arm64/README.md b/site/interface/site/node_modules/@esbuild/darwin-arm64/README.md new file mode 100644 index 0000000..c2c0398 --- /dev/null +++ b/site/interface/site/node_modules/@esbuild/darwin-arm64/README.md @@ -0,0 +1,3 @@ +# esbuild + +This is the macOS ARM 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details. diff --git a/site/interface/site/node_modules/@esbuild/darwin-arm64/bin/esbuild b/site/interface/site/node_modules/@esbuild/darwin-arm64/bin/esbuild new file mode 100755 index 0000000000000000000000000000000000000000..e81b7dab8bc09ef227a751e790e04ecc4aedaa6a GIT binary patch literal 9859426 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

jBi+I}xZwlNJ}k3OnXx;GKb6i) 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%0A+SLCe!|5q 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

  • VkoDxQkcBPwSl;Z(e3xMBGV*1)rxPs$&uF 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 z�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 z z>N67E6KeR%d91fAC@Y!oJX&AD)LE)Nj+BOdA05EK(VEiiFwIKiZ(osK1|(ZeG*}8gWgh}*-sys z;N>*0&IfxY<8I;(TX(JAq#U!V)2qob1MhClMMS#kA9I5F=xPVAwH!Ojyo3B4VYZRe z){g&$&Td8yk96V-9fan+wENRPS-a_YBnRw=4fb*PSQ?6$d@22|^;}&O@&EDr+U|t+ zw4u$R%x{=SneyLK6AfRwRc_mz_>h!k)|F6>$&K~vS&p4~(Tmn%FPc}6H2D(UaldZu zrf%fVecIBT@as0)ub1gpk%+MYcCA)U!=J0+A@scIfBw;Y%4T>CKR4I;4a&RyiF19# zT<4klKXR^{%{6P|SaV)^Cok^Zcr3~ol`^c{ zT$H^38;lthi@EK0oX0&L==wv?iaGwwC;g5Vef1N=e^;TWo{jj0$ zl0N!U7ZSsol-RTD-rkLG5sPod$BC2cIWLqyrIfj&8fZnYAE8g$yhr+zhmA93*I0kR zy-wk;$nJfHwhVYGJN>jz*KhmiA|{4^;`x6eeCtBSS;4*FGx$B=@5AIOpE<9e{wTDr zj(Ag|yuX_FSI_W{X#VC5Jue1T|T$mEgWvm`YS6isqui9$UT$qgEOv68 z=55e7eZGy)x4?!<-?=<&i+rYWQX2n0?(^>lKK}xKOs1YLKg35fAI*H9V(?y}?-%=J zeydmgbzpgc?3DUt$e#@GA4YGv_+j`R&lxpk6+919mU0>5@LcoseLVMa;Q2hm^KhZ% zdDyc&5Boe1!&C7*Txof(`{KDi#Y6oro@+cHo{PV&*pV_Xu_p&vy&YL~c^2?8>pkCZ zjQVvwkjBr&#vksNFV%OeH)_h&@NGQ(K>kl2^kgazAOFZ!{E6tIdDAvO?=3BZ|HZ@* zHs2dsI+yDze*Z7Z+x+>^(kh zg9H24kN7$6%}&!teeyBOmk)CG4bLK0@BH};`I~+Eld%`|MX#PHN=1|1 ztnFJL8K`$JY3SFT>gV6`X-PS>xb)N;|FT~{1~OCuJ;#vcivP>po4`j^-uwS&G6_jo z1O!DzO@^?DOSMIT)FqQdMWn5^(2KYBHVM&+MSp5-E7T={;EHV-wU_?2Et{wr>uu^% zOKocaH>3;I*4yRR%PfHqf)y;gG6m6KbC|V$;6XY=O<8yn9H` z0LO!kb0x4%4R6Yl=fHM(b zabG$+J}?iOF>x86-(jonBtFqa z++r6ok#1rayTgT*Z_&p-{7k>!`-0a`3V&Q{6p1qIs|vnjpXjXd4(y@r*d#l!w>q)q zc4DV=VYBSQ&gz~O?cLp2Q)zHp>+W0oOg?(tQxuy4%ytxH)8p5DFtdAqOFg(Hf!X68 zU0VKVHS#S(k5-SY`~S^B;ZpYf{4AL08b=DsFuZ5fvrBjUxErpHQ{`@?~`pP6Is zFJGUrTQ>Q4($2ptARqc^1AeJy{D(sOUC82`<2-NHG*&R4se$pl92n2%-tTyzUo#$P)h{b=5qz+r2f*iolVaC1p2GvV zw)ER89*+0k)VJaj%wya@xVA->j*3+?k3^_nE*Lz2B`}XdZyv7%CbW?;Qghu;gT}9U zry}+WWAxK2?d)-m8XQYft2%Iht25&40r#yfd$%`-Ab#Ci4`Va_5Alf<@eAebgu$8O z0*aTeF4nqvS-ggOE1|^`*wZQBot(Zcx4m=QU8+fNEB?LgqbSdm^S#*f=YIvAlsW9_ zCPwiRdoaqnoa;n8^5tg||9^h|71N)+!?|v;^b0sQF#&A8owVKg&K-BXNc?0ce$+JD zEejQOUkH4GJF$Y&?iO@?VaW5}6`vp`F=79$cdg@{CdcUxvCp!z3|)<1*D)3y&f1f^ zUg56k+@IdRqMrP<6#CcXB8^2Kqn|f|XKT}neq9~x+JuUI3I@CW-Z!Uc{$gJ!zs&!1j( zr*qvZ+NioNbX|zH^~~EElk5k4(x1G@+Q2{io=Vvqky>|bZXBd2{@jhwEU_@f{nwlC z+VfKs|1sb7`J}m57=M{h>z9h&?Ve8Qp}y-fbe|dyd`3lkzwD#`y)Ewk-p%A|`Q!il zHf7sd#qgoAwPrc&%jtQ#0NXH(A12;DQ8`?5v9++XDoXIFhlaPLz*Q|V0PwfBgEfn# z*ttuwaU1#TP|OD!jS@c?^$*4ePLtqQFd3(q0x{`2=eRGY$n8nh7F61MDfTlc&!imt zxk&Fp2T5W`das=KrgIM&{A7aoo%ZDGenk6}-~)G^`qbE?gOQ=cjY6!KCaSRefPFWy zzwQ}44_;ExO&Ytd1G{cJcAa8cozvVk%P#D?-L*B93FvDVaXv#&-kJpM8=1^Hcv~bo zA~wtyQ?)YayFOg31_!Ra>%pIWjqeW6?5_@;+`K+g=$w(j-mF%e&O{R{ZzreC!SB3! z3$#-}&gMnY-e3Gv`p++WLb1q1Z1Co>u_xGrW#9pPqlK)U^1S4^;%~L`Kb*19I{A9Y zXXV`X>!n(Et>yapp6v3jC6m_>*Q{wC89Tji{|fngqJhVt`ND;bJ+~U)rl_0s$vJkc zcKo)#R~Y+w^u5mX&9lglTz!MvJrQR@OnYeiz)=$T3$KpZLwrVTI=D=LTk-v+jJ<(c zMyg9!!Ma>6wT#X`wub$M)vXtv9BmzZveQ~JKGZshS}W%>#zCyp6#)aq+iZJhsV+14 zHgo`t1Si)PCjSlEx(ZlyVBa^N;H+PHva?>WJby%Vy=091=gU9V{7O;zsyAP}sc7s4 zMa{45a7tcQ>`40LB;aw|2xtA}UcDvOO4eVFt-XYCC^m2_F#*K}6=V4ac@SC~&Ii9G z0r+jerpO6D+OoLX{O*1uGwk*ATw9qTIq}xDuAI2klMV83wFk8d{!PG#ie0(%>c;=O zCW&50_3NB|AA=Z8wd6UnVJZ41iI1f{PUF2;)=GY_$3K~X&2b*_7JqDOBWubvPD$)i zFSa$l+>Nu0hu%j3qw&O1WP^++j-oir_tfUrC0R3oA+S%78Cy}^aZ(;}`_yI={|tN|H+RdRA3w$$SJYkqRm70^W^?<1Fx zvCBGW>sH=d%zHbKS*)ja&x4nYk6MSGY;<}z^6qNhm7R7K?`wVG$31+`g`bd<%DsJ@ zYtt@mn0Da-`Fi!xmF72wd8gn(@ruTsm>cc=d2;`XX5_JCrJfO9Qt)SWA?sF*>vHuq z8yLbP=H4~rqG|lIm3LOqt^FB#cS)f$RbwbX=5Iuvjq0U7o5Q|qo|l|orm-5?%vh1z zL+tPLq2F6H_A+-r&}w9u#+aB9?fo|6D<@~hj8E_a_S!Eex?D;BKVT2CXh!$!GvASJ z=34nB-`4kjy__4L%5!-YUUk8Twbo#iFQgds?a-gr#O}g|Dh6*Q zjAffs(!G)EG`g%4eCx@Z;8x*A#gD9)0=odIZkZ&t`}3=bhpMl3+8m-Wj&;Yl z*y6V~+It*hbHJ~1mo09?hJOmWcY|9K&lE2C{Q-+tz8f4L6t9Kx|1fwRguPV~{~X^H zzh20vm6=wjKYR_aEe0+_u;+ZWQxKp1@yaf2;&+E1(=RI%;8=ExbnO=Oiu?=UOgz0T zuKi&N#u;;M8R}m|AD5m=z$ zglGpo;eD^3lWS|rx3F{hif=Bz1!gv$GTHdQne}tp=ysS>7#ZG39Jzwev@>E_7#ZJ4 z?7UyrV;8LQ=4E6iHl_4P6LHX_?laaTW5#|KE~oX!)fg{vD0iIRJN>+v@7gzy8s9u} z#gDs?k?#)A_Lq{#LhCb~3tdS@S)7D{zx45{4lh^Bv(x2Y=^eeBKu!}EFgT4mRj(Ob zK;N=WYIPsFuIIj`WwkBb$__L927cxzTz=Di;WddI8mIjY@Th4MeUzj08T-TYSMEGb zILy>H6iv31Yass2MTZSz*!P7$y7DY%@15j|Hq|?Oqxzih>~;9G{!5CwL`}qXUc!cH zA|BTa?TcQ^v2S(1;c)1l*vNRrN1Vb1qT?{}kn#MjbixbZ%Q>U@}cI(Zb}xz?fI%8S|jvm{}K*3~M5u*&w;aSY>;GzwQR&5FzXc;pW=6 zy|Dqm6!5Dx_rvioabGrp^kjq8LBRi}ZTnXw;E@#gs-->IY8||%F`put&8HtX2fMy1 zFu(bE=J#u2=-KUhc4r=#2XV4}EVT%*QDjGIyc)maL-GS(#`Zi9+oYQLh;C9`Q%`8w z!$SuxyMz0Sz54~+-;VBtI!3VMTI(j~ zV#97nS5;y2E@lm_L$cJ!j-t5edpz)MFQL}cna~!o1g)=Z;=qQo1g9AGRbYb>UJSJr3ALHaMGe?NhHmM<=AX`gy44a^b zYUF~MBmFfpN9Cw2;jZ{@9Vr1kHXrVD$c^$Ty(I1;!|Mf}} zZyA}f$(o?O7N_@$M&7%W@6fgAQF_eQ0aISS=Ga*8#AI`>1pikfKjuS|S30hIP%PHe zqPiac3puZPRI=;E8(mj8y@R2RU3H2(mBe?`-f^_2bw$Z*L$}aa8r!!68dL2!?XT** zhI_^zQT$Ia&mvc@Y;ygQZfI^-9XjKR9BrUqROhO*kr)>IqJGLkL%Y9$92^!Jy5$>1 z-&ocZ8rD4-e_}Usc_;ej^|?-OWYJ?kDMOc*JA;=^{5yQo#26UoGk=la*YmV+yBi)! zGOje=uM*B@V25(OvzEOY#5y$|jZ5R}pA){2a<`QK=b!V+(2(v6-|CyQ1UbDMxuW&i z9kYSqMHbLvwQQ1qt_>TG?a{J#Zp1K{Ft!6wa;8zEoH_Fxo zhVu3GDLy|}F-c--oke{sly6rwv~bxMeKm@1CpME_K#X(Y_#Wlq>U)P5pSg!T3;Dsy zvq+HJmn0VW>90XI;bG?cr_A?)_$T-j46V(hILia%d04vqJnuWce{Otbm|6c;d}Uwl z@T`3PeT~Dj)}_Bk`z9tkqoCK?JhD-$$2)V-#ZOjv_PBI)B7(hnQ33nF3aGbzL~G(v zX#9up=o5TC4V||X#o9TS!D)74p%aNWHh(NO=LK@&i=3(Z!b7wAy~XyM4)wOMf3T5# zKhho5)RcRRXM=g;yS(Se)x(Rt^H#cqXR_N&de5ZNK=>HU3o-wOBL>^Syj`z~~;cT;E9^rmib&_^}UDDXIm z_$ueDM~c`#Kn>P{In-~t!KGiV<<(I0tcF~6;!5b48pW#DbNy-o`w4Vi%k`#^bGl;R z=b|H4;;&6Ug8B>4mSU6R`JJ`*Gs5g65Iq(E?{`_tmt3*WBp#qG=8z(0rFD+;--c!$ z22b!rg89{OJ&!e~^uy33^t_HUXx1HdYHSDj@ZznV@I&cDXV2v1F|l3HdV;)z4b%&b z+!u*GF{*Ecv8QO~G};-bcBDsnr-*mfC61vT-a)qT&hp4nq1gGnBRMF$*2Y8k@9SG} z0Wx*U!l(<=(jZ`Gh^h!8XU(v5QZ}!Y9u}dy~&bT|Nm9%Hos5?6YGB z@`>{Hhy^pIk+B-h8QjYDDr3xEjNklrrui)tU-y<|L55cJe1mdY6O&^1AKtg3@*j#X zJMnUFKj5!cy}RN&yt5|PdUpF+v2XCs$$@v;dB@00^kouVDS3I(0%*UHIigGQ#aHgc zCimy_MT?`ozxsF0!;WWs%(a)@_=DO#ns)c(lD{qPdd!{F6!rU;=fThG!o;(&4N~ZD z`HSZvU)K@ucoz9OpD{d(zlc9D$JSrDk~p`1tH-}Q0lF6d#Q9YHr#sPe&*G0X^So+z zI9!+UoAD#i!Q!*gT>I^Oe=Y6Hku4L*|JUAstpyUVS&^<%tqyo+M%36|+C#kqIj7&X z#|i(m`(^q&4;%h`Z26Vg-Hp`4Q>@(IkDJ$76#p)~_B`zo8(3cizfOFoRy8;mEMcy~ z)3elGmA@<5FoQOZ=X|cgks4Bj5)-!VaYmYfBf_i&%raX5aW2w=-k5iR~cIo`?K(4s8KjU=cB}`%Gry= zd^8UEH-qS>fHjOd=BXNmT03(0Cb~7~$3v@2$ax6>^ zIGQ@Vd(n#VRW0Q}P zH9lxSdDCfZs&nyYZ^cesR~UZ4rHR6Lt>~r}--U6S`S5%SnmHF5k$*f3xKZ47%%Rc& zal4#!u#o$Hnh`C`(X$>cSh}f#Zc6b5A0eMWbsoEb#YE~na#l$EA!<>I4uxCMr05De zXHF6NVmr30+B`B3ea-aIS4AW@ZB==+^*_K-d;ea5w)&_cYH3TgBL{&)?#EOM-leTU zE^VD89J=FPuUw{Q?0!!-Hg9$5V&(j|kBIerKa>DB07mCmc_+gvjsjH})|AQ;9>UnhJkYx+FZ}ws1izV=N zs<9cL|B37{-#(7Dq1bBKi|ph0&k=nqy0OuAOGaK~Y#Gi_Jf8f)1b8Y#=Lx@SI0sQ{xCwak`t$Jd zMmu{i(B3WRpx*31J|Q+zIfu|e2p(U}^C9F3_C2{FlVae1{StUfd*b0Ov)|stcDep1 zIU;4+V~j0d$e!YGJ9U$J9zAQ!I+6?AE-|n@Wyb(GT9l-aBU8@%0FkⅅHLJ!?tW#{-H*Mw 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 &gImdUig;pG;5Z%tXT#;-QR~}eBdT)lBa_8 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ð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∨(cm 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%0DO_oO_;?&ZyG)REmk({o*9g)5O`QBlCw>I5Q7i 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

    OoEhg`f8&hvs0sHX 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�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

    $WH>|o%bG5au8rVhOJF16(|mVN zhkjere0N=^s1vhUYc^WQLkSH(;E8oT2o0ZI>+k3{70tXEAB5Ou&X(;r zz+aiv&#~Zxv&6zvt^W4uR)5ER_SK!;4p-!)!*#aC;agcuU(F8q+O2jK=fT_ZSy8(< z!{3!=(azTwINh;pGl12i^g16W#w|`hjuZLFJ4;5n@iQ(`ui=dPxRJzpqT`X74804NqkM?fp)XetQj>@ds;N)t8YK z9XzogrTkzS@g#=aFA@6YyFMq5mapFYxA#AS{)du9X>*5{l@@{7Vyh#6)PkcQTL*02 z6(xgl7QpWkKTp;#V4gx2y>H7`^m%$~=HNa%Wqm-u@%CNO7cft+OTQVm0ejXlBcWee z4<+=Q`UUj+tn`bHS#zU4-ijL&`o*qD?DzN=fM?=)Mjri7=9qY=qibw+MWWL#j~oB> ziEyxvNErWbz5qCu2^=@r>JFmo6W7w4gbso2z-VQ`cctDN22J|Gm%0ABb}*a)e0%XU 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

    %iGB4Ya9uL`0y9(E~#<(JnKM3AS44=jtd>ZYH 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 z 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

    PxQ2v^D5_(^mA@Ww3py2blkIj55Hp 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�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

    Y&C*=kK^wMn^*vfMhm_o|DFwmWNmC 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

    lTFeFhFB+<&5aY=VI_BQ;@dp|jJgQLx0@Kh7 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 z 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�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

    ut(H8 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

    F!ecSkL(GLb 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%0AVuoDDB1cC%MsE!sNQYiwe&&%(B; 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

    ZxDs%%b3mF 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

    kK-|G@MR#03~Lc3x<$F%o!ErL3|or>1o5B(x?%= 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'lTG^H3pfw%8U_SWdcdhadeqTJh? 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

    %)< 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

    FQ8nfI-461IjWb!7X^veMu`oLY=2a*| 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

    Zw)wK?%U)mh`!ew*>5XAR zDWf32R)QyJ2qffu^2D+9x&(KA!YBCSBJxBM|0>aFU$f@#1gyxU=jXWad`6FuBgP%$ zj&oPzNa>eKBLAoizzs65j-!=8O*8JIqzQJPRHyNn5DvrcY^p!T!qBB|YvCZQ(CTQP zRgtWYO1^A)Q`zKe(sIxrzq#!4^=aAtrfbqCN51~;jywIYj+{kYjk5U(P8?^54MouN&gVt53dr9k_HS&s)=SHu) zh)7Fvww2FXIhXD(9m8~g#o0f*GCZ64r?YS9(dl7$X4r5f&se3`UuNZME0^o_Me1(V zx*M$AZskU;LwtjGDM=&Z#Bm?_%i3q?3-%RU(>Sae@*X-{IMH%efn#`*Sz`HN#m|;9d~a^GVu0t zkUte%TBs7Qr5fDagikAsC}ZXkv`!3GA2=aMZ68oo&k4e}@f>DRS1QHRL`>9rRxa+N zUaQ|+?>2~8X(-)F=79Q^ansmc?n_O;?v+hSyo5C z0xKvPv2(;(%Gr;i?%7c#IybT`{+JdhItD<>i2OsYAY`6L!f61c6wNkyG`p)WxAo;h zUv~L&hA;Q=WoBG`ikw3Yo|IpX@}z|*_8si2?7vFL4=P;JGzj(G2&+iBEV!`+G(E0k zk^I->1LkNDxd!q>#HOsJ9A*xcTamx1c-4{NSdl(-2fWE4;x~HsCe4{3q?AsS&hX1J z{K|;zWA>I$kKVhIgLp5qr|c!V?QKp??>f7f?B({X-!(_(%8q7-{El`z*&c?-#M>K= z#Ba&=ZoB$*Tgy_}(rl66(rr<%*-3VWznE2;O|rq6GD~L5EZAt`PCLA>J?XNqyvv93 z{}MTSbO1{v<1z#{?12{~zcVbgm@7&YtNDd^bOwit;~3aX{89^y>G`cv-zx+One=$b zKn&wWEB&+!5A@n4Yksdm>Ocn-4-Z9z%M}7;H^!Yf-s?UK^Wyg$7m2GLp;T!tmrBE~ zt4Jt3RZ`{L<4_gLS-4yHiVoDkRTyvLbL7JoD8wd$41-!o$!&7W{1omVH{H@{l}^3! z$4s$mkY^RWqg5$X;Mp(SKsOHetiDKebRmD+^O{?Mh_?~xa0^&bwF@Pg~`et+4&yZH<43EQ>%JnK&fv!+3f{$?AcWiX?_~nxs*| z4Rji!)gx%cTpuptE@B)ZB%Vs&Ws1uS`w&=QUp8CZzR<{dC0N_W2P)Yf%5qr%JF#45 z5k+i}Cw;RGI_SPOStiS)W%5$1ihzj~$h9h4Qldp;;u0YUZdz&g{4H%2CF3Vy8{DcJ z5hq)fO(pz$3sH8xsx&*9-$C6l)_El9{WShk^3Ukv&83&ORaqq@n%GKoipi)bIzjI$ z<+*9&HTSidW%3Wq+g&EZ=W-FtAB!GsLCQgmZxcF8TBWOrw(Od=3X6yE6uv-%JL

  • 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

    #%bZI4#(Jd&lW45Q zO~gug2258K;ymq>PwTP?+-aod7y%t=h%!;OmF%vWbnJ~OhlS`Eaz5xZrbRj(HBSD< zMj`jfAj0k-U?~cI_qI=8$qV21Ic3E?YDPt%dj|pK4%rEl zC5XvIqt#nb?NclRm>N4fj~a;IRbuFCNcEc5G%>UMgIXL17<+L={m~@b)|x5g3i4M> zbLxY0$N~-1T?W*t*2D#BMRv$`>HFu6zJEd5tgX{)XN*2#7LVZGsiQBQp1u@nCw)Z^ zw_OgNhuTxDt^_MSUt#csBjW`9#Fq) z^wyzpc*2k!w+U#@4R;RZg1cZ<5ZhoFi~Rk!F=pRBem8lk#Qr*te-oQu$E}a4ov1aB zkNtd!G(DlNBau8kzU~<`8|IJWYo61Z7sl7T7|UOh==H??BeA)*_0TjP#VE#6%gxEG zEXv&y&HQclc@`9KoD!(ydr(%L2 zn2UYENYrHpO@D^F2(HaxiB4a|kF8tt9dT8J8_>@Lq#kzL8TX1#SGZ9NAuKHu9+M3CM%1Azh`Ly>rvIu!_*uOGr4kbV@|;u41{DM3=s{H(HNlw!bFI2Os~U@T3fhhq5(lHbAXoNT;!|T^WBu+f&XORi zwY9fKXum^3*qp1;=(oXRa~YMh@zu;?p9p&}0q401A=@6^5&MP-mb!_--9;=U6~CbT zEC4po7i4jGXVF|jdIyNMZ2|7SAj~cNI+GYJV3jo<+Qz77Qk=P&2lCO|{q1c2(xe;Qh0rc0{-rhAx zMxZb|In&fVWG0)=)|_VcBcrc<46#qm&v00B)S*xq5^jSD)>Lp|L%uyX8{Gu1==$}V z-GN+8wy+1%ix4kDgsn8hl=_1wN-e?niaPJRCwO=YyMf3$_eckYBzkq($6WY(Cr`NW zaVO8X@M%X1pMJiGwSLn}S(TCE>C&$vDRoU|El~mkf*D&azvQd&ou?KeWDUjOsHEJa zc~gB*uHaMYnISGg=LT|ZUkry-%obIMpwk_RkWP0+%bDOSW4}E#cJ!OEqvs_dwO=+k z!=(EwnRe-uZW%jT3yIZ)0sF)C{qM$pd2#G$rA=y0)ogHieg6%FLg{lJ96S2e*wJ%i zM_?S;4;36T0ByMn(jeN6x8tH?m3z}kCfIhVb&(z`&#J#G{#Fb3(_D0c5eyi_e8I?7 z#(fPTJ&Ay>!!8mIc%2cd0oU zNJ1ezJ&XLZ$GK)}Gs=qaL^LUIWP+y8cLX2-N5PGFRw%EHu+eu08WaAiC_;2%qHR(S zJUXSr*H5s${@R$tTts%@821%zh@Dahz^G)p)@6*AYA>qGP8d9>n2id)bc2!U(L9-N zhh)gjcYlNSwtRg_y6v;Z;ypIsoT1{5myCTCKF6M8{cmJgS8HgWoT}afWP;T6uuk`* z_4;1Oa@Z{T$Tx~3{pXubCiqw_U<^ss5$AB!X9n#+IPB~6j%lF+3BMdJhbjor5|cSx zjwlANyXXaDUeufJbO>;)n)=GOt$o0{KU%ZIO+YT*AP-t{BBrC|ecowXH5~yJ2y|=D z^9Z^EvP>NYq25Lt$PbMy^C^tlBkgO+_9; z?KJ-?Uc$WNccNYK>Jrv-WFOpm1Kf*>J3OK<1$U3Wz_^=SbhC^8Vxw2BYp#>l`tYSZ zT=6#ums*lS>pv8v`aSi(3h93|kERQrWg75zmV?qBR$Isa*x&4Er?SfL@Ym_E7Us>U zc7X)cW;)kya&m){M;%jqn%|Zv4ZxIFAh_4j-ToGZ`8WO16RnV;;d(Oxys_RSzWlf^ z%{l@^AfCi>i%nGo9}iYW!1F|z8h$I3^F!tJhwwgOx+8ipq+8uH{I-+Nps!}STp!AO zb1Sm^$S&}g%x4)a%2s$CEn-$Ni#;?dnA2RbiAz z!&V>ONldW!0MuAi=n$*StP8|2X!?{RjNRAxa-fZMPzeQYMFK5wG799vLYIeLWLs&U^GwkTRloumWfSQM&d1J~XQWu97+)VUL6$&E;1$jB z4O$9iL#@X*6%vJ}s@+pd+SEQ?$S+tUr2~Qv1Mny0OOJo$mOd3N`QUgRPMGh*R{1C< zpDqnY$$R| zhMjF^F=rL>CKQz|NsW5il~TYKm=09BQZ3xk5d<#+fArQrLo-kAR&UL7A~`<_zaE>r zaY)exj(^w3<|wGn2^zx1qk|ttwz>XgYGw-?i6q#6RVNdUU+TyQp`p*3h+Hg>OvjIQ z`e8=eRUoul+Wn+}G^b(sxd!JW+oKb$yD5@eB6nxZ;B<$#;RR8j0P1n6${>&8plb2F z(wh~;SolT#pxl^?oLXk-=IVPp?pW(|(>mRd6C4te@bdCR(*`1mcoI!SL{4S?g={<= zf0{qTujn~G2+9HFqy6gb0&AI_pxPlz3ZQchsNp9jI1dapJ$NI1?0?1bFt*bA&p-70 zR(?#o-}FclbNU-+@HuOx$#e75d^uOMVz&&D3H9(`W{Q;nc;5ri!6tK!gjb`nQ5s4| z5U&Y3o>wxMV`bvDfI{XPE{d>=$4e~;w&eC5m3ammFd84z1gxPPt}AEwU$O=Vt(I3M z_;?EwsMmDEv2-<%ijH-Q1ocz!D6DI3W-qh1?3<)kNOdM{d(cRgddOoEpk0!L*#X9{{+<>odz*oKYz)fB?GB8V1>Gb1=iq5p)M8| zTe)B7!1r{<@C^Bw{kXpIOee?ibz|*$&dPVJw&EYooI%U2-l=zdN=~+)+T0y)5T?M& zQb?pk_LHS*FCYiVK}7a~-v5J- zdc-5b3q>vvOSzdxJg+E9Z#a`n#cKJ^pZ=;9eA{TW-gKkLSH)6p=BEF)!f+e~>9hrq za0EzZq{5oyZi|>5RN({o_w_NK=4_NQ;tnfK&&T?`tpBi1bv9&9^+>19JKb}y0SoIW@<*qO`{n33(u@roC*pX(zYARB9uT=-EahfC z=x!@NH`*ool50e+7E8IAn;27Axo?OZiu=?OB||x8irdFF+ksa?ouHf^oAFPo$VmRK zf@A)NqPL5s+{{f6fv}A9%10T4kI6|eg@bZDdw9G> zPs;yl_C3X#s_!)6J?d&=DL3=dwO~7cM+2R@nQLEXnX;HS+(7sX1CI0yH~<=k@&VWj zs49DfQo!@bMD7>d5190cNcOO&Q#W};ihK|D5_W?#Z>TvX%1+{GRMhec=8|Vn^R@IT zAXR9Av4^mj?T&($d5a&_Z>{`}$I@M`W`DaM#u$IHP!{%Ru>A{GK-VVsO1-8_{$hnC z#^heB*I>SatF_krt6noA8?1o5P40A;K8Fu{z}ac?G#_Li9_^eTSvfvkz2S;6d95!L z=?Z=`d~v5~hNJ<%-X`W%rZ0ASJQb>eNmHxbp)V5;}UBxf+DG*d_?4DB9H<% zS~+YK;}~!-+8A?$y$Kntzv-3)3IIe3$nT;^NSj>RB;m+vuGiCJcP?2viR zBmF~lIe=jS1GYf?b2m*SkdrDy(bK>WsTM`0a89=J`Wi4aZD-s(gO)OB%BXcv4VfoH z>~VKSHm7y5?1lA-O52Rtl0DQFt{c1v$V3Iun7U>`-41D8G*JI#8NaJ=ya%x8@^V95 z(z%1T;?Gqz1ow$x>0|Q~s8jB1_9e$K6IFaicn3@cLI`f@p)veSogk*y=sP)X%x|)3 zLa3GbWtM5o%*NlYD_=F!1`5NuA+PXq z<~n>if6cPwg-%e@1`+pcsIir{*_SJoG+Sv8^W`m^v;-}0*x+YT$z)EFkH*TNIrIZW z4kBWbD?*BMl(=2&c82hnM89ii%uQhlau+ouSi;b6!N9pTgN?ahALzTRFqfkpWJjxY zvt(;?oWXk+XUK`s2LWXWdn7SxYr>q5t0&4yrd&By%xUyuRI$^L+AgL`fiU=ZcnlPL zz0w11eURd{5G;JtTz;+W;M}2ZtrVea0GR+qovzL6-90zvmmF04TIgNWjkFZ~4*yteu;?}l$le>q%#;ltCnzh4gIHT;98 z;UB+%aecc^fUCSzO*?ow)1{m3aJC8;sGZSd6VgXkX0T0UL$*dAsm&JSKkQD#;PQC0 zlg5itmikrgpS9Az25!G&cJK}TE}p9zK^7~I2mv?j6uhuk-=`LH%C&++Ra7yI*da&A zo$pD~lp*p>75_DWHTKIHM7QlhA=dz=DWFr}utGPtshGKOzYR56+4z0&yKBaN zE>$y1!(y7598S_H5F!U>)zBa_=6DrG0*d^V6!RP=hvJ}FqAZ$B7Pd4zfvK!g*7w31 zQzs{YB(UbUn8WeZUu}HqqZUh2jU$JSlP@{eoWSC2J{{UKLp(^(63(fcW#~W|;u0X9 zVm$azzb51n5R4vS#0*U6d{Q~19;*?ycrOn%jsuISnHg67?B}pX``|$<#mzN6#Jg$C z02bxkJT$PpGJ_W6OTbVc*B<7t7dal89A-6EgRKd|c72{UNV8Sg7WA{XeP52)CL8meG!MM0o5#<5DpgkDld6Yzd)weQDVptzA z7JtP{R0yE~5&tAY`3EUIixDRA75;)9tT{g8@N8R9;H5m$&I1`o-g^jnSOY9b9SAn0>gwJ1={#zKWbz;;Mc zv1ED)Oou9~aIhKh1D6h93CtT3W=od`WL~w#H8ojVo8`-25e=M^WKFFhm^&SOMb|Tl zbljc1W`cWh736zyJ!a9s8#(%gbHC&!n_Wy`kEl3jl9?P8 zleu<|iYn;1qJ#1SfDj%RkoFeP3g82>li9ho+cts;v`eB4T6~@E^n`|KE~2;~aFgDJ zKL)C_Dq4O18qGF78n8#B0HX#IoS+?nOdIILta@YVWp>e#0MA5k@i32-Gz->Jttndj zAXtLTZ<*N=&>zGcw;Fyh3=skHd^KTL1?Ba0{9E*lBH9)&19iSkL(dfbap+4kTDAo9 zXAOiZ9>-YN47LQHD%LD37Wfok#-pJr>!N#H_$_DdagLIIKn2G03@ez54s5jdI`ebq z2?S%7&_x<+8DN=&9320C3~CK?kX4}5E&@WZ-q9cziav+wAwTeiBi9sUZQ*;ehR>US z@}zL`&_LVZ(X^@|ctGkHd8S9V8s=mUU5>qFH?iYTDfX6~9Uwp%&sKGP3Ma%YGH6W4 zQ0VP^kDs2)(pjSE5+G+6vG&d}nc`$K2}h2(su4oYMGaP<%k1ZzJIjq5&jO2*&JH4z z@N^x6M$Xk$>m-lU_~FPu+r9nB&!?q@M?n9(kaAb|NYu+N9b zU!+!n3I!%Qx#ICn-n-7quI7{G_=Xc02j-$Z3shq-bMAg(T|hsi)1e5GIf*Wtr^7~9 z=GklXOX&T*u#9QMCgux56v!}1V!sZcU7_pxX@z5};$N!MQI89t8Fh}*gH0el&HjCsF3J+{a! zbqi1)g)#SLutij+=1jV59)0WS6B?uF@@J4xXeZ7vYeHEY9?M2tEz~RkAyU8}@d6(2lk?18BJ0Qpvmde)5x12c~HfB(E zWqI6MmLeryB74Hrm1t@eF+npSk5p7K!)7x;EdD13TdiFnktki? zjp&kspKVHi%r^+iebB0N1SI;daNndulcy*VADWlwI(5iqp+Zi8v-KiKQ&p6$m-nvI zBpL1N&;@o~EWvetC1UhILyYR6G~!-@*=m8st_gPqAp#K5F;v&z!GaM&hAZD4!U~jg zg!9h8G!gKo<@d~V;WQ9_dLS02U|kH6G_G!9<@NJ(2<>H z2h211ouIg=YBP43YEZdBzh(L=PfM+m#-MxW;7Z~HX>dl6N>pKask<+>^U!7<2DG<9 zC2GBi*OxDsb!Ay!ejxI@oqhRkUmmfp+!A!3t(X-*`5H^6-&|ZyPQ{doZ1U-*2FUc) zxNYOb{u%UxpX}4>G{|1>tYNQ1W{bzkghz z&EuiuW2VKege1 zV^uDX*zjk%|GDk~5ai86@mpTK~AW69S)X+!i`X_K&z0>6zl>PB2P`(m1P zwE5szQ;sno8aqDLe5g|2Xx<3Tdmm93#4R;jV_Fg+Ee+3P2FO`1JX`lf(mYr9=jmRe zd0Fn*0Rtd?Jt0`oT7vj=g+eekm8d;(q4uDjE!4BS`Dn%f<5|W)orPGKs-`!oVqOKN zKzOPGxNEF@)!KVSz76tFY+e7mS>{vopVxiG%9p{rV^{eg^~Rhk+0$fpBj$Fa80k}K z$3O-0K*|-q)IiqV0D=bUpgGiMSt79yWYZpS<|tpAQjS$UR(RUvDy1`Z)2kQxt2bV! z0-4YI2m9O7S8p};nDm@*8uiDf=kNNDbLhYnH~Lv|0q{xT_SUuH@eu*8-b zeC+s^f^6?*VNf~)0l^Gu3)_>y*hd#J?ldeO`sqHVkbO*Ho3MfebqcW*$Alhqdn!q7 z3Sl`Urbk$Dx_EB75onmuYmKHQY!2JP*07`0{;+g~ogpsDVQ<(2V(Pn-t^^t_Th-2| zIZP`y+}H=R13M{pl&LCKJ0$hv;;8MErl9*FA;(Cu3j%|G2o*5zvhon%f!ng?K%jg2 zc+7Ot7r0NmLIh*!NCD&;>$vK+x~p}+`y^(ebx~5UqHhxR|?tJ5S zucc>?q`LuMH^G-ZzHIkpuP^(?l|M{x*xpy|?922x>yPL7a;h)q`f~mnTG{J40{-AD#35=+aKOF?g+s@Ms0Z4%Wm}Q%iG_H!39gGl=1!KfCaH0o+Fv{KWzD<5 zu`{g+%U2 zD9ye4l#6KJ+dhCuE;Q0)Nr!N&%5Uy=xjSii!^I#>*c*L|Z*Q3=A;9cbr$J0Le2G)a zpG}C7%im4z>b%^DDF(CuYZ-eBJdrHUdL;}XH$!oSLJ)gXZNu1K_Z_N&A#@DJj@4QG z_WeX2!YHQN4ClD2eT+qGViM|q8rtBu?Yv?i}gh;s3t zx(4K~cjguyFwZ2xt?~ys{`IW6OZD=m%9m*!ANixKdDz!!ErfV_<}#|$ z5HWoVy*XRFq7FTkxc8-5z);8@gxcu>(; zGH3o_v#;A+`#2#*>PMR*$nm9LZ8l-6{Won=lcLUE{eF)F)i!Xp3f5HX@gF793u@Fz zXS4({j~%D=gqZn{nzSAQ=q>AewO-%tNu*9~M;+C_^Oq2tk}K2JrzODnA2n&cH^JWI z%Cx?&_2C}cl;_4HVabN)Eh2Bl@m*QnLneF_F9n(oWg@LcW7TKNe}MNL8# zO{wp9tnU}HKM%_mB?V_e#(f0MNDk%CZwcF`2f6P{QRiSs<%rr$rS95ehwaQn_cLjW zI~%)!(oUo^Zjkws^G72brF8@Ky2Q=w{#f6H{+7N;LC{lQS+GCz_HBNN_~MGbue94**J|6Q6ho0<~dleJY;4H{;W9j)Xec{_3V^zsz2 zwKez$1>G?(B3LJ1WaJ*}44F1gv4w94AS++YBJOFH zvs7AZPmv#M^f*;c-k)`AnNxKeZ%`xy3%o};_Ue{{(1Wm-+A2>zfkb`(Yg_1cg&6%~ z-<;4O7NT?=vP8j)2>n52usScF&&lU<@<h6q++lz&&D0Q=?NsOPPY=F#c>!F_r2O3tj*2z!u@EX|`wD6;BxRTKxj zhcHQjc54Q@4kv6RIqDz0T9%LFT3TV8CV?~?gXi-_JaXY(?vKL<(C~&5sRM@wuo0pt z@vivM*xVS`DFr3=230x^jX=tP9E%jcL?jk0x?c5R)R?P`qX(W=1)dP#S&gh-84O)y zaoSY1lddh`U(VI66vkRdAd6TE8Iuwn?#eU}RD%x$6|Hf7LHA-fo7z+}C9}{ha6})} z?HLn%qtJ@P5k+hbU5%=0n|H`xJwB?l8_yxt!_wf+yt$iC#}N0| zS#vsuT?O+<)_mI9-}r;Gto>bq_7d}_bbvWbLRPl}%|Qh=jt({$pqfKCI@BCiV9Uj( z$Aj{Bvmvf*-_B<5<+CcTGLcu&J~S|jl8oG%4e!XB>$BM#{O_fOm4mr%M+WxLKJ6H0 z5xsK?S0}2kKpdgc6C4jV*(-O2oe_$yAn1ihm_}pv|2q5IUY7) zmFH`Y&quju8ZXHs5r;;BJEmO_vNW<_=u2C zm+_JN)DA@4w2wvqTUMup=4czcEoT3D6v}wZR-~B)!Op_;qQpE=Zvnp2gf)7pwTAj` zgb5Kx%ai%JIYr{0DVL=F1^l7ZL*K804s^`ka}cboPE*Rm4b;ph=p{%aFs&{!CH1fl zd7ln|Qqk(73BjL1O4^LG+UU@rWd>&qBg|?|EjGAmAGRhQq=p7Cu~;>LAiW?=!McG7 ztLjD7tPQh=91Ma5ga@2pusxt<)6jO#tK`YJphL9;6)jQTOs2K9W1_YCZp}pVI4I+O zWX5u>w(t|)$u)Iv?OtVYId`k@z-Up^UQ0+t4TlEGCOHjSxvXtv*&`v7iB3wG)T+&5AFYn8E3@~y4H;RP z4Sks&-z)xP+i^dnKR0g3Zmpsz!A~|04PGfZ<##sE-182L^6U1MaaBJL%e1X3&(bM;JeS|JRVNb4WV?*PPzu+ zAJc|9S&w|gY@ARg8BCws(IG?51G>v$?dPKLTd9)>ygl3PK}6}rF@a)jYxW`fC9Wk~ z^}Ah6VI$yTX^TFR|Ay1cNIjI8K8l0Z|D2U}fO>Fj->IaenBjf9L{K zAMI(QON4)^Ml&R1Rfn_MorpWyYM1fl4!%6xm-~#XCuLtH7@SAghQE*om*>!n@1}sK zmwltCI4C1@W(oyayBLeN8*D@#jK-~w%b7DUvn zzQ4^-1vR@hkX3Bx##K-uS-}^=DH9FuYxbv;vaUji&;!P)DCUBLh%N+fQWL2*CO8WN za;YsCv|b>Fj_k*73mj?YhHXhf_9i`7!EAxAJx@`8;A8pu%M7W8<>DI+WW$gr8xY*4 z;@h#Zd$cAW3~ocli&}7rD%bEtfJ+115HXN4m%p~c+I%(%zmIGS@xv5MBnSrz!X1fO zjg;&^I0&|Z7(>0_UzpM<^Ofd`ZAvMKeIZ3?Zj;KO zbr>^5hsen4OwN}>zWna^s^iA}oL2*XRQK>#0;iW|W3Bv2X%ZR7mcad z{l+n>Rar)xG$NEzf<+)vQ*KA*WX>5W2Z2aOGy!9Wfu*)h8KhRXGdFGPYHyh_GzFWB1kIk=9DN;r*~REo?*e{a)<5*+zmJ zG?tDU0Besa@y3ifjYFKSSU)gEx=0f}@^qGILUt6fn$~j$&bqGj*bCuEd0WPMS$`|5 z-zC9W2=+dqA{XdhyP`VeDclqp?!pJE12A5vsLU(gut4_%;ExcSA)Sr}I@!~~O{llG zGt10ENU&{lJVhz2^H@|{Q6;^fIorZERNwE#zMG9$5(w4~^AfJhQ<2!`?V84xU}Qnn z)&AmwUxG2aRcLgcaToG7jM8CPb%~T2)vLt2Zq5MXPnQ`*GfjIJNwm@&#B(Cm1n?8h z?u2?(tIDXWjEbifs+g!1t`nsWF#;eXNN3^~^t&X!Q*{AqAOopX%#tXMv=!z?X{YQl zcZucq0&n=Ckss;DlU0&ki20yefvD`Bw&5RXp-irmc3%?tu59odJk~r2Fth0V7uGWw zjO6%y^+#!Ci*vIucQ;=)=PFJf0HGM-(m_mh{ zqUKy4GE?}}fMj}4fwYP-o0D1W=jd!>WB5~9IhLZBm}!vKeq6kkn1ykeZ81j^s2_A} zD!GC3F=l?)M?#wtvB78)VCBAoyW;{LVeI|boHFBjSYg|Jd@IkpM_c=I{mn+jP#vq* zM@{QAee!S9T*)6>7Zrk$gNJc-Tu|tfon@%KIc#ZUo5a@D9Jf?`ZA+iQq$fryZ2CKb zvk?c-RmeODd4iG}G8$<>Q8@(g76gH6TTwUK$5|}wGlZg2G!r2QRy$}#4@$PNK#{Kz z_sZSET}hI%Pq=puN)UUWP>wbqNla#WxQy84$0PiWqQxMS*c{8iGdK~}#8#eR7`1EB zI4NIJL>QaM)5bifq_$d=H3{Z*C2!ltcM)d@lKK+Vt( zoHby1+=;He0(-$%@6T%*qGe__f0-Q7u*kl0DtT9Ay*t{M$+$ARj!+sSXPAM^;6*0* zWvE8GI^_tZ;6IVrQY;$BBM8wc!wRZ0;&vRj#(%T5*hT1Vdhyhf$Gl30tdkj$j%gG(C{u1cZS$b z5QhYjk!EO6LnE7QhLyt56uvsM6D?HUKf5TiZKmq80__V(YTS@frVWi79GKdAWr48M zMGgVgHJD>yylQ3=AH%iEWPKLa9aeY~ zF*Oro>r47u{oeM!rWP%BIV) znfW6y6(GHS#(^vHvkq|Ymc8SHbRn-Ej}god1&=PE_hd{B>{^jOLdmd?*I*w9Gt2;E zdEJgQv<+OSwr1`1tEMycP58A42V?r~)I?583}@i~(+CVVc2NhRm3cn%VZfx1pN20@z5p~1lmpCtx^hIOocn})QYklj|v=yDEmY|(S8bde{cWP`` z#`dKcv^#;G@OL8sWB!8A$nTQ|0m5Y5PG$&nieuP;V8iOli9sOv3%X|XEHS_JMuAD3 zX9nQQqTCXwGa)Pw`yxWb#`hv1(3%D`;UCuVwrp6Bm=6g1}PGP4|3@&NO0ojtT( zgQUc9TfE;m8y*#L=rY?+gAzn6ngdwnBr(T)1;4dJ32AV%0kDyZIJ!7jvoN(fKUE-= z7EpNzC(LJ-Cfx&&UZp8Ag*siwflxqCje^wkJY*d&a_(g#Ra=4~8Hj489G9~*GGV^k z>}CqY-=18G$|aJi6J9@RSV#ig!%bYRG{uc&#$qX3W6KbDsoyN>@jhDr6Gk^lP9|jPw-y869JW60B|`?AskScimI% z6pL1Y@0!JwHQ`!2yhdYuM!szJWm?lYuD;-pGrkPhz_iOCo|5_T@JI;sL zw*;@NRdoaandlK0{tU^NLIq*9^YH{QZe*@c?3o#NXgrto{;w|lTm6dYHJAB23KNW8 zpg5xo!tg@H?~!~yYcGM_;{IunUM4p;BK|~~#T$#Y)DqIFBHkSj6ni-i-mP4yI{jhx zO|FebBiH!>4-b8YJ)3@EaCRyKdvId~2XuqG$JO~Y^bgM2s ztf*#$k+uC?@4hUi6Fk6jGjO@6nW&gSHj$OfYZedc%6t_sZMH)=1^M&>K0NvKBD zgrKxfilQbDwasuDuyZUp%|8+IFjKDh0|7}k|3ECL64jBuqr@Lq!M)2D^XAHYd_~?| zmd`ZH{r)Nq`|H(45Nvm1mWK89z$Vf}wL9qINzJrL?YCI!*}7pgEVIEOW6*Pz@+hpq zc#IwS=(FR_y19Cg`4mDFgiKncwRO_6vVss<{W=)DfoLkCkJmzVWx+<);NBlUTFLecAqOpZTC16TS-% z0oFAZzdqMrVnuB4>t}rfp4sk0?$rOT;DKBR8th!npt$i-UoHn}LEHKvH8-I_;rmMv z5M}1yzrE59YI2JFA|uBNPBQW#zUZ6k;C~&0i7Xe+#OWam#$RCmMf%j7U6Un?&PsGV zNVV_x8W}L~@p7-e2UFDcOqGM~MkTOx?RU$XKpJtYD^#obM_RFlhGi%po+xN3e zh}QJ|oc&d<1f!r5%sOnm#~kkLlzjVNbMD{S@(G#9PO{4^h}(5e+em@j2c&^&Lo-!* z6&*|0Ja*(qa@?6_*MP4AGpgC-G?}VcabE`%PGP_fz*Q@OqUGs{Yqob|&|&AQ(Xz)z zq3Zp0ZjAjkW>sJ4F`>ShKQx3a#X4{FtWRtS*;NW(GNXMq(1xn4evSg5ewSMI^o||t zog4oSCK~`TG-bP?nMe%7`>-@)_by~QE2U3GzwVSI7*Sd$_SBAwSHr%L<0SZVKKgQA zZpg=vhwh2cJRZj9AH;hF;j~K zExdBAOjc)|k;TF5$kcfRlen&cK?;*k;|Cj~xoqgy0;X}LkSL>=nQrH;Odli^MkyG% z&IA`@R!1LU?=g)eHsgUzQkVPixNlIw@Sc37vN16m5-k`OJx2S+x0xVlq2mxZ zuw@x8{o6AfNVX~Ql*C=e1yBR@DeVVB5@15HhXFq53J)i`SSY+GwVdfU|Btix0JE#A z8o%$_d!Kgu+I-*+T77`!(|M;(i!fG1HyU`LZ2e;j za(uy_S}=`L3m ziUO5m@Z2n&Zljh}PF1|vl{JKuIyb@(lxf68KgwOE)wAG-m&RBK2^gt6E@m$rN}%Yo zz`=lD)1RlMmLnR|ojI)pw>p&N`IKHZE3kk>Va&)M^7id~@QN0u5bTX2ss5Y~QyFs^ z2-z*G3ebRM`CZ<=k#{c+r~IH8kM}Bk#_Y^q4*2f{s;fg3o~j{)jy&Pl@g^0(OY!Sk z-CB)qCb$pmk$z%W>3evZ=mlVN`gCe%y6o5CsB|w5d+ON@8|=07ttA}4oYPy z_RK3erlcv~=LPYSG{X~$WOj{arp`>ss$h>NkYAC3k#`D)EU+joaqxRg(eh;zD+2Bl zgg4)#f~XL3gA`Hq>|lXehr+XYyb*Ns;-*IH-9JM3W905yd1 zq>8K>pi@P$O2S1flDaG4E!{q5XZ8?q8YCYLFwyv4V<5w6z|&V9@lf&yE zw3B*+g@24CMLfFNrXtS4DG>=-Gj1|k@kDHltOwB=1nh*Qf>QbK8fyXm~qI|VFM zhnP4eyo16gCTB?+Gq^2PD6NOCK{f~0+m3QSwkPhEqWpxFhZk766BRlNysu~;D9X=@ z@<@?+4#fhlP2^`Z8hGi|SB&PU_`v8K9XY;=ZH(hfUCY74MR_dE@#&&@p(xK6<)xz2 z9F?ECc8)v_mYK>@gWKF^#s8R5=k`(8ZYgfK*SiR~;ziH32(BcvMI#5R&|5=beMNey zsB&oOEBG5`#=&xw{Q*3Rtm(tbxf>(mS+coBs|;>b{S9czWSra2(tA`zduZ%}0pKWmMkTGJrN&EjR+K+Qgkc9MHk}-9yb&Rlv*sOW`3r&KB0ddg(4T z!=0}tLIv9e%L_Bhlw$$5%pf0|!kA4L<0tVk%FtaCK{LWHTVSIk)*P|`?Ah>H4xdBy z^4F(i1xu-X2lPA4Oe(bp9W8ij4l^2C%!Jnj!S$FX`ueiH!gIPLFxLm@>uWVT0rB2& zQ8jxiY>1F4nm0NH>Z4U9CCd6n+83=DYFj=eD~1-eEFa2eCbhQPj<7x3(a}EGk#FyZ z;EFnIdl$d9BWX`MzR5A3WB2y)9gU>fi|br_8Q~qOSN!U+CC>&qzQp^_aZKkrsi&F6 zcS9W58u5+o$c}oaX$C%VKeK&z>M=n1j`V%?UrU{|Zu*H*jbjhTF6NM`<1T%zCiyS?KNqYZpnVgh})v zVAo>dW1;@z4tz1Qj^^vS`$SuSP>Dkk~2P4J81@_3$j zf@)&Q@i&|Nl_yl0S)qhqVTpbi{@tltY-8^C*`#-;fwWmyTryJE!hm_)nCFcfY0mW! zxahluxU^Zj!7GeiZq_s#?a~(!)PZqlr<&|VL2_Y`yC^8rGZzK)PkNo6<>%U0mMA6_ z1fW2@ML}{V^VeUW93=Qel3v(8CQyM%vjJ3DUe_CDq8lRCilbQ5J> zF0?PY(1Nct2)oD$fDqu>NiYpU|HPQGJh zc(Brh?^^qg&W`#_TPSiQ_Ec`|N%F3?8&OZY{>6tqOr652Yc>k}l+{U-h5>`nn2y@rgA(2*wpVU5@v{k`kW%njciB3&(V_W^}_Px52&RkEqTP@+Rito+AQrvP}GIo#%I$s*9 zr<(A&N%gDA)2Ag)M3M+P3k#sI(7@aYTO)cK4WHPw@hXyTbH*o zTbkL)-13}(ZIf-1?aSMlZOt~xj^!O@?yRXh;8OT}cF*sj_ss~hY0Kx#9(b(hzOoPU zIN^R@^4!nvorCLL{haJ=(bO^Ckh^%09BdED9hMy0_{HQ4+kZ)OY4y3%+Q1y%c%(jQ zA1>#A%#rqp%J=jcwf}zi59{qXs(S&$7D(ICVio{@wD88`MD2eKJEJ`rf|5^85|jbc zw+*KXNTWV&I8(CcN^*`Q=Svy*c`kncWrwqYG3)r#_(3R@`8Oq**?WN`Kaz%vB)L!q zE|KJ7$t@97vD81<#j*gMTnnf~^v}Tp)<5U8hQbQ*M1(-A+Up6)22dyW&%0QstX!OgXE3`bm1%7hQY3f}u!ba`2nw~O;C`$1gV zY+DE;oJ0QCZgwsqfHr!UFE_!JS4lof=lZKKnm-%HRe&4;lR-{t%uEe3>+U6>9L|`6 zd-E!3gGstc|G)xx>#$4+mrL4 zWdiBiRH!YRv*^4plTO!5yyZ@u4IFB^i2gBvukJ#r9gTxdGp=za?WfEfl-mU40gu7? zc~2Rn;Dr$AW}f;Mf<-zD35l2OmNQfK&D;y=PW$+V8G)%B-BiGs*4yVIg;cZ!j+a(i zvNoaT1DHMf2`w|gwaQG$2g`!%ooEHn<=Q5art?QJ|Q63yy?ocsShsyG3og17-414jgcVOZfhgFn24n zF1(BB#oEzDgqRTK`B%VkYEFfqA%od22w+(woruIH;kE~PKT1VRZuUZ5P56kgrW3Cm zDzOWj;y-}3B6tQq5MMV3LqPSRK&?T}z)ko9hbNxt$Y<@bB151=5ibLvhz-FcLQ_3j zfHKIBIqOsf!1%BFOnX=Ti%vAoH2sZPcxg{(?K7}tMlHBAbA$)%#G${gSF(WoXP>0< zsy_txnT4eslLGt?b*y)_c2 z;)-c`xY$9-AfOxbXy>SE9q;PjsH>bI4mEimBHjA+>js8J@gtNJ$Pc*#9&%u(xUd%y zZq@XoV^}J=N_y9qj4kxG;gqYbV#c>$BwaCLnkjHGt7FFuG_qZH;*zA1Sg}3H4ECl@ z)1Mm}I}2|)bPjwVrb8qru!p;c;My?5mDh|TXS+O- z7139gN8OnzRn~jlYx*9LPWX^9Y8;)W>jIm(JE*=C%j1}DC_0Z8I(>^LEAs&{4*c9v z?F8Z>LjUrvE!Bo_?uS-gpM4)ias}B{yqM*2rbV?HAWL&d6PX&OyeUrm4#QQFR^P>c zhs#AR5kp;-mycqZpP1D=(yzux=u05%mq{>(<9^yVgm^A&R~sAsh`Fuvs+dLlfp9cs zZNkJxl@Bnkbth5;U>aUH;dlg)_2uzx+uOZnt|EwrHV4mT-lz{h93O)BD*qUX37e3L zk|t5)7z8U>x~Rk^f#{yH71t&>HRV|qC98FoT0X7E%0|xVdeKqsr2KI*5m8qe(QkKa z(lHLXcq1DJXzo~Qp*F++0EEMRR_`D70k7z+*Z~b>FqB(3z-nG1+xW9v3=46}v66XT z)z*ptT6V(bva)IwEU|F_d7NqR-?NrOG@#RPD9Yj_e3`Fpj#gAS6yHsSaZG&-OhCr4 z7sSfmq#R3yU@&Jf#@y3yUOQ^MyD58R&WIZD)5MI!7EMb;#e^_b^w#j~%Q97Tsex~> z+?bRo*a8XrFpFD-zcXkOb-f4s45so5d*pH}E38?L65h>`iqF+1K{pp9_+IHgLb{`) z(G}WuoA_8Y>KqOFp26CguA&4Mq(WBLkMbd_jWChs%d|-i+vd0bQC7G0XX3fE=0VB) z4Vj;c9lG=G>_%+?MV_kupC~zQ1Xlo`P~Ukvis@6=9D#EKv>y_8AE-{)$oD=4(3juz zAL*Oz#J)9itIQly*vDSUJPC9qX&HL(eO8XiOHRNS5Vc}MVnPKRx^r>1JcVM?SObId%fj6>b2>vBWFeW#_ z4x#?5!DjiIg1L4!6LfAkCkNtt zng<;e&h{xo1cq$m7@!L_qN(#}YKeTyIJIH=&7&O^)8|DhGl7N19PIW4A=CJ7pG5$8 zt;ziu)~C9#RArNst-U<}Mxs-9i4B4AW$9x+Hna7!vSooaC()aQ8D?_)KaBTx0`gsM5Y>Q1WK6RYqYPpY=|82C3=u_VbC-B}N4 zo;SIlnwLuPmq%$7B}0-w#j$mZ%5zBBOn4OdmN29mtNtRxnkeJ z<71xS*C2bl;3BHu-Y4M$COk&$H^Li?yal^u_Z@+5Qt#e>H zeF8X~hr_7>0tCm=0BWR)qU*9MnK6w;2$5U^))E~+?*UP zrg=N0!zfQ;+Z?pEGh79P0Bv2l&K8v*u}~OW<>v-Tcian;;X9Wdb#DsLN&b{S;@OK@}M-8AeuT%8hIW6r#9W-mNyd z1&D^&L?c+bxsTyoX*_{`sML{h3el~(T-+5ThuU}c2C@C-K5;0r{6ts*y7sPS{I!Fp zLbhqX+H6b>q4}KBZi@ElQfabBF`elt?Mc8mXi_1}1r2d7Ld*+}r>Ilfa@1V0eV+h3 z8BnCXtgDN*UYfR*FjKiq{1bK^haimry!2Kx8(o#As-YgBT6rouq12BOH2{59PpJFTQ{VVIf-_&ttKE z62K3w_(T?vf__k2DZima3##GjiapgCpCKvEcm2N<^RiUeGlTA7jQ|0Levs@18W8aN z9o$2i8uT>S{_nJQjmQSU+qqsL0_OInG_2I;Z%FkYBL5WQ@4R2}gQ$voQgC6wE&^pd zfI1Z-X0c*7(EZE}xn7j2ZTIO^Pu`{yCk1Nb;o;$ zJG*|aTxs?q*f{Ww$RMzXE09Lb2&V|AUSQsF z;#us7?nHUk_BlnPxS-L5jtncHQ%sHG+0bA43xT_1o)6?TCv(jZ!;p=!n(B0eD&AkH zQ4bHagZQO8(4>jJ!3gap>g`PTT2|JiNmBnDE$;(Rp_{GDa_lEVGtPEL1cX)XGl4wv zkOPJyY6x#>(eE+cP1vt~Rv~m`vYP@k2F6VRWf-rZfeTsXRP@04vw=A;a4Xy>n0=cn zf%h^%vpAGXoqA?&XTZj=mOaRxN;u)^sQ-f20w)G?c)y6pp!rZL&8jq_vE7K)S5zWX zwJDv?a3MVR!-Wejs1V=~LpBXP)O<9SiFOFb794XSY4W)vnbzLc7^U6Sj$ml3WVI`2 z;-`Yl1%!VFTlIVch~wA9{!YOY#&3WQ#8()x!4ZzsVA0zXwi$ zJE^ecb}=JQi{W|-fbNijw=)xeMisClBR9yImxm1EP*@B8rjrd)~AQ$$SY0OkT8Qa_v zmLL?G$i;>oW0`$Lma01V=axb^Kb9*&QxWSy31X4$N!@$d|GUymIly|S$g zBAc3qhl#ypLw2SuWo8WW&+6NPXDu>|r4?f3Qe#@Rv!{b+RO9MyW-s{ZVR>`JgyXRf zfFT6zQtcBQxWj9&p`X%(PO=)2H&K!CT&aQ%q!Bt&Z1KhDmPgA;omol7{%gY61(Dp%enQ~@BxK3k5w^HOHrp8`Dnb& z!Wxd<=j&U%#$R@fyXuma0RpOF4TZLmgI`|X;U8t&AH%3oxEbM!rVfXrrOF{a(4Tn% zl7$|w9Ki1b39c}qK)qOd~kyPo{?vt0p7^PdUruSK%3mSEAm0gnn=%&=H>ppTnL^J z!>+hEA6!Br{ApS{!Ayc!y&+#*p#d6ozCBh)(ONyGG#+a!JeZ+0S4Yl5%rVxXRqNIW>534Q^7QvlrdF%A zbM)$^*FUi=};G+OekHsI^Eyd9ft_uF3c8<)IwL$0DECi4L|K+B=>7 zsSEFbp(sB^0le$MG^ttGBrij=x8Aqr{)Lik3Q*F5=w|EDi|}pz@*Vy1)OyNSFd&r| zi+1A_)1)pR7v**C(>gqiT_%+3rKOR^X9>2B?rA8GYr~%?$)AgMRk3Mo>j`Uetb(m= z_1m%>TateU@;&eXb$|Nlewp7OzpFoIA|UPucQF$buA;eh;|s< zyBc(G71YWm?%i^D^_m)8VT8MfY6t~3HY?S>w$#_UvNqCRe+kWHA?%t0efMFbmwZ*s zD%e+GWz0%8Lz6qh1n&u$XT-jzthXJ_*VzM|{G#Swu9dEAG*>lNV_9Bvuhry2+;Dtq zrrq1vS1i6J!G7#ZMWk&s9a{);_?0rG(uzOU2v^FT(dg9B^~riJzDdtCIvmVPmLMUt zHj39@A4>{Mz#tat-@e}{w>P@`8#QQ*uBhf|Fe5rECq;5{1VRJP8Kblwihj1qJk*5k z0LUgj9~7Wn*d)g{*$%msJ!~YuE1J?0i!d@_GkZmj^%bN2#c-L=G|4Y9c&M+aL2##Z z`MuEu8z7P=QEwl~?U|+kF*mjW7dN>jO{I65%)3q1E5$%9!zP`20|C8iZazIxenG-# zkrLW##QwD@e`Axqp((k)(cRZ5^vmgu7_p~)dus!}KER9NM=Jz*9PU5J*2fJXi3?#g z)_diT4FJv`F%``P6{}b_3rzk6_kN^i^DCHp>jr&s#Vo;?gcJ<24m-IL6)NpZ{BEtBw-3;_rL%}O>%JqtNPa(@kUNnG$O5bpLwYw z3-Lp)-6mW^MVC)=(Lxyf>bYpDmVaiI%+vIL1Rfyaz;u!bA?Vy!JUyG0yYUWfr!u4O zs>u8bBIA2#q_5IXV0z1J@We7(CsJHf!3ht@og7_ppL1_k%*u+qStU&~y!iO)UX#q)2)GzkT!bO8DaN``=W;SF|%_j67ShKdw;2P%f;v zjpb!}K`z&;6@-nJ8!*|IKUN@xS85ktR*~B(gMTYAdEP0>yCprVaJpiCqag9mB>{;0 zvv7XDB=14@@%F8f{e21}HL9@7Es5gA5$v!S&ih$qvj}&GsHVfn;QrFGS;9R42*nh& zIq`=nPLS#HVafdybs+^&Od9w$>}2SxHla~2E6e6(U?&#qzZH3vSr95J;29%WqK}0M zrEy?@8{z6w{Nt+JPz`T{b08t+H7%uks&a4DJzF);RpATWR~?xmYdZQrcm5@yr}FSR zzQJ@@_cI037dTeKlU4In)%>(7S5@W8b)+A)U9KrN9pG~@52chF*7emh>PtTyOTNRU z-R$JH>IhK1nt=25?|@*xshXAbNk3}$^`)4bt9E78zFC#$t8yCjx4l=bOE!^H*Q}XO zRLs1s8c|1ANP7-`@O3Sli)x?;Me~oU{g|Es_PtZJ?`s_|uHgNiWW&`w7XgL5?h8Cq zU!78ESqO;%$V8B}2~0Ao%PeKdqm_x+)gk&imw-=U3#s zkuS?IlKj2@vV02)Y_*n;a9>_8OgZ;JtdAOm^IscAiW_ zC8{{c)IW(F!EyEsG&b%+m7T4-c4RSl1WkRlY5%x5%C339M`~klR~`dx zgco3DGh(`gM#r7gs9pMOvIn+k|3E@`Mi|d_WZ$jS-z$U3`yqu7@F6S_hry24+53`L zQA=IqtIzmUoxAY_rM|>`wVuU(R6zqYYgYQJOf3D?V^h+p(#7GUo^9{bt58s-i0QWz zM!i>?w&CwjrUt$`eaLXSd4ZyUIb>9VMQr&7Wk*1~Rwu*@1!NL6^mkB~+^LK@b#50! zM=EC@Vh@x!i&nUu@Tp1gH)zP5|o6+7kKz6~oAt`;YMY%x>`cHexD!o2Dp;k=DG=I+&Lwl}*mHLWcd23)gGbhg!ho5$I);ka`yWU@Tl=2-Uo~b+8<$r27@2as1jkAKWI!3Y3Kki1 zinxUmtL(7;>{L1E?BVxt-Om;L5YN>d(YQWOuo$X0TJOGkNtzNl&s6|Xttvno@Qe%D zt0jgfKb-5eG86pw1~h<-J?Lg}H%aYQ32%`Nf2`^{pp*7TV$b%}y*)|X0+FM|eap`B zJ${=M;p>_Br{c{DkmnhBk!osI}in^os2MYsMCWNmJY<1vx z{!S*o!31zC)jxo&l(Iip-}J(eHzi!@V~?e!q=Uii9W`SWSr6ndV&>C_qn@XC$C>ct z^y(xN;(FvREyb=B{CK%dwGC$&x4HfJ@=U3Lyv zsCCjV{ZlL2i4Ia0#DO#L%$#GQ^EIBZ@n;!1v)vfNNHgckmzels(@W=W&M{|+x(eNr zt1T~5&7FVXHbJg2;nil`RYtB<@qjIHHM(i*>VO-JxqGct?n1+A;A``ckp~UI?f*aX zc+vzfubt`@GeC_40&oA;=$TqDWElOdKo29GwG4QcE@2SN>jpHzg3^()82-uF57y2t zP4ylYE8xk#Hvcf;zm5Huar3QRZR`S@EZ15eYwa;syg5|M@pjka^t#)htN!ecvn>nk zu18zs=Ux8HR{xP{`McTmLv^N4R5#9Dqps1C|BE^F8c2MMTM+*ZuVOn50e$DLe=_p6 zAwa!(+jI?Ir%yOH`R5=Mkzs4&ZyKIE6MGW`92!O57v_9>ijwIXBre{E>K5I z$21SKAt8i;#Wkq2rA_YcCW*%*=Ync*K`A_;+0JkF=6u$$h=HzZ%NHU6%|XJkYeu|` zAez6X(i^Pb844CC-yX^?<1PD2%j4xGSy4J*d8sKAPo100IRM-g*N@h6ZRf^wUP75H z$$C=OVZnx+F=*%%n zumS@&W%z;bgnr%39_qH$RCc~K@2JaeQv6yW#BOpuqs=a^I2XGjbLF2p=!6KZZo zn%qMeT_SvYu_^d@Q}|?4@|1e>h(^*E&hHNn-xqMG%5X2Dg#@1CI6xHl~P~0Q% z2(qRP6owJ!&vSCg1An|xMG>UgX3Lh@<}5*-bCH1**DE(%v6n=?4+e|2{5nhA8=-Ar zs>c~Qo=#HNtfv^`MaU{N#JLb^QPqo$Tw)C8B``jQYkQiJvAhG#{8$v({5PH*hTpxd z@g8aC(xzY;y^-v+&a%HK>!oc`*y5s^wgs7*IZ-EsIZD4dL7M#UQD}+-QMIqU1WSAD zdSkB>`Ck^#KEoZz>Nk%XIcWGkyvh`=H1@}SkkZeeGmU$jYb}!1^y#|>&HqCz5ocvr zEUc3lyZKf>t&@G2O&-C4KIfP5C3F^IYIU~+-$ykYU;%lgI-A&ATFjfxpgCf1X;v#F zxH_vE?N&Pa=&MYWjq9Qq<~e17!Gm@e;3p}uG8_%Zb@Ogq9lQ6|FqAr^_wM^(x;_4? zosY+WJ7>Yur$a^z@y5po_HW1VR;4{fL}IfMf8p`S;D{S~4VJWOp4RL(2){N3saY>+ z!jxlx&(Fm1S~vw{w+T7sEVN}>nrp>ezB!jGjxTIfKEzDyuJnDTw>D;MKdnHe5WT|= zIUndTm95Hy28<@K*hIb`Coh43<+8Zt!v-FwqMulg(Etkm^rOGi`sIQ zx+$rozp?s3EWws(SM31=Cgb35FOjdPL3f;|ZHpvxXSa9R^2<*1YA0YVl=Yg&V|K}y zL;9c_L~Mc<*eWWGMiUfog@pA)bKm<`!vi#n1_ zep}D>?FO_1Cde$9C~D$SV`YJ@Fuu*QfBp;dMSw!!UO`2x&P06+#bYi*CXp%qqto2l zsj-Mzm|Cg(pjKE!sX*=S2D!b#+@U z>oGN(@yOcF8qb0f*DBw%-;r;duMuQ937LNHGMiM>Y{VGkgNoHfp_S2`@C8X{sKrmC z`5dBWrEVtzl(86M#S&Wrnxv^6%iAXYwKbi8!2_*2cnZ8DYOMx#ni?-#&=;Y&C}3N z2yqWste_mP%KFoy{^eu5wcOtehH*9dd$#T+T}tCXM~rhF@bd8=Om4TqAM~uyOS*JW zn5??8RI!sVKT&XvD)F-tS>b>MVB=j;d?#Vl5%~V9%lx{_Jlr)hCA>Ju^pVZ57_H9a z?E)TN+GVdJ-Y>hdD=@i%!oOVe<*Pc0m`2H8yTV_0;gRRjuIP%cy2H_3>H2=UR~ZGW z+5khKRk;HY;Vne>=m)liQbIkg9Kh3KDf3+fwf{a{r5)|N)|P1)6%3l$2qr`SwdfAT z((`XWg|13foe9*s>hHTNJsysfabXoN=rx8a7z0!vsoLc|E?xVxQq?g{q;gj^SYk<%sI6$F-ohWpn;f#AZ zCKh*PSRw3OAQr9Y6mJsD#`jk$LAKL;O0RiK5m& zu{{-U&j675`J3$OoXpSvpFg*)MlOx9H^^ZYa19MU=UCn5C|a-&r$O8RdH&f4Q$cx$ z;BL&e3%l(Swmf;IJDnG6&4>TUi#GRm1G%s7mPfi-R8R;uFGu&t{2q|YP32GBbq?*j z-N^9AsDfbm$&TbD9RI}#5j*6W4tcsmUhT*>*b36CZmauwmD#PTGE^D)Ey@U#pfgX8 zt!1mYMvYO^0TTc;SzOr>xkgDUDg7&N{+%};<=w}59KWFctbT)9JpfnF4@hT{2>jN_ zT|M^h9_H??%3Z%>%T!t!60O2s9IZFWRLR$!YYi27#drMbKWbZ>MQK<{1gmnIE^T^F3Or!2n zf=#WUMSTUq9oDqX<8bbgMYw@_bNjI{Gj-eOJROahZr5jecN-J+uLs0bQc2x^%~~Hn z0d{7Pd29?z<(6KBROXUi8bFqETd%y(ixFlEl!ht--_-5%Q~$MngueU_lQ@?Ni5(JN2(4$E1rmXgXW>#(j@o*j8BH}?YZ zNMe8AoBg#0H)vrDnQlN}W|Lwax&qZ2eJk<$Nh#fCnM8_jqHdjCzsQSfX4?3{@=$=Xbb#96=`uKopUm8l z9gK$-qjcCaZ!iHqx}hpQW?0|+(=aR{3M+5oc($%W^DB=f%OA@Ip%*SVIo*?nL|q|%u4jK$ZI*JJEQIY`czv zDUiMi1EdQ~@>nr=wCMh1MhPQeP=au0&G$IA0E&#^P)$|U$;Kj&%rNInS=H^_Y|lEw zL6M)bff;Km4LjGW4dZJ4tVMNZT-Kl&%89)m1VC*yQf;09h)iIC;B-(w-|qjs?4U7v ze41|CRZrEwShcF>^?CLK{?3Pa4-ex2tSK|C#Ng@x7rH(A$F=GCsbn6J62hp5^YVy4 zvtj@(=t76r5ebP_r#ROQ1-Z3gZsC#639PKxr%+`ppnfn&(>Gclc2(Ug{|0mm`y9BD zT0te?e(LpJt(|HLnkLdI&PKhiX!ziM^t~W!XoM%gLeUOML6b9nLQ^y@o9TTP*Xwx5D?}l+2C*HV2rCJv`Xg z?nC{^qlIEo*H;694t)PjwfjcBFoB3JR(6->WIOX2lsa89(`?Pu1ID$?6!skW`n#FW z44T56XkYA&^WkppGtq8lUzf2i_6V=3c(7a)VJGMpn64<-5+X1z% zVFuIqpRoG@?WW?z&IHTM;8J6j88dt?W~Ma(gAyiXXXa(BXF!d9f*a8A9`uLeTeETt z2&${0Mp$!$b>AB}u2lS`iB(UiE#_G#Gh|8lgT142H)`9SpQH@{IC*ca$M)W{GL zI@2H6T@1miqN006s^1+o2lhlD_ak9&2^*ok19`|uq9kuOg@W%7yUhgCKZT{feleb*Izq67?{Y{8<2XvLFSf3ekXR+I3Py=>(HSb z%^W&=Ynju6>hJ2a4C;Lq>Q2K`>Ip7zuP1OnjGPImfEx9aiFC(nP?mJ+$;;5eq=4%T zg;Jkx^TBz>? z-QRFtINc#f)2H6>8q=``VA{)iLQnPs?{je!@|4y6o3J=93)W$8agbrIR}!tz4B zs(d(-^D)S~jNEPIoB4eHc_WY5=;M$LVqru~5ztF;)#x-w_;FU~ttq-iC0jR@y=cu2 zYzBMEmNGl$7p|BoRp3`66U7MzJY172uPB-2CG%Rz{jOwJfUcpP>ZuQi7=lOLhKour z@JwM)S-O4Lisep7Nzk7-_c_kE%zD`pWl)DNZ5b9&>Cm2N>9LEcrDq*f>LYNhK4mby zO_W@xAyM0v$t9KiEYNi+C>`Ly?Yh$qegfuiU#iw zp0F*On0lo9F2`p$w&GBtpU4!Zm%atcuAz6zAQc+z$T2EZ$J0iCVG2V4c?h@%R7?>i z=*_X_|3 z@D#Qmo^-mRP8@cQhPEk6-wOttJ{`n>oq;Bs$rHS=+^9d4sgN_9xQ+8@Z7Ms#Z5kt7 zF|%|y$$Rz`pCa0fmCO@QNNm@#qupWb&TgmlYi0Lsv1_yoduK3(WyL_-ivLPk6RjN4 zXIXo@g?r@Yfd?3~XYbx{((8xp9dqqIx8c5qkOXcYyKk@$7PoeT{eAiSt#=^p$D9%Z zb05a)VE^Wh0&$FYcI=Q;o2MWmnTF$5W^4fc>W%QM|AdWOpWd2tAV+`yEdhhGA%y$lU|C;#L<@e^v{)6PBT*Yn~>0#kp6VptF5dAXnmd=TngTKhs>tGtI(lhrhXz zmBvCep=t&KW4O`-#GgPyKw0%MvzI+1kjDdg8SX@xwDPOruScOSqcj5VhH4&e0oQP1 zfKXtrsE(4iGK_8gf*D1exH_dbZu-9L3>i#<`cKXW@IbbUbd@kzg9Ztjm`_R zi+r|TpLx-~(LQqUI#Ye2{57D{*X0{^C7C1QZ<%jSIg;%SakW1qDyd(2MTR;i=AO5U zHSXf!{=C0G@8{2*i|L|i30wsWI%7ciuvij1bUs|T9>t>yJj#14Mqh`lsOnIEcL@r# z!qL*>z{RSptjVP9;JU_jkK%89SK)d*E3t)@I+^Q;)tAfMslkhGfYce8Wv7Jp4}p1K zhvO_1H|w+GvQVB5l}}@7W*4Y!_$)SgSP9*0?a$aOO zBejf}gcn5QvW|7S1U7FqMmJbFeN`BCvAH|aaglo>c?4rI_L#@@O5@1TE=SZ-Bfmq% z&R$JG+j_gNBNuip8XNvLGAr01BIpy)DsZ#%$W=D5n=uo%mWQd)C))E8IY5c|>CIIT zfuB>xFV>XtGAV+zjD@i|jjoIySI3E31`*YYR-?sanZedvQ%Wu_5n5+tTs|22)?FE! zYxLXK1v_W`wm5P{F8|Vm%8gq9b;y2it3Qj}L-b++_6;5{fekravA7pw^Yb{mDek-^ ztXq?j6U+%?5Cy9iViA^55&RYQEE_at8m!HnnF~-rn4rONFqY5bUOXR60d3ed-jIkZ zcqhsBCM6v274lPZ72M|4%#>2D(v0aYLFbg5s+oVm7C?H6uB=~ffnuw0o73&r$Ah<} z^Fj77UH7XrUEA#iut$I2nNQtz_Zw8|!1U9nX{w3+Q%b}D`U#-L>i69SBx~n-Y5(Ebhz}w1yv8(^`Gl(?EJ+J;NzM-pzi35wrF6S|Qsk z7i|9z_2+s1e6T-1s_p<*NYS4of1c#ehx_w4{5kRGjh9QHjZu)P$V+u7>m7BM+LOU% z?sG$}_4_Oiuyh)Cekx>jP`@uJA**aw z(iG~?lq??d&rlN2EGQtj`G}5WM!b|LvjJ8cU8^eDi?Z^UWF5fp>@3pzOT*+UOfRtP zzafklFtXwE#(X|JL{0@jehO}-6zcJq^l89WE$qi^!Yp?7>r|3LmMg>LEwYUNRL}4% zNOg5%MSP@7^X7`Y^4kqz3%@PjG2dpF&e}&+S;;lXqhfF7U3@uYWJqv$L17UuQYN|1 zU$upoQIK7lmk08MBTI-?cXgCp5`*uW@O6pav`I~({ggty57EqD=N8dU2oFw&d$m0>w3#~1TT@thu=M<6C5~Z--(j<;bO*riQ>Nj zb#a-8jK+jFETpT2p8gq3Cou+=&pK%##p1*i%&H@prlSGT!iFRE9VW*p*|0l zQz_4#S(V(!w`A?87HliqP|#f2liEX*QONn$A|*L58@{D>v%2!nrX!UDUM0rGw-Hn1 z>;#a>PHcJy2>jiE4$(AdJN4p*0E6f|vF*XYavVB&F$iiCOj3shc$KGlmA|T> zE97zkh{CYQs|5+dCjSk+gUo+WXM{j3o8C%J&Ydzf^ z^77NE_LM``din+TC4YZ-^0nlv$v2dsG+!?s86HvomiuPsccO2@VI7^zQPB@gu6TqT zS>T8`!Xv`3fPSmSE`Mh8V1YzOi=0SCqju7TQaV}8ydn-F3LFVXu)a1MuN#AQ93C3G z3;4tbLp*!!56_dzxnlpXh+TDoBU1Zn99Mw`CBt5Ec3o~{g()vb7&H9`nXalq0SWx6 zNpUw;o9-sKy$c(9>w=Wervj4}0N1vbXX@MJTWnv;q<5*>y6@o6fj=ipCCW^XVJ!5v zC9Me_i;&>7Zk$=9jN^&XB$gx*q+yt6F_R7D*Fgf!X5yEFfZv?F8H6v=rA!8nJYpRd zdWp4Hu%)_lHq~$e3k|=ilTID80U=~P1j{+ZFI7a9qzjq3CD6`;!Hig3z07Fhs54NI zJSyX~8+(@Sf|R9usAt)pIr=yIxNf$w2>ZNMkUEieC|$I)|{QzQM3u>ZDJ zsZRQ=sT`LymtbqzO17?TC7+G6s3dj-;7-t39u#RV8U&A;j3w=X_4EhWKCK-&*Ylb) zgEvFcRhm@Fm-Z=r5pJY^gJ2hatNkWjTyVp_=@e&0>zAX2Wj@BFPO=B#G?qYC2jC?K z@Ox+jYgTg`fqk3;;eY>amKC01cA$_F17ovQ&6@B1kiwU-`2SR?%#(~=p3>-oDN-NBl{E{p# zM>BEyiIRDS+;w36a%8e(O%v0IFcal0?A@ent0la70n9D=)F?o`i`P53gY~his^hUt z&3xpRWPkW@_PNaapUS%NQ(4zl7-x;j8sxSFJJOk50zw446_TQT9Uj$d^k+t!zg92lYf88rz@V;RG|b#OI_Vm09;0OK$*BI+u#cJcgJ?8HyFw zGaanDWy|dKse2UXouur(l=RcjFqxmb7_|T&M5_&tEZZo0uVjFZ7>EMkUX8Q55p)pR zyvjXpH(+TgSqjYt818^QjPxnM%{|{J^zpI7gFZBCiBdxv7{V63ovsEv;_qt!-7z$K zz{F~(NT9OoY=?XPH6d1FnZSY%JI6@O>t0R*mCW4Mg5XIj4m4tD0@L)3ViM z44iPjSLk}8x*QT3fEz3rgHdrmY@8K&$O#OlT7rahS7x$_-ZdqyM0KU=k`zwD?W)9YP}?p}xo6iMmq_ zdKf*Vs3qdzB=~aLbv&iR>DgY>M{E=rOJt)g1l8?94GK^bx$$+Dn0l69yPH_U6uuj% zsk#xwe%cJyy9{m_F7ijZtkurU?ww4d%RGNf?Avsio7Dpm6?;M|$~+gMXV2JcC(s6v zB_t@_zG!tOnn&EpPNy@EC`|hCz^IR>&&vF5&G(8h0Bv>FtRtVE;e1-8GjmDgGFNc` zx?((u#IhoG{yb;Y^_e`%XQt2V4f;0b$Z??C-G|(sU)Oi7+9wn_ZVh_FzI^7#N}n+; zaA9^BI+wfWTvo+0%4f4Or!;r?3VHo*?BU8aJg3Vl(Y`sw-l`^GtBQ zZlGtH;0%?>5mX{NQ_m`|TV!&sHo!O2;c2wg^KAwh>xa`{tKU~e^*3CuT)!`Q4kE;d zW$-uv0R<2o^=Aml8>5Q4DqeRQ%n?!)dxtC9Ubl`VT7em^0K93Ex|VU9@VFnP7I{pMCB4C zJ7zKapwN0IeHE5eEqJA-H?iH&Y?Ob8_;Aul#OIdH-7JdGDXY4c zjUZ5S0#hk>9<2`YhjYhSB@_bFmY^9Glo5~B=)`O1evWsjAKUfK^!&wQmPjKGzgjTg z9F;qm3rN~eL5g94{1N~79=PjjKoDrQ2A-%_qA~nhj{Sfs$h~-$9dGX?9#GxNXcKQM>D{QeCA*ZUpt82YB5WbvTW4pgd|U82EL;wJOQfSbVo4 z`vFP-R9SQLW&NX)%#>M~9!z?Gthz0Li0}znkqoG*txEmyQcX2$a;6XV%4tdgPDX2z z2DwPJ=;^6!<|2Kpj{@I?%6szdQ)E*M^ln<+0dYnZSNC#zCi_zpE!W{)3s6N4Xln(; zwOS%*Lbx9zrA5hWmU&$z*2v5lgSQ~8#XN-4mIwDhPd-PVR>6#N`Qa~k5U+7qsRisK ztq|)%A*o*Y0%5vZq73S8dSDJMh2{eiUn%zVcrUxB9aXVhW`R};BNb5lD-ACCrr0vI zv(&CUx@IpJrfS-8S|=1XL$dSuGI8>BoZC>_B?XOFmKOEV388CtRJ|H=8C8+cQKE-N zS0u?iXTm=zttva!duOfk&n2rmfYsd<1#1Pc>I{shK1<5fo)}dc?)V-sAs#1I;2~>W znV#q~t&i8}+UR)2nd3p}gDchWVO<|TCw9D9k6@K+dPPSHuhWW-sS-0&XUzzWt`~gc z2IbNnm}hh<>FB8PtWKNJ)yQSu)d_CG)BjT??gjXb8Wx4V1cJfYw;z(G;UOV&MMyr` zK`?mh^ENmjTKBvqvPNdUZoHjqy5UpPc3XR(-DgBU`;&84H#at!bVD4j#iu8%+I`f! zq&Zzh+9jWyu-VL)sLY9CkE7-PdAiQ9An<;fYi+b!6m!rOq$^3g2Sllz?je=x`Tyq` z%PK;x>$q^K2{S!kc3;I^VK|}x9@7$J`etoC;aj0HWk>%Jn z@eB0`h{lPwUUepVU|qG?I6MesZ#LNTd`YVLmRz;iQmB?&N^#{SsWQFB!o5{M3_9b- zsK={5@j~5Z(t}MfAGxccABxC8nKj)iQdD1JZFn)-H&m*!}P(MVlNMo4j-1`H_0P>)aNMWfCzs><1GSFfBBK_d&9*~KHeA#;}Zmecp3kC0#SrF7> zciM2l3x^91hKq%E7%oKKD6yhWO5k|G95>K)(PavW zyBYQXP>)WL-_wDIjabV~(4AlHRk-&nLpLXb(`YOLeOddftH32HzEMRc&WZp~P_B># z0NH|Cwb=r~FF|^Ux}P#Xv7UnUsk|aRRLMgb4ojldvY4{nEV}Zu%3@KEz5H&2KSOo- z(U^H8QjOanKNz9~^_!A?rIY|giu8xlZe;(u#4o9nxxb408|&Itf+LhM6CMeQqAVIL zz>G(>yFB7e(Q4FpKy@8jA&VaRaD!EGxx)GgyGXrc7oQ8BBqx3kGco1^|i%?1foY zK;xi`K5K*l3^}P`!{MQ5H!nb5L6Nkaz+4(0R+XMS4rg{*ji_f4gs5C@qRUvu{JJaP zEV~;(3ZV$wZ!`8M!1v$=<1W)xt;4q~Gl)Hyz_0j>s4~;kI>|=71zOu#YCWzvonlNl zx3wLNhc-FLTtP{SMDV>qUD;zZ)QSt;h7q`BZdG;wSERsaFFE3cF_pLt;>Y_D-U5aY ze`w~+M0{_MlV0{L1}@47LvS^)nL%(%J!NyyS`(~lG@;X^c1(reC8U-i#t z`_CtP8!fc1fvf++HTLmkKpfTDi7OsF_iU)^gg>ezOy^aZ^%h84vC zR1qN~d^Nq6JpH&V67(1unDMUH?lQghh{HRMQTK#XVDRt!JULULo*~zuqR)q~ksHd{PIfsrFS41X88YC?DYEN9v z;Q)Z(rO%1O$+5CZnB&Uqp+d}j)>H!0t|66ckU168ReCIE9?!X_a_-5TeF9TCc{WEF zuPm0cEsXTCoL!o;_ba`+G}m~jISe(3FPpER;4x<0*UdLD&^p3=3p5`m+i>XGy)pB_ zfFOlOS<}Jvq~bO#^atDE{bkK6*9bqmveL&>4;%)uWfz#I3C^9=h~2N7iR>#1AjYtM zvTkfZI5gtgsm{!Xh1N2TTdU*;-@yK!z2yhmKlGReju_RGZvrFN8Uc8P_oY7b7veNO z%z*s%<@TaG*kkPghYrE5l39f{8aR+U8!nKbw@mW*TNPeP(mC^|v4uu^3zp@m`HhdN0Jwy?%4_ ztjVWrCNrBaT3w&rk;SCkLb^nk5x^Tp3FbxvDpSmB$S^k474D>Pxsw&{++ew5QC}p* zq_8E^sHc^)*_~@6hng?SLBzI|-&#BysrLwl3ycvvoRQlK_Kt$wUJ!pacNPjiEy$e(*7Y9) zvyf?pF~B6#Z^x0-FN)#IMS0o@7TU5XkTV0hAANCi2J>4Uj=f0!5a%T|06%t4f8xlw?(jLf;AGgHZk)5@uVDSLl6DWR4T= z3=nO=98{nBPsOsb@&CuvzoSuZNX*TNT&eCjDd`WPxg!R)`fA0>ZgU@r`%9c#r9j2N z$Mf1+9xCPXb7ZcnB4E$ro5eN<{-g~`zdXyr(b~xO?Z$lfL-P%bc7g7Q7^2jBJ;3}N z0iCLvxc79;VI4v}ewTKX+Q+xCy!`u-e1E20Nzb|Wwfk^WV0sAS;2}3@5LR)0I^+=q zqH!}g-bi!PH8Rfj`x=Iys4Fsirw0?UzFYI_cSgTR$C^nNKrm8;$t3+aGPH0uRovO` zz`cGs-1JSkUU%h>)|Rq^YT9*Gf*r}Yt2E#UcBR0Wb5u16Ub;I|4h2k+X$HBdH=njBOWBQRO ze%>lUKS9l+DY~y>msJqJvXkXiRkS_W6Z{M1#sJ?5!Odz0&c8BRs#K$FKg8Rshod-i zxTR5UZN!BvjveBK)%dikJ+X;mNAxA zg#(X*Tn?XMCLoA;=(lY(gl>o87>7?6a4E&WG-f~!Wy;*RVqc-NoGZPLx=F*nc-Qkg zOry8LCi-gJ783}`wRX0F4>mRfvHW|qoRLWo_p_a&sn7I|8Dskk{Mx>-cg8q7c3_~M z(&GiHMbW`go>YIToaCuE2%MZu!GR}u_k8o+)gtpv=+Bc^!w6Z?s%mobB{^JK74#k; zQ`HIZAQ;-mYlRn7F&!oqXO&OD%fh_VGeP~{EI|*z%taII%35#=@pjPE)InrP0V;HN z;}(I*nx|WN886Pubwt>Ai^$Nxa2dJ^gbw@w9E?{JFnJ{yps*OuG0f9F81pGg%DNt} z7w!D{W8;7BL3UJ4UMF|cm=qx(T`4mRBA^nCp zLc|#&=y2R%Qom=mQX$9(NcW@bRPB1IX0QYw!=!KX~%eIi6I#I z5qM=ly)`fyxTGq>&j93jT}$&qQ*TsWC&2-x(KT5qf@|SCzNT0%)Db2rkH9*00xZPS zX?#jEp4cP`FKD(uYBm>P_lTdq^drh?XCcJq53TZ4t6U1@(;`pcWC0)FsKWJ_UM#Y7 zea3Q+lNShLfqL9uEa(u8=cxlmJ?5z7oI1Y$Pc7QW&bnEo(6luCUa0_6dk0CLHAz@}iz;x>%A#&J5+%$`D55iuPM zUBMH)EkoRK;s|(97i_aQkR`$YEk-oxj@GIvXG<9eTV_7!W*6*Xgz-JEB>*>34Z=2n zIUMN7YY%X!qkMLKoiSzj0=;x>Xvcfub_ci-j=>sS`Siq~e7!JnrzG}NKqjPI&9)R7 zNaf58sV8%V2#(e& z(bpV-Y^i&Zv>k=3*ZfgIW>vSc{s2|D^QOwWoBAJs5jN^bU19ZjK7v6-1=!61G1=j{ z!@gMp2ZZIk#N-y6a>h-DnR%XM-tNhTb~8XY#W5E)vm3L#Ssbj|F!_JXy?4AFRk`@R zSDTqVyYI74-KW>&oaChEklqtIC`A-h5G#W1+P!K*6GDhcCj=5Ygr--40762GbOi#6 zq6q;3=_24&N`BvG?VYgU>ic=$`^WqFon&VA%&b|nX02yE>*>$A9s2wZT1gm)l)RO9 z35u1T<9`&0tupi>2z0cbOitp-FrFy4QLB@Wm_-2_J~N2{g-pcTC6SPq{6ZAeULN#0 zqR}}>0B(%qlWB}J@_|Yt<29Of>OWx=7bkw%1v8x`4cRP`voD|#EY>n?YOxuskjK*z zt;k3;wq@kh!6ZjQwb)>~fiXdB%)-UuMIu`l6^G4Oe&5{wzhI{>Z&!WP&JfcP4e%{^ znS!vWT_mT3f`g*bBd&huv1#oC}IqNHm-^=;DV`PlTqX`A2jev zYS>R4A>yVJ6c!~pQx`%4E{(E0@1Ib-Zv@FOg4L`cwglvPfK*o&tQcvHpLifOj{?8~ zGF`37(}T#DuxTNH6jUt80K~-tjv$3S5r=2!nITTl*H94gyofa-w?USj>Wh!p>MkRv z$MMzK836dPJ8toPbjWO~g!IlXPz#BJP-$)Dju0^2pgNs}j$#FbW_{G>Jank_ucsf&@-q`5w|WAW%gJ5sV}M{%@?F|{OhERH2h0yr84)30~0Hn z%rvq!hdE?a`@nOOR81R_w(k5o9-vz>U_vl=ZO!${S2IR@JByIc{>Tp`??RpaE2HnG ze6}*UJKnGFr_a+%;*)h;h}WvrtQf^ZQ`{LHBdj)2zyvXZYh+HM>0!%DWs#@weVr4Gn)63lBmo zO*8X(4vvNP@lyPSM9?dXRtqqZr(QfGpr(>>2UNVcYJbb@5p?mya;^WM@px*pNt9!P ze2xo2K48UubRP}6k2rfBb~W9?@Ghy9=|0Ukm@@*6~1Ei)COM`mB)q>_>U=6xNkL$WUK8DE3 zCVti4?ibmGzh1jH=BOlM3&P;W8YMb5y$ z6B`))P6kzVf$1E==84vtSOAgg^NZaAS?p4>`-1G|R!;fc7Lgi~9a3{lvo#Zm-=w=z zV-pYaIwA4oHGBmwiRS0M{|gj<=pSwc|MF2&JEr1P2Kv&Zp9w0Q1u=jhAErPR?cvE9?x@4 z)qA1(4~EEs$hF!{^+^+vMfuH=EtAfEr7M073PnBIrC#fz)BBZ zIst9-LXUZ|N59acU+f`*q=Pm_)z)KP@6mtj(XaO)ZuuVB5EcjtTh%0?9ndF8Fp9S7 zMx;&TL$MaYe+M_)*~EI4nLNxwIvt&P2K2dObHv?7$8Gnt17R`>ScO^<2B6(wb8(E= z2E$)Lk`0FV9>{o5v9OZzMaNFi@-8Fwi}<#q`%^zt(d|mzhV4qwMl7+n!|>-3YHk_KFACEx-UV6J&*yg1 zlU@O?^jF171Hz95gc0_gAsr%IuaNZk!l3>Zqfc$;wy_MmIhn+*dUB=OUf)IBY2l9b zi?l4%mCen`C2j}l2uujw$V{@t8icWt#Pk*OnQv|plf;RBul>HT1(au-an0r#GQAYu z*IUS~+yOzxH6-5FsbV#Zx2O@14b#g)b#$ng(K!&x?*^$)24@6nIY!r3pBtzP19L&3 zE)UFQtdC;jKWIx~({1Y2GePDoNu4VFcO*kBv`!x@vhbLC zwAzoDX%5?WN{B_o1Hc54cRc-(65|@IYpIad^Ra9hI`RNmQ*zr1fa^<%m!vl8)CNNL z+LnI-6!Z90>4MP!MTUTBNoKaNI(mHoU_9!eUFFmM;M6u}o^A{kK}I6JY-SycazZH}hF`GCjJNmiF-M^+9-ZP@M~6|1u36 zP~h{0Il##uD8d&%k=Vw(iAjReas*Y;R=Ztq z!3x732v8ygck_Z2N5N=mR}Uj6rl%S1VSNFTPjPHyOVK&fLG{dtz&1;lAeMKp~0_5x&~<;eXskA~DovEeGy!mIwc4q7EhQM38D|KMz#1 zE)GnY!6xAwf!e_yn8D&Zwtj`)g=+_=ujt6t*;*k ztq!U?0eWCZy|~#X5nb@i@jFWWI1)s``%V{aTJ`hiU~LXhD^H;N1a5vYfR5lnPi+L z$2D9ukYn{7$QS=wdJtktaU@Qjoa}6A95|*KB7p5qpU!PzwEGWb`G>IML2e za14MnVH<)W3z(=Sb+pPhX?j8E3nI3$4(aHVBbJ`j4?W`-vqO8p0C~1ptk?&kPXw9e5_eKc zWROh0K;LfS+l;&2*n8mG42Hfe$wT;CdF7JQi(vLVg0)g5JYtup>?@q&cl_^$EjpdB zql5ha7|~;7h>MA>Vl0iL8nI3yz1GB^4Dhpfz^@f|KqF~$k5<3YhBO?qG8EKRMqLR3 zgej1qr5y7tC`*+4I<^iBj{+jE1{|AJ3D(j@2v+NW19`;snU%&}A)gY$UdlLJE~YOc zM-ZP9db)to;rsxtBU7WK2VkB{If{zguD>nL$PgrkUTHY_^lDN}jU*#Jt-n%81 zO9&I4#uyA15Q}!Eih#ugnWZ6OCI|Lb)1mQ+Aixwru7-4fKUR@p%%6Jzn|C7pZWMIt zZ}7yo0hEv0sZbtJALif?Ga!qqQdR)HKdf^Ri;^YQ!S+Z`5mgoO3St%Bip?oO|0VfC z1|zB{6XXFniPM9ly}q78lGlV9cnnaYTN(v=`7qI0NZfNI%q#@X5K|UgowFLJ zX%JL=#WyoK7vPe>^p(#PlwbK|Vdm=bjoAp*Y;M!&6!ovPdJy@pR-0M3wEDf)k88V8 z<09h28lb49N9Y2Hs)$hQ-`C39yWkt5Imx+rKj5d#up#8*Z8zzr8znS&a3g{;|A|9_ zVlb+pPGlvuWzS@aCC>`%nE|vvlTh?#JL)+#$p0iTrv|}Kh!o6}R%1ovWn>rrFqPOJ zx&iEBMwSOT}%V-U@W>0>l6!ZGipg#H*}r5Y)LO2rgJa01U!-@HpKG z&A=G3`jOVhr0DQAd`ytZdm{opSI)H>?SUfafnvz-EBs<*57#J|o)=9>T!n0dac3xi zLml*kAtb#C+$>*Au4a^XNMb6lM>Wi=p&>f(M953VI**&R-iv+%Bu48VTH=u~utH6{ z$~CPf_}0w#?cm)Rob=#0wC(3>#tY|L-^aS$N=0pK| zH76;)h}igQ#(+4U>hlZ?V&K%@nU-d=CF#O3Hhj&RzgqRQwNKe-x#b1NIK}a6YDkY^ z2#Ei9tfd?i>z^{sv=KWrRA3icbq-z53Wu)w>i1qST1^knfhyw*Pj}`t7d~e6qX^** zXXjR~pXu}&PLaF#jOyK-HodHDFI)8&P*a*^8aQEoVA=lO@2xhu1tvgmvt}OMOYmH9 z&ZF`vHaymuV_YX6W#mKkV%;s=q*^0^5m*fPNteZF3zA10^$uzGjQWmRW)ymm?`V*O z&++Cg*WFvjylDu^m@yrM_ND}~g z9JsA7sN>~1817uEl{BD2-J^)tpCljM5InI1JgtPiSLe(mjG_+tU#ZQI8a>ySUW58Y@9Y&R$gM%<$Qyb z%iQSish^^C48s2s`2TrOS|6wz0_-Y3ipYas#_ux^JN1y0E7t|)AU{V$@UM&a5(X*t zD|yt0w+H67p!As2k2;+EI8#dQ@J-hT8tKUO^7N2K&XKyM^2GYU-0JsY zYh-`-B8tOC#HpLbR>J($>1&10Tj%W6&Rpf}KBmy~9wbkJ$`l_2F$F}Yr^iW$1XKAX zOUpEl;Ai9vB3ZG_rj#$;Q$3#pFAO!&$;vSq)4-FIoj|aaj(CYmhRx|dP*W4Ri<^sm zro}Y|$Zx!K(%c7JccE|4{HaEKt`r-hcCI-=&_ND4fsYE{Ue4QN!ZH(D98^H3{+Y)l30xZ9Jy*_-U6OLfI@HS65zLm^Y<_eSOk95+)vQR znsP;e5K&mQ9C3Z}lmW)ogU)QPE%&kj@V_Yc8)udQ5If#meATHx|EqGpt5|29Tq*lD zIcJ@IUG~(e^UJk5k&Kos66Wtlu%J_K;g0vd_u<|B7nms8_JmV^#ceg*U03D%TrD$ZA0x#WYA|!FFv1L#|Gh}_4IoFKm znINEMY(Zghg=&vsUtn|{FrZ@sIH(ZT7c>U80n_p?#Ag*Q6h*lgdCb{@*AzSuSrjry zQu15C$=CUSZy~EXl9_xI-6rg-L=*Wi@rM?w?`h(Dt1qY{kdE;_I>6eG0sG(c_CD=~ zEPx2FXG&dAih-GICON`GIKp3xH2^EYE>JLH^Roxbs+8K76$fGq79CGo<62^i{WA4} zdxTI8BKa;huo!?f&t!x{lRE_Hi{Uj|Xw`>kA z76OhkU-aI3iBM5;O)wXNLL$7gv@uE|_ks`|gxHGWH0oO3$6wNwWR0r+ktK+4ngnrK zXS=Gg)yL51M^HD*qGa}%YsW!{MxW8BqAA{wfP`pefXXik`GKonty~e1uCS1e$`jl|2O1D5O!!1D}%11D% zQE&w{pAeSm-7bc1Sdbu$=K#MkXVR1D459ceGeo*bnV*k}#tPN0Jx` z4~X=SwOS`B$5H{$-WGi#ByhZM1>g5Mnz_;Jy@B{{+tOmq4quk-Ns5JqECd3k-cktq zi!auur#iUffy{a_4I%lb?v-%*y(@d+J_-6m;h#^{S*kEon{{e>vt9 zQ!PSyl(T1$`qTF@cOaI_JK(YbQZIs$CaI^G0S%zOMh}$T) zqIOd8$uUcBJRRGoVzZ5qr0S`-r1}FA!;4T(I-d~$?=&HqMfm~lk=!MMd69SeBN72n zwO3jfiEf_{rT`=ZY$G6bN2U(yfiNfXQX+8yucyjD?M)YNRQU~J%oo+{Q~tN}dt9Np z+v)dn{oeXLA>_DT_IqkbC8F6gG3uF~p4LXWX>NKrEuOBXWjGcR zTg9=JULi&TJyhA~8L$)G^+;MhmRA2rr~fHFR2CZoA`fx>+>BjKFeJiKu|m3wGAy%U zGA3J)#3Bf;&SZWHvFmQk5bchRf;Eiosto1AQ%LrPdjdIXkS8*55QS_R;%RDrNu5h<5k zm=S#wnBO&^Ng!owhS;D5dU&ZW@Q$ULDBJ9lHT%5(UD?m~znlEN-|u_;-uk`q`_y(; zyXf#?H#SG0BtmrHBb{&j#&9&YK5>7Bb()DJlU@22Y*@2rZRU#XnGz?Zfv4qZ$Q7Qj zL}>qO$lm@nR7<1$c7!WPZYfvXP3?^-wFf@<-MzYT8kRY_@tIIROKh;v{v|ZeLG7U-Et!@q((Q@D z1z|)fhLjUCA8`kn1Jozb27X}u6yrYu04$zw$ec-zvugjN~@WyERAJ! zRe|e{^7_Nc$)xkn($sc*sSw%moAK4nOjhy?C+72#b4$9q{-?SFD(*{L9prp<3vS*sfHG zwPa49oA9$|k_1K;RQofeK5DJqdkqmJBBDdyO0W|KK&(cYo?dAOvq5Pb>&0XSr*Lf$ z^1}moxO9!I&;%b8A)Fmg_%DDf(@-JRB_1y#x5YA8Sjjbu9EK1nq6m&NS+$5rZDdJf zrA<159h3*W1J@4pSc1r>+rYYHFz`N7^&VXYtj*v72>?NiT)jKQT8|onS}UlKsI#&@ z>Eng6U#rO&1&7+c26MXA1uumRGM|ne#T%^Z1;~Ml!b?@L-b)V+k%@bdTj{; z1k8vU$e1j&78xFeSVP;4q^rl*zN|u}X2tS8S`7_R6lEB!022Xbx{*CzOE|GHJOMly z_I$trl1N(^QpjUGb8cB)Tat1Pcp>k>N(OFCg^ksg88NuZ>8V&soBoxQ+VA4e%vr z)=?OU@CeKi$r5)`oom3>iQ$4GCJ`X-g>AO3uF4@;F8pCO5si^fPfp!S=cz|>YO`D+dV(0oi)zTDLvN)N%Mc}-g$4B8EAdgl#>tD-h9r0x%SZt{ zHmBz#POVRSX(R+w&60_l5SH!)}^qiXzFUPqmU|6!5FsbV8E6N z_8X!bQ^d<)@A2Je0G+3fUu(2!*jdj|7wHmbr)l+A<;+9WshTK3qP~**I&Dss$;O)jv5AB} zgz15o2=F%OLW(m=4Ztm*mA7Z-*_*RrR&ALTK}-e4LN~zon{g7~isZ5qheez)M2?0- z1Z3&FomL$(DN-yB0<^Q(K3k#Ma=M$I83zwmBDi;RJVUIiu#VRk15yP#PQVEN@aj>5 zSG@&=n&(J(%73TC(>i4{X%BgO>b+T3+!O-`-Nt*~o|^BwU~?kAAP zK%)w8luqpB%26CkY_|!_?iljVB~~}YECOy9@e@5B@z4&t5YRcVWggIstW80-!#&_| zr(1)vYL7tcYPOgrity(?C?$$_ag8|2y!DNOd9%P?9Z%=zF$h+Lw3ENcm9`o6q|sZE ziW&7Fbhr98a;9l&qItk_6(f?St;RfR)Sd6$J5fT=m^+w5jhl^n#Hiapc<(l=(Oo=Z z%5kH0lGlp`7NT+;eM>)~6tO%mRSf7!ABW z*{PMVR{`Nn&lXzK#`rh2iu;OlkH{}N6Ms)4h)F2N4pAeJ%c2#1{A~;Y_i60p%-<`& zY5snCtonw~w1PPSm%rxCYw!((QT3-vyS+0qh5HxZ|thN31M+~Xq%t6fbkJfXo9JYvTt(mw8BM8AF9P&*yj2W-xb0ww+ zA=>mzmItx#BEpKSX}+r^N>Ux7p*+VfwkGa>jPn*2FL81t%q@!;_Urz+5(AV&3X)}^ z$4{F&$Fj|034jgeT^JyP*Cl5n3m%@@pgV#;LPlY*km7V|1Xj3>4nQwt*<2365DRdt*qE$nM%EIW6t*O7%xW={ zJ#@UM=LpA&7y#I@dMS_+Evrt&lSET`0xJ=IZ^w!6%P@oOpf~&q8|!Ym5Q!9eDaJvx z5x8&pwQ;(vi0+5!#Oh|DuE=l8+K0CXgMvg-Mh&S3I@mg!L|fd>7-gXh`3bKI@zjyH zy;(>|j85TW#he2DSUsd@kVTSqok( z6bC7>FtRD=KB^Y3yay3PZRHaY!?ae7EbyP(%a2 zgu{3tFt0(+$U-HSxeyHBk!(=-`c%5`^ZGNs6F-~%3_%<|@7rt;Y752E;E}(?^_NWJ zd_#_Y>#`$kWj#mdl9YyU)c@dC6R2ObpuCA=6R(oEa{crgj1?o4N?h84nS!JHXiAn< zER^q;ch^z5$d<*B{dLL-TZqbVa%e zn?n5x4c*yO&y$A$oCFp9gzDs1on9;97Uas|)y~RtlpIjs0U-E}+2Gnv6ltB<07UAe zQ7B0jL^!{Jm2wedZV}lKF~fJ&G}}j4Wyqo;7IzwnQhtr#@`ZjMu2HOp7(uCn6Kl(U z{dpyCUdG{?4p{3zu6Q6TcG1dYlH=>dt^ zrY6!OTNR0H00}mL#iDN~o^KT^I=TZI9GQy{u6hhChIASJ*cnirK#MRPhco5?K^Jy&DZXB; zSv_;Y*O)Iu2W@p{p=pZ~QM%QZk3iKnlsLT&1D;S_+h~7^0bm*ohOL1nJlu_q=BCD2 z)nk}a!(>iny^$Dk5+edwY-6ZX{A&f3NMyKPZR^qzWwTg*~~L84?;Xfkb~nPQlBNQ7Bc#F~rOLw3{w z2KEj`q%J)ro~ou0sc90Lor2DryZqHjsmW@Rn@j*UICH4095L7EBcdxnWSR$jnIS?U z-Oy&%xAp57!j14Afq6uk>wz$lQ&{}!SzJ0a*_3nyA#x*=IQqN|GNCbR7HvjQ|VPHHdrskO3QD#8@A|VlDyr#O>K+PT?0$U_9pku2fc6T?r2b1tWA~U6{U|x%e=iY5_s;K=Vnp>!yDV^EZ#Ml$fH?UCVW$|^%)?l%29Gkqfc=Nz zW)diW#8~vy8Q}gi)7C zBqJiB8AYW)JM|KN3w!8wQX)f`D11c))WyLx#{y$~X{9E3aa3UXd9qB`Zq*;!BHY*5 zEn*7W;f0d@nEcQs(Ur&%1gYq2jJn$7u3~EYHAb>>0V8Mw0Ri6z1HIc_73nd#d>l_{ zshCyBOz5IuNxDI#J3iY+n2O2#p)+Au97$3mL@WlG23B{(8RV@ftHP~=q>dO=TL%~U z{XTxbpWlDq?^h{*_?X{+)bDTB{;i?Yoz3Y}i za9=~KD>s39CV_%N67zkQO@shnfo(F}6V!BNz{T%zamH{s){uK^TDR>A*+^Gf?j+8o z;XVX^`6RLJ`~kID34Y1N`wXR|#4pJ#O8u$w%Win#*t3Pvn_qqCL)Efpkv<9gz@s}! zLwZ4ryR-$7PCYAgilfeNXfd}F>rfwW%`U zwCJrZ>bGczWeIw&Rd0at6^!Nq>GzS;d|g_vkM$GhEAi?O^`2^8V&?nuPz5ymCco9i?aEA_-+w;L2O;!Vt>jR z)R6!03Bjy>5ZfW3QiAect>aUT`l><%af%l-;OKz30W>g5bek7yb%BmysJ|*#j}R7w0Me|_g(u1jm=9na>}bCq`t z@{ZH;a`tRauga@)FmuSgm__#Y&mHxhp;_xBDy1GcU2D$%ix?!CJ5}{{pHvIg0`7f6 z%db}TGfa|M4b>fOdQ%%Dpl(2AG1z2&R@AGD>RdGHnO_#sSk0uVW!ChW;Tz(w2xuMO zY5ph_18>SmTb~HkA3~X4xz|F4mgI>reGZI?-rQ*(>7=xP51n@B#md}rF^jh7Bjj2m zJ)_QRw`<#hQ>`v)x0kl7TQHNOzpdHWgz*HxV}5G%)kdAp)29J(0vZ>U)m3G1++}6G zuB@&oEB4ek>S%yd%1~DQLyqzmTs=rmTgN&h1a`mvPv!@mezYRo3y3-dg9}kP{Qeun ztzt24(98V@QJ6>IT$sJ^x87?<5#7_=)8+2%f+j$Ls)E5Wu<-l90=%u%7lRG4eU*k|X{l#y6xL}!X_=rrp)?S@Wucc=PQr@prnGZMVV2lQ7( zqs>?8=oy(+>Oa*PguE@OOTqVk!4T=QX}qDNRuH^{2M*@!=R40n$=S6#&kpD8%AIGQ zQ>A!A_3V2}H{Q1M&H}Yie_1^z-s}UI0|^R~xKV`-d{0vyp+%Vi@ZGgun%tX3djEq5fomu34+p)oeI9Gcm9y~n2>{k$Y1?;7E zRZG;q+`|AN#0o2OQ4x;Ce`-WS8ZRswW)<|QcF@gd?>sv`qn8mcvi{84E8ElN%p!~Q zCGXYY8ZIvCi;6tEs;JL${-K7m`B^k)V}rqK1>NH6+_vKz;lx=**5L9WA7HL&^Y=5p z;c^euVv3>IIQfC|voM2U;y80&QYcY#a_m(*r!#o+cU3%zfe|mn1u{-G8 z=;o)-Q~Ig%=o{j2+2OB9VeTR$N;2IQ=D@-$`y=+9ppTbOlO$hEsb^Erd)uJx&=6R- zQzS5IY8EBUFgPjmS8;5t^dWhN8JX8h`fnxr;Q12D$V$gO$Ip^^24h`BMlFb<@el)= zYQD_ZAz#*KULe>MUv@D@(dM{@_iL*+N7#T9{SAWr@(YyyGhjVWdRZ;j^VED6{)NN@~Pq(S3+VnF>OsS4P znJanp5Ipnq;?BO=Trk%b)gkKJ7>iVtT}$(+?Kxuodv#X^w^wC5ieBbRI4Z)x?Bhn(^m-RDkq@&M5f3IKB$^A3+0OgKh8!IdI6`_xtiJmhcTteab7H6< zjEv}mgxmR7*CW9_*bpLC$1j)6=fo6p`$V%a3+Tq`WDGva2D9r?$;xpY$L5Az*q0h+ zBnzqL(l^3vs;Ts`FiI60=5oE*Ft*-eeK||#$zD-Pk4f2d98N5?HkyV^vJSLfR~i?! zwx!w|+s1Yh>Yyvro$AVU>n_(_?8@{8J>A`psjhnXeXH9>H;ic+a@cgH)ECB1oS4!R zCnYC0=^p&$hjo|6vrlK|r527E+ctih=PPF0E?kFGYH-O%_f8Sox(iF;b~|rQeZHJq zJioL@-=0G{`_Z98Qo8r!#ZUA?To}FA;qJ4@`}b&bL-pk&&>$bc@k<;(8r3tkgsoiP zDfU`uq+#;$f<%K>2iP;^(Ta-%=n%0QmXRO^Ml;9<4pwH4*UyQ=hPW_sjbkck^)e$@ z3vdo|LX7rYTMmLyb(zj4 zA}a_wl?V%}Bi$eN83-mp&qJe#_d*JKH6}e&;yek5XND16a~$$w9_0=h@5cRLqM2Y3 z;)tniKO&wUw$_?0$L|)l{iXtY*h}X|2KlZpV1Lz#Xa-Mwmzniko`jU3IQeYoa!AvoKV)YMdNVc!G_iwF6>y+N;9qI+9FcTJK~+) z)o$b3lk^xXEIn7+Q;F609;4b@+6>mIt<9;Hd8)NB)ilqA1>}Mxj=4pz3Dw&0%YJ_! zS!6glbPcu)Q62q1RAs1}IHs$7vlxnfg6*rY$kz)G{9Tyga^g3m$n*M-ZvAdILqk#* z_8^o%_}aJp(jqhx1XV3x`)1NESMEfas(ly}6MS3U*ke{BOzvhqh4^xR9>p;HZj|}$ zD7BWLoWe?M?lV_nq_&flSeH>(WIQXeKBI_?zb=!8J65mOyJhv}i~4Ko%kBt>+ApgS z-Y>4bZ%K-JDq7yBpTum-Y)x~lu)KC_T5U<2=hNyh>Fm}t;@9db7rK0Beoc?Lum`mC z?NDs_S$?tBz+@pJ#5^xNrQW@R(-7`5nC{4*5UZ??nZkl#PrU>=Vs+6TY}LPI@qTa7 zez8yA0THot(Y`&SZp-N3Whj=p9WoF9CNV(K>KFCy5^*fRypv^Hmg=x>jN3!KGD=kD z&~qQ8HL6#t)P_*5bbzNewvH+th9F0l3<=s;_!o*b2 za0e$}2aWPJkr9<`1H$26;`vxewo*KnFf$o!{`#<%=p!S9!#i8TF@GG^sjIoz(u=oO zpy%pReP2USoVGD&GFzMk&cQDOZ}=*nF^xh6Ceyfq8O8?;kTawYWAFq6cpQ@}xw>Yt z>}b>tLA`FMhjGGEpdnj7r^Ph)Bl1+)(+DU$@FXw}+r`?3 zt-7|@DS7t?jg(KEa~U*=-;zZ}DrUn)Os+6tkpO)Miq|mw3K+8v8ZZ-1_G%0aM6}u{ zdKbi6q>XuS5OGS)JLCy<7mL4;T|4z^n;Pw1jipVE`sPOU%SO=d)kL#wxT(>4fxCF$ zldJ=+WtD6a*Xjw3oG9jHalk+b?>TWK;V%r@ znkw)p5x_(YS!4@Ak7AJ{0#ivSOw@Wa9Q-|G z9yjvc3{KN&{rb#)r3+~OS-Ti4%;=WZsdtL%-J+N^gmqCJ;|E0#z;(FfMg984zRU}K z>cu`Z#i^ZeI&nYKfT#6i@#ug5Fae1^}G5K`sD(lJeR$HvsG4JoxTWjA2x zziNzRjUq||VjXqmjqbY(a})n$7oe$bcXyGZK|9U{K*2pPx*b% z_5fwwGa?QaL$a|9;O&C4iwJx(iMz*;=?Vj0hYc*q@5_AC78DExX~4F;dNOae=GB&b zVJk#6q0;>*POMX32RV>Rh%fzhLH&l2Fb@#|vA}XgVs6B7b$SUk1*sWoF09~51+}7J z&KpRdKM?YJHKI0kj$ET7#o`mi66}nuU7JSh^Q1P!rv-g(L8g~mT~Oy1GCZ_lK;J&V zIstl$8CF&r@K6ze&)r21K;LAV@Ipa7Ur>K3l%A&|B*3`GFAUBdRI891qIbJ!AoaU` zuaK;)5QEIh7>E*DpO_u`ELjaCyoPWTEnJw#xr7y3#D;2M*pBEy5yLa^MVkxLsF>Sr zL(oHzyYXZXCny`&`mky-LJx(> zdJ@whAs_%>kYW=w$hgnc35=Ln+4V!b~G(pl^sey+?~(qmzWz!2RvTHo!XIIFuxo4ZHT z=MRlmuMOG14yiwlW_@pj-Rw3Ug*G)iYz+RS^dISd_3UW-{AhjLSi9PocSoC9cqWGG zcgp@+1#gX3Z;zIdQ)nD_} zdYGp^|AAM^YGr1tS*W3r zNUjy=yFlqX33rN_ok$kI4aMVZJ7L{JiJJ6VTPk9xaL6P`P$uOBqm4Ps_Nia7X+TL;xGgJ>Jy z9ne1-71x|?A7DmZKdA2feja=_j~Ppq%rEw#df@x&!SAzoghzA(Y~PdIYrh>(&x|&^ zRhs>bG6x82%5o+#bFuHo1AMXhv%3-3L;a+KaX3W1 zh^(UltwOL28*7%J3W7xJMop}ABD6r6mBYC6o`vYaOwMPSBl@Y-!m?dot+jxdr3q%wiFso69zBljM&+&IKq=IUSh%-=3j{L{ zSIad)1b~qnnDB$TGYsPfP5k_9Bl#6Fh%I^xb)_*Z{gQi=O4^d`!w^@Kx}x3*J<0w& zMk~#FR&LMYXuvEzp*-2ZaW?CQk;ds0I?9MLbeUcd&(UX4@E=C2;oLCf6AYrbx7S;((a zOf0P&(N?@GrYFBUMu z9F#MtGGPsJ;lUq4Xw7YE>RpHK`a)@g~vbgcaIdPd0I*p9NtD|t(1 za6?9I%yj$xeaatRt{m>+fM?w;*dn>lvYgzb6YKd#CM2F}_%G^q!e|M;7b+$~QdjA^ z5Wn))$Omy5-gy_39Y&Xq^>^uI#(y#yji%t_JlaR`E}1%p`-NfmB6)%)=M9#4;`zc{ zhTs!LiuvQP`4jhmE;_-ah7kP`C)uC(&*}j+r`vo zu?d_D6`m&3qC@;D<7w5%`nc{66dV*H&(n{7K&LEALt2e^;Ka-0ksKn*Dyj@5lLlgWpg0 z`$~%{A9A1Zmrki1?DjSYvt6oUsBY+r0qBdz6c;j_jAs+FqQBdAJwWDX?5%Y9Nev0_ zIFV8xX2$OZ1rPFt90|(L041ShWeGn4Me&U$2f3jekK~C=E9QoJnLH%)%g3ons=ijL z&0^J2;6!SfzztEeVkKVQgX6ba8~pilDR>|k&QR}NvE^*yZLuM z$PV*}_X)(7vkGU&rKj4fCzzi~K3v@~38*@8f?hs>$z8yZM{*Me`1J};>9;gE3=(*| z*6-?+L~8)H(i!s_3qei-q-+k{eIOk$i0ysa5K*oN*{oncU0^kp6jRtOd3bieo@#$b zG@Rt)Q_b(ECZP%q)6WopR#ZglMx4qm~J9UHp0 zstxIxt#5^L4+cha{prB{VMhb8z0m6C6Vlg{sKwkc!K|O4ZkS-#PiVSC#DFXdydB#B z-VYS9v+)JZ;4d%i_{{`;nTP|y0%GA{FKt$rH0LjEZiW?9w~Yg7`A|n{<2b#6q$J~n z-Bovu3mzN?Po?uefcifNw^`mZC{@#d0p6nPk5KotsHa=hqb=$;%`)Z;oP7VDaC=y%L99sIvO6y;u6)W;K!8x~WZ2H_I{@7giussdu83%&HTJNQt$XrIi07k)760 zuiSgAMSVoQ)2x2kBCJUOyHYU|ny4{k+WDnsBgTB{mX^Y;FgA74=XSgapR5*sccOl@ zw(#Z_^+=1M=0{tyn}rj4Tjjn_4_y_y2WG2vBZ}Zu0;(9GJy}){mIH5x0jNAuMtk~j zSv`OyUgmCG0ks~BCAM|J4Ft@$myf8+M)a*CzDHyUa``hDr@GgS@d!Lat?6)`^qsU-5#PDnrWpAD9y1p(LJ^1Zt%kBq&U${AD~;_c?Xmuw6UMz+E(K ze(IOxIuT;&x*|aw_SPqj(<{g2PadaMjw4Ktu0w`a|2rm{B7DIuB2f~Xe*gL`k&~3m z^F``0zB{bWkJo|u_?8iK4edbRd{IMq_asNUIwSfDp0$6Rr2aHX`#t`)4W{gdF>%09 zBM0NHZgc8(2aU2D1jMj`3sHZVr2jNY?Rd&;n?%0~#lWGDpid9GI=mR{KPIWSCxOl0 zaF*ayX)}r%AWy}nN@_PJ1^&9~QlpSrV95p+(iUBY`nw|qEj)IBjJOMk*b0ala@fAi zeRJ9_>D4M;IZ2&7Nxe7~i2aLTj95L6>R6^`WfK=A<_sg)eQBe<1Uu^Fg^l`xM#cV$ zMs<6eCf?P>ek^1t7>nyBo6D!DE;~fz#UX*&3Yjl%>+)yZfGD9J3iQ^%E}No`ox;K# z_v^uCx%MJSfGbCXLmRfWEWxlgI4i?dVvq_#>8kl4jJvdf=XshgtA5bglhs+1D<8Cl zZ{UNT5?iGIw;yzWyS^aQ*FdHSnZ#e1-!R3l7)BbrgONZkWN`$8ElBG*G7iCb&qP4O zai?nk?91#R;8>OX+xn|_8>;8MJ4=h4NCXu4nNW+!zWD|;bCv5-^QSrAq1%=8 z4ze22+TimXCvYwv7BDNKptju{CHM$N9sa!tY%RW1{0h zuC}vH;k%GlF;!U-3sOCgh$^`WUP{8Ri|k~FqP-5q8F;v+Ftv#!8e%dh)+MMq5II0+ zV83D{zDklPhEu`}o~IdX0^3t*VqK@Av00QK%>^8HkS0gjVpMik6HX<4xrir% zbU8&JlybS$mKH{91}5Xp+-*zkyz9&IgljXoFzye_ZMkB;M-6s%cFaPMW5*}!%c%}M zLXNr7x;2@Mx^ymA$oD4e#*FQ0%J56|$GO(bq_I;aLw0&3vrF6PVVnsvajLNi+9&GP zbGdt@2|6OHA)J=K;j86G_&H9N;Qcg(AsT?lZ&CAx2FN#m}`B}2Q9 z*FCeE=XUA-eeB*7m`M#Fx6}cR2PO{~I*5CFq%y#^@a>x+wfhh(SJgYJ3oJ(poba<` zo#2q5^%3x2$??J+l*Q?-_tgVkp+^#E(4f{4A@b@z(HgwkR0prupPUw`uor^dT1dV z0`nn6lSJ;+BM~8c$ofF%%=P{bf_g@!M#%v+~K3M-x_>?t``XrC=!Yh_YbiA5X>BsAwF7x0iZvE ztCYnqa14w}j)alRG+d$%D#({`O|ZAMTiWIGybU0_&KiPL8j4;jO(MmT&LDb$vj zN-iWv-2luwmW*nm9ZNtKfP&RX_^Y%WjYI)Vc|=@UxLvrPJ$b~Qt5}Dki~8jCm5k6 z#qs6XIU>EO_HU(cSNKaP>fu8_ya8XL)8`0zk1Lf#%>d^!W*|=yp`kwm6IOg9s#hcy zLy_1V4e4o!d(&uex=^n8@HY~Q;A6sc=6~C@J*SrD-T%e={QqTb3w?Vk``UinwWghQ z+jAu`p-^SngpU+?xNxV*rc|SY^_=~I>zV5HGaQAw;7>nJfi%BQ3=w_F6HlQS@IPi% zkMp=Iy4M{gf8?4^Pj=YS*tNv2o~iDgnZHN&!9z3E?`DEh z9-XOwH&d2>xU*&R*{_)IPM)t;&L>-j&ON2|Gcp06)kI`W{YC2+wPwFIwgfjW>Oap^ z&&|v~EBoM;nd(ic@NYBqo7DW3cY$_>{i63>yqmFq&Y%e5bO2HxaLe6VZNXaMjZvCYHmxqJCmdp ziG!CS^|Hi7{BxxLNkFgE`_GN~TcrLQeLI{Ml`@<gGsoto^7Ba?VGQ z^D)qu#P0IA^iWbgoHTpOi#I3Znlu02z0|XUGw*WlZddxNRYY&T#!1=NZCrcm3t#Qj zji7n*X+TvAS{I?4`qgy3UOeV@a^7zotMqLc!-=86!!z|2y&z&B+#4EP-m5O_&0pS& zc8GN@cYr=9`w{&y>(mv~)J<58W22+hpQr2RrlacovVGI23ygj+sn*~h8k;MV>MDG& z^;>~^Hz-{eNR}glj?&z9L0o(4n@dDe)NJ~!(5(tfcLeIrz~D4P;Y~qYd+H1S!AK-i z&%~R%tmF*3Dlorw>KW~`rQs`a{OXq}Y70C^J;niVW zd+G}lxI${aEOP6j5_z=9rgguT&web7YfpXQ`$!^A;X5L?DJs1Zs#ilp=5GqW7RI%w zzVNlU^eFeoz+975=Q(whIzciU=F}ep^(V|iq@K`i3QMm9>eT>G4_{9Z*Pd4DseH~u zq1zmmNZEiH`h~vm(lD+)^@T6MuEkvv*1j{%J1+^`FA-lH>kc(?iedDerL@k9M zaqclmibHA~gJT(mk9KkGsV_{1>mL7&Pg(V}HNSlC8*g^%3sfUUcH$l>ANrQHC*bZa zG@Lrlxf9%&pIO1$FFADs(jVxX*nQYQAq(XR!3p()A|hkYn#VeD{yev4p1O2i%_ske zm~1-3j9cNqmsg}vmJXu$c@m?| zo%wzgl)T^=rO)WEprA`<>v#HUP|(|b>aD)~+kI6ObOj#hI(wx!v4Mu(nXXpMsG^}8 zX6l<}f`)F>mI>6O$pZCg2z5u@mC=7g+2hgD)QtYMicFRnw4J}8k!ZKfI>qQ~kGJxS zQf*C|xl(dlGOjuECFgjwdRvS=KaE#k^=?x1AG71yQ(tz1I!#)8UF6nBr6)tR zEi||K!FxK4YfpXQTPkSvp~!8HO7Dc~-Oya<3oni0+EZWn0ytA@J|}Xkqtaa=LP_&` zU-<4Yu08dIAFtxEcbr=ql&)|DWH)d6KEBGuwWq%H8`k&QLxI~Il!zbxt}_?L{)~^`(!i z0`p6Odo?JX6R1^zIo>y9br9E{R!Up-dqc2pq!4O*QXMZznwpuMB7(nhqP}Tj`fu}7 zZ_d|m%(rjOZzSD|AOQk3x%RyITkPJ9OMb#xM)JZq-uYYVhGfk8dVe0Pn`-NQX`+64 zV*0WLsdWqV6$|XT1s|yQvXonwDm@ab&9RvzF!ER&*PQuwZ=wAs#C8lu}AMJ7*+HH2sxm& z)K7Lbt9BK$n(7=L{p?|DrJ z`|~>+oJ9V*U?iZ%{i$h%kz(5nHD9z)y}b~8`OZT1x*UtavoS$1U}_Kw$e-}V_&k)v z+&~<6ir(2^Yut1Ak^pso+j*vWRemC3t0WC>~UJnH8I}k z@G{zzCbKbYJV9cs=Va61T#P>|M@e~Ed%s-0K1i7^>Zw@1W)MgwQEb2eSv=j|SJ#d@ z|J`xS2g-l&ypj9;e227uO!e6JfoG(QMCTA`h-~{;%T25vJ7~8^jcePz`@gB{-?j7q zuj{?l@x&#H95d2p0KIa}&w=+`qQuH^$H*XoW`1bAS40wAeX4Rzt^*&$tMw&npIRyw zKr+xBSSTPoo{dR?h{*PJs8x+6jbW4C6Xs@Wk|aFAP$rv4l9fya6R@6_O|GXa*DWT# z!Fa9>C%cP{dU7r*4m4YvE~P?oSd`KeDc!L1*&TKGV=_g0!)m=XzbCm)G|@#8`%TOg zqNrhVeWlDK*K0cCba7lc#>|=kM`1CFS|)d~Z=I8Ac;DO8DS3XR+T!=U^?z|~Mkca- z-6`F#2l}K>rpfsze?BDVGcygC5x21Es3jyjuMIaUJfx=T!W17{)#_D!;zdAE9V}Jy zY+{83yG3B1l#dKK8_h(X4VM5P@jH`EVFaZz`w}#44&vqm5jT%CxcU+70_L{3<^z#P zPDRkXcc(@uqv0_{yxi!;%aaf(V@)!;V~iUbA%5^;yo*LAx(OplL`J5%DI*AmN2a@J zOJ=$mBeUJCCFJ@YneXNuw$Lt^wK!hn7OO?GkqVFO?sogio_3FTZ@1TB`=<7B$bn~l zIQ1d-VfCST`)l0-`^tMist;=Xh&m|$kx7TBgVUeTAMZfCyWmsqu#r!@!$&^rJ~Q%p z_qmZH+!scUbYC3#k~?bTEAGo9Uvpm_!Sk+!p`iJO`DW~o*>AgVjeOUAXXHQK_eOr; zzCR*i%SMh?ZkZZ6R=H!;$nnY@r}jQU5se_dT%}G_IJMgo)ggEao}~6%sfc))K1HQ| ztn?|${#YGys>D8=cRF(kr;*cC2vJDyYjT*M%>l0EEEP)pJxql&9uO^G3T51pW`>*-^ zH~oGOzc2cIyxnw4a1coWlEjxumyf~{wcYC@^^-;B%tcJ& zA1_Ltx=5l17tdRyFJ7cRjc9riiGFc0h3i1lDpMW{G15{9cZQuLDpf%MSUmu0aXNl- zQEJgYcI&yOHoH5@Id8M(!~eHS2&ZWchxte)ezx`7$)eO z#;Y607jGI*wBT#uG0B1M%q5HBqZi@vC#$|JeyGb*`a^7=XOjq6#Gu2gvXXg6^n=q- zlOg;66uHR=mJfe4Dy-M7(YRzox|nQDcV$wf(y2U-UZ%leSKC!wn zjl3|jA2Kf!+7PvTuQ(iv|5VZp(TJn4)jojWQ5huXyQLcu@YkV9vY8oJ%3UQmiA{ToNM6!NV4Ne7Y>L4QH`7c*-Z@!cyF|ac z7$W5Fi}gPjQ|yl!wJoEb%s4!+ge)Y@&QK>RGcu$^5+#XY7UnzN&HEh~G&d3|C#Aa) zt|Ii$)9pge5$B8?l|4Ak;%Jhgtk|euOo4F%IlqAN?5wv-$*<*`QTaEMk@mq{b zM0v!rV!mWKV&sHkM1Dp7mpFA#PMoEBF5|h>&mY9u8xNyf3yJ?Ali+*5< zLBFwacP>7(#6G-)cz!AUh`)II?f`5M{C0PB|L!>~!h^BZ&pC$qDc{jRDhUZroWx+x zGIps{OE%0=h-D0HN^hgtAf7c^Q*<$5gn~vT#W4~OCL&pXcZ~$H-q-IdzwH|Pe>gku z0IRBN;m_LpwA=5U-aA8=j=%^i7DN~rngtXU1jNV?4H%8(fnq_iU^f;J#fBPtN$e%| zUJ_#gHJWIOCec_U-*4@E2S?uf<9l!5w0-y4XV#p=O!s9Rf@= zWuUt3-HTs`(n`E;RoQA8(S}W7ThaTpQ%>GX&e+SW-b+r}3vtFMM&R|miGhaJprtgw)o^ctE9D5ugKjhBM~8MIH#&v`@8OHHw+Gk5_+|25Go z33i&H0JLuH;Rtr#VBFN?Sr;$U3sogG^urwiJ}8AbN!iZDFd;6KN5O=wW!D?Za*6{= z7{E+heD_$Jg4VV#Wos{4(e}9SE}zG?_QGXcGeuVbJj)oTU}R!M$}KS!+U>#J1b$JS zIn|w0IfsJU+1y{NR!|dom3(N2s;CM+Fp~(Oqq|;Ayc{Qnz_0=f1cER9=;x)BrExVC z?<@lX_2%^?R~2VKKIqthk7C+DBqo$?m`CAAZ$!v-WWiYV@7gEbU)_uQBoj+D_(FDs z?W=q^J40A>?-YDMGP#*akF%!WRvQGNcB87w-LRwiC7L3FO30%IMT&pG#8C;L|8KD$ z?w$B(@9;|2w|pR`nZ4r8N%DtD!EJjdZe<~|UOoHfB=hzp^VTGlKE5yo&Gb-Uq@E2v zh;E=c+m>YsVW;CU!Q3~=+&{^|3u@D?h?ILp)C}`Hv1@6I;L-(M1!GQ|EQF;-l>5yj z`}HLI%_RAHlK0J|VD)4dEHp$-Qs0=5||hx&$zpR*7Zhk1-?6 z1~E;xS*~FEAi-TX*}G*jUA(r$zo4Y)9c$jTWe1o!a(;<-Nl9-fjW+P<-?viLe3ai| zkzfN=pPy`AnyiY|7`>_QW)!zj1KHSaZpF)A@VzHr;*UVq_z(!!wVUhP&3`;^g)d)w zS&h?Jbz8f+z1{w*-Mh6txUC&#y`fhu$S)YIJ zN-f3Q1FIjnkI~J3_Fog^mmTIwvF)IIn?~E4Mh7>KhFrL5ba7<=HZl3niA2jtVQQb| zos4;TwD;QRScf6XNG?ND9s1+mCCL*?tC*>8p>?@=cYcTTZ)Op$BR*F-Rl zK9c+`>wlJo`N5wmQDJGqcaBxf^sMn0%D?d{iu#NCFhNBgfnGg&<%GP0Et}ms%6vb{ zemlzhZdCA}QS|6{qbh7&JYFVv=X*;-l9tHdM&+B3vr~mt@`Y=|dq!SVeWd>#0KIie z$y_td3owTItH@=dQxCMqlZPgnhbPLrm=lB9u!Mg#F?R1nd(T9B??kz0qId7a;K_;d z)I_wsMq96PBo2y)f{n`ax`;e^eWLmOMAWL2r4PZHnq%Y5F1DE32Rnd23+%Ckm~>M2m^4x`3E+bC0?ih!+t=D7V|k2{BEy zR<8Bx?S6mC8Oxyt!sD31B=ny;49#S%|NuqlCW2D`Tf8u63rh*uxm>>{WH38;K^_|Yi9xUbwIMV^$!&m2diidPzN9D%o54~HAsh8pfM;;aiGiL*E^30nP@i!rb-^?Moo zZ)Bi`Z65}%FQ$ZjRWAs7NDjh;h{#naPzC4_mF%!Cri>*;$Y_XvxgnU-MPvPEET217>Ie43R9yAym1 z%qMt4wxYij^#zl;UWzu%0R3evgmO?#q-Gqm8o8m=zZ(@{dAY;Bri@Jfn4p{~I7IPO zgYpdoHyOm#)&-`&_&5}Z)yLUJ+H55*q;iynCw7F;6M6uN4sfMDC?u*^RIs^vFJqcP zcxt`DVBpS4g0au=LnB=ZCSj?e62h+-N9v}w+NPptC`ujp_y!MC6NS71`aqOAo)hdB znuzFzfCqyIV$$eWI4?4C^vKnNcESK&EF@>+9~FODXH_P$OTiB z^Bu=u9Wrwz5qM(FzdFr(dz!a5`qX=9|H;NO|JE|)kke-~bNl+iQB1_1R@iYZM$P@=cv_!I-6M(vY23|a|QPvmfx z9x^T*_+U=_i)cXT6G@eqAolF{;Lbz&CQJuF0yU;`IuF%OeIWEoG1`WAX}s$uC0C;R zWF3AnL3h*->`Q22&BE;wJ0gRp!&i(KAk5h7y++u!SUfA16C+qXd(LZN}NH%rAOw7VGYBQ|0ri=EW)U(G*$TDQh~xWBHWM;Gj1jz_^29SKXJO zoJf>GnR9eu%|gZT;JN{XbkB%KxNkGS9{sf76{=Uf+_wB;1^qE$P(e zG>&FknW=D7!rhp?`AVq;aiyEVstkn=W_YSjXT7PR*1L0mY#~D}*Y2093VF^lwJ8w! z?`CO;CzeVi?~C`I*!RW0C)^7%k{deBO`YB?VqR`%SB6}?bGkWmOdeTMBHNrXMpln0 zK4T0MI-9$2YGI|^In~@TRsK9x{xsEGGL>wXPAw=HUO82+m})L3&3n4jJku$UjL8@L z%5-xByQE@a%75`5#u`no8uU_xY~H5)x+f) zkfKh+Pby*B(8;}A(GNIf$XcBf|4a78%OC}2e0it##+#{xG|Bh?UAWoCF-?)((^ zcs=k??wdeJhGuULJNJ%o_(Q)0qn3z0wSrs`+x#Iw+yuMN2$Y~eP3+xA*i4av>fP!5*mTod5&P80WyI%v|deJi>q*jlgZ6iSECrCVZ>BfMKCI< z%vAVTui;at?AUturt>6K+w8cwO{Q6zFt%)}YBRlXMsB39^r=R z#dLc*fme08ub;`1`%jO#XYU^?Wcju|^GUmW+-@$~NiN(;zH2Aa+aPHE4%; zxr?V2V8Pqd%v;mst7-D(H1o@8GS|O)hFm*CjJ0nF3@~%F8cD}PBx{jD=ANqMmt94+yIkpIhtl&6-T>2! zg$FT4OOs>K7r($v2KkA#RAdN8arZpG@fo)4FOM{XoQ%qp?>hkIe zs-dg!FI`bz*gMuCCpb30BLJ!aaYu154^GHD5&`KaVwT?7k^3S~DAj z`R1ACpR;J=UuL;0%>~W?jfgTK59mNVIn%s=u!=ubVFOfqX&J$^CA3vSjK_**H$F87B{o%X4d=+s9lzF256GbY!n}88(cQtHya`yLw!LZS9)! zZRz@@^cp%oSc&roDxi7`$Jyh-Z$*v+L*^%)t741ymWg#o;dK`ep}^SQaQ+kI{uv_# zEeI^3E#B6d_M};GHs}o66yP$VBIZOd@@0*`rdC5_xM9_i_LGoP)#L3jvy0goX(SX6 zfic>cJH|T%S4FIydZIPpdRAQ>@FU?}*uXRxywl$6Hv9_Tnq_X9mD)5*Zkk2pkX8A1 zh(PD?(pY6a_Z|gW-eB5@*ouGzLQMCeU8r-M;&YNE00lA8fb@=oQ?M!X!-w`U=k1eP zyN{f=4_viR^F{^KoQ{Rtp@IGIE6F$LLkPQOmP#!IblmL0aw&uRJ)HYqiuw`W#LIzj z3`UlLAQn+@Z=hHc{1YE9mvuC{HCJ3(3502=D2W$mdqK)!cW>&NN^k{-Era5Kud+mx zXNv|KzRrw4gl(yo@J$+sQQ6e6f3S-%@v6d;$2FmwmwR4~W7$+A^4W9Qx^gL+y;0Xo z3a<}@DG%5C|1#(puJ`NQd6lg5aYC~{M9)Cx^DZ3csbx@zoNqU-T}2NbP@L510U<;4 zeGEF7bv)8Ngf~-Q1{TZjTsY*B+1_twgGMUqtABW}CwHLIJY-f~c8R}fKYPo53ILcs zyaW3XEI+xE#R(&-%TUX)GxxV=@2?qfGvcpkr2BI)NchJ@OQdO0S+U#!Lr$MdZCbew zxU@9sk5w-oMQDBV%mcj(4urnisGAGhp1o#YFR1ps-i!ttttG+}Q=%7;w_b)(n^NE} z9wE59_yBLi0bV`7)j@7mAunedut<6y@TFKdR`xQ__jG9j$%K)cf_M;5pD9s-adMe? z%=uO=D(dTLxDY=|L(ycJ4+Bk0xHB5t@oXy_a4x8kNm!);Salwt$O+NCKb<@flzbP6 zH=mzQ$NdFD37QKOp%)%$AQGWAMU`vuD2WaM1NokSV(0V79ey4lV!UP!<~K zQp_swMw*rAVT#$NpooHN3s-eqO)ChULi}2Fv;s|RVZCVcjv-7b8|41_iNr?Z9HDi% zbMm1C#CbKk1S%Nm%W<12y5?Z?KpvXyKRR1y1|t~MDCjcYTeHo(v(eWz74OY9@6W~; z8S4N<#tl2+)!-X5251d4g6jSn>{mfkv(AgnQ*fRB$EotcRBRyfF;-VhZTev9HYYZb zr~{kreO5n3P-1%ERDktIb3Vjs^RHjwiwz zDI-XCBc2wcO~Od4FTMrF~q-;U4~jexJ^_QHWAFc+0Wp_t4YT_c6;6xSN+xq zA9`sP?$E+sq#O+u=bmPY)*J#L**M2uKZn^$h(Dkrs6G72hvt~a=cFE+BahGVpPeHQ zrpyB=bFaDy)!v0it^WGWMN{mBQ;2%BW(u69mB?Sp&(OQA9sU_p*tS6Rp>*Q360D#F z8s_>=xvq0tPd+}i;kwQr_oO*{YQd+X!q%f56;K9}9Rn>v?$M*idNGCyPT7*i0bm-U z9c>e~?R^+$;ybD*1viWA@5!XNmGbRVG*bOGDWL8Py;1@4Qpw?mqa5h0iZ#URans1& zU-E&sxkR><+$@_*DvP4Mz?qfCSAks2fj?8TH(hv+%AIetaDys~wj5HW9u16q(Cq)a z*^ak6d%LjPT+1Z1OE5m1#={t<_m1Z4*#+$I&N+}ogjTU;2SfpsMW>yZ+S_vuZncbxJ^h{K$+`YhbE&@ekDko%o&3e9v2hQA zftSeAb2`m=ow63HH&dDn{1u&u)do=hV&pdan5~_5sr-AIeBrS7i>I+(?(LL&I^_>j z<;|()dT>Y9mu>?DakJyq1x+{>&`(m~7%Dp#pFDlrjJQ?bpiLX5v7>F8_TN`pbV;XN z+$q1FD)&t_r)%zSJH3xO<-<-5ILypA6f(}miUc6A*p%#S!bc+Lav9v1n8Ek?XLAZ( zGPU9A90#;P!!;`R{0A%Ma=7RqlG-a?FVefcg%4%zYV;@d7#Bf2>-BK18XZatR2Zqw zvo!)RaIP6fTRC*7n){+d5l>>E9HkQJ9Zi1|%T*QUat-OORB>qq)eb9mE^Q8Wud1o7 zgkFxSsAi0Ju0%?$UaK0|FctqHk`&O&voT2DkXbwkT!eVwsdI!a{t$L}DQ?Lnk|1IZ zEtb+UuKD}U(rSd?u;t++)+$}+h*}q6F_{depy8#KuH8Z5_ueY-mMT~Tiqxt0!I+}Y z<}1RFbR!;KI#+%<7X{Y>HF&W3a)QG?uPP_qd@(_hQ19OpxU>JBAYV*K|9b*3l9(q> zY;R!mDjKDv2g$l4)SBK9pZp5(W;=_DDs)yVOy+~3PD-lHr)hlJ>Nd1KwRBxd)~7zR z>rfJjRG_Z*c*V|ljDg2xYZ?m*5|!*6gBVMPfl{8zt#x(RlTK*0n%~L}69%frh+nko zP*h!XB-hO~8|K>E#r#Ul)pNaT=DIy59zW;6JoOq~exO`-pgH$I{HU?_$VnpqMf<>B zdwKg}B)m#u1DO;^CG5|WwPzQ~8BML4L|)<3aX<;?%l@s0;N;jrcu+Eij+7gEX0myg!?n z!d{xi!9d0@ga4C>dQlysf+2pz*BT%waMGxR85omXyuOT`W0ZQojn~#HOzLaOYWmk( z)#XvD^aB=e-i3jOq(>=Gb;D`w?x5X`d99FGWztU!;v0CN;_y>2;1dZJRXqz4-+Gzf zN_;{L-ZLTBnXS=U80Ck@d=*Cyo{-C~QjEU1K5W)yuGd9!5> z90}CC7(XMY9BfZN7-noKBcbW)Y!$3ic@_*_R@&fQ>?ZA8W4OZUei|9`yx$yb9y}PQ z5Dy(J49oVkQI7#AWb z@NxBR+ThCrv%-9-^ZA)?_W0WUv$mD?*i1P9tPh`53?YqjaZt{l38DJ&O#9E7Oo1Tw z7xcz|_&p4~H)hJ~GYfH2s);ts{^z|gqxFXg@)IV-d=6!{Dil>|a9{AwX0E#Nsn1!B zWU&)SIG*P~#+wxqH#2=8qZq()8GsMkseU=Z9g?vOm}w;xbi!{A+H%8-D|37ct5)x8 z*2+NU^AIL=E3<1fR8NkBso}Sy+(3Ep6tf%u-i}1Y0UktasoQ=8szl+z~O1yAM9 z4?(iZZBIy!m

    -z_O`ax&hbNxStIPZy2r*ereW0ghZuGRdo{`!}*vlD(II2aIau9 zP}SA$9DT?+x9HD{pjX|#!n_RRta;|#d8u>e$+`3VHs*0}HrF%fd8oQP)oGvZg#E$w z%z1Xryu_LFWX-%lQUk~aWS0x)d6&%7rIfySp1ovVwx09`(yyLpuAP_KI8Uyf=Oh1R zMj*%Kw7cx#2XH(xb}^Ak2HS!1#60uVJV@bkoyh2zsVf!wjQt5c!Eg}j6He$B{X~v1 zx?7+nADqyGxEc#6+z;T_>5va5hhFnuBM3OnIIE)&r8lj#25n%#&X0&F9wpByhO z)GgBgpd*hleYHSd>`^oGLWcvX&vxkD^Bt+n%H{HMd9*_waVfLqx+(HPhkAa`9AXYl z&xhv}$)j@=(m7<`i#<8VJ3@ZKwrVm<%~5D7!npQ9(L{bBhe)Tth-;;JUF=ZW<;_Ai z8b?=(HlqfXh*lpeXR!T(v2SIf&u8m6^H5oHs4i8ra=xahiXecEjTBWu8WERuhtfuQ zdwOiA{8t{JYldeEFV7FZIm981`91G=hcG70nmiK@6?5jV8v3Y5eidf1 ze30hmjeM56Nu;a>RurpUE8mO3V~JG5_DSGztHkT=;q#n-)woslvlRfwW^WieFZlI} zHN#e^NRKvc4JFO0qp~N93MGp?hVUYog2o{QJCzBn8fAc?1cX}^Jk;kAO<$WC|G%mzVCW)$#lq6i#1u3t@QL3^e^d0pzf_w}1#Ng_hs@Y6!4WX&hU%h5=lO+x6 z4nw)F-ACl~FyV1E1+BJa5tM15>vZIyTSwrQZD)7h$(@gM=X!Upb?090+~1wy8tDs{ z<}V5NFw&hDxbvg=ADZ05b-uf-Fz)hI{-?k_TGp?`b!)hPGFLU-QH zo%21Ob@%zs8}04~x^uo4@;$ZGrQDJqhez^NowjvELs2x0?M{L1RIXhdiqmaXp~OAP z3Q~tEPnd$BPh z;n=ZI(jb0}^P`s1heJch>Te^tj^z4`eg-$Aw&n#whu7eFG+)^!3N9w~eD!OjbN*g+ zvm(^9(Frc`luUMg?|S9T=#3>;j{6~C=kLrii4nVB~Zo&mLZ^vqy zc(~t?&3(+P#mg89)oLA5r`rl`PgCaM99L*T+HLXLY|T0;`i`(q3QRC~MeYFTDRvU7 zH!|{iMlkh#0UL90A8*}}X2X$k)sezkAy6EpOWeBI*)k1?8rfDs1vhk#w&PXcy(neE zRfo53zdq7@!#hObGCs0X0;3{?kN21HvNI52yyk@90sv8(@$qf`fOETsID9{}uHyct zqs%Qw;X_fy$Og~Zr7$1Z`{kjd%%ewXO%m8Aos57}@m1V2QhGAwrBj2Ilj2fpv?i3D zf0`ikAm>bWfmxV@Q}6zY5mOcF0FVEQwAqrDT>(zKLkn*BnYr<2t_5ehUq<_B^Dn_w z0-}I^2{;jo*`jKXlaZ1vtU5I_LCS+Hht3b_2=#+S&Ejw{>Tv!DPhaUA-Ln+2!ZfCl zFd)WXM_uCAlQVt_6->gPFs6B3QWy+lwk|U#Ezho8E+;LAcwuYiquMN>vp#ByF-@CP z6bI`F4Jt7BK3R*z5zN&L_Qw9v7|iV%QW9#PBR6#Vi%SZ^=eL*0TT9IEQK#VF)-JnZ zsgvJ%_MD~WlBM9-13{(B=#XjsKZj6gTTF#@&U@xHE-77z&CW}^aPX4jf zytb4Ivz6t8ghhx+kkoE2RKR_6^OzKOgn(<5< zrUm!Z+Eh+6)2meqXDd6*lmGT>fsv(6<&oy7YL*!;=UT8VX~vv^8H4qwp0&(4 z65N9FI>>J5@~s;-_?()4LLns^n~2 zZ5^ZsycQebruOD8xw9*{qs!dgrSq#FwFFIgq{}|ug=FdKn7Jl~8i^t+Y~1ovBl}oa6R>G`yHC8V_}d^L-lUWeU1F%jJG^AN|Q z#{l`$0#wKn@X($=G!JAFzduw$tqj-raL57{krrl@6lvg#-fC}){_`b4sp?ASTbN)hm(L#ISLRr61%T8Xs(7R?~ zdJwsWAiA&d6c*E^UoVsui)8CUbJ8M(-Ch*?a6tk7{dJ-IWuZK?P@Z0BAcdyGw0U-6 zp0gUy|F&k4oVmy&M_QG!AVXnEsAdT<9H8{+B#>^46GN3n7oO5+z_#}0!=%L7@%l4s z&^1sY4SzP1R%HrMe3c9Eb`ZyVCf!)hOf8cPti>x9dFvPP_SK8LYZhs-?nSy#u3O|? zzbM6;ipMDg>q|Hn-G#8`t)F%)tt4O6T0=MJHy!0)(Tj?!2;5X~VoB(oZY1$fJ-HPg zf%oQe|BdAkUvDmt{b4zst(|95A20VlS)TGz1apxfjS@LlCUkOU|zTh(dg>~H5ZM(Dp<{bc{ZBwl8U!G086I|0{o2oCjRTqWC-Rx3O~T*_~9)rejpoDcfqB4uS3tM?9($Jr7I_~ z`!^8D9|}>!1qGG^DU8p?lrf?nKteN%T&jzzj_HW?UMQH5>pa!EHZ0;-HG0wa_brr} zuarZKoiF1Fr0eeuls~=Dinc;ovt5s&HsmcVU0=@iIRzqUmh44T1|o#T&_zcM7eRNy-^<)e3r%zFJ?^ z+NfV1@Fjp0ncS*XmYRAF}ei5afV5l%TsXoY*Eh{h&f0(oKomrK0xK%u=Xjm zyW6L;igb0b>QFC8((5`F;4Q%-R1TF#p}(ool%}bYVs~0!jDO$>js{wkK`RVE`_IB; z@S)!J<{c9orjC7LWf71gwmWXes$*l5sj~X0BpU$;s^B8_;fVmmX(FVC71?Yi$d(in z3oc5Q?o5t^8Qzp^EpAChrI}J>B*ocbTy3T?JGg#$U8=EVkj)OQ?>(?$XnIKf(8Q36 zp_w7U&7J{1Q= z@JwsSR}#j&s$`fcK^BBU(`-zU<|O9!2C1%FR1zgJrALKew;Ii;)N5H1b=55aC8PIh zD$2rAwkM4ojH8`cX;=ZyS~{S<wh|PscNqbaD03;GC`#1oj0{MPm)aE1%Fzs$6L58qfxfH9LuVQ&`XptwJmG0>6*# z-KU@JyW;@cKemGzI0!*)e6Sgmz+rG7jsSD39f#XtBS)GMBT+7VM#k9D?-}-<7tAV%9gWsmp2(b6|F!N+;uo$UNcj4tdlp^cHv= zS&o|wK26NwvBgb?d5i8hN4N(6MA^jmdR<_^i~U1Eq7KUbRFEwES%!buSd{uhP!ttYacli&^t{K$#Z8(6ezfkJtysPt+)wN_pWY#4ng1>1xX#$~kANP<0bXPsR*3 zvj4Pk9x3>7A(heS*ps)kbE9~yN|a&0~j#*Fi4L1v-wK1*~k_%cC*1g40|ky7B5`ER*iujLA=q~6}++J^q#a-(ciH{g{;SU zUI5z*(mj16L_VXp2 z%lPfZCGyD<=7*+N@dVoX!V-CYN%Dmy=J_RhUkRg0_57b-V*k8E{^Xb(o0iB;@UJSd z*`_Zbwpd~`PlL~8f(GL~zYJC*i%T9|M#)z%Gj}eN`<78bt%nJ2Uj}a@;+InM=@R+t z61ig;EIK%Oa`!T_T)0FoT4M0n?s`}QQ4n&48Bm4nCW-2vI(}0lVYPgYnI@1D@Gzax z6TRI`4K1og>1_Qy5PB)!}&@~VtJTt3OZV>+tNMaC^n*nVR9=pK)vu@lbGJaJY)f}T3$Eaxi zNt<(`DXU zX5I(qE&G0n-u^ML-!G}qv}GAYQ}Ae+3I3afjy3Ntb6)PDS7>S-U8VppWB}4!OE^@l zulM!P3{2qOxCF{FqC@STK_kw51c?+SgkTVxQKwSvEA< zoRx*8va^xO3N9+zk&rRPXp(CLMfBv^=*b__ktg7@ANUoW={YOY__~P2b-h>g_DV^@ z>;&-CAxb!0P_Z(L(fDO^_f2aYFrALT64ErS9Wgq(_>xs^rZ}giO)j&5vFTu8jf^1@T#jkury-5JG5M& zT0vj-?xp6grQ*(|oHs3%o0ggduH5n)mzo=viaXmImnP~}S2Fp~VtHz@Jh_;i@WI9G zVNWjRbJ$|h|Bo&fQDubl_{XC!s`v4PlXmYW12{8pW#dQZGzc&ItuS;9kI(C82I z(WFyb1I&k2Yvd26=<}0+4E}{n<)WqVDp=ldX>jPb%mO<3UV7H)WUR2b^a;pq*7K;b2kjY7UH~4AiUVT_6?xr^ zr?|a%$E{wbXv4{jvF>?&)O`k{1Gf?1X^PzfCm8|u4&B;NxYxbfJt0Ja1@J@lbpe*4 zG>jc5nRSSmg50Ov)rCB*_YezU5K@%z*5V337eE&1yyq&r9nUkN6ef608;!l&6Km;tAalBdIWx2xc z-F8Olywap%kSsCpoV?$ITfD8ltO#ykBISyr&-|iyS4kYDXXUp63%x*V!U6b60E|3y zv|Xxbo#H)Q0Poa*K~EDr6t9M@atMUp?r0g6?uA4l{xa{GfPkZ{*DDxymL!%-0whj7+)Ptq&4 zV`h#ypcrc{-58uNIk!-e9sR`o6b5jToxQg=2{V#zBu>!*Rc(T_X4e`G&}-&C$J>J` zwKo#4T}Z2Bnhc_OgE=A$4&tOIxMDt_duF5A4TQQD?ZJ`kX?uf)^e)R)4yhPkond=x zs4H)*H(?WBjU$PE7Il#O*)1tlS6icwCxmq2d_{olvHN{_lzeqm(nNhUEwaxt`%sJN)7v!G z=2NhF^`i3p{cpesbj$O9E++~KnWzjo|EXy=CAa|7{ z^PaWN5;$(^LV^Z+b!%WSj8ZrO>dYUqim zJS$vL1gnvuWZ-ya^8j~H4n-TVsDiX6?lS~NW2b5JCIU@LKz&QGSt@8}X&jCl|ga&^p) zS918VH(5D8eo(>{#b>3q=43_j$uW1i%iEeG!tm3yx+1J}(Z(xmKGt}}E~Ew9rA_%C z(!PQ%@!v8|`yVp?;(tgxRTtX!UvbshKJiMOPunNHsukZp@t&|~#cD~xjJG@Ci>Jez zqQSJmA-_0QK0j9eb*wydyj*AGTr0PopeZN$^178btbn1B56YxZa3Y|0k^IzSf-5C7 z;vs@!7=3G?eNf-CcOR$TWA#_Z0P%v0S1BrR-YSr0IeC@j*6@7hDzSRK%$QGCN_@Md z@md$YpD(z(I^iG0fBram;keYBB7YFeJ$e4Xn(F>su*rSuT0XUo53T2ktJUkT@*mnR zX}mUZrC<2ai84+;7Wuo#1vY-Z^@xdczD@njrMR;ph1|Omw1XDireQneW@B!IaNkyi zhg=nYO%?8-3U~6v)#~-Jd=<7!+P(_YgLB(~O*^E`29bIOU#K>q?SeA#{XIllV@-~BC5T&-ST z&wqEjq&K{NwDia8=8O}O;j+6opSk@nC!L6UAI#$Mu6TzhcY5N^<~sNFyS?4-+Wv)` zPLvX43mZMT))RL&m%7Z?d$H?0x!x0ZHkTC=@iC{g2VBHtrMt zK|8S}gW}giLRY2S8J&z5-RGa-^N;cQ$9dvv_4;c5^V=o87S_d!-wDmTValB=XiA#9 zKZaClmK=sJB)f#B6`H9wkVx3!QhR5C@11?RSlxM7o-VnQc;;&Lx|T>%0L|@^&I>BF zsZ~0duBj>yX3;`3>VeP01T+t5=URX>TH*^C7|ga2j-I?l|L)$Ar*fL%;y2s{FxkS ze<$HHFoD!063pbs2YteJ^Wy`m0jjtAP)&s2B^rk-z`Duy1Y5u&(yk<`Y8+_vk{^Dm zc4e9HAG&SmbaGXJ$(sY=Wk6m91YqWdYA>}w8-+Q7GV9gd&@(@mud%5QwJ`Y;ohbZB zf;%&jHd#ROpD8NTd3v3d>y;FAsl>d7M23XA>I69a>re1QHF%LtC&22z^@RAM9y=$C z!?1;ZX>ho)ZU4Ig(8Ycrwq4NqDNaW5vH`LiWD~edfPJe!!i<6d((kTx`{A}XfsH51 z0!U=GxcusT$J%Lr0w~>L%k23qJ(X6#N`>-lf=4 zLl;;r5@?30C^7tsLt5Yj&Z#pw4+S2;_S)`F$(Y}dK`UJi0_`^WWkxt--j%XgL~W`#l6}{)Po?8;2uJVHdaz@r@K#a zpSPiiyCok7!OlOYL0}b`wHzAQL|H~@5NNfDwji{+SJ6bKM=_R1{kh+XV+#3N&5?!t z8Vp)Zoq9pg5956`%*KikOgCR%F==Yg(Vealr`29<=(g|W-yinBd_Ry&s2Lv`OS&iAp~H3#Km2rJ|xrNbrmu6AZ@z!Hlpben_k) zd2pf+wrLR_83$%3qdQSj(ojCw46bOX9&X0ejHw?E2Vr>A;MUz+)=FEiUWfM?ZU*$7 zF<=C2``F;&Y$e0lug2||8Z+1oXg_2e={v{9yYx&@+{;|23e+WJX$ec>oii%-89r;~ zetlCTC(fLGVkVgAY`T2=BC(-yHbCF!!NU;@M-_xii2E58eOQ=`dIc0HQ-Ids$&CYz zG@L+UJqSS$?dYykAZ&vu2hojkZ3IcqbzD3bJDXvPRWo0MWDd-UiHU)XUWf9rS{VC5 zItQf%-I!M4yiJWHeYk!M4TvC%??tFXn~l5c2!6vCy-F`-8rLeWN+g}3Ezsi-r1}9C z@@Q(o42rw!)6i!nL1_*uR5`Nh`N@`Ci4IsjfrK{)4x}%)|Qqa7T|@clNeQScVy?!zXAH|IU+jbK6i?_4afG0^^7b^KwaY@f(4D&xp!;pDR#T2U)-?K(N zPsTlEuGc|xtq*3c3uJxJ;LdIC+^5HVmAh~0kut>H=kqta`?NdPyK_EgK0W4Adb@MJ z%u()sT#uZAyU(9@bN73=b7PP6(e8e1cM3ipb0E{A z-|t5q8HbzOTeW*ZEb2X^3SkuH!UnpmjY^OT^af@lKH$Q@s~jw0$5K!^5{g>%+zue$ zG_>1liBz5+9GGK;y9kuB+zzC)pOR~VGL!Itn9rsB!fkbbSQp|+&_U$T0NrkCptOIS zz4w?No;`GP+>K2`ol2_aWcQURx9z!+^h}Ru%~!_rC=T#A_m0MH$shS=71L#1KE)Yz zlj_B0+@ zYa(>7s-k_vM6`ebikk|Aa~1Fl8eoU@_Nr0ttLIRibCaRnNwEJ(-jjaV65VWUO;J%3 z`{nsc7f@N-y#jxyAPUbl7t(q9r|@2vmOg^+C!BypD}~^e$wH;-5K=kMI;BLe1`>rg z%eqk3hke|6&^mlmMXe~ae<4NxyioZIinqW~0an79q-)Amy@Sbc6~T?Jfs{5CIL?ek z81kNcikMSRfiB_t{VK8Fu9DPitH@zNwq)}vF>mwq7FS#`1q-d&6-al}v#2)0D46AHukmva-(}hSC)D6X3FtHfyQ1(^)M&cjS$K6LU zw(SwP3DS+2<8tl@XI7=tyHZ;fC18%IG&5q;$BkzK8qZYWqL!TpJTLxPfBCq-{iJ^hXRj6~VKUzw ziuV@v(OK&6q0(GkBCOs08>6@>we^b&C*j9^jI5Bn+5!7p&~3w zn(K3qc%32hxvv0@jVjzLH@$%G_M?XfsZs_9zIxE*oQ!qI@bb1YWGy%nl9KYuM8$~8 zj15b`MB`NH6t$h#;(t+8RK=2kd?O(%s^O1CyW0%tfHOw-OfFtDab}lZu=@MGzIYS){LkXFw+kxUEY8lR2{y(j$ zdV&UEIfy(6WQL|9Y1U;G<-C~lF%BgNW!1%}D}bv^+dFjy@>AS<5S*_+y7;=T@W|pl zOenX9L>`v;?u^Ubpy-856zg=O&iG)F2W1by4&x!kv8#Jb9fVk(=VQmBxOWEg78p51 z6iD?p%?UOFhFf*V;Ygt5 z`ZEJ@Z*BQ>t$BHi0V<4%N(4Zb=+*HB71uB8=hR{z&gb(lT^R>h+( zmAY#om=Vq)fHUd(l7bF}qC5*&Um1p15tce8y)U!z^xrno42Dk$1= zsl@Oou3$jC#CXK`R^^8b4Q^Tibqc(+`lf}&1}Ty)RyIf*n7`YR zNq6oJvnNC^S~ZL+C2)-y(@Wp)Zw3_eA&V^9A7&1S9gmhIURePk2-(p@TW*d?{oMQ_ zg`g465il=?gupC=-;z>=c=m)Krd&EwEzr;-HYR#gg&(Hp({B`9VW!A>n+Tq_OyUla zJGn-8p-d=dyzGh{6e8*S^*5}Yv3WL8ex;0(e~I_Gct45aXsW2ui67v4KHu&<+0!??^x-caWdVzr=hlH0VCEX{L%C@k=YfXI_ z)l}8F-{1$r--1r;W>bP{)einZyTe`sThVFnD0=rYN;j7wtw(Ci`NGS9g_u0E)EG`c z7)y>lMsX5N(arI{IqN$2GBCX2i+S@B%#KXzo|Ukw)fPAL;7a;5OceqwETB~(D@1!h z1I;MDqwcQ(ge7WgB7Km0HpYn6YFhLijXCfHYXe&airWju5h4|@6`WRe4_}h4+MMD- zb4~^Ayo}gg<__1E8#&+be`w3~w1o+odT}N49@+rylz3{T-f8O{nH5N(J!(~?Sb^Fo zsU;KIMck`(69#kY@3*^6buphd)#0JZFZ1~Q%5#A7Y=!U5f^#x zVN>3b!@2pV3-gz}%Z-onm)G-`m-89F%X{1SN9f)zIK9}K|Lq_7OWs|^SeN0q`Rs+4 zAIm$B$orEx%w@>9^O5d+Et!Eg<1w0eHo<8PV=L=pl}!~l>z!H>%ct?m5|r*djzr-q z6~nhnTjHLx?)L~m?3eNFB*V`}MW6|voPs#)XE^-IhU-n0wF~kv7jz#$5Ft|Ue@(ml_b1JWYUcD46 z4)=`DeIfInuz|PB{2G~k{6_~n0JV_)#Aq_Cvnv82D!MUOP&-%5FL8hn_(`X`3{cliTE7CV@wCV@+PS)3T>jLn z2#_U#>-*m`g~BlLvKS(DRb?I%^SG#G40|YdJli+4Q{)r+$9&!WwSNcP7ymZ26JTs3 z#bM*MzYXOPG&!R0X#?c?RwtfxXFJ~8IpJlgzs6jNSF(SjV8RvwGu>}a-eb%qRt_rm zWuY7-RoI2lq8v&n>rINBm!rW8Vo6%yr#6z;6t95(vfO0ZXUxT#l+?481qS)BUKwts zM&oh(TE?F=Nc|XkR-#QtrZGu;R}3UW&_x`>vL?k0{=mIA%no-YTUe#?3&`{!OEI<| z=En3BzC2*e5w9jO1ips$1t(MSq?M*8{4C>uk$ zCY0MzBCr5nT;KXhc__3G(gvJ(JQ4=^;eR|tX&(AJ`+QiK5U(gXM-M9+S@~9I-VTRl z8;Y#X7X{1cAzvVQT1#4c=TS797E4Vy6stu3Jk@tQi?{(+?Gr6;x8(wSiKe|)D z($st!wh+pzzMSM{g8=wJCc!*N0j?n=tFa4)tZ-#{73E>s`uHe+Uln%3TR_H)ZiqoX^h_-(kstndMU+OtA40 zQCwLPp!=^U3Vrf6&|47)a({p>qP`a?M$g!=1l=e=rJ)f=;XqY@3*13s042SApRQ-o zsk;ju-(XLL`DqSjTi`Kqz?MLQvTVwbn7&MAsiXA^a>7Wl55pR93x5X?Vgd-GrED+d z7h3shiM&RHWb-DGVJQ0#CFXTRSY>aQ$XjT=lfn_bjprBpPKnb8e7A(W7^O?ppwWi1LbUFOY78 zx@L8`J(mb7RGkv+)#dJU*OZ%eypz4QTsES+RjAOl8u|i9_DUS0Hy-#es@j1mu11X; zt3)~*xGyec?JZ;Ko&^90yWpmOu5$RpedAYFrVs~N5f8uzR#`le7*rbcRlO}1 z5=Pdzz}4V(Sg;^P^do*Bfv2c6Uhg4ui`Drd>dVy(6{M-Ij{N>L!b6>)%+`Qx6IFoS z2f8a$Cmj}hP9R7Qn?S}1;gA;#YE=#PH%W6pmaI%9CZM`?RF(%j95f#*StpJt+f9Yc zYUh{uIH~LM?ZDoav$yB!O!zxbJ;hq+R%elsvt9`S<&+Fp?Mgw~& zA3}rTf*@R^hy*shOhiC9L0ABva5@1+xT=;NWDqDki_`TJ3q9Y1y;lb2T&7c@j2u34 z$-(UN{H4mlzYf(3KRk;5rdRW?WPdIjeN8Qhsx)U{#^rGN%C=3c%ALpNUNH?_%sUX1@$?GS$eZHt%(&Pmb6y zE5-bR70h734R0tUfW|Y7Cn-f;VL#@r=nbF#|6LySe#4iSeFJ`t_E!M`w|m*wx8dp^ zWMq|JAiK!JVk3MmQ;}VW36nrDLo`4PJrk(s>T?XXtg82`RbeAX6Yr>CU&&6@Fvvn| zs{lvYSL{uWG1}^cG^!RJBj$&Wi}6$|L3wt{@&ZHPJ8BE6?}bqNDKs0>Fe6kDMCc3N zQ`O*+T=VtvO}8tCfqX;Xhd1oXE%?<4iVM%>{H~f1yK<WgNiz#wdU#N}g7pRs9&K&Y`qN%(3w_T}@B&@9FP(_MVoZ z-&5;LwPIF#u~H5#Q?)KMe;vQWY9viHF=DRFa_%knDkxJ%hK75aL|VuUP}xyEhx-55 zc)Y4YJ))3D+jlh2sw&-wqmD!SP5a+-8Xj!<^smZW#&KxB4(44AUmkN~tr`XN1G~1m zxA6I01$62xr2>tXw2VY1;QEP?RNo#2KOGR=Y7nUmPL<%mOn0r$Kkv$Yo`?_OXsI5G z3LI3=CgjU`y%epX&laxfIy1Bfu^}a|#;pSy@{IR7(h>$ZrPGBSktwQ$Xh`Dm{HSUN zs^FsNj}B!U{0&^TQ(!Uj6>TQJ6{bf$?`t?X4&NHKtC4M@=a4Q0khl+(tcl~uFAkfq|hhtrK}e9M##>hj;!&ZTA=rlh+j+I2Ij zg*t<2pfwt(Lz|xA=>CchdWc9eLXv=E*=_IUX%ItN&$kw z3`QTm483^}a^C8{qlzA4SV8JFF(w#WHx6sv_Dbeb?{QPdPTVD92JBof19xxP?L>^> z$0Eu@mt&W51{`A{W@itN$VX0zcMRMmw_6o#8$~&rX>}UjYvasX z)5KTz=V;o0cYdovC9(E^#2j>H@C6%A&vhKf8akNZAOq)?4Qd|R%n-NDFF$O=qT<8r z*~D9DNlk+{&BK(m|FQ|Rr56K;$vN(3D{O5rf`InGGJ>QxV;FS0^v}eK`K9E{Dduuvc}i8 zfrpwWC3=SOt26zN^QSewB+-k~^a_(hl|UjA|dvZ<2hOj3mQB^YO z4C2a6YCRpHY;qg{tBz7U^F6a6w?=i2*2l`5%5GM{HabM6>S+sl=Mxgk)H*F99L;2F zg8CR{^Tk+TX6q7-@dnfAervFeS`{qmN$b~ao64GFO{TfHiSW=(C;6=DsyXzy+|A}E7$>a`<8AK+b z_`uar7>UY=ff=d}Z&+M(-p!<8riZ5vmEZ2?*x%7+BsVW@VD)-8qn>O0o8akfQny6~ z^QY@c^<LQ+$?7SWze^OYxP`JbT9xWsqm2U9=v5T#JM)oqnTsrLwc*qt z)Or9(_Cn1K#})YS$ht_tmG1nuxJ$6kBJHhYM;?oh7;iiFV|Ke|TUiRP(*8fn&I7=z z>RQ;d_CD?QJ9F=y-V0@hp%)PaR4h@kCdQVcvBwvEG5^a;@{#}|ief|T1?(NgUQn=r zU6B|I7O?jk#ftpj+UE`oChxufA2{div(LWg?7H^q3u6}LY3fyK##TH`y_nr0id^y~ z*wj}X0m~S_6@CG?J#f*HwZVZ;Tb~@ zX%VTG9xf>-l}(v-e?r}vBM(GY%|N9j)Iw?y{oBiap?a_6E2K^ltZJ+oNW|!&37c+9 zIiu!kfNW?!r2tNGWlI(E{y^_A{{tOEtQ4tEpN^qMt5aP=3CHTJFh@BSWVl`u74Ix$ z$Lccj(3wml&<{jgET{XqyZKDU09xvnGbKwJaWuIusF_M!G2+r0L>w9QrKb5K*Z@%_ zakxc-&ny*8a*(wmLCRJvzJb!p72%ag@T;Jz6WTVN@#>jW(VJY{2PKG|f{(p5J|i&b z4owew1}eK7=EQW?ouehDrsByP_?7P1ing+HnhCR#2K7y#bJ2!wf>s}oMegO5fEgz6 z0IZpiT?Ev4LnzRL$Ok99)K}9z?@>A7;7OvLV5al$XH|zm0lP7Yk+j_2Rj)Bv&XG@Q?qZycZ+yynmGYG@a1zDFMkz^3NM_)pq4!aWaZIw;B4r# z1gXTOi==P?0?hLliMfm`_o;sOXw|>2st*41{3YK`dR-GBF;MvpqJR+5QiZbd@ zqu@P@7C<~3kEA^Ok7ZP&$&;4W`aytnhs_S zUh~|pn8U9CvMV>m=EPbD{u2CjL<^*1)gttn+~kB3O?YbUT>u8aE;2EsoM=F+Y=-xoCb=`XzjlXo0 z?mdT2IM;PAsl=x@O5v>=(OtSx%x7G=PxZT}dl$Lxy@X$7<%S=0??pVD@4A;%?!pb- zyFk15qD3?rQ*Cd7>^xs&fmlKVSA4|>(q{G9I%X>&q0{E&vp0^}DsrCSc#`8W4jsA2 z&z78~@fUG6FK{qqcOJ03J3Ph-AWUv-CZMjT^jA80HJc_i_CX!soGSKFo;ppFroV<2 zAKfT};>SwMs(ha}rBO5pD&D(MI^##W7wRLvm&V15S3&>qQVrhfSG=Za0ujA(Bi>wA z>FHTL5i@Y{jj%;f%%Kq9V;2QNwk=W6v&|B;;^y82h-ZvV00?D&hk*bqq{K3)!XhGP z@2!-3u+gV$)U}U<_f{6~uFOXsiyJezMyIgXP}Vb3Dn*IBTILWIBpgoXY$vZ-HPJ#3 zW+)4JkBW-HbWRosFa%NQn(9|8S69oL>N(!(YGlB-CW*y26}l@TWL1W=v_`Ey3R7^? ze{iTkpHC9znfJk+L7vAn#lr4?`Hg8&A0B7v2ZZA(saScFL}&TtOyAz?n|oLncdObC$XO*aGH4^+)7>$nj*qCy#JHiys|_!vON}`_wF_H_7KH=rSe!^6vw48}@99 zP=A3!pVHmtvqsYSxlNQd-!;m&jpn1qa_M&)8M|xR#y%? z6pO{L`i@$B%h$hW!41>~)g9c-0)Z6O4sl>o=9TrVZvbI&8u=1pp<8k8S znth39zGN1qRmtnji$&I4hO;;;E3N5YZ!fVdWy~D=kbd(I9~bZUyYRy zta;y>lXzV2`jTF$$ZWEn>HEdTs+4~r(=XPMIDtaPbFBRD3(`Rw24)&R^30V@PUhg5 z%bG}6(ZN@@X``_nyw}PXt+HVNK5UfJ+RUkK4vD+2Nv>>SAg)u|{-#`MQ7#Spk+2NY zjd@Rqd4+Dv_ZX;Mf;;+4sGP^RJ4qyn79$-1<=+(Zj=;{VLT9F2j_J|J1_8PjL@w`H zejl@?VI!8FzEsRJmtru-)nwLOisN~(nc20cPLR+l6Ed2{_D@fWf!qt5}2>u1|lT)yaVQSFq z_}?+R4A8-aU_L3WXNHZ99QRqTp% z@u_qgWNAeX5^UKR6$ra^P0y@+1Y#Oa(`SvnO#*o$Xi*K+PUnl3@`FsS0SPUJ`1uA|= zHU$ZJ`x&Ww{Jv+WUe1qeZrWJ*WD0*mk&iEP*E+?5@aJOAXp?zu`ont>RLPlbWdLd` z*%|oGxw=djw#g#*AUdxN>@`_WHF{!{#JA&%r<8MCt3JW;M_XLGxWi%SI z2u%j#-^lrfi+HpFK_y3~$fuky;u*h%sv(t(pxux{1!)^bs&;|NBD=}SYWSRVXR)nm zc1?4ZKllc#nhX(01YSbrX1vf8>~VE6i)C~i#|gKRVLrX|hwXZLfh0ad4q=L;WC`#_ z+xk6FSC#Xq;uf-w%=;-Y*o?4)Rpf(Msg^)XFgQ)C9mSB>;RtYirae+A-5{AtY{DOT zsj?SO!^Bs`XXWP)ffgGF+|cbn`P7x@L@H0couiv$>oW7UmUJ4_MtSD@l*=m*y&gWa zmhXjh-JGksCBZKpsFi!CzSq55X+PzcE48ZpZheo+Cw2vf4RuGx>{3gVV(b1knC2zeF3ChvlZu%CuqX>!gzprYNUO z_^o)B024LT^f2<2i>&%>>aI~$9!HVKBP2okjw0YvO+i&_R~hy(*#)tiM|FR!sfM5* z7Ir3gAa?aAvjcelBoggt!!CRm8)#XrWo4-ICy2| zAu0NWsrZ~%ow`gt-T-Pf#0lu%KOLZ$J}pnof$bxCkx+wQeVr^{k20gsy;mg=EE z+?^Wys1Pp08&d4~^-w&M4ejPg_I3>)NMu4Y%pY#K)?oHnS5DhuEx1cgj%*k~OgL<% zvm@$9V+z9|qiaSrjcy=~$6DUiJyynK$A)9f*k%q4lE)^-+$dv%N)Qg(3{?WfeV#F>v0sC*LO};th|Fo;OsU$Y?hJ{PKOYRW1jEVIp>qCWoCAc5yX#dOpDdT zPHrRgEkl_WRj&_gDx#@aGo2}?#XSEEX-A^oG$ zWR?UhBTzKCB3ZgTnF;J)(N@{c`ZY?DK_Sqo>Zk}jL)~|=%60Ln1Wm;@)k^5aY#=-- zsXrSgUDhA2>w4vJnql)*%VoGb*Sd3uJCAVZ-QC&tJLl&c z{L@_o(jE3zEWeZQgSN3FQ3cjRY~v0}UV_8U>`0JPVih6+^YC$4lB4e<}YoR3l(W`w~N!1bLNfC_KUL^i8TozNM_@*tf}LVelp@oUDPF_Z+#;^OQV! z`Ywr9aQ}DiSzlVtdy@Mn+#6SEDcpFDV9+(ehs{8i_itEJNhCFZT4n-1wOFgIFe}ve zKs7=wi`dn2Rh6tN>EX421b$n~&JFLd*Bi!ml}2<@zyrI*q5!Xt8PjFE65HexVLt4@ zAYEgm^4Z9%^p1v=un11fMBb6~y4)6`Zas@Y;=`D%vjMqoe?aX71c_iIOf5@T_*!HI zC{Y0WD>+PJ60>t@_Byj9D@(JW~eT=DmQmq}-ktnUivmM}UnDTVkZP`hy@lMvt zN6@BV<|5l;vZxJNNm(&&U55Q%| z6n?Ha8}s`4L0ZikOz-hBw5r!&5Rj=@x)_9opWlFm$il^NZCOb)2$#q3NHMZtBY_41 zE)eSBp~X^l(_+ArTun(=9_HT0X{1tm!e1B-6GD4x&D3%m5OH9$hd@Nf-ZQrVoOmg2 z2$@L?hu}#%oaP;G*4yfe=rU9BkyeTxM`YyY7(WLr^rZm@j;5vBP@v@Y@@N<;xEN?C zC5ti{{hMq|Vx5ts+FLnK0`W{gOZ%ypDcnoHGi}FuM`#b@_+cwP;;e!Pm{n@MNsWR( zuU99fhr08BxwCcWaJ>&Vt!4|}G4)8G-E>oN%RMyS?G1rF`5yI)aSgFu+3=_f`dv!4 zF;bYQz#GqkXGaMA)zfNG&ZhJ^9LU2n0X>Hml0I$Kr&V|{;%DxlPa8Kaf%*j#W-2To z<hewP%0k0S5nn3O4D^nQt>E~L|F!=q}ms?XJ$e$$mLh)RJnxn#aA%L zHgSAFu6^1)U%~k)eO{)&vf3-ry;n&7L^yqPw7~1yc>Xi&1vw5KctD?T1_^8VJXcP& z5RYY>hT#6CJr1(+ipv??2B2vT*p{m2`nDyock+XUJh}FA@$VpgJJ(IC#?$2MY_1>B zs!!P>n6mm;b}ji8PkcjuDNcd~Vsg>l`uhiX@zNy}VrV%`-JBFl7@1M)>xwi8vE z`$X;+`A_qEWdBDx(@#{C=%*Cpf=W1D!irOY9Y_%m)VnZ_{?&%L5%&!_d2T8FVZLJ} ze9H`f4W)=`j7vf=+RgF3$}?}Bk?)OcZMK510_@57?7S*_SA}wFs}6+pQpeMP1XvLJ zfbQsgItQ{#usvn=p;^YaD^(N!0F-LpUdpb5Oxe*SbSPKl5G!V*l#3pi<*Cy~6uM~% zpGvP>iqf&}&>75u47Q$Nk_@IE5rtaNM1SV-sA=2!2}{{W2cRfG>+xG6O=f(4%{S@ycK3e!L*wd z4C+%HS8?3RQDEnVv(mD0nJXonVW0jZgyt}M@&<53W^wGQT&dRa;O=u(_@WQ?Wy2Z) zaGAor>U|x}{N=8l--^s2Y4JxB$Dc&)vpPrLQN{5480Ztb7s>` zmCeP?QtjD#(_zLGI{ZQ~F6~#gHD+9B*<>^H79r`0@zvtDW=&gLs&gvQV=EhqRi(;& z)rjgMA%&{UZasBF>rCgcwyJa`ZA*EG?a+eQl{y)O#K;gCyTNuG)%&dj?LKp(C&ak} zxbR@Wdx>RH$KfRopiJn5bv?l#sK-p|Cdq~v_e$nOlbw<|i1684Uvm{}9-z@s=BPUW_!B$2Q0*h!`FHNTtvd(qoLC=06tJK@vq&o5dq9%x-}bp{ zsI&hp=f7V=FK%D}Ex$(O0S=yq4_+gck!kQ+mFg=0p~Z#%g9;10nn`A|U3Z;$-(QCy z64!M&vIXo%=2GARz>o9A*KT}w4BSpbS33&NraI2IkEh?*I86Y1%FtjtDcgsOj`WaAzGTWZL;f?VE?; z5R+@4Sp*w=5j%i9N(wVjb1P3w&0@}>xtS7_6fLParioPpdKa08To*0pysTdrrA3wJ z0i&+_Z=tJ#@J>K%!Mo|&z6c8wSRX0Jo{4oUf6jUUGu^`59F?M4U;8Ej{paE_XDt2AJA%Fcr_3#alzGWOdLVxv#X@4l@j3gDuUraR-n4<=tfgv!UPh=~Qk@M+}=aHtllc%F=SdNJFHH0r%Mi0x~_tQ>)@%;>kO({rrL@%?Sg*N{|{G94M0vXy(cBN{b z>>|CajoX(<`V?fY!$C_2$!b!1cQUSH7jwmByS;mfB>rUyxq}j(mZ8(`q12r#RAMsd zhF|Y1>iTY1mQ~unM18vt@hau7Qq)xi+qKq1qUrKb{J=NlF2dFBQE+B|7Lg=uVf;a z$mi_?+3%&fzokMrNGjNxmxbv~`^DlgNx4k>pyK|j8k96mfJ8$jI@zbBX zbgMhhh~JTPH#@s?!ks6(bGti_a_7h52Uo;3c`E*4rF*oWI}dW_9(V3==d3&L=+0H{ zJj9)^jDNhHyE!qw$+(+exbsf#{3CZRxO4ob0WO_$=gs@&-w?lIQQVC4t$TE5+>2Mm z&*Gm>a!($OvwrDr;#S3d@=W}bq3%K4oVc}ddQX?XF8=ie@#Xk9)cSrfk?F22K( zKh!S$!|u4bfv{;hoZ~5hPY5oPF;^mr3X!T~ZWh8CZei=z$nWy3Uz@-swy8N4a9o! zH5{-ZpNBqjw2D~|L!X6eb7E?1VJlEhIVI@SrBRzyhB9$B6=BQ{G(&vQO|%Vkap3tD zn2UQlwQ6#n>ijgiV4$b`nzi=va^S{tzLJE|A$}*spQ5dbf2NTRo6{c>Gxs5$WB3Ei zR%T{gd1QP*XT^N0QxUpk@e^H{7_+gBu!#4CUkZu~-_9ZO$}iLBdIZ-#EOz0;l2$gm z=>%m4JQh<~i1|(fe%4}=t8b>aT^(253@uoNnrNL2w+%%uZG_&1>44QuRyFS>$V+RK zm$uI2G9cOVWm4SS8}As!it)Hz+xWF_;wj{FbW^SURDFg-pIr}fk@5zxae&Kc!Mxma zkC>Z4{K16j9sLV4v%y*O*x^k$hcZ+Jq$PZbhFQ~DEpU2t-{B5D1kPbHAH5vOE97EP zt%HkC3>wV_g%6>0&@5Lc%$x*BULuK-4Fg6MnMqy%F_BlNtC>oNvN6K^+V+G){2zM^ zBH#{Ohpvv~NIDf(fj;N;xbaK?mR;I)y>>r){TtLanZ(O&{OCQAR|$z;z5^$CRpghc zgJoaY6RjF36_n!V(f{;MUX3=j+Zb$+yuRyz+OS9GrqtIfZwC~-Dab#Um*>GHYuRIJ%S(Wlk+OEIE&0^;y52Jdx14)h1}OFp*_<2oRqB`gGwantH{m%wLY+5 zZ`^)@m0%ili>_wfAjP^*+McCv%J#?lu?UGd9C>XtT1k#&RtQoMbYOAhRztI@?QfDO zax#uZy)&`_XJzi+@T`~{pQY&~oe)uaU6p)KN8*LWO%PPH3D2%mg*SQr7BVI?al>7b zD0uUjIU5%Ulq0XwC8p-dIXq7goTgq0>%0juaKfwDf%0Q$$SZ5jB{g;%#oa>c8 zm*{{;Xnvd|SQ}nNjgwE+$qGy(oIM`YzkRpPd{C#x9K6w`;blqm_d0pDP9yMuJgIsG zP07Ri!L1F}9J;tbS(NB9IJHs>7fi*KmcjTRDI>^q1_=qDpoQnYM$M!1UX$?r*TgK~ zE~)M!!Uu6xg0-_35^oMT0U$)RqyR&Lk723uM7uoMu3TJM-ELlKmzUekOYQPvySJ)c zUTF6|Xt(R%7BlS~WVbG29TXq>4rq1oNo8>J9<`w~ehSk7CB+%iZDCvuP{z43M7U29 zyxUb?sTQkDN_twC6bqkDrv$PPuLwK{Tpf8ocF>BK@`$o(=>o*Vc+{u)@MS?7_znZb z4{`RT?Q)BcwH%~iE0$P+%o0vsb;>VpN%93mj}AeE3WQkVhh9((P|X(P>~^`X9pU_< zcDbb8zM%7TrpPhiTuJ$h{8|u+O2F>TpKAgt5pzOf511=ywI@9%eP}n7{#aCF)NTwQ1CJez13J zhR3fg(~k~LJ0)No*Yd4gwi>hr^4_!810k}?qtcbEI{k;W(i4$wOe;G+`(>N?rj2g! z(->pnye;%_#g0>Mxc#=>fC(c4&8YVvw_E~ZxVh1UB7+Y-*d8U-O$ES_*gdU!{-W5v zsRQI7CKe5{jq)JgUlkuo;UzSg+LMJt&r%!Z7$cTZ2nVR}Qrq<_c>tW~RBlMQtg*xU zJtGibDwW>`GoXL~*naM4=BA=2C=F>)?MDoOdW5i1NXl{flnmM#qo$%fZsjpN(qYr} z??m(IvP8_34uS?Tt5vQWv{cislWWZ!4B;6AFB}|BR9O37jTs=@6W_F&jS|1YC_Sr^ z4Q&HU0{EHhSFsJOQcwvP0WNMP<6%uzLzh5Hw1(h@%5Zae{<>=OeKnB2uZ+8AW2uHy zT0=>wB>k-=e_9Q@?GJMpV?NB32t9=7yRl9YM_{P{O9`4;!5i~TX(;_ulo0OgmS%6S zPNtaYD4rWROb%t~&@+(#2ijja$mRjGZZ4YZibw#wnjjZ>;JHYmVgk&y=a4+N+_ zUG(lKvQirehXgv>pjyJZC)g3TQH>>ez7o*Pl*JGpH5N>oDB+a(fURYzFu)f6b-dpw z=7e=kZKM|d26uB$7tI@`5LZ(ZTffl zw~TjYNzN)+BH3dmubNUVx+^dhZY{}e@EVi1m*ft$;cd{G^?TJ|ES5pAN=TqO8Z2~Jc$V=oIKdFXoQKnJku+lQ6~JL_<~CNW{I9r z=z)pXyCw5p$#Py$`a!{qD(&l~@QsrCYztfEcvIG)`b=xXb0j{romLkMN&Sp85q8@;gB!3zS@j+2l|5DkY?dASY< zkI_8ukwMwPak}!wg5ZjyM}~yxrdFv-gfD%xBjHXfT9X3G;+U+S2@oK6Q>`@x<=}1d zVa9yGHmWc+@=8(i!;E~C0US9Rg@%B;nyW-EmS_+2GXNyu+f8lN1pRsi+I=g^*nEBv z=IOY7S73ufg?4w>2EC$pI-S+rPhBPlEm^cL+N>Em8s0c{v0lE&!fyic3YaPN0Evie zx?T4o*ag7dpUcn8w=1Z3Kyzp`kwO2M}K3T;A0tn$&!d-pX^TlXu!Skz(k9lD= zMKCi!FV)AqkipUI4JZzN!;F9vQ7wA_Ukf0@_(ChNI`QZMT@=}tA_2-LXsalOGE4|1 zn0YxTuYl`O!8jnDKGnZex|$GHY`B&G$jRqKp7qDWGz4y>sO=z}z1vCFH#e*HDnsh_ zF!xKpK55t84$z2Z+@Y|RKeqHGC=lFFi|^z5AnjM5(WnyW9EO0wQIX0^;Y3}pn`|+w zD*L!KA*5A{I^Lmrem04Di2~B&@ur(*hdn!O&cTjTp;CExcb08=9hynzRtD5~cdS5y zps-d~_y5|-L+H+4*_kt_nSvz)lTQ(5&p=GF+kp>_hMrVJQvB5@kwe!4P*11*VNkj2 zKlQ@w+q4%>xs6_EW?y4|J<0)(aYM`1dP&KsZFOvE8^-F`~C(oEDK zn4hIF$YBhgfYkF@PQ4Awz+mr?0iowvTF8we^g;g4EfXUrTgXlgm{svQq_04nR@(!< z^0z0&y!RxlAqd)F^+9{V)+-X?9L`T zn8-$QFOoQzf!`T9$!gh?Olr2y`Yih3#CY+o?MV490JvQ}>Q%|c&pGjgrb^D&53E%I02$5A9J2KP9% z^5X(DB>?f@s=xW>SzT}OE^1rwr~N!{Z%7EKx0s0aZ)2senakqYtm9ek;slT`U30$H?c$3YelBaig z#I%}I-O}$VJ~j2dpQ8fmD40lLAc|U5S(H_Lt-glnyEruS!l>Wf1)=FgrLhHw*beN( zc`Oq#DK&-Krum_{Aapuq%Gki2+|cti2L_d*-nKc5A2V~WGgrnX1nK2)o^o85hB1BB zaFG0}l&!;Iavf9_2Z)F*<(~`9sxbXRXkH7`uWHnw?CYWVAWXj>nvcTthoM=CyS&h> z2n$c?Imh{%5S9Z~0a(C)lL>Yt!tQE0H!|np=)mH$0+7Xy##2Q;Tz;1GLOg1qvXhQ7 z8wLy{ApH*pS62~IzN-w(YMl2mo9+ZQ2i>AG%EClv*1>O6a|KjmF?j8Tc4L5RXIXjE z$S1_5wsHd2A->lq6CcP4&m0LC;FPtpn# z0p&96Tuwu}m3y#fHVMykx!o{pwgfnXta*dUS1oCL@Hq6!X-vEF)EY`it@?H2ad$3< zrR1sJHNC<2+vD%*x4G-@-l9goKsi;L&@bU(@CVK?V3y+Ohb^_-7Ut`Q^ltGl+*?u6 z^J@4tyM=pGCu!Z5D!Hnbl)ha}F#8-~s6P_b4%e?kFKy@>H92mA03z}dPt}U5jjM)^ zR3c50%LHpn+fnXKQVI^X;ps0pnsgSFzXwhdr}+locYR;So9a2rW2tp#L~!1Vax*kJ zY=i-%>qx6(5LFjf|K>pZpo=t~(!4s-RixDy4O0p2CT0P7I&$h6Mg7TW|7%OMoc4+$ zCF)y7-&f+Eal!dW>~luHt-p;&(bb1GX>C+lfi>6f?W&Qln)mFa+O~3=s@OYe4dbBJYdso_{8{Ncfh&!P?x%rkol9KBcfNqVnCG??1z@au%Go*XVA25u zEvHt>gzyRmx^{vPAQ&hwG}7hP1?omw9TPFxUH|EqQY<%hwxr|LSBo9VSEUcFg)TF_ zc5&6Eqaa5oq2`U&Z;|nzneZ$d_?^T^irmm zXS#I8lU5~E?Qiv-!?K17ZUz(siYQy8hZLx&`?0v6l7M6#wIrTVbZRT#RUI&?LM9~@ zIK(rjyo}&w0Zvq_aTveS@8F8gYvFsY z`E%RYBkr9F?6jv_xawl8)1D)(?{M>gIY^vpnt-Do@(Q$j7~fD(pkP<6#p5-mGZToQ zZF9Y?V}aBDU?N+K+Po+TKyQlP&^Bp5)zkVS=^xe;psn+}uRq)@(RykhD2R(U9O^?F zRF{wbZ*|a-(CuxITT}Y&G7zG#b^h|0QBzM#8a)h9u3vYeIBlo;-`lu?6)$aL)@;nt zElW2y1$rU&5V&IJm9PRR>B&SY*vl`5G0NDC$4~=*`h&~xOJ}j#o2a)Y)mqD#(bQ5m zNSz(JG3)x(*k-z^=?dsumE`yJ5w!)dmFG~ry{h*M2MZZNK>?ueR|=w;EpCkRKv5r# z5-fbaq{dXb&OlH23bPL`DQclE4{c*=IgGSIm%c;Sy4o$NQ!hPYms@dKXI(Qe;U`?x zQ@XZ9XAoEwAYQp>8h;w*8}Wz&zOSyhw3T_vDV*r5qe4C%Vg0RxIi%ejV;wR}+!oP) z-svhpJz1^M3BS%t#uFPzV->rWLk z5>7&`Q$bc0AlxEVwiR0oVRfpMs0CAp?m|f&2SO=nYZ%;=X!e@go5QBe#6c~II%5Y+ z?&4P|X_^#FLDm^|P8ecGdxN)QFCjm`-d>}rw`X?P_FKU$Y9HG$xn@EojHR%;8r{=M zj{3>@pG4I)rN+H_>v9vO*l_>WhD28|rDLD!y^25CW`Dn>W5RIGtrL2-7&)P9i>e93 z08fv~&ub0{4~l-ZySKOfH?RIc|KP#iE_S=aHZzTfw;VQpVC977!-~HiIJtR3%@Kv( zsH=BC{qW|ae6Od@Wzp* z_gG2IlKO3%C+$B|>W-D+CrItTb=Q?j8h zT*%b$iB^Q)tTUxl$9?@7(pcx$2j@uLzo)vI4@+$oP3oR0qqZ3~DYft5ef)iklX~k$ z-y-dqE)PjHksk@V4HN;HlGBx)}-Gh>TK-wN;`j*Ua+wp*mzhB1OCwo0Ax632a zbH5C_PrUnOVlw-f_>TjNOoKj@+$VI+&_&XI3v0#uLTbN)RI^`5X05b*ijSJT(cQ-v_gbmG zQ=-LE2QOsOt5QF?twNij8EuN@uqwF+JgYrT@oLk49nlbn z$gU8XDHtOyVRv$OmfRL@j*m7ybZye$K!oy;mxw9Uen1x^N)DXSQ8m9e6DZNvlx_X7 zsrk^9CRYw0Jgj9x#3I8FqOG~b47?fB3kaSRG~XSER8%~! z;Ouauu}?wy`q)Qg!Yfs@xif^5pH8H&WWh*kH74P4dz?0y^* znAClgj8YruaJIqbXhe^56w>x?0^jR+b`>m)58jvb)|!fncHSBCP7T#@miECK?_yc) z$r>+m=fmCEU+twTX1>LinxYZBT-6-%_T@v(D~Cp}ANqqPzjdg*d1&<;hf=1%7dJGz z+}xT(${VYDLT;29i~I~np{NI-i^20;)PS{K?EEZlZuf@f7F~0P0SuH_Qxc}Hxm9s< z+wr2@2&qx~n%d!N9yfI<7LN?~o$&~VZiN5lxyyjQ;btD#`Disp z&jb}WuEBKC4fdo0-g$e{fo9Hu;pqo%=mAF5BnpaS%{x%eIIw!|fpIUudZB$Z zsjoL&n!#^S+itTNyX1J;+zo!Gh0zET(o`K~j)tw_m%dnzARE>Q#9Zq8DGHXPtd<`~d7KY8ARk0I)JkSdgShR zP>y~_C#mT^u3P4Gdna`l=5(i@_>jJo|7RB)X2plR10N8o$qDYtSRz`Zv7de*-e(_( zy#E1qEgV2O3Vr&a*!wvic$%WV?@^;L25YCN1;Pw!saC1uy&6!vrm&hFVtBIJ)TXME zRS8Ol?9Fo-y*hvptZ7uktQ`s{z?HgBXliz18uU*Gixt2+JPXf*9VSc9>O#U>W4I=_ z!gIo!SY)%COaI)R3;ohXm;RAEXZoeHF1=pdCFpm)y?@p@L`RV|x%m09@skDC<;5?H z&y_CczdOg(@&Cs%{ePSOr}rP>auV(w*C@F~LK#m9ZaQa9!zC0I^Z%Xc4d zjixqJGpOR6k61qtWVI}_9wr#Naxi)sR&RB8VNEyofu8qfck!+6v<8OhC_j6oyYOiI z?5XbJitaQ%H3Ww>?ss2w7uLqlzU?l4*PX@%C!?Pv#G4`>fjzgUbY4$d^>+e0zo)dI z#|6nijD~e-E4vw$-n3*=_p;n+)HQ^jw*NkOd1>=oYJ$|NozP-F@bGD=%xJ?=w$&2=q`=G-l<75k3t7 z7R*Fx6fE`@V{XX1*l%zlkWcL2mvf@# zM2S86?&rn#JM`UO6yHzmyT2;FAKiCC&0&aBs=BokEM9Q+hWdtTQajgX1>{ae|l(V z`lu^i>wEh-&!-GC^KBG6R13#|A6y$jJylAen0U-oOdw@Zzo$M|116*FlK?i0a@^JT zyKYp0nM8SISngfEK0s}eK*3`v^LwG>&-Bfabnme@`R{rQ3Y@EqZhwa!K@>VE9B_vSLvW>W(t-<-_rq^aW%FB`ee~{9( z+6*wHCrl(;T%5K6iJ#hZKA+NaWom01kk)fHRmcXJ%6uwUS=GQ^pEjdvDs85Dgef*O zWvlXStc?`=`k0Qu4(@L2+96w2zag)eywPpL{$L-Jv1l=wDJ-LuX`2ABXsv6&QVtZW z|AE%8^;=W_;)#|bXa#--;-h-&j;+#DMs4G_MlH^nrm-_Hq3@(KiuinN1kETCSG6%& zNEFk>)E3ziZ7Ahtn5wSIEPCqr_9`5Vkunm`(ji1{OR$ITSnt&(n7UUfy$W}@0iIdI za#(gv7lDDcoF27Ho8Mk+gVoeF2qUnivKeyDrLxBo%(L!Yt7t00D;Tp(oY7V^<~LL7wvj1`ZBCUb(KesR6uV6m zcQPfzAspT|;S_(HorZe79)}s4?`^1fV=bgB%kLABS4CdabCg1den`**5^K!cAB#8R z6S31jk>HJw#k_{eHdF-y)_T?yt4Gqw6`JQG=FceMfJ5f>JwFzO*#t}EK`{?F{@kBLL@QV<3aIYn^(A^occ^1zcw@M{S zD9%fV+(0pGGp_zb66aCJypW0>rYR=?c;ruV6b^RLRSq*j7K)MB?x59AaG&B=)i|n2|CqA3CeB(Mt#p(=rS>9N%eQ1<2>ziN!-6y z@ZYdxHLcs=^CT+^Q7fB4HI2XMMC{Xka-7mjNH`%-16m#dB7!+_#7@ik3=LT|aayhTlQyiwWklX9YzOgU+ zzSmLucvEU14gnzvL#a0)Oc34Y6G$;tp~)#VrK(QGAWv-3d@JT1sn?nkNUt;!21(nfaF_#_;E00$J_~xT>31^cp!-2%*wb4J5I>8A!S99S~N^ zSB0n=8$~6v8t*2K%i%Yz)%X&RU{x4khQ-?pP7kEwyRYaek^t3CWQI&ZP|Ehr%%~8LhZ+VEIT+S9 zI8}RpEpB(#Vw?zs_>f^|EtH|@bkW**VGY1n(o6Upr0d# zTr$T!Fto*4j~Z~MwCSWG*o+p;_DHLo?R&R(&Ky754IW_&Odd)<$^J=tS-!e4ce<`^~06oh&z6OYV zN8U0Z(}S-|#D-Hh(HvubXSVdF_*n0Hi1ibjnQ;hE;3}}ojFXXG18UxocQD=p++Uz+ zqsm&C2jP2Y(0=weXkzW@4eU2i!)SAXn*NGoa~hz^=$&l-?7PU$2v3cfbt;%bMYmJL z1pwS&MyB?|u#Q)P$h0yR0n5&f2dZ$E4#BI>-*q@}UqkO$X0Nq$kXmTpN_2CKvvc#| zXgvNc9e}_NDiT1!T1806&aZKp(0xMD+sHWPmjWtSMf4r?6q9LNSy<+iYWvlGpFwb%98?BMTFGS|do!|3m#dm4y?|~BA!=a*7;2lL z=cn%Cbx2f4LS;wdHG3JtT%fMVFtM_evXj{nNfINOV|#!xmSxj}Kl>}DDKmr|Ccg^P z!=a`F70hz$V046q$jhZWFuP4^t~?loAID4dvvwxT3m%dI?p_$~WKu-*S8h9>A4nZw8K#MORyUL zPPgx8X1$@_t@=bF`#I9MO%1xAhahvFkSdy>|O20AZ!npWh|{2!&gHB5XH9aKO* zITmL5wl)`JusK)N7z>-x`E`d=s^J`)E5khDGAe6y4>JiIJbHCeV;Tu?O=+C1l&HB- zldNs7+0J$~4{OS_4sU{t1hQ@)hn%q9Baspj>iTa8azjiAIZ_JNIAAhq*RWrn?I%0f zL|Hx>hh)WyN>?0bd;6f1d1<=y-x%T%C{0%%|&#dEousI}fcUZB|4*z0G zUdAsj)n8-|O5Xnw%aMSLS3`|&^tbyf+21VwNW5+P`6!{B($lULx=#k^im5Jy`fF9U zkGpXw8QV=kRZC-2(v1-)lw-`DJCkF)b_AZ|Q5(pcwv3kr^U66#CK$gk9S&gkRONX^ z&{$3~gZ{TW#RMFNYGoCHvH%?^TIaI#4Ig3)wc&M4mv~{Dvn3Kt< z(J%*_T&45D>S4Ho4-dLU`$zTZr?M%mk$Q0GHFAtQS7|7swbOV7dVuQSZi+Vv=nsHo z`)5`F13}O^vq|W7L{wO!X}}XPb|L2>=7qPZ&nC{aUVEEwslltPqr@w33p!)4b)AUP zm`ij8LSX*J`4UM)*^mc;w=alQdqu@QRMJD=j{QkpsCm=OPuFY2kZ?Wp?&H$|DXa#V z2y8y!jf$Y7oE0%K^C6y}bYL^;tsJFl(1ltZV^!NkgS+JRU~Nq7ZdWxwRg0FIbb5K) z&1OIewIV)*0bEcs-J4${3u<0U&quZzX;eBL_On5sYCcnqmB&~xQh);6+M{<1miik@Gl|T<|1TdeDnE|ie@@Jd=NXjnWY*X}zvp6K&Z5__cw?n{at+gv zL2*abU;4f&eDfnK2gx6Z7XD}Na!;;+BW@b&f8M{uN-y}C=h(w2^d_^&ivas!V>aP= zSd;euw!Uwr7e4LTUFA`}oiv zzPZ$$U-0A^sP=fO*j=F=U-bI7RF&zslC5ReET-vMq|u7$Xw7h<%2ti?6anvW&4O2h z;LDjN_+}>Cl~2!n9~)JqO@}{1p73OvFUKp;p5-f&*aUyrw~cu4>)$rhLH!$9$G8oZ zF?O&`D22#cJimXPWHvsG2(92nv&EjR?(4l{6$ZMNq1?LClVguF!AvOnv++>3Y4??< z02Tc7Zx9A7xo@5mnZ3#T&v-$+``I{o(YYGLG$O;k_8cw=?fYtH=4lNepWHb(oy}Ed zf;fqs2HlqYc$)D(fz|NtG`4sKC7!acaYy*l;8Kyxfb)7b=ZlWRNyp*kjq=}8;v23f zdKN!WzO0*W>|5luf^`OoQ>Pp6wCV6=SwtJ(I)gja9sQLvYbQP&l+X3#T|&t?^*yNz zP24w(tEaEFyxJ_}g;B7-j%Pu=9D*at4Dps(S#GP}Pz=v488>~6kl|paf$`wmC03RK z{{bniMmHrex_a94ca;^^tP~IVD%LzJtwz8IWfe?04YLg-sS|$s!}Tch4St37&0DF> zjc%lFioH3*m<7jT-S97da*dS;;V0jMdWrs|NjVmB?Z0^Iry`%Z zA`QqxD%>HA#iDu3)mN0ZY0 zc7|-@xZlVf-V_L%wS$a8X&*opuj}#%!zY2$3R?}UFp9E!fIgvut*>W_xqZbzqnD@O z^E~(bcGHG|5b9fYAV(cXuYK5)3q85W6Z-8DoW7w>69UVAB74bxf-^r{o3J@-SkDRh zS^wdENFyp}moHI&R81^~v@G_7Y-4}wW!$zH6YOO9_w#!vVqG9|v>_X`bz>Pfq*U%NM} zn!JNFd{;4MksUa|-g&E{(mK)Nw5r!Av{e4nUlf}u*R4Qp0o&!fqHMk4TcGzFYF7`+ z8GB4q4Uo9b+A51lA(Blux2)_~{^l62>WHU}E2PLK?J3YsXq$?PBfS#^y{#z-f<}6~ z!t`%8o8@+|Qr)W%T)U7eW*bT)Yg@3~J6*j9ZOM@*JVFt-WdTl>DFXMa)3n3e8Sa(3 zZ0cf3k4yDpavHy(y4Od)3pZ7@_9+mujR*mgw;w`)8~_|b12x(qP5~p~Z-Nl0TOT}E z{r3m~j)^xS1kTPok?MyKfDuVS12%epjVjh22f?SL4EjbD74ULw1n#mlT#7}PEDf*V zQdP0=coY4n{XH8IHC3>JdRHM?gzBs^xg<)@PVXo}HHuexZPG64v#~`y4ep`}pZXV= zfnG3GRrLUNd0fX}N22e_DD?;^Kr5>eBxax;RF#deDrTA_q)k=VZDr8Z&wa7FY*82i zB?Ybt0Zm$2UmEv7wW32a1}44|WJt8pt?6JwU}u3oP8*XKbT@|^NgOmVR4s{yG*PAC zUu|W=0^gu-?Wayn&wI(t_hf-rJKsYlp`oQ$nu_aAP}YY6O6taUAqBk4KV@T8*ezFm ziiVqODW@M?z2HYEbAi3-;?afSdyq&lz*Qry4SdDDHDrB8S zcS*V{Gr-RN9-z)P^v*hw=hjK^{5qH$NHMUMQ)D8;rh}>nhzkNhfP;j&e|(3}uJ5Fw zT4wW`6W570=XuX7-}!o-#c>=@cxsPdCj`zpSWC*K{Pr>qu7+zP_(yaSW%@|_>%NnO zmVv;R55QBltu$bimTBh0oS7wZ6r7$}k~j|Fz!-aen)wse9cB-eV%?7u$BK;gqPp!g zv9-s9Zk?#fo$EH!%S?%Q$qq7}_460rbhLLI94$c}hbuOMMNN`zfk_07O2X5rec75< z=&a&@>Q9?gLduG#D|Henx|ih=nqdZ7Qvn^EL3TIp|#2yb>%%Qvnh2pz&D21ZPkG@mQ zLk9yqmEEFI+%;PJc-g`+3{+;SNQahDiHlyxfSmN@RVmOd*U70_gS_Z_aoKFz01H|! zk4=D@@v2y^j2PhrLX9$;6_ipA1xK#>el_Y;T@Q^oul?cL45v;bPU5e}DF2Fm@n97D zvt~2%t3-7=oyujm1ZGzwvV%UYX{#THo8AUOMs}F33U$?fTUF;smY?#AI~<`|hm}o- zsU8sw?;JLDw1%p$Mw_ELD6nM~O)t)pisPcKyIC8ZrWXx7l@vwnyTLxuzNvjW_um#l zb&o$fss(`>Z0rHWgDOqp*Lc+P8GRHy1y`dAetkwLV@Gp;nFK?Srq{yFso}8x+lm(< zbqW8-l4|6DagL`WmX}&WCRKnKr+bt2i3C1ep7+w|gJp+ja6ZR=Tbr?5!)#p!jyU%= zb2(;yOsc@vRopw9>gwcUVAO6b;jvv!tD9@q*EUo{x8QyM6q8iBarww#{Lg%F9(6Fj zyzp}nepOG--1NE1*<$FPEO1o^b2bKf@8deF;=Njh>daIdKD8vx>WI6U zh6)n*`pmVEtJ;RCeWT7c__LG)byRn%2FqXs1K_k7s?-W*(Pe5&d}(h+|8`_=;ewW9 zz4QKq)0NK?Vw3gm5CVp&+18}M zV@S>ZjyCC*v;jmZ>>j}k;0aQQ^U8PY;n16!bINz?z7_xbZ>0mlQRVSpFkY%lt4isg z(;mJ<1JbxLAo!F9Q6UD6F+Uy?G&F4NG!37n)4Z?av?DaMZ95%TrZc>Fsg&GO(ePVp z^46#Qt)^}&UyA7%1ruuOrX9Mma}^g+T@mPpvDBag?0+QoE*%gVL@=!M@i5fH(&$C@ ztzF&NM*U_HA%dT&ZKWQ*Y=Krc!AVWHCTMXEj877G$+>gJovT&{=+NfThj~^i9z9h- zu2O%Wo`|u|NobwG+DZB#N6bxh;+-=Q796`vj&uh8=7uxaBY-ByPOLO6Hil8Ykj-HK zwXx?k%u)=H6lk@=_*T0QhLAwObVCFD)6z5PVb#%YR<k(y-Q2LUuS*SPe%>%=F8u4>*8@LUDt ziM$*DlkySw7RH5<1?{MNlJY;bAM;yVRAF5Hc@l*m2i_1kA z2mPXhbsy+1V-CG#EJndwl6^o!8;&VIQ!D2J;tS2|v$)rAh8aMd=IvT8*HM1Q07M>T zJ7aHG(p#`L$1{8YhLkx>+Hh09rE~_{VZ^stxD_sH{d8BV2bKF&;z#Lj&WA(YsY`!* zDWdvbfW>6Odts%<&ZjQxeI))vXaEzDMj}`#U+c?P$cd;M%a+>m;fFU^>|2(a4me^< z&Be+XTWYfI>@6{Pf&V}%-kQtQjRvW6KkrLebqF;@ubz{8jFw|zFf(11*o$IQrc9eU{7KVHDNY$fX_?0{(7cZf#njGlWe1vfxtr@suU{{A8mX!__-C*&@uOJw zalQ*(sybAPJnGJ)jt^M6d1m=UL`)ehf^s2c2h()k&Ho{6dwMM?gd(j`6ZGE7_PSU5 zjq`n3;Qz^;6Z6r3h`K15a8n>*e#V9!Ry=$LGZdx+zzsDhG^FI+ImY{74lfBv$$N8{ zd-OT!#OHI^5wt5nuQ0^ti|EFKr?h)aYbX`Qh^p}kgfyYK{$vwAJBLqfKva-X(?Z>W zl#+y_N_~4N?$kh00YM>UBpwhmK^q$Q{7!=%7QlMuuy=IvEf~ohus!*8=wdmX6323Y zhwoQJgF)&rIpRREiKF!g_dOMB&j7bVdxmcY%h((rKGDeEPBC__XYMC?_ld?X=6WmF z+fHQJhFDXDPgC$2a#zO%pCtJZ1@yP~api|vPz~8}X`))t8f0CEBTe&W=(nhTE&RM1 zuL&tTJ|s}uvIzDzv4$^=JiNQgsKHEHAWvk8YQ#r@Yk~*eJa^)m9NLX4?%@ z9Cw?Fh4Ty^94n(Lh{Kw+dTHjsKBk6V)tE$J@1T?%$-AdhPo=-uoe;_MwZ+qoA-9;6 zn@E++`J7FSa=T0B-08-WVjxUG`E1p4&soxET&R#*oN=MK|12;|*tM;ACwu!WDQ>uD z^>4|S&OF`7SsXxt=zOjhXqw>epj-TEvb1v@7-Pex7vVYMqv$iW!#g#d=v5^%j)G9w zZNj>(%+{)4tiEI%RLtPDmFLy|uoixl0LuEdf514E!f(r@Q3E}NSqi_@pMo#Hf{j}R zwWdUfqH;dZ)T2Q?i`xZ?Q}dny@V8nO03i>~Wm@t_nqR;|Qre@_q#D|Eil)6!Sf!JZ zCC3Y~PA4>ws|N;c5w4{8<)MNQ@b+4du2Qrc(%5vxjb~EvSQZ2?ZiA@9`*>ZDYt_}A$xYlO-zOj}9=ZG8^98hxA`ZsS8SPEA?}8@c&@n~0*D0n=o#wf(E-~%- z#Y1pT%iXrWLzlC}DR!9IJe;KJ z$J*7(Z;b!NA0<=s_oHe1YD%%wc%h=$q+bGQ;@?(wJe@HK{Dn@zD<1A#6qGCQ5NTcH zEanhCE>K})2F|_wm50!H7Oo2K@o==M5rKJdG4J7-mmw6QG40121E*1ONfkuG<43bp zLw~cf6&H4WuDopUwrUkBd%g;a8C%FD`WUi1qcXJj^sSg`vAu`pSKhYm8v(y67~|8H z4U0I0K$DH48zvxoMjXn?N;|%Fm{;7x^@on29IzljuSS9PX4+1UF7#`huOQc%%6|!Y zuPP<)z%Mah$EZGm>PiD6qm(b9B7N;(4m6pX*nVIgP*QyuiHzdDRTtF|xDBd@T8o86 zmA^yO0}a}d!#{Dh1VEgG*rpxmRN1s|^-gdJ+R|fE<4bkbzt0Y#T(eDgjOy;jRYJ0N zY-g&2wy*bTu6o1NX{vkjFl065RmkQXZ9hMf1(9{y&r)~Hk(PYxQqvN&@{kY=53@PZQtukipd@jN=ilJYH?zwy@xa0GQCE`Y z(6btx=4d%erpOp@@tjPdrO%AJI6rTjqCQbS1sp-2+~NKr`$SO|!qg7idGx=NMufPBBT=bW1h4^Y0`OgS@qX7=pa zd+k;JYpujG(d_W?fPHW;b8bnmDw&mdsHs(@5(;C2OifHKE2+&zwX9?|7tI?*&TTH1 zz&|nj_0Se&xYH9#=J=91POdw?RKl}Tx94S;Y4>mfoiaP2(kY4JoEJH{q<>g4r_Ek9Af0Co&P*{DqJNwXc1Wfmms!IOAPiW z))QS&=aMd3bP(X$-K1|)8@1Y`y^Zj$gPHmifoNh)s<425tG73QJ6)N&&whjBX^wkc ze&P{>xTl>p1hWzfE@G<gOcP)ax)5*4AcayEd!VWgYfK zJ1rtF_8;+wy0)yZL--;d47~@+&iF2?Uveh-tFrU!GC81bE;pM}sGg(;69GcZ=8J_B zk^VjaN#4rzd9F{%40EY`CDEmDH_C{XT7DCt7SW!lXjA}CS{lwzyd1yKS#N!zv$Oh~ ztUf!d&dF9-UzAlB$_rgAFZ83VY=4wh7iS&zx4h6f@jPbj*!I>ZU|TN(QEy{wy1v72&2NX_ zFxp)w;Iq_qj;wa8CplARLC;kWyDnE;UQ3+d^VLbA`syXGkW|F!O z2V{(>Xosc+pG1?utA3AI_62tWL^$>@Ae6D_zCf@D0|OS4;pwQyw0@ikpFh#MA{81h zA24HB;+%P1t2gK~{C0}Vi{=d6LEST%-)WDk`VM;ZZ!ulhh^apV&^&UFuHyHx*!ifz z`VWm~zJL^6O_(qD+LFEwqSXY5UrWqAwZ5c&QBt>XHuZ~A_|F1$*g_ zmKku<(q=AC>Qn>Fj3e-+MYA5)8gp8iBx3UYrR~9p!)uK)%}c-7hVe&_hB$V>&&2YD zxIZ97P$g*)al;ae4xV+C6FrHvPT9&RVnqtAHD?s@*pcf?QjzmS1;FmR-PB@n3 zxeoYGjD+@i0i;@Z9HdDEeUiIyjp3e2CZ|}CfXpTm6P$@=UlP8|OqTU<$_YgwUBV+I z0PH&(TTa!~y$KzDS5WP4pV`*vtajA9X4QknRw%5eP^L|*DSgxHTr~mY`aIpaRc8Lw zz?(wLBqjS4P?4*X&aH4)`$5?u1(F8U^dS@+=nc4w*!ChQ8K;c=)5g}A?~pZ^md3SixP_XH4O41*1@|S7rYPHm^Q+9o8d}x(tf33tLt2Z%t zD1++Vf|;lTtek{i-VJ#hIG3E4HB5jD*#|oRF4y8?Rbvn{^Z(02kI)2sE)u-wmS&~P z^d@ff!*=~MN8c@OkZll#niF}~IqEX-$MA9n)a1>is8G>~BHw_UQ%4h~+o;QoIFH_| zVD`*DYHvuzxsE!YsgDVS?hmSAy;e6dFzv5`zCf$!lG{{wYe6dLrHCZ%J@Y-{G2%ay}J95etMrP%I}H zG<|-*`nowvDZm6hSP+|JIduF|>p0$=CGRlh9HM7h=>`QE+IpvvpYbGJ~2A4#rivE3p^|^n-s( znK9&h2pkfRTtF#igHf}=nF*jic|Q2p_x!SJ#0;EQOUI1CB zf^CI_tA**K?c=nX>3mfvH{s2{G`qH!GM z5M-y-E;EQex3g`xez{i${gEUF%UA#x{9Q3XU_xxdM>@E~QJ3PxBz=@zB}m-RX`u|f zyXQo++?xaQ_rQKe^>y_%r`ahq`}*tpuW3#?08zfKY+sQg=IaVW$IVcDL#}trLx|wZ zaAEQhj)Db3fWHhO*hE(Wm&#U$w|?&}f+zic%A5lw8=H3|7A-P`K*l_9 zS~8(H0(F+_9T}YQkrQP{5CsxPRlH_K>D$e|lAlSu6Re?Cf^%11MePSYNTTBA8=O zcTC7mCjN__Hf_6^B;rOvw3FAb7i?vww*j@S>%}^g{Y0S`#uYhpi%L|9MtIR28 z^Z>6OG0K+izS>P8Ek*}e*Lw{35URi1WbAcYGv1W{N>2S9Y>i z^40o#fE?|ceaF5`aRs@72j2(ZKP|B`;v<5c^N5XHcEZ;}Yx>v0VG*G(%Jc|nyBX9& zx_>Li$p8!x{gp_p_Q?_Xy_w%_ZEAV0c^~G|X$N3* z65*2!BYh8UNnOvx&!mZh+uF+ahw8pCdw=K~i#{dp{V_@OuUGg4dv>WT>~W_956t zID6&Lh~{gAkJzEv7(3XH5=uZLdIXXZyi^?oBgPXN#axofW#A7(87iZpnldBPn3%do*!U#$$83!abj{DGex8LtHAM8iDwr zMQOi@%N2)vA=*N3T0}dA9z`b-WTNDw_p;1}c2GWmIkEh6#xlv*5~?6b41NkhyOU)H z2HcYRAX*O9HJANT;;gKwkZ|9}tnB8c<6;J^nn9*nSbacYbCATg<~UrLnGf&vm$be) zP4we<+b8oJ)N8Jp1GcW8{)ibgCN_pRtI@B?_`*-}!33zxT}hEZU+vVh^lWF6ncV%8 z)_G>qGzdjU?qcRTm!{P$UGQY2Z)$08ec|aFPd~uXD*|;jM|PY)HH3M-{HDBPfy4jV%F8m_-X0> zHlCk!`t)Vc?@#g0M4?nW5D{aE#R{U=MieU1@m8vj!o00ib-VUgV9XgjQ6)~wVF$&s zDP+GB6d%H~2+FW`KA)8&r}7&EABw$xx6k%?AP&@D+$QKmydy!;*p~>}R3XRACYtVU zx0ime5ueV9?Duyz0^=XN%;B3qkxcw7mznNDiLX^^7w=Vt1B=&-p7|`T3HQraM7EP@ z%KD_>5qe0Oy*W8b*@TIHbm)D<_ElM z@dg{x)T&OdCprUvgnTJ{O@A}{4gFuyxAeE8|JL7${zo4i6v+8v$653nr3fjC)-Y;5 zlefsz>vfK>UA)UpO0DPp#5fyuF|Ak<9Q{eDM_Nal%&cBOoxiFNRnZ|zpR0mZN*|== zWh+TiE=$iU|5oWcMR6M6_eiadV&K^Ox|Pu+p?$`^t8K@^OE~q@fup!pFVpJs))n?1 zg}+%NOjp!RUmoRp7!JPBX^01C+apurSMG;epCrGg2}e-2`mJzK_KQD|Got?ksl18` z;;MF_J}BH#_Hga?ioX(%e4pvUjZD8BE&o}e&;oXWmCwfl^p(t)^;c@2bry|t#Mlm4 zt3*AOj3jX+RN<#wVXpO3K9Z!+5TkjKrN$yKSeY)Q(~7c0%sVa2-Jm@uPPtna>EP`g zm#Ia7kCG(7CRyNjrFmS~X~FghJrpBYigW$;UNV~EYegB~U?D(~y;tiVt*x9VwW&Q9 zD{tcIEMxB@P;I$?*xX9}5j?mU_ zA+PP6EupxTRHgXr@+&{$P881A_G6ChWA}zAU(-YAnVsYiS1f9tci?V@?46{1JNxn{ zU|M1Gjx*Q@mYI=GP{zPaX z2|1k`(Yzl=U)=w?IBnY91oopiJ>TT}rZ-0e+^^KKeU}CIFW> z0o50w>43ovfQrU^m4avs;sHl{?XPoQH)|cW&e3+AUF*OfZ&M#a4<2v9Q2#^N_RW>=^0{4Q5O~xHhZbi@P);?cGj0?NifbU>by~nLu7hUJn8aE@+82$1}T| znTGO3a*!G7P;_469W3)ME%Yr~NCwY$X%#_i2;VlDMVK4Os3P=Jh=kzk1@Q<^*XBs* zC@|!J7Lv}4qy!nCm8}%|X+c*{1>YF8@dWsIs{fF6RyIy&BC!pU4|oI|H3m2%a(HOO zSqoZ8j%)hnCUczLXw)VXugylB-v(#X$YKo=bHXKJV@M{BDod9mYn|MLmyl6`di1#Q z%|!55ygTvnJWCpBg+sD(0**0Lk@%GafG7~*Oi(0F7Rk`TEA(=~YM<>iA)jBQIf^t# zo>!JM8AB`trWHm+w7(82*{yi(PR8?q?vHSN$a1BiJdTv9fH5+gCX6c=s!K%jm65&7 z%(WwKQj5o~BnG#23%2`$Ua{N$#C2sL{!o25Qsh+-26jP!r4JBR<;7Cr{*t<{q+c$n zmr6lvAFJv>IsULaG%0X~x3FwTI|JA!xUx=9OHn3p{zq^$7Jxw|LBG?Uph=xg>VS_x2CWSlEA>c^gXq-4&|0F($36V_w| zg4txz0n^ca1Wgl*W)iYP_;I>X$(gLDx)8v$^IyWIW4fkO*@y}V(R@{8=|R(FYt^|? z!drM75!wc~P5h-C!Gs7D%x|-X0Zm)u=_evz&Tu5{%x3JaboN^zE`#0*2O~4cwnxjj zIW#|t^cwIF-fZ{)4#gSMN5(A1#qv`?APS!Rg>=_=Ny)Vh@O=5;M` zcqK$hNC-S&ZZBbaPX-;bUU{hdL!)^rTQf$pDKQiI_;ho>EiY zIG95l1|>!o&?%pGkc5uC26bRsZh$%*^g>cC((_XGfMkLKGuDApzvlE1Tytk{C&>Ty zY6o(^L-Ll=y_~2y4x|nqrlH;748*#<8-pG*6QR>e@|uh2fgSuc+y%_&y~OP0y2yDz zGg8-?oAg>kH~@bweQ@x*aOy&QOg+FVGqY=mgo!MB0k#pc z>&&hKtx`|iP%Uy(lFH;^zXbQery_v!pfgM7@*662&`p1dybuzaYIY}oS>XO)+0AtM?yrd8+RvZvmaB4 zusat^cq!&vo?gVpT;DRvwx!wXmPe3g%fd&bQS`I=Ds4zlnGPnRjss$+o7*1aqiGM?xLwFx{3=A_1;NFUyAHFEVzNsj5$xd2gwDhCplYbozeok3EqfQP zFf{8&XjN6uut-0Px;{?pM$CBi#2b~GRJkVYSz@9T#UR-yCBCP09q}h;oT2i@RS@FF zWOoKmmW-V7=Z@kc&Pb>~kO`cWA&r7mcCh3ShfzoWgydPBz$;8MhC37yV~Wm&y4g;m zg1kf|Lt&gmm>(~sx5e$$Amm&TjcFrQA+(i;!fRO9v-0A7$S{gbO}3R#HaS01<{0IS zBoZH?t!NfTih|yY^z?D0^a%WzFD-?VXz$Gu-N9^zS`CiWXTcbnu2kZgiUewb&WLC> z)^YgU!A;s*FV5T7Xvh~)di4TyZtRZW)hCop_~4ahd)xerR=^ftUJ0RiV$lkFnMwxH zEcxQEBCMESh1eo?IaUh;`M{-(G0mJwpKb2RQTWn6KqE08SlM{>ctF#g5Wq0bQ|7;#JTMVU~f< zc%J-r(8cWxZmv$42Un!0vyZq~77wrnWpIU(5t2Nly>WPZE%bM@ib^~#cyxv(q#CUx zVDeQ(3WOLGow)n42^C49o)oVmX4|c<8;>h$+2a++{9nn>F+o3 zLSw9|Kxi%}b}Yw|m#fYNB4wjT^cN)sb?NvXD@Y6qnlxP%f^k zp{^^{d=hCT2DeY#*iM9orZOWVudD@V2z%CgRHvPbMQ)*62u-21BpOK!4ks>eCt|d} zEWJr@PN`+-OMSbUVAmhnoT8`vkg!?Sj=n)*^1f0xt?CyGVKKI4W{nY?aYkw+zv_ckfzq?oU0A#DEA$NtOnmnh&oZX>r02iJCIiU%SO~@EJ z8~U+4bG)AF(xlP()jd z;9uJC3eZERNC4-^uF>T>9=TRz2teop;_>9v^IAPhsDSZ=+%$>!<66Bwo`{pgn~W7) zo%%cYsaS(nAj-)VQ1Xn`QswC3SEz{5cCpI*Na=Nuh_Mgh%%Du>S4#a_dS@8iMK~Vm zqtrIlj=7a_NisJV9osbX1YY7o`prYN_xz1kw~v!8<5X1=_XCg%y}ByFV4#{Z|Bw-u zUN2Gm#6ls815x7yAdWu_DG1cU*bCg7!Y?syNr^s6_Q3}WvPLE#AsQ`Zll-o*2p4;_ zL{`SMOQBf$kjDgkaxuS3`dN`ksvMKTpW@~WvkG%N`LONmMU?5xLZpLk(An*JVmYjp zgW*iO{x}|`Q{e-;2@aov3+5a$ zAxL^q7`}=q?>tMCq2x4?JqG=A`Yazf!Ky&cKof$=rV~x`u%);d2njYtKiCgL-LCAyrKc&?pNJ8A0o(Wq@LNRyLjED$C4YaAIlSNrU7loUT;cS zM)V|SD(FSrTA^ciV@)zj-yf-4BX0v=N--5{ZvFGw2m*xN1-D6lI9D%{>HFd?yVK_o#*~)U!)u0-^||&0aLP3yU*M z$awLN_c)&uc{R8zzd};ceP%^~o@{rh^%9mjEIYGI#M)7>&*)0mduUzVl>%C+L14yP zSZ+iTRiDUt*FtAoWdx-uWyp}$EHeQ^lk8VnH2ZDM-vp-RtDZ)93~nr+RSL;u3W}Y5 za%Hik_$?ZlE$7nqc<_IYhg_$bhGP|{d+wn@YYa&vZFWtgTtY=82UI_;8A ze6I`O3Ti=Y2w*`0^?X8jUN@I>aL@k?j*WAP#`Q_HQ}Rpdr9iz(Qm~vjxWl4N+9y7u zo2A@ON}T!IpttmICp|Lm>KViojISPznlS?Oh&O76h!utUGd*Wq*@4oMX4$!s*xgw4 z9B(dc7yUI{lg*uxjig2_`V-zh)Z9~l#$qD23~VNci)Qds;yFIvB zii*9{!qA{Po8RC3^Y%DF{r-Xvzuk!=9$eiW6#=z%wxH% z3j=i#9x@o=CaXyVbouu9M&v3+v3)LQh3beamk>3SOj16l{!{&r`i@=lW`Bsscl9!5 zCUOxeM~tvCTH{=z-8WqQI`+UOO!ZOI+DlwPrK?6wqruhG>P?7iIr=9W0st~$I`jns24 z3SW#E5YICdSpXv*bUI8#a0IfskW1nfpTt=Y#pZygR*iq&Sww&KEE95q*VRu%u?yiG z#ze1mp1F$O>C@5IV0T!n^m>)ONx|p`?M;T|k0fm1S&>@?yIuIX{L21b)+D6*lhThU z{U>EsYcRTh9Dipr3{68-tXIPn$rCo<11h<&xd%sIP}%2|entf~7$bb>nAZuM$GPLR zK2c}Cul30~!Weg|&YnWRLn37xOb=Ai&N&2NI9lstbcXd=sDzW`^R|{kG0v^f_*@mA z63?rwn4Roi$of)E_MPo|FC*S0F#6Qdev@SqwrTuwCkeC6@+@c=<-C$o7uXlO zUuj<%HW5}r|6>0G+vsC-@b$^ zE@+~mn}>#_(@#4K(e8cC45s(g{Xuu;<7zPI&g}s|wpf2yPpg(|(^(c+?rUn@X^6gI zIwqYFl=vMET&JGFxgqW~nk^Tmu}24L9u+&C;N}P(4mU^AVa`s4pXAns7ffMwY6J z_M41E*m*41HB5W?)KWA{Fi#_B0q{As%;&|i5;9!tfVMkL*GDZ2qU$yI8d=<~oe~=w zv<`pBF*G}Ix!d9L`OcWDsU3JRK1&uaVnMejv8BTT#^Da}sw5jU(qkdhcdb#Y(sItu z-EQ$Gk-8>=QPlTEIH}$#y3`BdTq~fGhV=Q7dj~Lkm+m6P2`q|w59gjOOymdY8q&eh zI^nl0$}_=Zi3fDj#=&ZNA`Ea|<-)e`FdAx8fQuQusTueArNlx?RjRNFcW z{lswQU*P|b5h+*HpHe)OcXpqOItJ-Rin_l95Q83tn(6ho=A#cP9)|buvQpRE5RPGK(&pC zZ#N&Y>*NZZPYh4%9z^38G#2sr_Hp|&`0aN)jdEhH*tBqlt|87qo#MgG~{!AaL zLoe9Sy7sO%zeH@yDMSNsGCyk_y{XN=vnG0ZmZxfPJn`81hHWIN_LheF%-bBRa!f@1 zR%1foM1eTLS3d5vsd( zL~yF_E=uC862LgOLpW_p+{o#^n^ znWNkM)1?7d)tsQ|CiSgmLy4Yad;>~j2|#vy?<1+M5S>Z3!4}vC>+@4sW{J*CBQbk0 zH*ntoANDIq2`B+W#a2Xa7aD0hubBO{{5F5xF>SA+eflf;$}7EuXKd=QxslzUp_P9m%SRu!HSP?OAF-5D036 zh=*PddLbS2%~x-%s)yz3jnx#N+o_;+G=)iedS;p?4@f1ceo|A{lHQh9nFB+?J+d-= zbM(cUCMK%hK1ByJYwYjsbBpyJW_8VuY91P1$fs)}@NB3=+--zz+)!1V6p3gRyP zsMvU=`6ZS02z^%Ag94OLG++X#DzYz=H2rtf`JCRB8DOIB2%=0cA3{Lf?Wmftun@z} z!nXtc3mnY|C)fNSGp+q3Fdt)r>0oKFRO!V~GFqt0Ct7Cq+N|3X!{1Dtth3^7L2coE zu(`;5hYrxqxovT6XHglMta2#as8Eb7Cm*HEGZAHo9PE5W$nkcNW1qz=%p``p-i0I& zBrdg#R`UDri74w6sC~*yo~D6^*qK#K26m?W08Pyi!CJjDk;bIVYvOQ@zHI8+E&8&( z*Xk%S+@A3xjI&WSvosn=tf$F^W55^*2XQ@&xpNrvx;|8!L&W07nTzGjkFc?OSkq8p zi{@N-JQ?Ee>RgOCT@ zYpEF!6_IzRS>dUb-rv;<{Plyz<1v!)O%s zc4}93EFD)gvAo|=)^X}6>rv&R>~z%O^45nb=Spb}$iR<9@F8c8qYmc8SDCDm$>-nG zXN{e{^mCXWk>rr-#!<*+AkD{(|Kls_IF2O0Uy*4^WYh>5BK-ydB&~k$Stuhr49Do1 z=CR3BN4G&;gW9zv(jq zM^mi(;3uVc7k+{IOBSWpD+T}4JYHs;A6wC{X!ASca_CIkDc+Og(FG`-y>B{S!~Pq0 z52zWHltf*kBNEW1Bk6u)Rk_ULF?`yGc)%f!{T5eOiJFMb-SW`=oRf~!p+C)W@iv3b zR|v6_^|Ef1O#3^h7c+8(i0BF05t?5Q;y8(0RqO4O@})w5zP(f~57#PX3D^LtrcbYy z#9yz`L#K0NNxE$4{z-ah9@OtUk3sS9(SC1k5b_pe=M@I?!$=qKOyD7K8}jJh6YT)K zLfa9FE}OAgVj6YfYqIoO-5oYY=(L?IAxnl{+|wO3qQp@clM$(wgP0rZGod=R?9|nz z;^{$zz%u+dJxm>kGsT!$e6ytJTuBLf)`~K~jga`LxXid-@r{yxy+r()mrMGkQfSwi zH_9!VA8an?fhr_6DlhB!}^nyU4;Z6N8@B^rkw`qswj(?P6Jcl0ID%Xe=gxDne# z=+hzhmyY$Oa$>lR-jsZY-W1s$6*p5k@w8I}rsA%7b2FV+^6R*;+h)4C)l93$H`8g- zOxMNDbnTm)>C}=wMVjfvlKy@vwCl*OGpDv1>$I|eL94N@FEtTNmyPdD!p@Cn-2};M zdEFV!-n78>CTTD(4=^0Br@`9jQ)2#lyFP_LN55({n((%p^nYv=cJ|=JYBv%9lQlw# zA&SHS^vE$jA=Lz_i3eEBCzPZzZ2}p@mKgI1lo3AR3*306>9c@~yj{oGmv7kpeFWe< z+zAL*CgKwn(^6mJXRd_O5*54pjm$mkP@OPBj}+1Vd#*XcRfl3AZSsEsTwqJXh&e z(zDNaZ~p4bh4(-EyDj>J*`*U&`{aATH;CM>;C zuT86U>GaxkUt;)VlejlsMRvw$mG*sXX7H%|rHU1%8}U=j=utR{2@>YDFq!wDO>p63 zI!-OtOE^YQI8TC?0sN*R@`@;H;5Q;&0&pJ*wnAE)$biJDCf_g4y+lIUn?SD`mCiPb z1eNLe*eI~5pa>*tltf;W%$MO_xTRH{#eG{?8i|=Heo2 zz9ABoQ+|5{6>JD)>2kI=Yn0ak7;4I+YbVhi?D`va9jqY2BjMj6K>-1fNr&G8sQ$u`gyo?e{G^E{X~oZ#$%J)wu6pLTNG20!COVlmG_NlFRP zUlY~{$Ra{DOB(Ad@LhC!qE7Tr39a+m$L%`a?-ob4;o7?pB@sVvRB&*nJ4I{OY1N!xVhn3p5~fK-6OV~f*ahWyU4!JJwmp_ zwhFQ@U+I%R;mUnnb^VA%ClBJ-zTN#bpfla7#^lX$s}}A~QlEOm!`X;IiEItiXflrYqV=*&>cXQP6Qsv zph#hVuu?;b1$eK_fVxC2=)EgyqcZu zrL_8~LZ(qyTa=<$U-P=2xZ&>@cOZ zl6_R;M{zz$VO@Qht1oxUtgj={o+qAd9H)S;Ue@}x-qqK;`UcnB#Nqb+q|AAu@dpTu zcdhO|J}R6LspBK(^iZD`rtQ8tCQ|sm`A0|Um`J?f$_EmbV-4@svMUn(NUsak&(rEg z1m^Tj0V%N|Nfp~e%|*5~{MSSMM#!2m6f%bP1Vw=fla@JzQQtJ%ZVvPv9ME#NV?%YE zjKAYUbprkwX|cE1#qm=YC)Mx^%pJSyX|yq8 zQ*ZBf0#NOU+H*Sv-KL|kAR5Y%jSQ}%oqyGo>(+6nI#7PpyAKU%_#E`+L6H z-oZ3E-`*wAQ>QsINlP&+m^(11W8PL+dn9~ApWBlhT->*$jghZ+uwH`OnX^Lc@xZ)> ziR@i?2rF%?p9yBngh(>9b3Jgv08OHb=H>cjHUT3lz6fP85oTTHOxON4*$);9m;)Wu zzG=3GoMI|JsWf6I8dVC5yHv!5%Ev4i;zpHX#^|cL0=uk*EUNm+jD$Hz!plc2Iy#6b zOZ&F>lUmRt`dx{Dnvvvl?7)!=z)~HUSXh68C^#;D?Zs3mu~Q4e7K6E1Au+YHEAS*7 z?ndi5zc~f#?h=y*OhI?GxiyXVzs+PZ1>&x|yCLv0LC91d@6WfBk(`Ssqhl1pagaF2 zy4<7Ba6;QC>bGhA98(X2IV7^B7u_Mc4oe%wiAZ#>zclJMM&Dsd>`x&n6$z&Fz0mYB z`5~w1LmhRW(f1p}T31o%i7bVvFzR7-YrL2#{4=9o%s97X^v#*H-8au=2-`H-e>S6@ z%M{rwPtvo^2KX`ewv@gd1#>*E&5>z1ut42O^E0X+N@-#zY4_HY-tbOk?grp3bV9}0Ga$K=5 zP4ZIqCtyUr@)viwk7-gYH}7%X!Of=BBPMvV5uJL$y)!? zP`vh&1Y5h$ja|h^l|tT+nBgIKlGV8KuFb76?bT`R8nTLss9KjaXOwjajuRTYyfK zlFoAkIaW{c-So~*A9yl&Ff8Wc_KTg@J1nP9$OXse8p-_ka_Wejc{Pg}X0HEAR=t`n zvR7fDUV*qbi2Tg#^sAh6RPIgU+Z<*B0SSuOCQ0#J;eKK=-y-E1^rDmO6oDNNrCQR$ zYj~eTVh8Tq4|sf-k2?0k*=5dQ+dU`4smbpuWHBbc;>FP5exIwO=^59lYBvFeN&?afbnRP^H_v*5guvx+|(kk=~sHZaKocuf#)>t8mW#Eumc z>H#zjIz4Bf?B2>Q6}AqGw>M^x4<*)<7gP*4;w!;Jz+}0|xjJPv>RK=6!!vj1oY~lm zm|VhhGAly0GTe4W$mN$~7GNahScn9{2vgldNCKJ0G~Unnc{|EXQw-^Qn`2Xj>3d7L zB_u_V`w-fZSt@K)5NTBR1ZEw=1;5QbhTrDc0>3*MagECaHIq?a9rqia4eaon>n5U3 z-o|ol9hZRku$Ww1uruZebqN~txsPNm>tt;H8fK0iG7^ z34jl(fsj`;YGa}Ja6vs($l0~?y`nmzs2(k-hoMO=VL<)Db$4>kf-ei664MA4^{9rP zS6!kF>!0%JaYJ#;Z$oIthS1y`<~M}u*3jG%s>OP9kRJEzpBlh@agD4sYpJ>39$J65 zTzh9|Zf#x5H9Kv&*8bw!^TbG2w2zhwVEwvNT0mWhhz@0ZC{*j1gAgN|HMloa|FPvR z_7`_Kn~WwllQnC?t?s2ir?-JX5rKwy2QL;IFBjGAbmX!3ze<7;I3V%Sd!7ZEPT%d| z#+xzsIEIJ-H&S#=YY%-kXM46(>O!Ml)aeI_21Dcg30;kPFfw;X`3I3kB6Ck9@(Hao z{wI~=l6zDRPCbsBOAGx0HLUZPT>nU99%x-JmyNqV{>k;s=?^HL3RXWIEEhj3&6?Z9 zEd}rqI+DMz)O}GY)N1+o_Y9pgJ?AJ=ydabW=P`-Or%r!c?Wc~^X>R@BV14(4KmUUI zELQ9vXovPAzOB(O!jZUu^RsuAx_>9PeFmv&toiJ1Df$L1S@1e!&Hs`3=dLEORwjQ= zMxC88XJz;h(im_4sX0y$@to8p8Rw!5G;BpCFJ-q}5sd$NoQEgRA!w*jq~MXc95Kv6 zxd}J0w2k>uzlfKU0FsaH&Ll~(6MbJfmjCpkZ1V4o!oil?hDG! zKQii>j6T1tE-0%fGR4O;>ak4DuH8p@tMp457lzW)Pi4x>Lf$CD`cVRK>*dtIJ=5s3 zOpBvbXyPw7%61nxfXj?NofdM>Fq9oDbGA{JZYgsKz&-yWLV{V|?{C0BvdhSnff+Rh z^9VO+Wkh7f$IxEltG#HPfpdsYDkHd=G*ae}c=6D@TPZP)L5~iYhyiSco&=1m?4nCOrwWP=7vMT1=?DJqXRXCr4-L zZR*v=?Cx~$jy*yD`%@)7(ot<6B}8IZW>}AmREK8_r6$gR`PgPkb$F+AMb~EpvnPPP znYC4IdShC3`n2@It!X|2RO!dq;#Vn|Wq_VAGfKx)&JZ6YW2Qk>3G8f{RpPDNZ66ff zFf+(36)Vz=KNYsbr1OkSiO`NXz;;R406;nfJpmDd99OaNRVE+~1=%VpX;a8snUI)x zb~|jpah~rj`T)E$*eiPZMeZ=k~+6Ml#gGIb_0b{5j-VO!B?vNQS59#5| zP-!%YkX5%{9eOkv(G&d%dSYGFZft`IxrvyhMk?*7y5M3!FOsZIf*UWZzgXSesg~7G z^EY>PCWc=j?N$3qjkLI0JiKQ%4OCwln-~ofbHD^S$P({Qd|0OVQgf;o7AJa}W1?kku|E^2eU^KSvdyp+wjp}U?`$J)?n00SAjyMkmUoiMgn$A3#;;W350w%M6aoB`FbF#ggMgVrc{TV7=D3u>JsDxW0;N|! zK-5rSx{L&VuA^2-w93%DPaJ=rP#t!QV{_}=az`EQsAD9-v`&@wlv3l)awT^(N1&w8 zzbd-FE)vcH=|Oq^y-J;|)z3j1sX2r_U7)!Uziu?k^2*l^1ZiOR_KE`B^Zmmx+nd6B?kGq`Nh52P?z0=st z@pUK<@q}+N>hq$p@aLj$-7+a}Ir~NCo^7bS)BRcXIW%+!Gyb(9U61=wz1P^?eCJ?w zz0nUc{<+t#R2`O&`U8NE_KVM5O-LkkQYQN1xZfT8{_MElRcvNrI=iM#y;0V`)aD=* zRQsy~%z^5l5W?vkNP~TykiyzMNFPWDsyNm{h^yDf2#I=gO)ewOv`&4Jr$u!{IDM17 z*L7gCv0fJekzybV&iCD0Gv=AHIS-qQv~<#Sm;34rKX(yQlv%3#^z|Mn>vQ5?%(`&U zKZYNuoHhQ)Wu941@Iiw4pbjbFx=wOvRfRV@SE*Grg?o-NXEQI2*_?{>e{i|2T9&UZak0FJ32b zN#|!Cme%a|+SRSa;;VV}O5S;}s2(Ur_ZMxsAHH+BzZcctis|?oyRRND!hVip(tHP~ z^O)|u($Q<0 zq@eQkRU0HS4RP*P*!&OW{qpusu zk9qJInQRimAKObHeDTizrIbaLZ~q$#nJtu8=x1E|8GLAn6?Ft+Yb2ji_?Y*_c&ax! zQ3-c(gV43}6njVzN65B`m1%magYmOEJ40gw!xW;2;nD{AW>(HFJRX@mIHIn~z!ef6$4{E&`Q+UDal$Gs3H*mJpJ~>_wi75dJhIo(li|gAyNc zcHzvqudA7Oudhl6MQ`H z#H1C68USBKxi=qk;5U1i!K54XVCj-=gSL6|?_R1&^=O`6l>fe(&N8#Ponjk-6ib|s z>*3QtqTlr38C~#isC--aVbb$pm0W(p*Nr;B8G?S&k_5?1e zc2#CDvin#7CQ3%HLK0(IoorkEz%axOrS~+bOQ(i1$7mI37BDeHQM9}s;(9^+S|IQ*& z!HOLdx{A2livX3at40xaT%;6KjlD&LFMFK6Pz2@bu%w$?5xgc0m_dM1#IPSUm`z57 z#)Ttlct8SO4M#(2;-Jf(_)x2Gf|@+w^J{VzIB^lyQj&IrcI!+{QIoDIsj0asXX@$h zv}rTl8CR>Rn1*Rw`i=1h2-?`Dz$UW~r@W(ogqqzy%b%@geQjP=mN7%xFEX?w0!I8w(de_TW8^iw<9smcFv+j z;1idbzmee<@2#VB;)RZ^WVFZ116_k}$Gn7ujFb%G68&&J;uTQj07Rf6(x4Ur^igk? zQFv(BZiiTBBy`uQi8-^d3FS1%t|5!qxh3|A*tx_wAuuSxC1KZ^;|$|hNn$RyE!hh| zAGaGIUCh{`vo8HISW!|dOOsZV1`@-2RFmMsvb9tjGhPiAA{o|#ri?g>tR?2r&gRx- zzdCMT6wz@R&&rb`v&QE=1g+UzD+=Q{r=4ny{tNTNDCK?13o=_UJYQf*v+p8-%5PZ& zcl&^7!#%`Fk*Gza6|l}sEA?dgcq3Fr~4S@*%Y=M+mI+yRjperu2oFS<7#v)axm1 zudR|CKR;#eNT~;`R3$T+%nzNc1fKa}v}K0%-<26F7mfY4H#^xiM>BIEc8_Daf9()9 z;}AzJbJcfcdxK+AAp1Uy8!Noop#1g}!t+_6d@qrwzcR&K>7Y0oT< zAN4^3?ClX(hl(s^^1pk$^7tf|+0<6{huk*UfSOnRkz0(ZfyWm>zpieRs&25A$X}!M z)v$Pxlf1BAythOBu_I&GdP7}3s|?Zv(Ppx}3V0?6v#=<_I-IwJ7)K2v`v?;csxUiN z?M6nR%zDW24kOF<7~^_Gn|Zp^{50nQF{;o^S-xN1ZmvMvEyS z1iWxX$ZG;&sX|UtFeBo*kL{VQFe}@$OjU!BVIeQ#R6w_6DFRFTGWQY)42Vw3i=9+# zqM~(mA!&7qn-#!;2v9aQqRyotzB0C8>Ma*^0O_1cj41mQ?1_~@mUoEF(i81%*<=e*XGcdjCTYmFl z$Yd{OFfUnYZpF=Bej9%_TZ64OPGzY`MJvPsruY9Wm=cI&uk)kK&OU0#V_zX z&AwY2v=ACJ(#2#cC_bPnLuIc*!dp-}o}m8#5X`I`2_w1x;%HgLm{y-^ zsa<)dO*w(zwcpvHC#r1Ku8q)a&ZysyH|8yO_3^H{!zIH+uey!%>2+>;d%czG63m8f zi>|ww)pK=7W?ZBHYNO4}Q|E2Lpg~t58+dPLE4%rB?(RklZ|V8W|ab z0pdkUMu*Zuy=`b}TkH9C76)8Yo-H%_ZqEDE6OKBW#NU{Agx%2j-SvkuAB5ZYvd`K` zQ>YbRaLoTwd-qVKUUu{=c&#-REl0s)tIz6V=^5ywUd3@w6z#$RAve-`Zj$f-`;ln@ zB2e64A5db+@2?N;r^|~6zOd@_sC~_+xQ31|cmSjOk5Kw>gf{ghMUqWq(BmZ!xoF(a zaXYrq3Gqny5Q~iSUdA+D^rXfW8qj9h3xU?v8O|afwT5oQ5Qc$ac&GFz`(o4(`p|;j zi2rbd@;gznX&kR2bhzMma&%0F`3PnPhu%?S)XyZ{cGcO_+g1<3aFX#Du3wV2&n>3# z)|=TuUQONJ-QGK$50GJ=8|4keMGce9lwI(_s)PYbC>0B zK2Uw_mD%DCNvsSJG5J959Wp{ckQ`uiqNM_bQwM<)q&DzLT-S7nHb4KjuFW~MEPsQs zo1@v_mArpbi@zgG$mh_u6FJv%Mgk~Hu?QBdo$W$QMze$<#m`7J8yY_dif!+ED$ zH2pH{V(v$VS{vtH(+o4wbJsZ_1>Noj<1n<$)P9V`J(}l*ZHmwLa4v1f>3-dVH32^h zI5f843;21^s^dY70CpC&yn|7}CaJdF%}-wGKn8@57r208P@kzRVoqC2i$JY4?4Fn& z6f{AsFYz(c=wma5ns{sh85lqYj1qfX0-;6RH2yvDP1gXQqMR5ATA&88R2ZU}OEzga z9^<)Z!|!5en7mW;4f$5~+tpEa3*f={HOgh#mlt&##l(Z%sgFijpBb>9S6@KdTm%aM zWZbkld#Nul>JA2S^m+ABg%TQgE)K{xV$2y0ik;ptr!~~-Mvh}L12HbQ##pGMUwN@d zY5;3=K?)QPBk~5NzzQ9x=Mj8CY=!YZ<|fFb7tBBr)exPPAZv*S9@x3w@s9z#tu@Z1 zsQfW&LrEYFrzw4?QMW(G97Vay#ES$=9fN*D}QUP6wzzr1j4U2lv(&yFsfR#f#`xWe!Q|dy?t{>im?tC+XcS zzu@if^2z@$?ecC{e_4G(e=_cXI@t#!VgI~-KGnculAM^)h>GlRZT_IirArrt84%F| zu0t1}SNfkS_oC9z3GaAFoDN3^ulfFFUoA_zaE{NZ@?j}`LdqPEaOfV2JgJY}0=V?e zNxs~Cvwhj*vXpyDN}ZajOS&#k-=c+qyiLE_s#j1ocXtQlf3DH~k-h4u-lPTG z6n=>6RpI@B)*Ji{6Bjbj78X4;VAeVF0|_FoL%OpFO=CLxai^`{P>P-hIAL$~P|A52 z!yurL$2!zWZTeveL(cBw9USma>P%y(%c;j4DLsLC_fe&`R+sR8l3KlZh+&A8>^g7P zI6R#zFE17*uLEhq*SViM`Z}kQQ@@gJ9xpo5$2Q`degGni?Qjtsaks>mtzYHns~sG) zD0{V&=hr)wEmHQ!j=sVv*QD$fPM%+HUp6YJ9s|)Jd39RzBCkq_OntgzUcwUR5RdmR zv<#xU!wn@;-#7Y1zFL@0o@c~;`zrC=N1N9PLw_qi17k7~w86zJzSOfh^;}Lp z%k63>zU2o0$f;*?>K{3MxZL1>bLQz>`vdm!W1Ek7`XKexL5x?BAyB?5(*NHN60

    GXvyu5*7DS&6Mqf*j7H!xPd=V<--fbnBe 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

    =tLG2Kgwu3R@hEm736?52pk;NWX78R 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%0ASc| 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

  • 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∈ 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 OyXWK&}0mPWETUpaVz@=qfWW=Lz;` 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

    8M%NH0aht`{y<~Yioo6&=T!^!4#5A*WI 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 z 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

    noM%dKId*tSm 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